2017年の終わりに感謝する作品集

クリスマスから年末にかけて書いている恒例のエントリです。atsushienoが今年よく聴いた・見た・使った作品を書き連ねて感謝の念を示すものです。例によってatsushienoが「今年知った」ものであって「今年公表された」作品とは限りません。(2016年版

音楽から。

www.youtube.com

今年はたまたま今まで未チェックだったdiverse systemで、とくにFeryquitous作品を聴いていた1年でした。曲提供されているSennzaiアルバムArrêter le tempsは綺麗に作られた曲が多くて、よく流していました。

Feryquitous/Sennzaiどちらの方も冬コミ(C93)1日目に新作が出るようなので買いに行こうと思っています(1日目は技術系同人誌と同じ日)。なんかRayark作品でよく見かけた作曲陣だなーこういうところに集まっているんだなー、というのが見えた1年でもありました。

irui.diverse.jp

www.nicovideo.jp

diverseで出たアルバムで他に印象に残った曲はAD:HOUSE 6のIndigo Coralとかですね。l8 r2..ed.c.<b> c4.c<b.>c.<f g4.gf.e.e^ 4.ed.g.<b^ 8.>cree.f.g f4.fe.b.a^ 8.e.d.cg.f^ f4f.e.e^ e1みたいなメロディとか好物ですね(追っかけていて気づいたけど構成音が全部cdefgabだこれ)

UTAUカバーですげぇ…!ってなったのがNumber Bronseの薄ら氷心中ですね。

www.nicovideo.jp

UTAU方面を真面目に追いかけていなかったので(そんな慣習は無かった)、ここ1,2年ほどでどのように人間らしく歌う打ち込みが簡単になってきたのか分かっていないのですが、けっこうこういう作品が出てきているようですし、シンセサイザーが生楽器の制約を解消したように歌唱合成が肉声の制約を解消する時代が来るのを楽しみにしている勢です。まあそれはそれとして人間のほうを好んで聴いていますが。

次は音楽ではなく動画として…隠された物語が明かされたDeemo 2.0のエンディング。これについては1月に詳しく書いたので繰り返すことはしません。この動画のえらい再生回数とコメント数…(なお、音楽はずっと前から知っていたので選外です)

ソフトウェアの分野では、GPL化したVSTですね。

https://sdk.steinberg.net/viewtopic.php?t=282sdk.steinberg.net

Linux環境でも他の環境と遜色なく音楽制作しようと思ったら、もうWebAudio/WebMIDIにシフトするかVSTを滅ぼすしか無いじゃない!…と思っていたのですが、VST3.6.7から?GPLとのデュアルライセンスになり、自由なソフトウェアからは自由に利用できるようになったのです(そのへんの話は前回のpostで書きましたね)。まだろくに使っておらず、正直まだ使える環境やVST pluginはあまりないんじゃないかとも想像していますが(主に試しているTracktionのVSTプラグインが全然使えていないので)、この辺の意識を転換できたことはかなり嬉しく思っています。これでWindowsに戻らなくても何とかやっていけるようになるかもしれん…

VST3がGPL化されたことを受けて、JUCEコミュニティでもLinux版を出してほしいというリクエストが出ていたりします。JUCEとTouchDesignerはわたしが使ってもいないけどLinux版が出てほしいなあと思っているツールof the year賞受賞作品です(!?)

音楽ソフト関係はlibsoundioとかWaveFormとかいろいろ新し目のものを知ることが出来て、これまではMIDIでしか考えることが出来なかったのが、オーディオまわりもちゃんと勉強する準備が出来てきたかなあという気持ちになってきました。腰を据えて勉強するならやはり退職するしかないかなあという気もしていますが来年も少しずつ詳しくなっていきたいと思います。

…時間的にこんなところでしょうか。来年もまた素晴らしい作品に出会えることを楽しみにしています。

12/25追記: 書籍について書こうと思っていたのをすっかり忘れていた! 今年はダントツでこの2冊でしょう:

gihyo.jp

gihyo.jp

Androidの内奥について、世界でも最先端レベルの書籍だと思います。これ、今年の初頭に独立エントリで書いて載せようと思っていたのですが、途中から多忙になってすっかり機を逃してしまったので、このタイミングで載せておきます。文体変わっちゃうから切り取り線の後は別物だと思って読んで下さい。


非常に刺激的な本で、わたしのようにAndroidアプリケーションをほとんど書かなければそもそも技術書も滅多に読まないAndroid開発者でも、楽しんで読むことが出来た。これを肴に勉強会というか雑談会をやったら面白いんじゃないか、と思っていたのだけど、先日わたしが参加しているまったりAndroid Framework Code Readingに行ったら、案の定この本を楽しんでいる人がたくさんいたので、いろいろ語りたい人がいたら次回参加して語ってほしい(次回がいつになるかはわからないが)。

この本がどういう位置付けなのかは、著者の有野氏が冒頭で自ら明かしているが、Androidのアプリケーションのライフサイクルや、Viewのコードやリソースから描画までの処理モデルといった、フレームワーク部分の詳細を理解することで、実際のコーディング上の問題を解決するためのものだ。一方で、Androidフレームワークについて、ここまで詳細かつ親切に解説している書籍は無いだろう。(日本語で読めるものとしては、邦訳が出版されている「Androidのなかみ - Inside Android -」がある。原著はAndroid 2.x時代のもので、邦訳で追記された内容も4.x時代で、やや古い。)

http://www.personal-media.co.jp/book/comp/288.html

これが中国語圏まで探索範囲を広げるといろいろある。中国語圏には、HTC、AsusHuawei、Xiaomiなど、多数のAndroidハードウェア企業が存在し、低レベルの開発に関心の大きい開発者が多いというわけだ。わたしの手元にある書籍だとこういったものがいくつかある。

ただ、これらの書籍の内容は(わたしは中国語はネイティブからは程遠い話者であることを考慮してもらいたいとして)、かなりの割合で雑な「AOSPからのコードの引用と追跡」が含まれていて、自然言語の解説は時としてびっくりするほど薄い。「ここを追いかければいいよ」というレベルのポインタで終わっているところも少なくない(濃密な解説が書かれている部分もあるだろうけど)。

そこまで考慮すると、この本はコードが少なめになっており、そのぶん各部分の意図が丁寧に説明され、それらが明確な意図(たとえば「どうやって60FPSでListViewを描画するのか」といった目的)を導線として読み進められるようになっている。これは有野氏が自ら「同じレベルの内容を扱う類書に比べると、本書は極めて平易に詳しく解説が書かれています」(P. iv)と書かれているとおりだ*1

第I巻はGUIシステムに、第2巻はActivityとアプリケーションのライフサイクルを中心にまとめられている。GUIに興味のない人は第2巻だけ読むことも多分できるだろう。

この本のもうひとつの魅力は、解説の内容がAndroidにとどまらないところだ。もともと著者の有野氏はMicrosoftWPF関連の開発に携わっていたようだが、GUIシステムにはプラットフォームやフレームワークを問わず共通している部分が少なくない。「他所を見ておく」「他の実装アプローチの可能性を探っておく」ことは、歴史から学ぶという観点でも有意義だ。

法律学に関する書籍が「現行法の解釈」だけを「アレはOK、コレはダメ」みたいに書かれていたら、それは学問として失格である*2。アプリケーションの設計方法について、さまざまなアプローチがあり得るのに「MVVMというのがある」「MVVMではこうする」「コレを使えばいい」とか書いているだけの文章が、退屈でエンジニアの知性を刺激しないのも同様だ。さまざまな部分で「なぜ」Androidの仕組みはこうなっているのか、という説明が含まれているのを見れば、「なぜAndroidはこうなっていないのか」ということも理解できるようになる。かもしれない。なぜGUIシステムはQtやGtk+を使わず独自に構築されたのか。なぜpure Javaなのか。この本は、われわれが「何でだろう?」と思うことにいろいろ答えてくれる。

第1巻の内容は、GUI以外の部分のざっくりとした解説(そのいくつかは第2巻の内容になっている)、タッチイベントの伝播の仕組み、UIスレッドといわゆるメッセージループの挙動、レイアウトリソースからの論理的なViewツリーのモデル構築とそのレイアウト、レイアウトされたViewからOpenGL ESの描画命令表現に変換する処理、OpenGL ESからハードウェアコントローラーへの命令出力…という流れで、グラフィックス処理を行うために必要な処理の大部分を解説し、最後にDalvikバイトコードの実行環境(ART)についても説明してある。

第2巻の内容は、AndroidのActivityはどのように生まれそして死んでいくのか、そのライフサイクルを追うために、アプリケーション開発者も意識するActivityのインスタンス化と複数のActivityをスタックに積む仕組み、それらを生成するためにやり取りされるIntentとその解決のために必要なアプリケーションのパッケージ情報の処理、逆にアプリケーションをkillするために生存優先度を計算するOOM Killerの機構、それらを踏まえた上でひとつのアプリケーションを開始から終了まで実行するZygoteプロセスやその中で動くActivityThread(のmain()メソッド)の流れ、そしてfork元のZygoteプロセスを立ち上げるまでのAndroid(というかLinux kernel)のブートプロセス、などが説明されている。

*1:氏が中華圏の書籍まで目を通していたかは知らないが

*2:山形浩生氏も「CODE」の訳者あとがきで書いているように