まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2015/08

ある程度知名度のある企業に勤めていた人が、その企業を退職後に
  私が○○で学んだこと
  ○○流××メソッド
みたいな、成功事例を偉そうに紹介してるのを目にします。別にあなたが偉いわけじゃないのにね。。

で、今日紹介するのはそれです(笑)。僕が IBM で教わったこと

 
といってもビジネスの話とかではなく、「ああ、なるほど、確かにそうだよね~」と感心した表記法に関するものです。


その内容は「日付の表記方法」です。例えば今日は西暦2015年8月28日ですが、この日付をどうやって表記しますか? 日本人に限った話をすると 2015/08/28 が圧倒的多数でしょうかね。事実この方法で間違って伝わることはないと思います。和暦を使って H27/08/28 と表記する人もいると思います。これも相手が日本人であれば間違って伝わることはないと思います。

たまに 15/08/28 と表記する人がいます。面倒くさがり屋さんなのでしょうかね。これも相手が日本人なら間違って伝わることはないと思います。

日本人は日付を「年月日」という順番で表記することが常識になっているので、スラッシュ(/)で区切られた3つの数字があれば「年/月/日」と読み替えるようになっているのでしょう。ただし、この表記を読む相手が日本人だという前提を取り払うとどうなるでしょうか?

まず H27/08/28 はよほど日本に詳しい人でないと、そもそも日付の表記であるとすら思われません。

日本は「年/月/日」の表記順が常識ですが、国によっては一般的な日付表記が「日/月/年」だったり、「月/日/年」だったりします。月が先か日が先か、年をどこに持ってくるか、など、日付表記ルールは千差万別なのです。とすると 15/08/28 は正しく伝わらない可能性が出てきます(2028年8月15日など)。

では 2015/08/28 なら間違うことはない・・・ とは言い切れないですよね。たしかに8月15日に限っては大丈夫そうですが、例えば 2015/01/02 は人によって 2015年1月2日にも見えるし、2015年2月1日にも見えてしまうのです。ややこしいですよね。。

では世界中の人が見て正しい日付が伝わる表記はあるのでしょうか? その答として、IBM で習ったのはこの方法でした:
  2015/Aug/28

分かりますか? 最初に西暦年を4桁数字、次は月を英語3文字表記、最後に日付を2桁数字、そしてこれらをスラッシュで区切って表記、です。

要は4桁数字は必ず西暦年を表す数字です(月や日ではありえない)。そして日と月の区別については「月は英語表記」にすることで、自動的に「2桁数字は日」と解釈されるようになります。これだと上記例の場合でも 2015/Jan/02 や 2015/Feb/01 と明確に書き表すことができて、間違えようがないのです。

この辺りはさすがグローバル企業だなあ、と感じたエピソードでした。今後は自分の記述する資料も可能な限りこの YYYY/MMM/DD 形式で日付を表すことにします。


このシリーズ、もしかしたら続きます。



最近は多くのクラウド業者が IoTMQTT との連携をアピールしています。IBM を含めて各社が「いかに簡単に IoT データを扱う/応用することができるか」を競っている感じです。

この点で IBM の強みの1つが Node-RED フローエディタだと思っています。Bluemix に統合されたこの GUI エディタは MQTT サーバー(ブローカー)との接続を簡単に行い、データを集め、保存する仕組みを簡単に提供することができます。MQTT ブローカー/クライアントの Mosquitto といい、この Node-RED といい、IoT にもオープンソース製品が多くの場面で使われるようになってきて、更なる広まりを見せているように感じます:
2015082602


IBM の場合、この Node-RED をうまく Bluemix に合わせてカスタマイズして提供しており、Bluemix 内ではすぐに使えるようになっており、また Bluemix の各サービスと簡単に組み合わせて使えるような形で提供されています。


ただ Node-RED そのものはオープンソースで提供されているものです。他のクラウドインスタンスやオンプレミスサーバー環境でも(Bluemix 用の拡張がされていない素のエディションを)動かすことが可能です。つまり IBM 以外の業者のクラウド環境内で Node-RED を使った IoT アプリ開発環境を構築することだってできるわけです。


というわけで、今回のブログエントリでは SoftLayer や AWS、IDCF、オンプレミスなどの(クラウド)サーバー環境内で Node-RED を使って IoT アプリ開発環境を構築する手順を紹介します。


まず最初に Bluemix と IBM IoT Foundation を使った場合の IoT アプリ開発環境のシステムトポロジーを確認しておきます。必要になるサーバーとしては各種センサーデバイスからの情報を集約する MQTT ブローカーと、Node-RED が稼働する Node.js アプリケーションサーバーです。Bluemix 環境の場合、前者は IBM IoT Foundation が提供する quickstart サーバーを無料で使うことができます(つまり構築不要です)。後者は Bluemix のボイラープレートを使うことで Node-RED が動く状態まで含めて簡単に構築できてしまいます。なお収集したデータを保存しようとすると別途データベースサーバーを用意する必要がありますが、Bluemix であればデータベースも簡単に追加してバインドすることが可能です(今回はデータベースを使わない環境を前提とします):
2015082601


