科学・技術
設定不要な時計が欲しかった。事態はエスカレートした
I wanted a clock that never needed setting. Things escalated (arstechnica.com)
要約
筆者は、子供の頃から使っていた安価なデジタル時計が、夏時間への切り替えや停電のたびに手動設定が必要なことに不満を感じていました。21世紀にもなって、より良い方法があるはずだと考え、自己設定可能で、夏時間調整、正確な時刻表示、そして好みの赤色7セグメントディスプレイを備えた時計を求めました。しかし、そのような市販品が見つからなかったため、3DプリンターとRaspberry Pi Zero、そしてLLMの助けを借りて自作することにしました。
全文翻訳
設定 Story text Size Small Standard Large Width * Standard Wide Links Standard Orange * Subscribers only Learn more Minimize to nav 私は、忌々しいことに存在しないように思える時計を欲していました。子供の頃から、私のベッドサイドクロックは、WalmartやTargetで売られている、赤色の7セグメントLEDクロックラジオのシリーズでした。それらは決まって安価でシンプルで長持ちしますが、夏時間の開始と終了、そして停電のたびに手動での介入が必要です。最近の停電の後、サイドボードに立って「TIME」ボタンを押し続け、「HOUR」ボタンを連打していると、フラストレーションが爆発し、私は自分にこう思いました。「21世紀も4分の1が過ぎようとしている。もっと良い方法があるはずだ!」私の理想の時計は、自動設定されるものでした。それは、自動夏時間調整(あるいは、この法案がどうなるかによるが、そうでないもの!)を提供してくれるでしょう。それはドリフトを管理し、常にサブ秒単位の正確な時間を示すでしょう。そしてそれは、赤色の7セグメントディスプレイに表示されるでしょう。青でも、緑でも、黄色でもなく、そして絶対に白でもない。そして、それを機能させるためにプライバシーを破壊するようなゴミアプリをインストールする必要はないはずです。シンプル?いいえ。多くのベッドサイドクロックは、これらの要件のうち1つか2つを満たしていますが、すべてを満たすものを見つけることができませんでした。宇宙の彼方からアップデートを受け取る、バッテリーバックアップ付きの自己設定「原子」時計は何年も前から存在し、私をそこまで連れて行ってくれますが、私が気に入る赤色の7セグメントディスプレイを備えたものを見つけることができませんでした(誰か他の人の検索カンフーは私より優れているかもしれません?)。一時、絶望が勝ちました。しかし、無駄な検索結果や惜しい製品ページで何十ものブラウザタブを閉じながら、私は自分にこう思いました。「ちょっと待てよ。私は3Dプリンターを持っている。私は、賢いし、そういうことができる。」なぜ7セグメントディスプレイを買って、自分で時計を作らないのだろうか?そして、私が月にも触れそうなほど高く積み上げられた巨人の肩の上に立ち、私はそうしました。これが時計です、時計らしいことをしています。Credit: Lee Hutchinson これが時計です、時計らしいことをしています。Credit: Lee Hutchinson おお、勇敢なる新世界よ、このような時計があるとは。プロセスについて数千語の長々とした話に興味がない人のために、ここに完成したリポジトリがあります。価格と購入場所を含む部品表、ソフトウェア、そして3Dプリンターファイルが含まれています。時計として機能する、この面白おかしく過剰設計された週末プロジェクトがたどる可能性のある道は2つありました。1つは、取られなかった道で、ArduinoまたはArduinoライクなマイクロコントローラーから始まりました。もう1つは、Raspberry PiまたはPiライクなコンピューターのようなものから始まりました。私はPiを選び、Raspberry Pi Zero WとZero 2 Wの両方を使用しました。私の理由は、Piがあれば、Wi-FiとNTPを備えたDebianベースのオペレーティングシステムという安心感があり、「時計は自動的に設定・更新される」という要件を満たし、私が既に知っている通常のLinuxリモート管理ルーチンも利用できることでした。7セグメントディスプレイの選択は簡単でした:Adafruitは素晴らしい時計フェイススタイルのLEDディスプレイ(1.2インチの数字)を製造しており、LEDを駆動するために必要な「バックパック」ボード(HT16K33コントローラーを含む)とバンドルされたキットを販売しています。私は3つ注文し、テスト、組み立て、そしてはんだ付けの方法を理解するためにすべて使用しました。ディスプレイ、Adafruitの製品ページより。Credit: Adafruit ディスプレイ、Adafruitの製品ページより。Credit: Adafruit ああ、そう、はんだ付け。私はそれを一度もやったことがありませんでしたが、7セグメントディスプレイをバックパックボードにはんだ付けする必要があったので、Amazonから「初めてのはんだ付け」キットと60/40のはんだロールを購入しました。(また、デスクトップ拡大鏡も購入する必要がありました。なぜなら、そこに入ってみると、この老眼は昔のように近くにピントを合わせることができないことがわかったからです。)時計の筐体の問題はさておき、誰かが既にAdafruitディスプレイと互換性のある3Dプリントケースを設計していると確信していましたが、それは正しかったです。私は新しいPi Zeroを持って座り、時計と通信するために実行する必要があるソフトウェアをいじり始めました。すぐに、私は自分の手に負えないことに気づきました。私がこれらのページで何度も言ってきたように、私は「DevOps」の「Ops」の部分を担当しています…誰かが「Dev」をもたらす必要があります。人間には理解できない時計RPiイメージローダーで起動し、Pi Zeroにログインすることができました。しばらく考えた後、ソフトウェア要件をリストにまとめました。時計ホストはLANのみで、インターネットからアクセスできないようにする時計ホストは、LANのみのaptミラーからアップデートを取得する時計ホストは、LANのみのNTPサーバーからNTP同期を取得するクロックサービスは、専用のサービスアカウントコンテキストで特権なしで実行されるsystemdサービスにするクロックサービスは、ホストOSがNTPを処理し、夏時間(またはそうでないもの)に合わせて同期を保つように、システム時間を使用するクロックサービスは、スケジュールに基づいてディスプレイのオン/オフを切り替えられるようにする(寝室にいない日中のほとんどはオフにする)クロックサービスは、スケジュールに基づいてディスプレイの明るさを調整できる機能も持つクロックサービスは、CLI経由で制御できる方法も持つ(ターミナル接続用)ディスプレイはHomeKit経由で制御できること(私はiOSランドに住んでいるため)クロックサービスとその依存関係は、単一のスクリプトでインストールできることインストール後、すべてをデプロイできるようにする(必要に応じてログインして再インストールするのではなく、アップデートをプッシュできるようにする)これらの項目の多くは簡単で、私の通常のopsの範囲内でした。私は、多くの部分で、昔ながらのsystemdタイマーとサービスに頼りました。実際、systemdはかなり気に入ってきています(神よ、私を助けてください)。LAN NTPとapt-ミラーソースは既に存在していました(知っています、知っています、apt-cacher-ngを使うべきでした)。デプロイメントパイプラインはGiteaアクションを使用し、私が既に別のプロジェクト用に設定したものとほぼ同じになります。そのため、過去のLeeから借用しました。HomeKit統合は、HAP-pythonのおかげで、基本的にボルトオンになるように見えました。しかし、I2C経由で時計ディスプレイと通信する方法の例を調べ始めたとき、私は心配し始めました。私のかなり衰えたPythonの筋肉は既に悲鳴を上げており、この課題を満たすことは全くできませんでした。この時点で、プロジェクトは楽しくなくなり、不可能に思えるほど困難になりました。そこで、コーディングタスクをLLMに任せました。「あなたは私に言語を教え、その利益は、コードの書き方を知っていることです」出力を検証できない場合にLLMの助けを求めることは危険を伴いますが、幸いなことに、私はPythonを十分に覚えており、インラインコメントの助けを借りて結果をたどることができます。Claude Codeはこのプロジェクトに取り組むのに十分以上の能力を発揮しました。まずOpus 4.8で、次に新しい派手なFableモデルで、その世界を終わらせるような力を私が利用し、おそらく実際にはインターンレベルのコーディングプロジェクトであるものに使用しました。それは、蚊にデッドスターの全力を解き放つようなものでしたが、確かに効果がありました。結果は、Pythonファイルの整然としたコレクションと、素敵な小さなテストスイートでした。LLMは非常にうまくやったので、HomeKit統合、インストールルーチン、デプロイメントパイプラインのいくつかの詳細、そしてリポジトリドキュメントのほとんども任せました。この告白はArsの多くのコメンテーターにとって冒涜的かもしれませんが、それが現実です。LLMなしでは、プロジェクトを完了できなかったでしょう。私はイライラしたり、怒ったり、あるいは私がやろうとしていることを愚かで間違っていると批判するStackOverflowの投稿を延々と読んだりすることにうんざりしていたでしょう。プロジェクトワークスペース。これは公開GitHubリポジトリとは少し異なるバージョンで、Lee固有のデフォルトとGiteaアクションが含まれています。Credit: Lee Hutchinson プロジェクトワークスペース。これは公開GitHubリポジトリとは少し異なるバージョンで、Lee固有のデフォルトとGiteaアクションが含まれています。Credit: Lee Hutchinson アプリケーション側は、適切なsystemdサービスであり、HomeKitからのコマンドをリッスンします。ローカルでも制御できます。