2014年9月14日日曜日

ニコファーレ完結編


イベント終了。突貫工事だったけど、なんとかそれなりに仕上げることができたかなぁ、と。イベント中はプロの映像制作屋さん・オペレータの2名と一緒にLED照明卓に張り付いていたので、プロの作業を仕込みの段階から長時間見ることができたのが何よりの収穫。

作った素材的にはこの辺にあるモノ+αの15種類くらい。3chのミキサーをMIDIコントローラから制御できるようにしたホストアプリをtmalib上に構築してました。今回のために書いたコードは175 commitsにわたり、コード量も倍増。
% git log -p --full-diff --since Aug | wc -l
23742
だそうです。

Tell Your Worldのステージ中に使った素材の一部

ライブラリ実験用に作った3D版Waypointsがパラメータを変えるだけで色々と使いまわせたのは助かったです。特に直前に追加で作ることになったエンドロールとかは数時間しか作業できなかったので……。フォントからテクスチャ作るライブラリ工事だけで時間切れになっちゃった感じ。

本番のエンドロールはMichael Jackson版Behind the Mask

で、色々と見つかった課題。

  • 自分の作ったライブラリで一番まずかった点はミキサーのフェーダ。うかつにも線形に作ってしまったけど、どう考えても対数で作るべきだった。コードばかり書いてて操作をあまりやってなかったので気付かなかった。
  • 機能として足りなかったのはプレビューと速度調整。プロの現場だと、次に使う絵をプレビューで先出ししてて、ステージ上の音楽に合うように映像のループ位置や速度を調整して、ここからって場所が来たら瞬時に切り替えて使う。DJアプリと一緒ですね。今のフレームワークでもタイムラインはきちんと管理してるので、UIさえつければすぐにでも動く。けど、性能的にプレビューまで出すのはちょっとキツイ。本番ではFull HDで生成・出力をしていたけど、エフェクトを重ねてると現状でも30fpsに落ちることがあった。そもそもコンソールと外部出力、複数のウィンドウに対して、同じタイミングで絵を送るのがちょっと難しそう。Web Music Hackathonの打ち上げでも話題に出てたけど、それこそOS XのSyphonみたいな仕組みが欲しくなってくる。
  • シェーダーのコンパイルに数百msec必要で、その間requestAnimationFrameが届かなくなるため、エフェクトのダイナミックなロードが難しい。フレーム落ちを避けようとすると、基本的に曲の頭で色々なリソースを先読みする事になってしまい、メモリ消費が激しくなりがち。ちなみにこのアプリは起動時に500MB以上食ってたし、デバッグ時には作業しているうちに2GB付近まで増えてタブ落ちする事も。
でもまぁ、ウェブアプリベースで本格的な照明制御を行う実験としてはまずまずかな。思いついた事を全てやるには圧倒的に時間が足りなかったけど、まずまずは満足。


Web MIDI API update at Chrome 39

これが最初で最後になるとは思うのですが、ECMAScript 6との親和性を高く保つため、既存のJavaScriptコードに修正が必要になる変更がChrome 39で導入されます。現在はCanaryとDevのみの変更ですが、年内には安定版も含めて新APIへ移行します。

Chrome 37, 38, 39で動作するコードを考えた場合に気をつける点としては、ES6のfor...of構文が導入されたのがChrome 38という点に注意する必要があります。この構文を含むコードは、例えこの構文が実行されないパスにある場合でも文法エラーになってしまいます。そのため、Chrome 37以降で動作させるためには、next()とdoneを使ってforループを回す必要があります。

具体的な例としてYAMAHAさんがGitHubに公開しているコードに対してパッチを作ってみたので参考にしてみて下さい。



To be more friendly with ECMAScript 6, we will introduce incompatible change to Web MIDI API that requires applications' JavaScript code being modified in Chrome 39. It's in Canary and Dev channel for now, but all channels including Stable will migrate to the new API by the end of this year.

If you want to support Chrome 37, 38, and 39, you should be careful about that the ES6 'for...of' syntax can be available in 38 and laters. It will raise a syntax error. To avoid this problem, you need to use next() and done to run a for loop correctly.

Here are two examples for YAMAHA's GitHub projects that may help you.


8月の読書

先月末からニコファーレ関連でテンパッてたので読書ペースが落ちてた&ブログにしてる暇がなかったんだけど、落ち着いたので。8月の読書も7月と同じ27冊。面白かった物をいくつかピックアップして紹介。

生物・バイオ関連

ブルーバックの「カラー図解アメリカ版大学生物学の教科書」シリーズ。僕の通っていた高校では物理・化学・生物の中から2つしか選択できなかったため、医者かバイオ系を目指してる人以外は生物を選択から外してた。そんなわけで僕も生物に関する高等教育は受けておらず、ちょっとした苦手意識のある領域でした。先月読んだ本の中で良さそうな本が紹介されていたので、8月いっきに読みました(正確には3巻を読み終わったのは9月頭)。いやはや、細胞の世界の緻密さに脱帽。コンピュータとかロボットなんか、まだまだ玩具だな、と思いました。しかもこういったシステムが緻密にコードされているわけではなく、相互作用の結果として自己組織化されていくようにできているあたりが、まさに神のハック。
読んでいるうちに面白くなって同分野の本を何冊か読み漁りました。その中で気に入ったのが「マンガでわかる神経伝達物質の働き」。マンガと言っても半分以上は文章で、まとめや箸休め的にイラストが入っている感じ。でも、イラストが本当に可愛くて、それに釣られてスラスラ読んじゃいました。最後の方は精神病やドラッグについての説明もそれなりに。
「やわらかな遺伝子」は「教科書シリーズ」の2巻を読んだあたりで気になって読みました。「遺伝子すげー」って世界観から、実は生まれた後の環境によって遺伝子発現のトリガが押されるので遺伝子が全てじゃないんだよ、という流れに。でもまぁ、一卵性双生児の話を聞く限り、普通の世界に生まれてくれば、かなり遺伝子には引きずられますね。個人的な結論としては「やる気のでるホルモンを生成できる遺伝子が最強」という事で。個人の意思決定を本当に支配しているのは身体の状態であって「やる気がでない、気分が乗らない」という、さも脳内の意識が決定したかのような理由付けは、行動の後に脳が辻褄合わせに作り出しているという事実を知り愕然としました。寝てる間にベッドから落ちたら、落下する夢を見るのと同じ。人間は常に水面下で言い訳をしながら生きているわけです。
この辺を一通り読んで、ミクロな生物学に関してはなんとなく理解できた気がします。万能細胞がなぜ嬉しいのか、動物では何が難しいのか、とかその程度。研究室に配属されて手が動かせるレベルかと言われれば、まだまだ全然ってところ。でも細胞のシミュレーションとかも面白い分野だし、機会があれば飛びつきたいな、という感じではあります。次はマクロな方面を読んでみたい……って事で4巻以降に続く。



未来予想

Kurzweilの最新のSingularity本。……とにかく分厚い。普通の本なら5冊くらい読めそう。
技術は指数的に進化の速度を上げていく、という収穫加速の仮説を詳細なデータの元に検証。人知を越えたコンピュータが登場するSingularityとその先の未来を詳細に予測する。
仮説を裏付けるために詳細な記述がなされているが、カーツェルの予測する未来を知るという目的には冗長すぎる。かと言って専門家として理解できる分野の話を見ると「ちょっとこれは」と思える部分もあり(やむを得ないとは言え)中途半端な印象は否めなかった。
予測内容そのものは刺激的で、生き方について少し見なおそうと考えるには十分すぎる内容。ただ、倫理的な問題を考えずに人体改造を認めることで、人が順応できる生活の変化が技術革新に追いつけなくなったという重要な事実を無視している。
一方でサイエンス・インポッシブルはSFに出てくるような未来の技術をネタに、物理学者の観点から実現の難しさを語った本。Kurzweilの文章は刺激と同時に、年寄りの与太話に付き合ってるような退屈さが付きまとう感じだったんだけど、この本は科学の歴史などにも触れ、読み物としても十分に楽しめる。
後半は最新の宇宙論について結構なページを割いているので、実はSFをネタにしてより多くの人に(著者の専門である)現代物理に興味を持ってもらうよう狙った本かも。前半は編集の要望で後半は著者の趣味、みたいなパタンは多いですね。
未来予想としてはKurzweilよりはずっと控えめで、倫理的問題や人間の適応力不足に起因する進化の鈍化を考えると、100年くらいはこっちのほうが妥当な予測かも。ちょっと寂しいけど。


小説

夢野久作の書簡体短編3作が収録された「少女地獄」。これまでに読んだ夢野作品は「きのこ会議」だけで「んんんっ??」って感じだったんだけど、本作を読んでその世界に一気に引き込まれた。ドグラ・マグラ前の助走って感じで。一連の作品は、女性の社会進出が一つのテーマですかね。
冲方さんの本はファフナーのファンとして。冲方さんが普段どうやって小説を生み出しているのかが具体的に読めて楽しい。書き方講座というタイトルではあるけど、教科書じゃないです。


その他

「5つ数えれば君の夢」は東京女子流をモデルにした漫画。たった一度きりの人生をアイドルという職業に捧げることの覚悟みたいなのを重くなり過ぎない感じでストーリー化してます。
「なぜ日本は若者に冷酷なのか: そして下降移動社会が到来する」の著者はパラサイト・シングル、婚活といった言葉の生みの親。日本の社会が抱える現実問題を目の当たりにした。投機でしかない高等教育、独身無職で親に寄生する若者たち、老人優遇の社会制度。数字で見るここ数十年の若者世代の収入の下がり方はちょっとシャレにならない。子供が減って当然。日本は世界で最初の「元先進国」になるのか。
最後の本はただただ残念だったので。短納期で引き受けた秒間1万アクセスのシステム。「もう先方と約束しちゃったんだから、死んでも作ってね」という日本的なノリで納品して、実際に運用したら秒間1アクセス以下で余裕でした、と。日本の品質重視が空回りする瞬間。企業ももう少し冒険した方が良いんだけど、それ以前に日本人が国民性としてリンチ好きだったりクレーマー体質なのがなんとも。日本もまだまだ民度は低いのです。

2014年9月1日月曜日

ニコファーレ続き

この週末はコントローラ周り、サウンドからのFFT入力、シーケンスをプログラムするためのライブラリとか用意してた。だいぶTODO潰したけど、まだスケジュールきつい。

昔2D向けに作ったWaypointsを3Dに拡張。ポイントスプライトとして頂点計算しつつ、フラグメントシェーダで火球っぽく描く方法を試してみた。点を打つだけなら10万パーティクルくらいいけそうだったんだけど、ポイントサイズが大きくなってくると1万くらいで厳しくなる。空間が広いので1万パーティクルくらいだと結構スパース。


こっちは前に作ったキューブが飛んでくる奴。ワイヤーフレームで表示するモード作って、エフェクトでぼかしてみたら結構かわいくなった。


あと、関係ないけどherokuにデモdeployする時、postinstallの中でライブラリをクローンして特定のリビジョンをチェックアウトという処理をしてたんだけど、チェックアウトの段階で.gitが空とかいうエラーに遭遇。前は動いてたんだけどなぁ。とりあえずbranch作ってgit clone -b で逃げてるけど、なんか不便だ。