FUJILOG

見た、聴いた、触れたこと。 動かしたもの、書いたもの。 ウェブとリアルの備忘録です。

IoT時代の何でも屋さんの野望

2012年にブクマしていた記事に「動くゴミ箱」を作ったというガジェットネタがあります。

当時学生だった倉田さんが、独力で行ったのは以下の工程。いわば多能工。。

  • イメージ構想
  • CADでハードウェア設計
  • 部品加工(学校設備を利用)
  • 基盤回路設計
  • 基盤パーツ実装(パーツ選定、はんだ付け含む)
  • ハードウェア構築
  • エミュレータでの動作テスト(プレイステーションコントローラを使用)
  • マイクロソフトKinectと無線シリアル通信するプログラム実装

gigazine.net

 

当時2012年ということで、2017年のいまであれば部品加工の工程で3Dプリンティングが使えそう。

SORACOMがグローバルにデバイスとWebをつなぐ仕組みを提供してくれるようになったこともあり、地球の裏側のデバイスにも連携が可能。 

 

作った商品の販売と配送は、Amazon Launchpadが受け持ってくれます、至れり尽くせり。

ascii.jp

 

SORCOM玉川さんいわく、分野を越境するスキルフルなエンジニアが増えていくだろうという未来。それを求められるのがIoT時代とのこと。 

IoTプロダクトの開発に必要な専門知識は広範囲に及びます。僕はAWSに入る以前、日本IBMでウエアラブルの研究開発に携わっていたので、メカ、エレキ、組込みソフトとひと通り触ることができました。当時の経験から、この“スキル横断型エンジニア”の貴重さも身に染みて分かっているつもりです。

さらに、僕らが構想しているようなIoTのプラットフォームを作ったり、それを使った革新的なサービスを提供するには、よく言う「ソフトとハード」の話以外にも、バッテリ問題に詳しい人、セキュリティに精通した人、BLEなども含めた端末とネットの接続部分に関する知識などさまざまなスキルが必要になります。

ですから、今後はこれまで混じり合ってこなかった、数種類のエンジニアが持つスキルが求められるでしょう。ざっくり言うと、ITのエンジニアとモノづくりエンジニアの持つスキルの両方が必要になる。Web、インターネットのみならず、デバイスや組込みソフトを使いこなす能力もですね。

これまで、こういったジャンルのエンジニアが混じり合うことはほとんどありませんでした。しかし、IoTのプラットフォームを作ろうとしたら、両方のエンジニアが必ず必要になりますし、我々の手掛けているIoTプラットフォームができれば、両方のエンジニアはさらに境がなくなっていくと思います。

type.jp

 

Webエンジニアだけど、人手足りないからWebデザインとUXも、あ、経営上層部納得させたいからデータ分析も、もちろんセキュリティ含めたインフラも見れるよね?

そこに、コード書けるなら組み込みもいけるよね?アプリもデバイスもお願い…と、なると\(^o^)/オワタ

 

なるほどアルティメットエンジニア。

エンジニア道は果てしなく拡がっていきますね(小並感)。

 

※そういえば、2002年が自動掃除機ルンバ第一世代の販売年。

家庭にロボットが入るなんて近未来だと思った日が随分遠くなりにけり。 

youtu.be

 

第1回 Hyperledger Tokyo Meetup へ行ってきたので、そこに至るまでの経緯を含めて書く

昨今賑わいをみせるビットコイン

投機的な雰囲気もあり、その話題はスルーしていたのですが、昨年末に「ブロックチェーン・レボリューション」を読んだことをきっかけにブロックチェーンに関心を持ったのです。

https://images-fe.ssl-images-amazon.com/images/I/51ZvQ0v7P7L.jpg

 

知識ゼロの状態からいろいろ調べているうちに、以下のようなことがわかって来ました。

  • 世間を賑わすビットコイン(仮想通貨)とブロックチェーンは別物
  • ブロックチェーンにはパブリックなものとプライベートなものがある
  • パブリックなブロックチェーンがビットコインに使われているが、一度の決済に10分ほど待ち時間が発生するため、速度面でプライベートなそれが使用される流れがある(※ただし中央集権的と反発される)
  • プライベートブロックチェーンの方式も、団体(営利、非営利など)によって異なる、開発言語も異なればAPIも異なる
  • ブロックチェーンの究極の目的は、「紙と信用」に基づく取り引きをすべてデジタルなそれに置き換えること

 

紙や硬貨に信用を与えてきたのが金融だったわけで。

なるほど、信用をデジタル化することは歴史的にもインパクトのある話しなのですね。

 

さらにブロックチェーンを深掘りするために、偶然みかけたのが下記書籍。

ブロックチェーン 仕組みと理論 サンプルで学ぶFinTechのコア技術 | 赤羽喜治 編著, 愛敬真生 編著 |本 | 通販 | Amazon

https://images-na.ssl-images-amazon.com/images/I/51FbaaoyOZL._SX384_BO1,204,203,200_.jpg

 

NTTデータの技術者陣がブロックチェーンについてまとめたものです。

ビットコイン、Etherium、Hyperledger Fabricについて簡単にサンプルを試すこともできて、ブロックチェーン技術を知る上で必携な一冊と思います。 

 

以上つらつらとありまして、BlockChainイベントへ参加に至る。

 

さて有給休暇を使って参加しましたMeetup。

武蔵中原ってはじめて降りました、富士通社のお膝元的な駅ですね。

 

会場に到着するも、参加者は見渡すかぎりのスーツ。。

普段から取り引きのあるSIerの方々でしょうか、顔見知りが多いような雰囲気でした。

 

イベント概要「第1回 Hyperledger Tokyo Meetup」

日時:3月16日 · 13:00〜
場所:富士通研究所 岡田記念ホール

www.meetup.com

 

講演内容

アジェンダ
13:20-13:40
Hyperledger Projectの概要
日立製作所 長稔也様 (Hyperledgerプロジェクト ボードメンバー)

13:40-14:20
Hyperledger Fabric 1.0 概要
日立製作所 山田仁志夫様

14:20-15:00
Introduction to Fabric Composer
日本アイ・ビー・エム 紫関昭光様

15:10-15:50
Hyperledgerいろはについて
ソラミツ 武宮誠様

15:50-16:30
データベース屋がHyperledger Fabricを検証してみた
NEC 並木悠太様

16:40-17:20
ブロックチェーンの可能性と課題 - SIerとしての視点から
NTTデータ 稲葉高洋様 山下真一様

17:20-18:00
ブロックチェーン実証実験から得られた知見
富士通 / 富士通北陸システムズ 滝口成人様

 

途中小休憩があったものの、ほぼ通しで4時間強でした。