これと同じ環境を Bluemix を使わずに構築することを考えると、(物理的には1台のマシンでも構いませんが)上記の MQTT ブローカーと Node.js の2サーバーを手動で用意することになります:
2015082602


具体的には MQTT と Node-RED それぞれの環境を用意する必要があります。1台または2台のサーバーを用意し、それぞれのサーバーインスタンスに MQTT ブローカーおよび Node-RED 環境を構築します。それぞれの手順は(CentOS サーバーの場合であれば)以下の記事を参照ください:
ラズベリーパイにオープンソース MQTT の Mosquitto をインストールする (←ラズベリーパイだけでなく CentOS の場合のインストール方法も記載しています)
CentOS に Node-RED をインストールする


まずは MQTT ブローカーを起動しておく必要があります。MQTT ブローカー(Mosquitto サーバー)を導入したマシン上で以下のコマンドを実行するなどして Mosquitto サービスを動かしておきます:
# service mosquitto start

次に Node-RED を導入したサーバーで Node-RED を起動します:
2015082603


起動した Node-RED にブラウザでアクセスします。Node-RED はデフォルトでは 1880 番ポートで起動するので、 http://(Node-RED サーバー):1880/ でアクセスするとフローエディタの画面が開きます:
2015082604


そして下図のような、MQTT インプットと Debug アウトプットを繋げただけのシンプルなフローを記述します:
2015082608


MQTT インプットの属性は以下のようにします。Broker には Mosquitto を導入したサーバーの 1883 番ポートを指定します。Topic はなんでもいいのですが、ここでは "top/001" と指定しています(後で実行するコマンドで指定することになる文字列です)。準備ができたらデプロイして実行状態にします:
2015082605


これで環境は出来上がりました。では正しく動いているかどうかを確認してみましょう。
別途 Mosquitto クライアントを導入したマシン(これも同一マシンでもかまいません)から以下のコマンドを実行して、MQTT ブローカーにメッセージをパブリッシュします:
$ mosquitto_pub -h (MQTT ブローカーサーバー) -t "top/001(上記 Node-RED で指定した Topic 属性と同じ文字列)" -m "Hello."

2015082606


すると、Node-RED 画面の debug タブには -m オプションで指定された文字列が表示されるはずです。つまり MQTT ブローカーの top/001 トピックに送信されたメッセージを、Node-RED から正しく取得することができたことになります:
20150824_nodered



ちゃんと動きました。Node-RED は Bluemix や IBM IoT Foundation がなくても、普通の(?) MQTT 環境の中でも動くことが確認できました。


・・・とはいえ、Bluemix + IBM IoT Foundation 環境で Node-RED を使ったことのある者として言わせていただくと、ここまでの環境を整えないと使えないわけです。また現実的には取得したデータをデータベースに格納しようとすると、Bluemix 環境のように簡単にはいきません。動くか動かないかでいうと動きますが、その準備のためのハードルはまだまだ高いように感じています。

IoT アプリ開発環境を検討する上で IBM Bluemix + IBM IoT Foundation + Node-RED がいかに簡単で便利なのか、を改めて再確認するような実験になったとも感じました。




 

Ubuntu スマホである Aquaris が、スペインの bq のオンラインストアで購入できるようになりました。自分は大きなスマホがあまり好きではないので、スペックが低いことを理解した上で E4.5 を購入しました:
2015082300


ちなみにこの端末はデュアルの SIM フリー機で、マイクロ SIM 対応です。一週間ほど使ってみたので、特に OS の機能についてまとめてみました。

まず、以下の紹介の中で多くのスクリーンショットを使っていますが、スクリーンショットの撮影方法は「ボリュームコントロールの上下ボタン同時押し」でした。Aquaris はつい最近までスペインでしか売られていなかったこともありますが、英語でもなかなか情報を見つけることが難しいスマホでした。このスクリーンショットの取得方法を調べるだけでも結構たいへんでした。。

まず気になる日本語対応ですが、表示に関しては問題ありません。言語設定画面がこちらです:
screenshot20150823_213231724


「言語を表示」をタップすると表示言語を指定できます。ここで「日本語」が標準で用意されているので、これを選択するだけで日本語表示になります:
screenshot20150823_213238618


一方、日本語の入力ですが、標準のキーボードには「日本語」や「Japanese」が用意されていません。なので日本語入力は現時点ではできないと思っています:
screenshot20150823_213306796


操作方法の基礎となるのがメニューです。メニューが画面左端を右に向かってスワイプすると、隠れていたメニューが「スッ」という感じで現れます。ここから「システム設定」「ブラウザ」「電話」などの基本的なアプリケーションを起動できます:
screenshot20150823_213009463


メニュー内一番下の Ubuntu マークをクリックするとホームアプリともいえる画面が出てきます。7つの画面を切り替えて表示するアプリです。最初は "Today" という今日の情報が表示される画面:
screenshot20150823_213355313


2つ目は "NearBy" 。現在地の近くの情報が表示されます:
screenshot20150823_213400646


3つ目は「アプリ」、導入済みアプリの一覧画面です:
screenshot20150823_213405319


