« 2016年10月 | トップページ | 2016年12月 »

2016.11.23

World Is Flat/フラット化する世界


Thomas Friedman著書の"The World is Flat"をようやく読破。

この本、いわゆる啓蒙書と位置づけ、考察に過度な期待をしてはいけないのかも。具体的な事例がたくさん紹介されていて、それはそれでドキュメンタリーを読んでいるようで面白いが、あとから振り返り、要約を創ろうと試みると、このひと、何を言いたいんだろう?と、悩んでしまいました。
いろんなサイトでこの著書の内容を分析し、評価しているようなので、些細はそちらにお任せするとして、今後、自分が使えるキーワード集として、整理してみます。。

1.フラット化をもたらした10個の要因
#1.11/9/89
ベルリンの壁の崩壊。これによって、戦後の冷戦構造が終焉にむかい、ヨーロッパにおいて人の移動が自由になった。人、モノ、金の移動が拡大&加速がした。
#2 8/9/95
Internetの商用利用が本格化。Netscape社が上場し、Webの世界に必要なWebブラウザーとApache Webサーバが爆発的に普及。Internetで情報を交換する世界が拡大した。
#3 Work Flow
ベルリンの壁が消え、垂直統合から水平連携への切り替わりがすすんだ。Webサービスの技術ではSOAP/XML/AJaxが生まれた時代。人々は作業の一部を、実際には会ったこともないネット上の他人にゆだね、協調作業をする事に慣れていった。
#4 Uploading
ネット上に自ら情報を公開するためのツールWeb/Blog/Wikiが整備され、会ったこともない人と水平的に協調しShared Economy Societyの機運が高まった。
#5 Outsourcing
仕事の一部を外部に委託する機運がたかまった。
$6 Offshoring
インド、中国がWTOに参加。非常に安価なコストで業務の委託を受けるようになった。
#7 Supply chain
モノの移動、速度が拡大。グローバルで最適な場所から必要な資材を届けることができる、道路、鉄道、航空の物流網と、UPSやFEDEXなど物流会社が提供する物流サービスが拡充した。
#8 Insorcing
セルフサービスというなのもとで、客が業務の一部を代行するビジネス形態がうまれた。
#9 Informing
Googleなど検索エンジンだネットに分散展開している膨大な大規模Webコンテンツを活用し検索サービスの提供を開始した。
#10 Steroids
Digital Mobilityいつでも、どこでも、誰とでも


2.その結果おきた事
Triple COnvergence。上記10要因が関連を深め、垂直統合によるComman&COntorolからグローバルな水平連携によるConnect&Collaborationに変化してきている。

3.分析の観点
America,Developing Country,COmpanies,You,GEopolitics
フラット化によって低所得事業は国外に流出、国外にインドはじめ優秀な人材が流入収入。米国民の収入格差医、教育格差が拡大。これによって中流意識をもつミドル層の人口構成比が低下し、社会の安定性が低下。これが、トランプ減少の原因か。

4. 11.9と9.11
グローバリゼーションやフラット化は、11.9ベルリンの壁の崩壊によって、始まり、9.11ニューヨーク国際貿易ビルの崩壊によって終わるのか?そうあってはならないと思う。ただ、アルカイダも10このフラット化要因を活用しグローバルに水平連携した活動を行っている。一つの物事の表と裏か。

5.Imagination
明示的に見えない部分に対し人はイマジネーションを働かせるしかない。その像は一人一人に差が生まれ、嫌悪、憎悪が助長されてしまう。同じ人間なのに。


6.参考サイト
・Thomas Freedman
-公式サイト
-セミナー動画
・The World Is Flat
-Amazon.com
・書評他
-IT技術とグローバル化(1):「フラット化する世界(1)」
-書評:トーマス L フリードマン著『フラット化する世界』


| | コメント (0) | トラックバック (0)

2016.11.05

Azure IoT HubとESP8266を接続

Img_20161019_171013shadow


ESP8266をDeep Sleepモードで実行、通常モードでフル充電から一日ともたなかったモバイルバッテリーPanasonicのQE-QL20が、Deep Sleepモードでは、2日ももつようになりました。Deep Sleepモードで実行に成功しましたようです。

しかし、こまったこと、新たな課題も生まれました。Andoroid上のBlynkとESP8266が接続に失敗するのです。どうも、ESP8266はDeep Sleepモードに入るたびに、Wifiコネクションが切れているようです。そのため、Blynkサーバは、Blynkクライアンド(ESP8266)との接続が切断されたと認識してしまうようです。

これは、アーキテクチャーを変更したほうがよさそうです。デバイスの消費電力を下げるために、デバイスが常時ネットに接続されていることはあきらめる。そのかわり常時接続を期待しないアーキテクチャー、つまり、ESP8266(デバイス)とBlynkサーバ(クラウド)間の結合を密結合から疎結合に切り替えることにしました。

アイデアとして、デバイスとクラウドの間に、IoT Hub正確にはMessage QUEUEをおいてみてはどうなのでしょうか?よし、IoTではよく使われているMQTTを使いましょう。
デバイス(ESP8266)ークラウド(Blynkサーバ)ー可視化(スマートフォン(Bylnkアプリ))という連携から
デバイス(ESP8266)ークラウド(IoT-Hub on Azure)ークラウド(Blynkサーバ)ー可視化(スマートフォン(Bylnkアプリ))という連携への変更です。

