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.
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
190
Flutter × BLE Centralを自前Pluginで実装する設計パターン - MethodChannel / EventChannelで作る双方向ブリッジの実践 / Building Custom Flutter BLE Central Plugins: Bidirectional Bridging with Method & Event Channels
bitkey
PRO
0
470
Swift&Xcodeのバージョンアップにまつわる怖かった思い出 / Scary Memories of Swift and Xcode Updates
bitkey
PRO
0
240
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
660
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
590
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
650
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
400
人が担う「価値」とは?これからの「QA」とは / Human Value and the Future of Quality Assurance
bitkey
PRO
0
370
キャリア25年目にしてTypeScript に出会うまで - 「型」を通じて振り返るプログラミング言語遍歴 / Meeting TypeScript After 25 Years in Tech - Looking Back at My Programming Language Journey Through "Types"
bitkey
PRO
2
580
Other Decks in Technology
See All in Technology
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
190
20261017福岡devIO 「AIは"良いダッシュボード"を作れるか?
jtakeda
0
150
Classmethod Company Deck
satoshi7
1
690
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
870
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
150
会社説明資料
persolserverworks
0
9.8k
OptunaHub: ブラックボックス最適化のためのプラットフォーム
pfn
PRO
0
140
Kiro Crewをはじめよう
kizawa2020
1
160
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
110
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
190
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
380
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
480
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
Testing 201, or: Great Expectations
jmmastey
46
8.3k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Tell your own story through comics
letsgokoyo
1
1.1k
The browser strikes back
jonoalderson
0
1.8k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
First, design no harm
axbom
PRO
2
1.3k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
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乗せれば?