Upgrade to Pro — share decks privately, control downloads, hide ads and more …

動け!Golang 〜圧倒的IoTツール開発へようこそ〜

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Kazuhiro Homma Kazuhiro Homma
December 03, 2016

動け!Golang 〜圧倒的IoTツール開発へようこそ〜

「――くやしくって死にそう。」

このままこの子達を公開できなかったら。

IoTベンチャーを起業して2年。製品だけがIoTじゃない!
裏でうごめくIoTツール達の開発をこの機会に一挙大放出\(^o^)/

・[メイン]工場で動け!最強のIoTツール (net/http, gatt, go-bindata-assetfs...)
・基板の検査?それiOS(Swift, CoreBluetooth)でできるよ!
・工場でのID管理、シールプリンターを外部制御でIoT化(Windows10 ,IE11 ,JS)
・IoTの実験ツールで効率化!(Google Apps Script, Swift, CoreBluetooth)
・プロトタイプ開発ならRaspberry Pi(PaSoRi, Python, Node, RxJS)
・ゼロから始めるバイナリ生活(Ruby, Python, Perl)
・初めての中国…/// (LCC)
・他

そして、次のIoTが始まるのです!

https://builderscon.io/builderscon/tokyo/2016/session/8ea5b1e1-ba5a-4e47-9b2b-37ef36213406

Avatar for Kazuhiro Homma

Kazuhiro Homma

December 03, 2016
Tweet

More Decks by Kazuhiro Homma

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 • @kazuph / 本間 和弘 • 株式会社Gaiax 元新卒Webプログラマー •

    独⽴しIoTプロダクト「Akerun」の開発者に • 創業メンバー / 取締役 / CTO • メインアーキテクト / メインプログラマ 
 →エンジニア統括 • Perl→Ruby→Java→Obj-C→C→Golang→GAS(??) • Tuba(チューバ)歴11年、リアルあの世界で
 過ごしました
  2.  "LFSVO ىۀ "LFSVO1SP  "LFSVOൢച։࢝  1SP։ൃ։࢝  1SPൢച։࢝

    4NBSU-PDL3PCPU *P5੡඼Λͨ͘͞Μͭͬͨ͘Α ࣮͸"LFSVOҎ֎ͷ৽ϓϩμΫτ΋ଓʑग़͍ͯ͠Δ͕ɺ શମϦιʔεΛ͢΂ͯ࢖͏΄ͲͰͳ͔ͬͨͨΊɺࠓ·Ͱ ͷӡ༻Ͱ΋ͳΜͱ͔ͳͬͨɻ
  3. IoT開発に必要な要素 Ϗδωε ϑΝΠφϯε ϚʔέςΟϯά Ӧۀ ޿ใ ϝΧ ΤϨΩ ϑΝʔϜ΢ΣΞ εϚϗΞϓϦ

    αʔόʔαΠυ $4 ௐୡ ޻৔ ։ൃ ੜ࢈؅ཧ ϩδεςΟΫε Internet +of Things
  4. ⼯場IoTツールでの⾃動化 • v1.0(2015初期) • FW書込みを⾃動化 • 組み⽴て後検査を⾃動化 • v1.1(2015中期〜) •

    FW書込み後検査を⾃動化 • v2.0(2016) • 新製品のためにすべてをブ ラッシュアップ "84 3BJMT 8FC"1* γϦΞϧ௨৴ #-&௨৴
 ֎෦ηϯαʔ
  5. ⼯場IoTツール構成 • v1.0(2015初期) • mac + Chrome(sinatra)+ shell • iPod

    + iOS app(Obj-C) • v1.1(2015中期〜) • mac + app(Obj-C) + shell • Arduino • iPod + iOS app(Obj-C) • v2.0(2016) • Raspberry Pi + golang + shell • iPod + iOS app(Swift) "84 3BJMT 8FC"1* γϦΞϧ௨৴ #-&௨৴
 ֎෦ηϯαʔ
  6. CLIから普通に使えるShellを書き #!/bin/bash -eu # Usage) ./write.sh … DEVICE_ADDR=$1 SERVICE_UUID=$2 …

    DEVICE_NAME=${11} echo “ஔ׵ॲཧ…” perl -i -p -e "s/(__ID_AKERUN) (.*)?$/\$1 ${SERVICE_UUID}/" $AKERUN_DB_H_FILE … perl -i -p -e "s/(DEVICE_NAME) (.*)?$/\$1 ""\"$ {DEVICE_NAME}""\"/" $AKERUN_H_FILE echo "MAKE" cd $SDK_PATH && ./make clean && ./make akerun download
  7. Rubyから雑に叩く result = RestClient.get “#{url}/#{id}“ 
 p firmware_id = `./build_akerun_firmware.sh

    \ '#{result["device_addr"]}' \ '#{result["uuid"]}' \
 … '#{result["local_name"]}'`
  8. ⼯場ツール v2.0 • 裏ではShellがうごめいていてバイナリ置換とビルドと書込みを⾏っている • 他は全部Golang • Webサーバー部分は net/http •

    BLE操作は paypal/gatt • クレデンシャル情報は.envからロードしてバイナリに含めるやつを書いた • 基本的に1バイナリ+複数のShellにして、⼯場でのぞかれても元のソース が⾒れないようにした • HTML、CSS、JS付近もすべてバイナリに含めるようにした • サーバーとしてRaspberry Piを仕様してsystemdで常駐化
  9. 中国インターネット事情 • つらい • 基本的にブチブチ切れる • 10回くらいリトライしても無理な場合もある • VPNにつなぐと遅いがある程度確実になる •

    ◯◯のWi-Fiに繋いで、VPNに繋げばググれる • Slackは弾かれてないみたいなので余裕で使えた • WeChatがすごく使いやすい、◯◯の⼈からWeChatで連絡来るw
  10. ソース置換ビルド • BLEのチップごとに開発⽤のSDKが異なる上にWindowsで GUIでビルドという苦⾏がある • ただし掘り返せばCLIにたどり着けることも • ex) IDE →

    make → SDK付属toolchain • makeさえ動けばこっちのもの • コンパイルとチップへのDownloadはSDKに任せる • ソースコードをPerlで置換して都度ビルドして書込み