**Show HN:**  
*自宅オフィス用の「通知停止」デバイスを作りました*

2026/01/04 0:46

**Show HN:** *自宅オフィス用の「通知停止」デバイスを作りました*

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:


要約

著者は、MacBook のカメラがアクティブかどうかを表示する低コストの ESP32 ベースのデバイスを作成しました。

  • 検出:Apple のシステムログ(
    AVCaptureSessionDidStartRunningNotification
    /
    AVCaptureSessionDidStopRunningNotification
    )を、ネイティブ API が存在しないために Bun サーバー経由で監視します。
  • ネットワークと電源:動的 IP を扱いポーリングを減らすために mDNS でローカル命名を追加し、HTTP ポーリングから Bluetooth Low Energy(BLE)へ切り替えてリアルタイム更新を実現しました。ユニットは外部モニタの USB ポート経由で電源供給されるので、ノートパソコンが抜かれると自動的にオフになります。
  • プロトコル:カスタムバイナリ「DoorFrame Protocol v1」が単一バイト(例:0xC0/0xC1 でカメラ状態)と時間オフセットを送信し、JSON のような肥大化したペイロードを回避します。著者は RFC スタイルでプロトコルを文書化しました。
  • UI とエンクロージャ:Mac メニューバーアイコンは Apple の SF Symbols に触発され、接続中にアニメーション波形インジケータが表示されます。物理ケースは Fusion 360 で設計し、スナップフィットと許容差を考慮した 3D プリント(初期版では透明テープを追加)で製造しました。
  • 進化と今後の作業:単なる通知から「過剰設計」プロジェクトへ発展し、現在は BLE 信号強度による部屋検知も含まれています。著者は既存プロトコルに顔認識、サイレン、その他スマートホーム連携を追加する予定です。

このデバイスはノートパソコンのカメラに対して目立たないプライバシーアラートを提供し、メーカー向けツールで低コストにハードウェアレベルのカメラ制御を実現できることを示しています。

本文

私は両親と一緒に住み、在宅勤務をしています

自作のオフィスルームがあるものの、母は「入っていい?」と頻繁に尋ねてきます。そこで私は「忙しい」「会議終了時刻」などを知らせる専用デバイスを作り上げました。この装置は、ユーザー1名だけが利用する独自バイナリプロトコルで動作します。


完成した機器は小さな植物の隣に置かれています

カレンダーを共有すればいいのでは?

  • 電話の問題 – 母は携帯を持ち歩かず、枕の奥にしまいがちです。
  • サプライズ会議 – カレンダーに載っていない「クイック・シンク」Slackのハドルや45分間のデバッグセッションなどがあります。
  • 人為的要因 – たまに部屋に入る必要があるので、「私はいるけれど見えません」と伝える必要があります。
  • 情報過多 – 赤いライトだけでなく、会議終了時刻や残り時間、さらにはNVIDIA株価(最後の要素は不要かもしれない)を知りたいです。

ESP32と退屈の芸術

以前のプロジェクトで使わなくなったESP32を手に入れました。アイデアはシンプル:MacBookのカメラがONかOFFかで画面にステータスを表示するだけです。

Apple の過保護姿勢

カメラ状態を直接クエリできるネイティブAPIはありませんでした。そこで

AVCaptureSessionDidStartRunningNotification
(カメラON)と
AVCaptureSessionDidStopRunningNotification
(カメラOFF)のシステムログを監視する手法にハッキングしました。

const CAMERA_ON_EVENT = "AVCaptureSessionDidStartRunningNotification";
const CAMERA_OFF_EVENT = "AVCaptureSessionDidStopRunningNotification";

const COMMAND = `log stream --predicate '(eventMessage CONTAINS "${CAMERA_ON_EVENT}" || eventMessage CONTAINS "${CAMERA_OFF_EVENT}")'`;

export const createAppleCameraStatus = () => {
  let childProcess: Bun.Subprocess | null = null;
  let cameraStatus: "running" | "stopped" | "unknown" = "unknown";

  return {
    start: async () => {
      childProcess = Bun.spawn({
        cmd: ["/bin/sh", "-c", COMMAND],
        stdout: "pipe",
        stderr: "pipe",
      });

      for await (const line of childProcess.stdout) {
        const message = new TextDecoder().decode(line);
        if (!message.includes("com.apple.cameracapture")) continue;

        if (message.includes(CAMERA_ON_EVENT)) cameraStatus = "running";
        else if (message.includes(CAMERA_OFF_EVENT)) cameraStatus = "stopped";
      }
    },
  };
};

Bun のサーバーを立ち上げ、ESP32 をノートPCのIPに接続し、1.8インチ OLED ディスプレイを取り付けました。すべて順調に動作しました。


より進化させる

二つの問題が浮上しました:

  1. 動的 IP – ルーターはアドレスを変更するので、毎回デバイスを再構築しなければならない。
  2. ポーリング疲労 – 500 ms ごとに HTTP ポーリングすると電力が無駄になり、遅延も発生。

解決策

  • mDNS を学び、
    http://192.168.0.5:1337
    http://Apoorvs-MacBook-Pro.local:1337
    に変わりました。
  • HTTP から BLE に切り替え、Mac が即座に更新をプッシュできるようにしました(理論上は信号強度で在席確認も可能です)。

ハードウェア設計