これを要約すると下記のような感じです。

  • Hyperledgerコミュニティ。最近中国企業の参画が増えている、日本企業も入りましょう
  • Hyperledger Fabric 現在0.6系、1.0がまもなくリリース。
  • Fabric Composerを使うとAPI管理が簡単、Bluemix(IBMクラウド)のイメージで敷居が下がっている
  • ブロックチェーンとデータベースは似て非なるものだけど、データベースの見地でみると分かりやすい
  • みずほ銀行とブロックチェーン取り引き実証実験やってみた(ビットコイン版とHyperledger版

 

資料はイベント後日公開されたものの、Meetupページに埋もれていたので、転載します。

どの講演も学び多く甲乙つけ難いのですが、エンジニア的に推しの資料は設計概念を説明されていた「Hyperledger Fabric 1.0 概要」「ブロックチェーンの可能性と課題 - SIerとしての視点から」です。

 

Slideshare資料まとめ

www.slideshare.net

 

音声データも置いておきます(容量注意、223MB)

何かの経緯で本記事にたどり着いたら、ご査収ください。

 

 

■その他参照

Hyperledgerのミートアップで考えた、ブロックチェーン普及の必要条件 - ZDNet Japan

オープンソースのブロックチェーン Hyperledger Fabric を試してみる - Qiita

 

JAWS2017 in 五反田TOCメッセ

昨年以前は新宿ベルサールだったのですが、今年の開催地は五反田TOCメッセ。

綺麗な施設で、ボランティア皆さまのおかげで快適に過ごすことできました。

 

f:id:michael-unltd:20170311234716j:image

 

jawsdays2017.jaws-ug.jp

 

参加したワークショップとセッションは以下のものです。

  1. 【ハンズオン】AWS Elastic Beanstalk
  2. [ランチタイムセッション]
    ハンズラボ株式会社
    株式会社鈴木商店
    有限会社来栖川電算
  3. コミュニティで拓く、パラレルキャリアへの道
  4. 【ハンズオン】Amazon Alexa Skill
  5. おとなのたしなみ、おコンテナ by JAWS-UGコンテナ支部
  6. 【ハンズオン】RESTful API

 

jaws-days.doorkeeper.jp

 

www.slideshare.net

  

f:id:michael-unltd:20170311234756j:image

f:id:michael-unltd:20170311234745j:image

 

stilldayone.hatenablog.jp

 

jaws-days.doorkeeper.jp

 

speakerdeck.com

 

jaws-days.doorkeeper.jp

 

あと、参加したかったけど寝坊して聴けなかったセッション…。

早速スライド上がっていて嬉しいです。

 

www.slideshare.net

 

所感、最高に充実した一日でした。

毎年参加しているJAWSですが、今年は早めに申し込みできたためワークショップ比重高め。

 

Amazon Alexaについては音声関連サービスでアクション起こすとなっても心理的障壁下がりましたし、Beastalkでコンテナ、RESTfulAPIでLambda/API Gatewayもキャッチアップできました。

 

AWSエコシステムの集大成的なイベントで来年もまた楽しみです。 

 

 

追記(2017/03/19)

資料公開一覧ができたようなので転載します。

qiita.com

参加録「AWSによる大規模IoTプラットフォーム構築の裏側」

資料即日公開される太っ腹っぷり。

IoTとAWSのお話を聴きに行ってきました。

 

 

最初にフューチャーアーキテクト社の話しから始まり…

SIerだけど、Javaだけでないこと。

 

Githubトレンドで、「脆弱性スキャンツールVuls(バルス)」が上位ランク入りしたことなど知りました。

 

HoloLensの研究、社内LT会も活発。

Techブログやってる、Qiitaオーガナイズも使用している等、モダンで柔らかな開発体制もあるようでした。

 

講演内容は以下の2点。

  1. 「スマートファクトリーを支えるIoTインフラをつくった話し」
  2. AWSマネージドサービスをフル活用したヘルスケアIoTプラットフォーム基盤

 

前者は

・IIoTの魅力とつらみ(※Industrial IoTという単語が初耳でした、ラズパイの世界外のIoT…)。

・クライアントや工場ごとに異なるベンダーの現行稼働ハードウェアとの連携といった泥と、今後の展開を見越したクラウド連携といった華の混じり合ったお話。

・閉域前提とした旧式仕様を捨てて、クラウドに設備データを渡す&渡したデータを保持する上での工夫点などなど。

 

後者は

・大規模構成とキューイング検討。

Kinesis Streams選定背景が丁寧でした。

・スモールスタートで目指すは600万ユーザー。

 

いずれも資料が作り込まれていたので、AWSでのIoTデータの捌き方といった貴重な知見をもらうことできます。

 

career.levtech.jp

www.slideshare.net

 

www.slideshare.net

 

自身はAWSサービスのKinesis・EMRあたり初心者なので、IoT案件に備えて勘所を抑えておきたいと思いました。

 

緩募: なごみ

ハムスターとかコツメカワウソとか文鳥とか…。

 

Twitterを眺めているとそれらの画像や動画が流れてくるのですね。

 

 

飼育欲の少ない自分のための。

ふろしき文鳥

 

f:id:michael-unltd:20170203120041j:image

 

参加録「bitFlyerのC#erたちが語る、あなたの知らないBitcoin,Blockchainの世界」

2017/01/31 (火) 19:30 ~ 21:30 in 渋谷ヒカリエ

bitFlyerのC#erたちが語る、あなたの知らないBitcoin,Blockchainの世界

コンテンツ

Jeremyさん:
「Approaching some everyday (C#) programming problems practically」(20分)

柴田さん:「日本最大のビットコイン取引所の裏側(仮)」(20分)

竹井さん:「フルスクラッチ Blockchain」(30分)

bitFlyerとは…

 C#、.Net、Azureでサービスを運用

 35名うち半数エンジニア

 C#エンジニア内訳
  5人フルタイム(2名デザイナー、2名エンジニア、1名ブロックチェーン)

 Private Blockchainを開発している会社です。

 

講演①: Jeremy Simmonsさん

「Approaching some everyday (C#) programming problems practically」 

F#好き
10年くらいエンジニア

 

保守しづらいコードについて、サンプルコードをもとに解説。 

 Order
 OrderItem
 OrderCreaterとCreateOrderがある…
 voidでなにやってるか
 CalicurateTotals…とか

 

いざ、リファクタリング。DDD的にやってみる。

OrderにBehaviorをもたせよう

 

public class Order
{
 public Order(TaxCalculator calc)
 {
 /*..*/
 }
}

 

ここで、デザインパターンの Memento Pattern を使う。

Stateの保存と保存されたStateの呼び出しのため。

Immutable Orderが作れればOK。

 

単体テストつくる
 ダイスを振る
 ランダムに目が出る

 …と、あって以上。

  

講演②:柴田航平さん

ビットコイン取引所の裏側 」 

 

Webアプリエンジニア
サーバサイド、クライアントサイド担当

 

売買のマッチング

世界一取引量
 39,098 BTC取引

 

サービス:"bitFlyer Lightning"

3層構成
 Worker
  取引所エンジン
  注文マッチング
 Webサーバ
  JSON RPC
  イベントPush(注文通知等)
 クライアント
  ブラウザ

 

Worker
 取引所(同時稼働数は最大1台)…シリアルで処理する
 ダウンタイムは最小限にする
 アクティブ、スタンバイ構成にしたい
 Azure:PaaSを利用 

Azure Cloud Service
 Cloud Service
  冗長構成、クラスター化のサポートないので切替時を自作した

Azure Service Fabric
 2016/03 GA
 マイクロサービス構築用
 クラスター化前提

Webサーバ
 ASP.net SignalR(WebSocket使用、SocketIOみたいな挙動)
 Push通知をさばく 

SignalR
 複数サーバでデータ共有のための”backplane”という仕組みがある
 下記サポート
  AzureServiceBus(初期はこれで1年くらい)
  SQL Server
  Redis(いまはこれ)

Azure上で障害
 AzureServiceBus
  メッセージングが不安定になる
 Redis
  いい感じ

 課題:

  通信料が高い
   SignalRでデータ垂れ流すのも限界では?
  モバイルバッテリー消費も問題

クライアントサイド
 “RxJS"のデータフロー管理
  SignalRのイベント、APIコール、ユーザー操作、タイマーのObservableとしてI/F
  LINQもOK
  サーバ側でReactiveExtensionを使ってない

Rx
 SignalRでデータ受け取ったらAPIを呼び出す
 1秒に1回とか
 要件に応じて複雑化
 型が欲しいのでTypeScript検討

 

Q&A:
 現行のワーカーはFabricで実現可能?

 →可能だが、現状いい感じに抽象化されてるため緊急要件ではない。

 

講演③:竹井悠人さん
「ゼロからつくるBlockChain」

 

MS MVP C#

C#大好き人間、16年
※スライドは追って公開予定

 

.Net Core 1.1.0 SDK

最小限の機能をもったブロックチェーンを動かします:MinChain

github.com


コンセプト:

 Etheriumのサンプルを動かすようなものではない

 SourceCodeでブロックチェーンをつくる

 P2Pは時間都合で実装せず

 

ブロクチェーンの基本
 取引データをブロックに固める、それを連結したもの。

 

ハッシュ関数
 メッセージのダイジェストを生成する

 1:短くできる(32バイトで収まる)

 2:改ざん不可にする

 3:辞書の鍵にする

 

電子署名 ※Util/ExService.cs
 公開鍵暗号方式
 楕円曲線暗号(ErecticCurve/ECC

VS2017
 Extension:拡張用ライブラリ
 Util:汎用(ハッシュ関数、SHA256を二回適用、

 

③コンセンサスアルゴリズム
 NW内の複数エンティティ(PC)どうしがルールに従う限り、安定的に合意する仕組み。
 BitcoinではProof of workを使用。

 

Block
 前ブロックID
 難易度
 Nonce
 日時
 Tx Root Hash(ブロックヘッダーに入れる、ハッシュ木。データ量を定めるため)
 通信時はトランザクションデータも含める

 河合さん作ライブラリ:ZeroFormattableを使用。

 

トランザクション
 日時
 送金元(IN):電子署名つき(Pay-to-pubkey-hash形式)
 送金先(OUT)

 

UTXO(Unspent Transaction Output)
 未使用のお金の管理
 Transaction outputはDictionaryでデータ型

 

マイニング
 BlockIDが難易度で定められた数以下になるように。

 

コインベース
 Create Coinbase

 

フォーク
 ブロック難易度高くても起こりうる
 フォークすると台帳が複数できてしまう、のを避けるよう優先度をもつ

 例:
 0001234
  ↓2^4倍難しい
 0000001234

 

MinChainについて

 Program
 Config
 KeyGenerator
 Genesis
 Runner
 ConnectinManager
 InventoryManager
 Executor
 Mining

 

Program
 コマンドもらって関数呼び出し

Runner
 データもらって、接続する、接続きたらHello、モジュール呼ぶ

ConnectinManager
 TCPリスナー生成
 メッセージをシリアライズ 

InventoryManager
 メッセージ呼ばれると、ブロックリクエストを対応する
 もってるか調べる、もってないなら無視、もってたらあげる
 渡すときは、Executorへ渡す

Executor
 InventoryManagerがトリガー
 難易度判定
 Runブロックでトランザクションさわる、

 

いざ稼働させてみる
 dotnet build (DLL生成)
 dotnet MinChain.dll xxx
  鍵の生成
  Config生成
  鍵とConfigのパス指定で genesis.binが生成(※最初は自分にブロックリクエストしてもらうように指定)
 dotnet MinChain.dll run genesis

 

マイニングが進むと difficultyが上昇していく
 2009年のBitcoin的な状態を再現している…。

 

現状、Blackは固定でシリアライザーが必要
 バリデーションないのため、放題の状態
 Walletがほしい(トランザクション機能がない)
 Multi-Sigができたら素敵(鍵の複数による安全化)

 

Blockchain Engineer 募集
 miyabiチームではBlockChainつくれる場所があります。

***

以上です。

公開されたMinChainはブロックチェーンの基礎のようなので、学習教材として最適と思われました。

 

3分間でつくれるGo言語開発環境

Blockchain本を読んでいたらGo言語(以下golang)の検証環境に出くわす。

pythonAPIもあったけどどうしようかな、避けて通るかな…。

 

と瞬間思うも、何かの縁だと思いgolang入門。

 以下本題。

 

■環境

MacOSX 10.11.6

golang インストール

> brew install go

※なにかbrewがおかしなエラー吐いたら診断。
> brew doctor

不具合解消例:
> sudo chown -R $(whoami) /Users/(your_name)/Library/Logs/Homebrew
> sudo chown -R $(whoami) /usr/local/opt

 

□ gopathを設定

ファイルを開いて、

> vi ~/.bashrc

下記追記して…

> GOPATH=$HOME/.go; export GOPATH;

反映。

> source ~/.bashrc


デバッガインストール
> brew install go-delve/delve/delve


IntelliJ CEインストール

IntelliJ IDEA the Java IDE

 

golang pluginインストール

IntellijのPreference > Pluginから、goを検索してインストールする。

IntelliJ IDEA 2016.3 Help :: Managing Enterprise Plugin Repositories

 

IntelliJ CE 設定

  • インデント:デフォルト8字を4字に変更

 

以上。

インストールでエラー出なければ能動的3分間だったのではないでしょうか。

環境出来たところで Tour of Go (-;

  

参照

IDE汎用ショートカットキー

  • デバッグ: "Command","Shift" ,"Option" 同時押し+ fキー
  • コード整形: "Shift" ,"Control" 同時押し+ dキー
  • Build:"Shift" ,"Option" 同時押し+ F9キー
  • Run:"Shift" ,"Option" 同時押し+ F10キー