Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SoCの上にも三年
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
株式会社ビットキー / Bitkey Inc.
PRO
November 30, 2022
Technology
480
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SoCの上にも三年
株式会社ビットキー / Bitkey Inc.
PRO
November 30, 2022
More Decks by 株式会社ビットキー / Bitkey Inc.
See All by 株式会社ビットキー / Bitkey Inc.
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
430
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
260
人が担う「価値」とは?これからの「QA」とは / Human Value and the Future of Quality Assurance
bitkey
PRO
0
250
キャリア25年目にしてTypeScript に出会うまで - 「型」を通じて振り返るプログラミング言語遍歴 / Meeting TypeScript After 25 Years in Tech - Looking Back at My Programming Language Journey Through "Types"
bitkey
PRO
2
440
AIのために、AIを使った、Effect-TSからの脱却 〜テストを活用した安全なリファクタリングの進め方〜
bitkey
PRO
2
890
Flutter初心者が生成AIで大規模アプリ開発をキャッチアップした工夫 〜元ネイティブエンジニアが実践した、技術転換の高速道路〜 / Flutter with LLM: A Former Native Engineer's Fast Track to Large-Scale Apps
bitkey
PRO
0
310
〜備えあれば憂いなし〜とりあえず障害訓練やろ? デジタル/フィジカル横断プロダクトを24365で維持するための戦略 / Better Safe Than Sorry: Incident Drills for 24/365 Digital-Physical Products
bitkey
PRO
0
170
雑談は、センサーだった
bitkey
PRO
2
550
AIが書いたコードを信じられない問題 〜レビュー負荷を下げるために変えたこと〜 / The AI Code Trust Gap: Reducing the Review Burden
bitkey
PRO
8
1.6k
Other Decks in Technology
See All in Technology
インフラ寄りSREでも 開発に踏み出せる〜境界を越えてユーザー体験に向き合いたい〜
sansantech
PRO
0
2.6k
ゼロをイチにする仕事が終わったあと
smasato
0
310
Docker Desktop不要の時代が来る? WSL標準の「wslc」で Linuxコンテナを動かしてみた.
ueponx
0
810
初めてのDatabricks勉強会
taka_aki
2
240
AWS Summit の片隅で、体育座りしながらコミュニティがにぎわう理由を考えた
k_adachi_01
2
360
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
3.6k
事業価値を⽣み出すSREへ SREが担うべき意思決定の5層
kenta_hi
1
2.2k
最近評価が難しくなった
maroon8021
0
250
“ID沼入口” - 基本とセキュリティから始める、考え続けるためのID管理技術勉強会 告知&イントロ
ritou
0
440
そのタスクオンスケですか?
poropinai1966
0
140
攻撃者がいなくてもAIエージェントはインシデントを起こす
nomizone
0
200
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
0
140
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Being A Developer After 40
akosma
91
590k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
890
Measuring & Analyzing Core Web Vitals
bluesmoon
9
880
Tell your own story through comics
letsgokoyo
1
990
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Deep Space Network (abreviated)
tonyrice
0
220
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
640
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Marketing to machines
jonoalderson
1
5.6k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
220
Transcript
IoTぶっちゃけNight SoCの上にも三年 No. 1 Web・アプリの開発者が組込開発をはじめたら
津島 雅俊 Masatoshi Tsushima 2004 ソフトウェア開発との出会い Webサイトや携帯アプリを作って遊んでいました 2015 社会人のスタート 情報系の大学院を卒業、ERPベンダーに就職
社内クラウドをKubernetes/Go/Vue.jsで構築 2018秋 Bitkeyに参画 当初はbitkey platformの開発を担当 主にGoでサーバサイドを開発 2019秋 ファームウェアチームを立ち上げ bitlock LITEのファームウェアを内製化 現在に続く開発スタイルを構築 2020夏 第二世代ロックデバイスの開発 内製を前提としたファームウェア開発 2021春リリース 2022春 スマホアプリ開発 FlutterのAndroidネイティブ部分を担当 DroidKaigi 2021 スポンサー寄稿:餅は餅屋、BLEはBLE屋
No. 3 (んー、競技プログラミングぐらいなら) はい C 言語書ける?
No. 4 ほう ファームウェアのソース もらってきたよ
No. 5 よろしく! しゃーない
まず main.c からか。3,000 行あるな。この switch のブロックどこ までスクロールしたら終わるんや?ここbreakが無いのは正し…そ う。セーフ…。なんか改行コードがCR/LF/CRLF混ざっとるしどん なエディタ使ったんだ…。タブとスペースのインデントが混ざって るし…。ん、このソースは
BOM あるな。 UTF-8 か。あれ、こっち は文字化けしてる。 Shift-JIS …?とりあえず nkf かけとけ。そう いえば SDK の zip ごともらったんだけど、公式が配布してるやつと ディレクトリ名一緒…。何か手をいれてるのか…?あ、ヘッダに const の無い static int がある。まさか本当は extern にするべき なのでは…?えっ、これで正しいの!?それとこのあらゆる場所で 読み書きされる巨大な構造体 info は超重要そうな匂いが…あー、ブ レークポイント張ったら IDE がクラッシュした。謎の “delay_ms(3000) // Don’t remove” ← なぜ? atuo_lock ← 熱男? 駆動する部分も無い製品なのに rotate_motor?一体何が回るん だ?デッドコード?んー、じゃぁまぁヨシ!って思ったけど付属の time.h の difftime の引数が標準と逆なの!?なぜ!?!? No. 6 とりあえず読んでみるか
No. 7 C言語でスタートアップやるって こういうことか…
No. 8 いや、C言語が悪いわけじゃなくない?
ちなみに:CI/CD・開発環境の改善はこんなかんじ No. 9
ちなみに:CI/CD・開発環境の改善はこんなかんじ No. 10 スライドのタイトル Code 慣れたものを使いたい →CLIで構築、自分の使うエディタと連携 Build 状況に応じて工夫したい →コード化されたビルドに機能を追加
Release 自動化したい →開発環境のCLI化でCI/CDパイプラインも構築可能に Test スマホアプリとの相互依存を解消したい →仕様からクライアントを自動生成、デバイス単独でテスト
No. 11 そして次期モデルは最初から内製することに…
No. 12 Web・アプリの開発者が デバイス開発をはじめたら
次期モデルのファームウェアに対する要求と無限に湧き上がる懸念 No. 13 結局マルチユーザーとマルチタスクからは逃れられない 無線は同時に接続されるし、他にも相手がいようとすぐ反応して欲しい。単に断 るだけだとしても。 BLE 同時接続 素早い 動作
接続ごとのデータの分離… ノンブロッキングッ! 全てCallbackで! リソースの排他制御 時計のI/Oは1s間 キャッシュで共有 タイムアウトしなきゃ… リクエストに応じた メモリの確保と開放…! でもメモリは 限られてる… Flashへの永続化は トランザクションを順番待ちさせて… 並行処理する ということは… I/Oをブロックしたら 他の接続に応答できない この処理、絶対止まるのか…? メモリリークしない…? キューは確実に捌かれる? ロックは開放される?
でもそれなんか似てない? No. 14 BLEでコマンドを実行 →バイナリで操作するシェルが欲しいのでは? 1つのCPU(≒シングルスレッド)でノンブロッキング →Node.jsでは?
BLEのシェル No. 15 • BLEコマンド = Shellコマンド ◦ コマンドとその実行はメモリ上区別すべき •
BLEコマンドの実行 = プロセス ◦ 切断:返信先を切り離す ◦ 実行完了:削除 ◦ Linked Listで管理すれば良さそう ▪ あれ、task_struct…? A 返信先:1 B 返信先:1 A 返信先:2
もしNode.jsで書くなら No. 16 • 入力側:WebフレームワークのBLE版が欲しい ◦ BLEのExpress.jsみたいなやつ ◦ 初期フェーズの最初の目標 •
出力側:Promise以前のCallbackスタイルで考える ◦ エディタでジャンプできればそれほど怖くない fs.lstat(path, (err, stats) => { // write 完了 }); fs.lstat(path) .then((stats) => { /* 完了 */ }) .catch((err) => { /* エラー */ }); try { const stats = await fs.lstat(path); } catch (err) { // エラー } Cに代わるasync/awaitできる言語はやく来てくれー
ちなみにC++17ならconstexpr lambdaが関数ポインタになる 無名の関数を直接引数に書ける • 簡単なデモとかの書き捨てのコードに便利 • キャプチャはコンパイル時定数のみ可能 No. 17 start_mortor(duty,
[](auto code) { // start_mortor が完了すると呼び出される });
最終的な設計のWebシステム的解釈 No. 18 Service Application Engine Device Touch BLE Auth
Smart Lock Sensor Storage ADC NOR Flash 入力を解釈して機能を呼び出す • TCP/IP の Socket API • リバースプロキシ • MVC の Controller と View 機能を実現する • Framework に依存しない Service, ViewModel • MVC の Model • ミドルウェア 機能間のリソース共有を解決する • ファイルシステム • 外部 API 周辺回路を操作する • デバイスドライバ TCP Controllers Presenters Gateways DB Use Cases Entities Devices Web の製品に例えたら… Logger Database BLE
まとめ:Web・アプリ→デバイス開発で転生しませんか? No. 19 「何って…俺はただ〇〇を参考にしただけだが…」 汎用製品に含まれるアイディアはとても有用 • プロセス、JavaScript、CleanArchitecture • 参考になるものを見つける ◦
OS無しで書く ← OS/ミドル/アプリの垂直統合 ◦ 「良いこと思いついた」 ← だいたいヤバい ▪ 型破りではなく型無し • そこまでやるなら組み込みOS乗せれば?