プロフェッショナルな外観が欲しかったので、3D プリントへ踏み切りました。Fusion 360 を数週間学び、デジタルキャリパーで測定し、スナップフィットやカンチレバーを試行錯誤した結果、ESP32 と OLED を安全に保持できるケースを印刷しました(バージョン1ではテープで補正が必要でした)。


過剰設計

  • BLE – ポーリング不要。
  • カスタムトレイアイコン – Apple の SF Symbols からインスパイアし、接続中は波形アニメーションを追加。
  • カスタムバイトプロトコル – JSON より軽量な単一バイトメッセージ:
ハンドシェイク (Host → Peripheral)
0xDF 0x01   // DF マジックバイト、バージョン1

コマンド
カメラステータス: 0xC0 (OFF), 0xC1 (ON)
時間交換: バイトに詰め込み
  時間バイト (0x7H): 例)0x79 = 午前/午後9時
  分数バイト (0x8M): 例)0x86 = XX:30(5分刻み)

プロトコルの完全なドキュメントはオンラインで公開しています。


終わりに

とても楽しく、たくさん学びました。現在、このデバイスはドア枠に設置され、外部モニターの USB ポートから電源を供給し、ノートPCが抜かれれば自動でオフになります。今後もフェイシャル認証やサイレンなどさらなる過剰設計アイデアは歓迎ですが、今回はここまでにします。

同じ日のほかのニュース

一覧に戻る →

2026/01/08 5:16

Tailscale の状態ファイル暗号化は、もはやデフォルトでは有効になっていません。

2026/01/07 23:29

砂糖産業は研究者に影響力を行使し、脂質を心血管疾患(CVD)の原因として非難しました(2016年)

## Japanese Translation: --- ### 要約 2016年9月12日に *JAMA Internal Medicine* に掲載された研究は、糖業界と栄養科学者との長期にわたるパートナーシップを明らかにする340件の業界文書(1,582ページ)を調査しました。これらの文書は、1960年代半ばから始まった公衆および科学的関心をショ糖から食事脂肪へと移すための協力努力を示しています。 主な歴史的出来事は次の通りです: * **1954年** – 糖業界の貿易組織が低脂肪食の採用により1人当たりのショ糖消費量が3分の1以上増加すると予測しました。組織には30か国の加盟国がありました。 * **1965年** – ショ糖と心臓病リスクに関するメディア報道が急増し、業界はProject 226を委託しました。このプロジェクトはハーバード大学で文献レビューを行い、1967年に *The New England Journal of Medicine*(NEJM)に掲載されました。 Project 226 は糖業界からの資金(2016年換算で約50,000ドル)によって支援され、具体的な目的が設定され、記事が提供され、レビュー担当者(Roger Adams と D. Mark Hegsted)からドラフトが受領されましたが、NEJMの記事には資金源は明示されていませんでした。レビューの結論は、食事中のコレステロールを減らし飽和脂肪酸を多価不飽和脂肪酸に置き換えることで冠動脈心疾患を予防できるとした一方で、ショ糖関連研究を強く批判し食事脂肪の研究限界を無視しました。 UCSF の研究者は、科学的レビューが利益相反から自由であるべきであり、微妙な操作を避けるために完全な財務開示が必要だと強調しています。彼らは追加糖分と高血圧・心血管疾患との関連を示す証拠が増えているものの、現在の健康政策ではショ糖を心臓病リスク因子として一貫して引用していない点に注目しています。 **本研究への資金提供元は次のとおりです:** * UCSF Philip R. Lee Institute for Health Policy Studies * Hellmann Family Fund * UCSF School of Dentistry * National Institute of Dental and Craniofacial Research * National Cancer Institute 調査結果は、糖業界が歴史的に公衆の意見と科学的議論をどのように形成してきたかを示し、利益相反規則を強化することで規制当局・医療提供者・食品産業がシュガー表示、マーケティング慣行、および食事指針を再検討し、結果として製品中のショ糖含有量を低減させ消費者習慣に変化をもたらす可能性があることを示唆しています。

2026/01/07 13:40

「LMArena は AI にとっての悪性腫瘍です。」

## 日本語訳: (欠落している詳細を補完しつつ明確さを保ったもの) --- ## 要約 LMArena のリーダーボードは、事実の正確性よりも派手なフォーマット―太字ヘッダー、絵文字、長い回答―を報酬とするため、幻覚(hallucinations)を真実より優先させるゲーミフィケーション化されたベンチマークに変わってしまっています。500件の投票を分析した結果、52 % が誤りであり 39 % がユーザーの選択と強く相違していました。高得点を獲得した回答には、架空の「オズの魔法使い」の引用(例:作られたライン)や不可能な主張(例:9インチの丸パンが 9×13 インチの長方形パンと同じだと断言する)が含まれていました。Meta‑tuned Maverick モデルは、単純な「今何時?」という質問で太字テキスト、絵文字、回避的言語を駆使して勝利しました。 このシステムは未払いのボランティア労働に依存し、品質管理がほとんどないため、ユーザーは誤情報や捏造された情報を受け取ることが多く、特に医療文脈では非常に危険です。研究者・企業・AIコミュニティは LMArena を非公式な尺度として利用していますが、正確性重視の指標がない限り、モデルは引き続きエンゲージメントを優先し、信頼性よりも注目度を追求するため、広範囲にわたる誤情報と AI による意思決定支援への信頼低下を招くリスクがあります。

**Show HN:** *自宅オフィス用の「通知停止」デバイスを作りました* | そっか~ニュース