このIoT Hubの役目をしてくれるクラウドにこれまで食わず嫌いだったAzureを当ててみることにしました。AzureにはIoTむけのPaaSサービスが充実しています。
2caf6e0bdac1b9550462dae490ed0217s_2


Azure IoT HubをESP8266で使おう!
このサイト内容を参考にし、Azure Iot HubにESP8266を接続してみることにしました。
まずは、自分用にIot Hub環境を構築しました。
Azureポータルを開き、
新規−>もののインターネットから、
・IoT Hubの名前を決め、
・価格とスケールティアを決め、
・サーバーリージョンを決め、
デプロイ開始です。
デプロイ終了後、
共有アクセスポリシー>iothubownerから、次の作業のために詳細情報を取得していきます。
・接続文字列(1)

次に、IoT Hub上に仮想デバイスを生成し、情報設定します。
osxの場合、CLI tool、iothub-explorerが活躍します・
このiothub-explorer,node.jsで開発されているため、node.jsの環境を整備する準備作業が必要でした。
$install homebrew
$brew install node
$nodebrew install latest
$node -v
$npm -v
$npm install -g npm
$npm install -g iothub-exploler
と呪文がつづき、

仮想デバイスを生成
$ iothub-explorer login "HostName=...."
Session started, expires Mon Oct 31 2016 23:16:32 GMT+0900 (JST)
$ iothub-explorer create HM-WROOM02-AZ

仮想デバイスとの接続文字列情報を取得
$iothub-explorer list --connection-string
--conenction-stringを設定し取得する接続文字列(2)が、ESP8266側のArduinoプログラムからAzure Iot Hubに接続するための文字列であることを理解するまで時間がかかりました。

当初、Iot Hubそのものへの接続文字列(1)と誤解をしてしまったのです。そのため、Arduino側で接続に失敗し、エラーログが表示され、接続に失敗していました。
Attempting MQTT connection...failed, rc=5 try again in 5 seconds
これ、認証エラーが原因でした。※OASIS標準MQTTプロトコルCONNACK(Acknowledge connection request)のReturn Valueで確認。

ESP8266側にMQTTクライアントとなるプログラムを書き、データを送信します。すると、Azure Iot Hub側にメッセージが蓄積されます。

Azure Iot Hubの役割はここまで。データを永続化させる必要があるけど、それは、Azure Stream Analiticsのお仕事でした。こちらは、直感が働き、入力ストリーム、出力巣ストリーム、クエリを設定し、実行させるだけ。
・入力ストリーム;Iot Hub上の仮想デバイス
・クエリ:SQLライクの構文でSelect *
・出力巣ストリーム:Blobテーブルを選択
 ※なので、Stream Analyticsの設定の前に、Blobテーブル上にコンテナの生成が必要でした。
 ※テーブル名に"-"は使えないようでした。シンタックスがわからんですね。

Blobの操作には、ポータルよりもCLIツールの方が便利でスムーズ。何が便利かというと、前後の処理との連携。
ポータル画面では、いちいちCOPYして、画面を変えて、ペーストしての行き来が面倒ですね。
Mac OS XのターミナルからWindows Azure Blobを操作する | Windows Maniax」のサイトから教えてもらいましたが、

azureコマンドcliを取得
$npm install -g azure-cli

azureコマンドでストレージ系操作をするための環境変数を設定し、
$ AZURE_STORAGE_ACCOUNT="hm…”;export AZURE_STORAGE_ACCOUNT
$ AZURE_STORAGE_ACCESS_KEY="BP4Y1Aiu…”;export AZURE_STORAGE_ACCESS_KEY


blobの情報を参照するならば、
$ azure storage blob show --container device01
info: Executing command storage blob show
Blob name: 0_aaca753964ea491890ea4754a7adde09_1.json
+ Getting storage blob information
data: Property Value
data: ------------- -----------------------------------------
data: container device01
data: name 0_aaca753964ea491890ea4754a7adde09_1.json
data: blobType BlockBlob
data: contentLength 32254
data: contentType application/octet-stream
data: contentMD5 undefined
info: storage blob show command OK

Blobの中身をダウンロードするならば、
$ azure storage blob download --container device01
info: Executing command storage blob download
Blob name: 0_aaca753964ea491890ea4754a7adde09_1.json
- Download blob 0_aaca753964ea491890ea4754a7adde09_1.json in container device01 to 0_aaca753964ea491890ea4754a7adde09_+.json
Percentage: 0.0% (0B/31.50KB) Average Speed: 0B/S Elapsed Time: 00:00:00
+ Getting storage blob information
info: File saved as 0_aaca753964ea491890ea4754a7adde09_1.json
info: storage blob download command OK

便利、便利。さて、これで、Blobまでデータが来ました。BlobにたまったデータをBlynkサーバーBlynkアプリまでもっていくのがもう一苦労。その先は、つづく。
ということで、今日は筆を置きます。

しかし、クラウドは、Azure は、IoTむけシステムの開発にとって便利。
プロセス間をイベントキューで疎結合させると、お互いの依存関係がうすくなり、
常時接続性など、相手に期待することも少なくなり、構築も、開発も、運用も楽そうです。
クラウドネイティブアプリ開発・利活用の夜明けか?
これがマイクロサービスというものか?


| | コメント (0) | トラックバック (0)

« 2016年10月 | トップページ | 2016年12月 »