Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Computer
macOS をクリーンインストールするたびに AU Lab が動かない (マイクが反応しない) 問題にハマるのだが、毎回復活手順を忘れるのでメモ。
要は、AU Lab のフリをして (AU Lab と同じ identifier で) Microphone の権限を要求するアプリケーションを AppleScript で作って動かすことで、強制的に Microphone の権限を付与してしまえばよい。AU Lab 以外にも、JDK のような Microphone 権限の要求がうまくできないアプリケーションにも応用できると思う。

手順 (macOS Big Sur 英語版を想定しています):
1. Script Editor を開く。
2. 以下のコードを貼り付けて、Application 形式で保存する。
use framework "AVFoundation"
get (current application's AVAudioRecorder's alloc()'s initWithURL:(current application's NSURL's alloc()'s initFileURLWithPath:"/tmp/au_lab_enabler.mp4") settings:(current application's NSDictionary's alloc()'s init()) |error|:(null))'s |record|()
3. スクリプトの Bundle Contents ペインを開き、Bundle Info の Identifier を com.apple.audio.aulab に変更して保存する。
4. 保存したアプリケーションを実行すると Microphone の権限を要求されるので、許可する。
5. Security & Privacy 環境設定を開き、Privacy タブの Microphone を選択する。AU Lab が追加されているので、一旦チェックを外してオフにしてから、もう一度オンにする。(この操作を行わないと本物の AU Lab に権限が反映されない)

これで、AU Lab が動くようになる。ちなみに tccutil reset Microphone com.apple.audio.aulab というコマンドで Microphone の権限リストから AU Lab を削除することができる。

追記: 直接 TCC のテーブルに書き込むというテクニックもあるらしい。こちらの方が便利で良いですね…。https://twitter.com/4uShiyu/status/1363688414210445317
Category: Computer
1年ぶりのメンテナンスリリースを10/22にリリースしました。ダウンロードはこちらから。変更点について詳しくは更新履歴をご覧ください (Mac / Windows)。

ブログを書くのも1年ぶりになってしまいました。リリースノート…というか雑多なメモです。

macOS Catalina 対応について: iTunes.app再編の影響で連携機能が使えなくなっていましたが、今回のバージョンからMusic.appに対応しました。とはいえ、AppleEventの仕様としては分離されたアプリに対応する機能の命令が削除されたことやbundle identifier以外はiTunes.appとほとんど変わっておらず大工事にはならずにすみました。

印刷周りについて: 主にWindowsでプリントの品質が低い問題、WindowsのHi-DPI環境下でプリントが正常に行えない問題に対処しました。これはフレームワークの仕様変更が原因でした。

テストについて: 今回のリリースではコードの修正量はさほど多くなかったのですが、 {Mojave, Catalina, Windows} x {Retina/Hi-DPI enabled, disabled} というバリエーションでテストする必要があったので結構ヘビーでした。BootCampを含むトリプルブートな古いMacBook AirとVMware Fusionを載せたMacBook Proでなんとかカバーしました。VMware Fusion 8.5を使っているのですがゲストのCatalinaを10.15.1にアップデートするとブートしなくなってしまうようなので、いい加減11.xにアップデートしなければ(出費…)。

iTunes for Windowsの仕様変更について: どこかのタイミングで、WAVEファイルの歌詞を取得してもエラーにならず空文字が戻ってくるようになったようです。書き込み時にはエラーになります。(つまり、歌詞に対応したトラックかどうかを、歌詞を書き込まずに判別するのがちょっと大変。)

macOS 10.14 SDKについて: 今回フレームワークのバージョンアップに伴ってSDKのバージョンがbumpされたのですが、App Transport Securityへの対応やら強化された権限管理(NSAppleEventsUsageDescription)への対応やらでいろいろ嵌りました。今回は間に合いませんでしたが次回からはhardened runtime化やnotarizationのstapleにも対応できそうです。

コード署名について: 1年ぶりのリリースということでApple Developerのsubscriptionがバッチリexpireしていたので更新しました。Macアプリの開発は年間1.5万円のお布施で全てが完結するので楽ですね。Windowsでコード署名しようと思うとD-U-N-Sの取得が必要なようですしコードサイニング証明書もお高いので個人開発者には非現実的です…。

melma!サービス終了: 全く気付いていなかったのですがmelma!がサービス終了するようです(こういう大事な話はメールで教えて欲しい… 少なくとも自分には届いていなかった)。ほぼ時を同じくしてFreeMLも終了ということでメールでのコミュニケーションでマネタイズするのはいよいよ難しい時代ですね。LMUCは自前配信に切り替えるかGoogle Forumにするかという感じで悩み中ですが、とりあえず登録用のフォームを作りました。

Apple Musicの歌詞サービスについて: Apple Musicの歌詞がだいぶ充実してきた印象があります。作詞者名も表示されるのが好印象。iOS 13からは自動スクロールにも対応して、もうLM/iKaraはいらないかもね、という時代が確実に来つつあります(Apple Music開始以前の古い楽曲であっても同期データが付与されているものが結構あるので何らかのデータソースを購入してきているのだと思うのですが、LyricFindでもプチリリでもなさそうで謎です)。Apple MusicとLMの相性問題にはずっと目を瞑ってきた…というかうまく共存する術がない(MusicKitやAppleEvent/COMなどのAPIからは、Apple Musicの歌詞データの取得ができないのはもちろん、歌詞が存在するかどうかさえ判別することができない)というのが現状で、ちょっと悩ましいです。LMからiTunesに手動設定した歌詞は「カスタム歌詞」という扱いになってしまいApple Musicの歌詞をオーバライドしてしまうので、本当はApple Musicの歌詞が提供されている曲については設定したくないのですよね。

最近やったこと: 最近別件でiOSアプリを1,2本書いたりしていたのですがSwiftの書き味がなかなか良くて気に入ってしまいました。型推論もIDEも賢いし。Scalaの冗長さに引きずられて印象があまり良くなかったnull安全が一気に好きになりました。:に複数の意味があるのはちょっと気持ち悪いけど。



追記: Wiredの記事によると、Appleには音楽から歌詞を文字起こしする独自のチームがあるようですね。
Schusser says that Apple has “a team of people listening to music and transcribing the lyrics” to ensure they're accurate enough for Apple Music’s new time synced lyrics feature; “we don’t get them from the usual sites.”
Category: Mobile
MVNO / SIM Free が品質的にも小慣れてきたようなので、直近 6 年間使っていた au (7 GB, 月額4,700円) を卒業して IIJmio (6 GB, 月額2,200円)に移行した。以下は備忘メモです。

契約してから気づいたこと

LINE の年齢認証が突破できない

世間一般の方々とコミュニケーションを取る際に LINE ID の交換という儀式が発生することがあるが、これには LINE の年齢認証が必要となる。しかし、年齢認証ができるキャリアは三大キャリアや LINE モバイルなどに限られている。代替手段はいくつかあるのだが、結局私は IIJmio とは別に LINE モバイルを契約することにした。年齢認証は一度行ってしまえば解約しても問題ない。(仕組みが謎なのだが、年齢認証は LINE ID ではなく携帯端末に紐づいているようなので、携帯をリストアしたり機種変更したりした場合は再認証が必要になる様子。)

iPhone のビジュアルボイスメールが使えない

これは我慢ポイントかなと言う気もするが、留守番電話(月額300円)とは別にメッセージを聞く度に電話料金が発生してしまう点は注意が必要。

その他

お昼時は確かに通信速度が遅いかなと思うこともあるが、日中帯はだいたい Wi-Fi が繋がる環境にいることもあり体感で困ったことは特にないのでノーコメント。

MNP について

au の料金はほとんど解約時日割りが効かなくなってしまったので、できるだけ月末に解約 (= MNP 開通) するのが正解である。月初に解約する必要がある場合は、解約の前月に必要最低限の料金プランに切り替える (つまり翌月=解約月は最低限のプランが適用される) と良いと思う。MNP 番号の発行後はプラン変更や住所変更などが一切できないので注意が必要。
Category: Computer
Nature Remo のエアコン用の Homebridge プラグイン (homebridge-nature-remo-aircon) を今年の 7 月に書いたのですが、ブログで触れてなかったので紹介です。

内部的にはエアコンを HomeKit の Thermostat service にマッピングしています。「ドライ」モードがサポートできないとか、いくつか日本のエアコンとセマンティクスと完全に対応できないところがあるのですが、それとなく動いています。代助のブログさんの記事では HeaterCooler service にマッピングしたものを作られたようです (プラグインのソースは未公開)。ファンの速度とかも変えられるようなので HeaterCooler の方が良かったのかな。なぜ Thermostat にマッピングすることにしたんだっけ... Cooling/Heating Threshold Temperature よりも Target Temperature の方がエアコンの温度設定のセマンティクスが近かったからだろうか... (既に忘却の彼方)
Category: Computer
メンテナンスリリースです。ダウンロードはこちらから。主なハイライトは以下の通りです。変更点について詳しくは更新履歴をご覧ください (Mac / Windows)。

macOS Mojave の対応について: オートメーション (AppleEvent) 権限機構周りの対応を行いました。Mojave で Lyrics Master の iTunes 連携機能を使用すると、許可を求めるダイアログが表示されると思いますので "OK" をクリックしてください。詳しくはマニュアルをご覧ください。Dark Mode 対応は、次回に持ち越しです (すみません)。

macOS 版の iTunes Scripts について: iTunes Scripts から Lyrics Master の操作が行えない問題を解消しました。また、v2.5.1 に同梱されていた iTunes Scripts インストーラにはそもそも起動できないという問題がありました (陳謝) が、これはインストーラの機能を Lyrics Master 側に吸収したことで解消しました。今後は Lyrics Master の iTunes メニューから iTunes Scripts のインストール/アンインストールを行う形になります。

(技術的な補足: iTunes Scripts が動かない問題は、前回のリリース (Cocoa 化) に伴ってクリエータコード (LMX!) が消滅したにも関わらず、AppleScript 内からクリエータコードを使用したままになっていたことが原因でした。また、iTunes Scripts インストーラが動かない問題は、「濁点/半濁点など Unicode normalization の影響を受ける名前のファイルを、コード署名後に HFS+ ファイルシステム (リリース用のディスクイメージ) 上にコピーすると、(正規化が違うので)ファイル名が変わったと見做されてコード署名のバリデーションに失敗する」という地獄のような問題が原因でした。今回のリリースでも数時間を溶かしました...。)

外部ソフトウェア連携について: Windows 版の外部ソフトウェア連携機能 (iTunes や foobar2000 から Lyrics Master の検索機能を実行することなどができます) で、曲名に日本語を含む場合に適切に動作しないことがある問題を修正しました。(最近は殆ど使われていない機能だと思っていたのですが、意外と多くのユーザからリポートがあって内心驚きました。)これはフレームワークのバグが原因でした。