なお、この画面を下までスクロールすると、"Ubuntu ストア" という、アプリを検索して導入(購入)するためのマーケットアプリを起動することができます:
screenshot20150823_213411088


4つ目は "News" 、ここにニュースのヘッドラインが表示されます:
screenshot20150823_213414902


5つ目が「ミュージック」の画面。購入したり、インストールした音楽にはここからアクセスできるようです:
screenshot20150823_213421198


6つ目は「ビデオ」。撮影したビデオ動画や購入した動画にアクセスする画面です:
screenshot20150823_213425596


最後の7つ目が "Photos" 、写真やアルバムアプリにアクセスする画面です:
screenshot20150823_213428105


個人的にはもともとスマホというよりも、ネットワークの管理端末目的で購入しました。そのためにはターミナルアプリを使いたかったのですが、標準ではターミナルアプリは含まれていない模様でした。上述の Ubuntu ストアから探して導入すれば使えます:
screenshot20150823_214400257


画面右下のキーボードマークをクリックすると、ソフトウェアキーボードが表示されて、ここから ssh を使ってリモートログインして・・・といったことが可能になります:
screenshot20150823_214505647


またブラウザは一般的なモバイルブラウザのようでした。jQuery Mobile で作ったサイトも問題なく表示できました:
screenshot20150823_213509670


アプリケーションの切り替えは画面の右端を左側に向かってスワイプするとタスクマネージャー的なアプリが出てきます。ここからアプリを切り替えたり、特定のアプリを強制終了できたりします:
screenshot20150823_213527184


現状だと、やはり日本語入力ができないのが痛いかなあ・・・。事実上、メールや SNS が「確認専用」になっちゃうよなあ。。

「人工知能が進化したら、人間の仕事がなくなる!?」とか「人工知能が人間の仕事を奪う!?」とか言われているのをたまに目にします:
http://nikkan-spa.jp/907607 

個人的意見ですが、遅かれ早かれ&多かれ少なかれ、そういうことは出てくるんだろうなあ、、と思ってます。「絵画や小説など、芸術性/創造性の高い分野ではまだまだ」とも言われてますし、自分もその通りだとも思いますが、「まだまだ」ということは「いずれ・・・」という可能性を秘めているわけでもあります。

その一方で「人工知能が踏み込むことのできない分野もある」と思っています。人工知能がどれだけ発達しても、人間に追いつかないであろう分野があるとしたら、それは何だろう??と・・・


自分なりの答を1つ出すとしたら、それは「本能」だと思ってます。ニューラルネットワークやディープラーニングは「学習」させることで知能を得ます。この精度が高ければ高いほど、人間の脳に近づき、場合によっては人間を超えてしまうこともあると思っています。ただ、裏を返すとこの「学習」が人工知能の精度を高めているわけなので、何も学習させる前の人工知能はただの箱というか、「入力しても反応しないソフトウェア」でしかありません。

一方で人間には、何も教えていないのに既に体が知識を持っていたりします。特に生死に関わるようなもので、意志を伝えるために声や音を出すとか、身の危険を感じた時に自然に防御するとか、暑い時に汗をかいて体を冷やすとか、目の前にものが現れた時に(目を守ろうとして)目をつぶるとか、水中で呼吸を確保するために手足をバタバタさせるとか、、、DNA のレベルで学習済みというのか、動物や赤ちゃんが取る行動が近いといえるかもしれません。

もちろんこのような本能に近い行動をするようにコンピュータに学習させることはできると思いますが、「人はこれらのことを学習していなくてもわかっている、本能的に行動できる」という点が大きな違い、という意味です。


その意味で「人工知能が進化しても、自分の仕事を失わないようにするには?」を考えると、「仕事に本能に近い要素を取り入れること」と「自分の本能を磨き続ける」ことだと思ってます。例えば自分の場合であれば、お客様やイベントで製品の説明をする際に「どういう紹介の仕方をすれば驚いてくれるだろうか? 何を見せれば感動するだろうか?」といった、相手の本能を揺さぶるような観点を取り入れることを心がける、とか、頭や体を動かし続けて、自分の本能がサビつかないようにするとか、かなあ。



CentOS に GUI インターフェースの BitTorrent クライアントアプリ(Deluge)をインストールしてみます:
Deluge


CentOS なので、yum でサクっ、、、といきたいのところですが、まずはリポジトリを登録する必要があります。root 権限で /etc/yum.repos.d/linuxtech.repo を以下の内容で新規作成します:
# vi /etc/yum.repos.d/linuxtech.repo

[linuxtech]
name=LinuxTECH
baseurl=http://pkgrepo.linuxtech.net/el6/release/
enabled=1
gpgcheck=1
gpgkey=http://pkgrepo.linuxtech.net/el6/release/RPM-GPG-KEY-LinuxTECH.NET

で、yum で install します:
# yum install deluge

これで CentOS 内の Gnome メニューの「インターネット」カテゴリ内に Deluge が入っているはずです:
2015082002


起動したら普通に使えます。やっぱ GUI 使えると便利ね:
2015082004


このページのトップヘ