14.2. アプリケーションの出荷¶
作業台で動くスクリプトと出荷製品は同じものではありません。現場に設置されるカメラは、製品が設置されている限り、数か月、数年にわたって自力で動作し続けなければなりません。コンソールにオペレーターはおらず、IDEも接続されておらず、何かが動かなくなったときに近くにPythonの専門家もいません。このセクションのページでは、目標が机上のデモではなく出荷製品になったときに、アプリケーションについて何が変わるのかを説明します。
14.2.1. 出荷前チェックリスト¶
カメラが作業台を離れる前に、真であるべき項目の短いリストです:
アプリケーションコードはファイルシステムではなくビルドに入れる。 フリーズモジュールとROMFSイメージがコードとアセットをカバーします。フラッシュとSDカードのストレージはランタイムの状態とログファイルのためだけのものです。エンドユーザーは再フラッシュなしにアプリケーションを編集、削除、置き換えできません。
ウォッチドッグが常時動作している。
machine.WDTはmain.pyの冒頭で開始され、メインループの反復ごとに1回フィードされます。設定したタイムアウトより長いハングはハードウェアリセットを引き起こし、カメラは復帰します。アプリケーションは復旧可能な出力先にログを記録する。
loggingライブラリは、レベル、タイムスタンプ、そして現場でSDカードから回収できる出力先とともにレコードを書き込みます。print()は開発時専用です。そのデフォルトの出力先はUSB標準出力であり、出荷製品では誰も読みません。フラッシュとSDは失敗しうるものとして扱う。 内蔵フラッシュは小さな固定サイズのレコード(設定、最後に分かっているキャリブレーション)を保持し、SDはかさばる可変ファイル(画像キャプチャ、ログファイル)を保持します。どちらに対する操作もエラー処理で囲み、アプリケーションはどちらが利用できないときにも明確なフォールバックを持ちます。
14.2.2. アプリケーションをビルドに組み込む¶
2つの補完的な仕組みがファイルをファームウェアイメージに入れます: