12月の開発記録(2022)

晦日、1年分の振り返りを書く時間がなさそうなので、いつも通りひと月分だけのアップデートです。

Zrythm/DAW勉強会の下準備

12/11にはZrythm DAW勉強会を開催しました。いつも20人いれば多いほうかな?みたいなノリでやっていたところに、最終的に50人近く参加申し込みいただいて、何かえらいことになったな…!? と思いながら当日まで準備していました。 Zrythmは謎の勢いがあるプロジェクトで、いずれ調べてみようと思っていたから開催したわけで、普段使っていて詳しいから開催したと感じではありません。普段使いは強いて言えばWaveformです(が、そもそもDAWを使う作業を最近ほとんどやっていない…)。今回はalexteeせんせいをお招きしていたので、内容が間違っていても訂正はしてもらえるという期待がありましたが、当日しゃべる内容がちゃんと実態とマッチしていることは重要なので(たとえば「最先端のDAWです」みたいな話をするわけにはいかない)、動かしながら問題が発生したらバグレポートを作ったり原因を調べたりする感じでした。どちらかというと資料作成より再現性のあるバグレポートを作る作業でいっぱいいっぱいになったともいう…(資料作成はいつも通りそんなに気合を入れるつもりはなかったですし)

スライドはspeakerdeckに公開してあります。

speakerdeck.com

当日は配信やら録画やらでホスト側として失敗しすぎたのでいろいろ反省するところがあり、次はもう少しコミュニティの皆さんにヘルプをお願いして回すことになると思います。次は自分がしゃべるのではなく1回目(オフライン)のような複数本トークの集まりにしたいですね。

Android NDKはどこへ向かうのか (C101)

TechBoosterの新刊「プロと読み解くモバイル最前線~アプリを支える最新技術~」に「Android NDKはどこへ向かうのか」というタイトルで記事を1本寄稿しています。「NDK与太話」という仮題で書いていたのですが、こっちの題を思いついてしばらく悩んだ末にこっちにしました…

techbooster.booth.pm

NDKのネタを書くつもりは当初なかったのですが、Zrythm勉強会の準備で余裕がなかったのと、10月までも(M3で)文章書きタスクが多くてこれ以上開発作業から離れるのは良くないと思って、比較的ライトなネタを選びました。NDKの最新情報は多分割と地味になるので候補ではなかったのですが、そういえばGitHub issuesにはおもしろネタがたくさん転がってるんだよな…という視点で「将来」の話としてまとめています。ただしRustサポートなど、公式には「やらない」と明言しているので注意が必要です(本書でもそう言及しています)。具体的には次の3本です。

  • Rustサポート? - Rust方面の開発者以外には刺さらないと思いますが、ネイティブコード開発者としては誰もがふんわりと関心をもつトピックだと思います。筆者もRust系開発者ではないのでふんわりと調べてまとめています。ネタ元は主にissue #1742
  • wasm as IR? - WebAssemblyをIRというかABIとして活用しよう、というアイディアは個人的には想像の範囲を超えていたのでかなり刺さっています。wasmランタイムとかにふんわりと関心のある層向きです。ネタ元は主にissue #1771
  • Jetpack NDKライブラリ? - これはまあ完全に宣伝文句の問題で、単に公式ライブラリとしてPrefabを配布するよという話なのですが、公式ライブラリとしてパッケージを配布する基盤はちゃんと整備されているか?という観点で標準ライブラリ(libc++)の話を書いています。ネタ元は主にissue #1314libcxx-provider

AAP state of union updates

11月にAAP v0.7.4 / AAP-LV2 0.2.4 / AAP-JUCE 0.4.4と比較的安定したバージョンをリリースしたので、12月はひとまず外部の人向けに現状をいろいろドキュメントとしてアップデートする作業にかかりました。とりあえず2022年の更新まとめと、今できている機能のリスト、今あるプラグインとホストのリストがあります。

もう少し情報を足していかないといけない気もするので、1月にも更新が続くと思います。roadmapも2023年版が必要だし。個別にチャットとかで相談を受けたりはするのですが、来年はコミュニティ的なものを形成していったほうがいいかなあと思っています。そのためにはちゃんと複数人で開発できる体制が必要なのでコードも整備しないと…という感じでやることが芋づる式に出てきます。

まあでもこのプロジェクトを1人で続けるのはスケールしないですし(プロジェクトの立ち位置としてあまり適切な体制でもないし)、少しでもタスクをオフロードできる可能性を広げていきたいと思っています。

AAP testing updates

今月後半に主にやっていたのがテストまわりで、来月も続くと思うのですが、テストがまともに機能していないのをどうにかしようと格闘しています。個人的には割とtest firstに近いところで生きてきたのですが、AAPはクライアント/サービス + NDK環境という、割と安定解の無いところからスタートしていて(そもそも最初はJUCEプロジェクトだったし)、ものすごく治安が悪い状態です。一応gradlew connectedCheckは昔からあって、なんならaosp-atdの設定すらあるのですが、これがまともに動作したことがほとんどないし(コードの問題ではなくAGPの問題)、そもそもGitHub Actionsがnested virtualizationをmacosでしかサポートしていないので、その辺でCIへの統合はストップしている感じです。ただローカルでconnectedCheckで確認できることは増やしておきたい…と思って、ここにインスタンス生成とオーディオ処理まわりのテストを加えては期待通りに動かないのを発見してコードを直す…みたいなことをやっています。

この辺のテストを含めた開発体験が、Android Studio + NDKでは(Kotlin onlyのアプリに比べると)かなり悪く、バグレポートを作ろうと何日か格闘しても再現条件が難しい(自分のプロジェクトは複雑すぎて切り分けにも時間がかかる)…という感じで、割と時間を食わされていて、どうにかしたいなあ…とは思うところです。まあKotlinだけでも、複数スレッドが絡むとデバッグオブジェクト評価がまともに評価できない問題とかあるし、AS自体がいま割と不安定ですよね。Dolphinがそんな状態のままstableになっているので、今後もしばらく不安定なんだろうなと思っています。

その他/総括

今月はアドベントカレンダー月間だったのでこれらの他に2本記事を公開していますが、どちらもここに上がっているので言及するほどでもないでしょう(書き上げたのも先月だし)。それとは別にzennに1本Cmajor first impressionというのを出しています(先月書き溜めて中途半端だったのでそのまま忘れていた)。

…そんな感じで、12月は開発アップデートは少な目です。まあ今年は全般的にそういう月が多かったですね。来年はもう少し開発側にコミットしていきたい…(フラグっぽい気がする)