Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SoCの上にも三年
Search
株式会社ビットキー / Bitkey Inc.
PRO
November 30, 2022
Technology
500
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.
Flutter × BLE Centralを自前Pluginで実装する設計パターン - MethodChannel / EventChannelで作る双方向ブリッジの実践 / Building Custom Flutter BLE Central Plugins: Bidirectional Bridging with Method & Event Channels
bitkey
PRO
0
400
Swift&Xcodeのバージョンアップにまつわる怖かった思い出 / Scary Memories of Swift and Xcode Updates
bitkey
PRO
0
200
iOS/Androidの二刀流エンジニアがFlutter & TypeScriptへ越境後の現在地 - Flutterがメインになって見えた景色と現在の醍醐味 / Dual-Platform Mobile Engineer Shifts to Flutter & TypeScript - The View and Real Thrill of Going Flutter-First
bitkey
PRO
0
550
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
510
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
560
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
310
人が担う「価値」とは?これからの「QA」とは / Human Value and the Future of Quality Assurance
bitkey
PRO
0
340
キャリア25年目にしてTypeScript に出会うまで - 「型」を通じて振り返るプログラミング言語遍歴 / Meeting TypeScript After 25 Years in Tech - Looking Back at My Programming Language Journey Through "Types"
bitkey
PRO
2
500
AIのために、AIを使った、Effect-TSからの脱却 〜テストを活用した安全なリファクタリングの進め方〜
bitkey
PRO
2
1k
Other Decks in Technology
See All in Technology
20260912_スクラムにジェネラリストは必要か
ryugen04
0
220
GuardDuty 検知対応を DevOps Agent で効率化しようとしている話 / GuardDuty Investigations with DevOps Agent
masahirokawahara
1
340
ASTを使って影響範囲を特定する
nealle
0
140
GoにおけるFFIのこれまでとこれから
goccy
4
1.7k
AI時代に顧客へ最速で価値を 届けるための試行錯誤 〜「AI × マネジメント」領域におけるmentoのケース〜
posterkeisuke
0
110
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
7
7.6k
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
310
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
120
Bet AI Day 2026丨AIを「使う」から、AIが「働く」へ ― LayerXが進める「組織AI」の社会実装
layerx
PRO
3
2.9k
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
0
1.3k
プロダクトエンジニアに必要な「いい感じ」に作る能力 〜たくさん作れる時代に、どこまで作るかの決め方〜
jnishime_dresscode
2
1.4k
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
240
Featured
See All Featured
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
440
Abbi's Birthday
coloredviolet
3
9.9k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
260
BBQ
matthewcrist
89
10k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
480
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
How to build a perfect <img>
jonoalderson
1
6k
ラッコキーワード サービス紹介資料
rakko
1
4.8M
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
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乗せれば?