以下の内容はhttps://masawada.hatenablog.jp/より取得しました。


macOSでUSB HIDのReportを監視するツールを作った

masawada.hatenablog.jp

Gotanda.rbで前述のこれを発表するときに、USB HIDのReportの中身みたいな内容の話をした。話すにあたってLinuxの usbhid-dump コマンド*1と同様のUSB HID Report観察ツールをmacOSで探したところ、意外とどこにもなかったので、こちらもClaude CodeにSwiftで書かせた。当日は時間がなかったのでReportを監視するだけのツールとして作ったけど、あらためてDevice DescriptorやReport Descriptorも出力できるコマンドとして作り直して公開した。SwiftでCLIツールを作ったのは初めてだったが、ArgumentParserがかなり使いやすいし、素朴にSwiftの書き味もいいので結構アリな気がする。

github.com

この手の解析ツールは公式に提供されていてもおかしくないツールだと思うものの、入力監視の権限が必要になるし実質的にキーロガーのような振舞いをするため、なるべくセキュアにやっていきたい都合上こういうのは公開できないのだろう。利用する上では注意してね、ということをrepoのREADMEにも書いている。

このツールを使うとMacBookに組込まれているおもしろセンサーの値も取れることが分かった。たとえば、画面のヒンジの角度がどれくらいか、というのもUSB HIDで取ることができる。何に使うのかって感じだけど、これをもとに画面の明るさや車両モーションキュー*2の動かし具合などを調節しているのかもしれない。

今後Raspberry Pi Picoでおもしろツールを生成するにあたって、かなり愛用するであろうツールが作れたので満足している。

Google Meetでボタンを押している間だけミュートを解除する物理デバイスを作った

Google MeetにはUSBデバイスでミュートスイッチを操作する機能が存在する。一般には会議用スピーカーのミュートスイッチに連動してMeetのミュートをON/OFFする機能と思われる。

workspaceupdates.googleblog.com

Call control will work with most USB telephony peripherals; however, the experience may differ from device to device.

書きぶりからして、USB HIDのReport DescriptorにTelephony Usageが含まれているデバイスを認識させればこの機能を利用できそう。これでPush to Talkを実現する物理デバイスができないか、ということを考えていた(というか2,3年くらい前に考えていたけど、気持ちが高まらず優先順としては低めだった)。

1月のGotanda.rbで急遽なにか話すことになり、ふと思い出して30分くらいでClaude Codeにガッと書かせたらできたので、これで発表した。当日のコードはごちゃついていたので、その後整理した結果できたのがこれ。

github.com

akizukidenshi.com

Raspberry Pi PicoまたはRaspberry Pi Pico 2を買ってきてPCに繋いで、認識されたディスクにファームウェアをドラッグアンドドロップすれば完成。Google Meetの設定から通話コントロールのデバイスを設定するだけで使える。Raspberry Pi Pico 2上では動作確認していて、Picoもどこかに実機があるけど発掘できていないので確認していない。たぶん動くはず。

通話コントロールの設定からデバイスを接続する

BOOTSELボタンを押している間だけLEDが光ってミュート解除されるようになる。

BOOTSELボタンを押すと喋れるようになる

とはいえリモートワークだとわざわざミュートを切り替えたいことがあんまりない。同じ会議室にいて音声統合しているケースだと他のPCに自分の声が拾われて聞きづらくなってしまうことがあるから、全員にこのボタンを持ってもらったら解決しそうだけど、それは現実的ではなかろう。

Claude CodeなりCodexなりにうまくコンテキストを渡せばRaspberry Pi Pico向けのファームウェアであっても十分に動くものを作ってもらえる、というのは収穫だったように思う。

Markdownを変換してブラウザで開くmdpというツールを作った

github.com

詳しい使い方はREADMEをみてください。

最近はClaude CodeなりCodexなりでSpec-Driven Developmentをしたり、調査結果をreport.mdに保存して読むということをよくやっている。ふだんVimを利用しているのでMarkdownもVimで読んでいたのだけど、読みづらいしMermaidはレンダリングされないしで限界が来ているなとおもったので、素朴に変換してブラウザで開くコマンドを作った。

作ったといっても実際にはClaude Codeが99%くらい作っていて、とりあえず動けばいいかとおもってあきらかにマズそうなところ以外は取り込みまくっているので実装が散らかっている。ここはあとでなんとかする……

推しポイントはテーマ機能で、テンプレートHTMLを作って置いておくと、変換したMarkdownをテンプレートと結合して開いてくれる。テンプレートに目次生成のJavaScriptだったりMermaidを解釈するJavaScriptだったりを仕込めば見た目を豪華にできる。細かいカスタムはそれぞれユーザに委ねられるので、好きな色味・表示でMarkdownを見られるのがいいとおもっている。これもClaude Codeに頼めばいい感じにしてもらえる。

mdpで変換したMarkdownでシンタックスハイライトされている表示mdpで変換したMarkdownでMermaidが解釈されている表示
実際にテーマを作って適用したもの

ちなみに作る前にyusukebeさんのGitHub CLI拡張も使ってみていて、実際これも便利だった。

github.com

ただ、複数ファイルをバシバシ開いていくときにいちいちサーバが立ち上がるのは自分の生活に合わないとおもって新しく作ったのだった。

ということでよければお使いください。

ChatGPTのWork with Appsを利用してXcodeでiOSアプリを作った雑感

ここ1年くらい睡眠用ASMR動画を流しながら寝ているのだが、つい先日、妻がロック画面に表示された動画の名前を音読する事件が発生したので、再発防止策として簡素なプレイヤーを自作して動画名を隠そうという気持ちになった。最近ChatGPTがXcode上で使えるようになったという情報を見たので実際に試してみた。

当該の記事はこれで、要はChatGPTのネイティブアプリを入れておくと、Work with Appsのショートカットを押したときになんかいい感じにアプリと連携してくれるよ、というもの。Xcodeだけじゃなく他のアプリケーション(iTerm2とかNotionとか)とも連携してくれるっぽい。

help.openai.com

以下雑感。

  • Xcodeと連携すると、Xcode上の最前面で表示している1ファイルだけをChatGPTに送信して、応答に含まれている差分を1ボタンで適用できるようだった
  • Clineみたいなものを想像しているとだいぶ期待外れだと思う
    • Plan/Actみたいなモードはないので「まず計画を示してください」みたいなプロンプトを無限に入力することになる
      • 無計画に実行するとだいたい気持ちとズレたものが出てきがちなので計画を洗練させる、みたいなのは一緒な気がする
    • 編集してほしいファイル以外を渡すと発狂する
      • VideoListView.swiftを渡すつもりがContentView.swiftを渡してしまうとContentViewの中にVideoListViewを作り始める、みたいなことが発生する
      • 適切なファイルを渡すためにも、どのファイルをどう編集するのか、お伺いをたてる必要がある
    • clinerulesみたいなものは存在しないので、新規に開く都度文脈を手書きすることになる
      • ペライチのドキュメントを用意して最初に手で読み込ませればよさそうではある
    • ファイルシステムを操作できない
      • 読み込みすらできないので、まず文脈を伝えるために1ファイルずつ送信してこれを覚えてくださいみたいなプロンプトを入力していた
      • 当然書き込みもできないので新規にファイルを作ってあげて、そのファイルを渡して…… みたいなことが発生する
    • 差分の適用が1ボタンでできるのは便利
      • Auto Approve的なやつもある
  • 簡単かつある程度定型的なものであれば意外とシュッとできる、気がする
    • とはいえプロンプトを結構な量入力しないとまともに動作しないので、熟達した人間が利用するものではないイメージ
      • マジの初心者が調べながら書くよりは速い、くらいだと思う
    • コード書くのだるいな、というときには有用かもしれない
  • つまるところ、裏側は普通のChatGPTであって、そこにソースコードを投げてやりとりできる、くらいの機能があるだけ
    • やりとりのログもChatGPT上に保存される
      • だらだらやっていると前のやつから消えていく? ような気がする
      • これって通常のChatGPTもこうなのかな、あんまり長くやりとりすることなかったので分かってない
    • 課金プランもChatGPT Plusで利用できるので、費用が定額なのは魅力的ではある
  • そうこうしているうちにWWDCでApple Intelligenceのいい感じグッズが発表されそうな予感はする

自己紹介用のアイコンキーホルダーを自作する

カンファレンスやら勉強会やらの懇親会でSNSのアカウント情報を交換するのはよくあることだと思う。大抵の場合はTwitterのプロフィール画面を見せてアカウント名を手打ちすることになる。もう一歩進んだ形だとQRコードを用意しておいて読んでもらったり、より高級な形だとプレーリーカードを作ったりするのだと思う。

prairie.cards

自分もプレーリーカードを作ろうかと考えていたところ、写真を封入して推し活キーホルダーを作れるハメパチという製品を発見した。

www.daioshop.jp

これにアイコンの写真とNFCシールを封入すれば同じことができそうだ。カード型だと毎回取り出す必要があるが、キーホルダー型なら名札にひっかけておけるし、アイコンで認識されていたら声もかけてもらいやすいのでは? と思い作ってみることにした。実際に購入したのは以下のふたつ。探せばより小ロットから購入できるところもある。

  • EBISUデザイン

  • ctunk

正方形のものでもサイズ違いがいくつか用意されているが、33mm四方くらいだとあまり主張も激しくなく丁度よいのではないかと思う。

作る手順もそんなに難しくない。まず入れたい写真を印刷する。L版サイズにアイコンと自分のWebサイトのQRコードを配置する。Adobeのフォトプランに加入しているのでPhotoshopを利用したが、Canvaなどでも作れるはず。これを近くのコンビニで印刷してきた。

印刷物とハメパチとNFCタグ

これをカットし、NFCシールと一緒にハメパチに封入する。表面はアイコン、裏面はQRコードにすることで、NFCリーダーがない端末でも読めるようにしている。

2枚の写真の間にNFCシールを仕込む

NFCタグへの書き込みはNFC Toolsというアプリを使った。タグの書き込みでは割と鉄板なアプリという印象。Android版もある。

NFC Tools

NFC Tools

  • wakdev
  • ユーティリティ
  • 無料
apps.apple.com

これでWebサイトに飛べるように設定すればひととおりの準備は完了。実際にiPhone 16, iPhone 16 Pro Max, Pixel 7で読めることを確認した。

iPhone 16 Pro Maxで読みとる図。これくらいのサイズ感になる

これからカンファレンスなどに参加する際は、名札にこれをひっかけて過ごしたい。インターネットの人々をSNSのアイコンで認識していることが多いので、真似してくれる人が増えると嬉しい。




以上の内容はhttps://masawada.hatenablog.jp/より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14