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

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

動け!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

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で置換して都度ビルドして書込み