謹賀新年

あけましておめでとうございます。本年もよろしくお願いいたします。
せっかく久しぶりの日記なので昨年のまとめなどを書き留めておきます。内容はわからなくても問題ありません。長いですが、たまのことなのでご容赦ください。

昨年のお仕事

一昨年の同時期から始まった二つの仕事が昨年のわりと近い時期にマスターを迎えるという予定だったため、一昨年末から後々下手な苦労をしないために準備と、成果物の質向上と自分への負荷軽減が両立できるよう仕事を回せるようにできればと思いあれこれやってたはず…そのはず。二つの仕事のうち一つは昨年無事発売となりました。もう一つはもうすぐなんとかなる予定。

サウンドプログラム的な話

CEDEC 2012でえらく刺激を受けたおかげで、今回二つ同時進行する別のゲームがたまたま新しくかつ異なる二つのプラットフォームだったこともあり、自分が担当するプログラムに関してはいわゆるマルチプラットフォーム対応なことをしようと決めました。とはいえ、両者とも別のゲームだし、あまり凝ったことは出来ないし、過去の仕事での反応などを踏まえて、使い方の手順や関数名などを共通化しようくらいを目標にしました。あと個人的にはようやく単体テスト(みたいなもの)を可能な限り用意しようとしました。
前者に関して実際にはかなりドロドロとした対応になってしまいました。二つの仕事のうち一つは早い時期にサウンドプログラムのAPIを決める必要があったため、まずガワだけ用意して、データの内容はもとのプラットフォームのSDKそのままの状態にして後でちゃんと仕様を決めようとしてみたら、都合によりマスターアップまでその状態を維持せざるをえませんでした。加えて二つの仕事でサウンドプログラムの仕様に一部食い違いが起きてしまい、結局現在も仕様の違う二つのサウンドプログラムを同じソースで管理するという状態になっています。正直コレは失敗でした。
単体テストの方は、見た目gtestのように書けるものを用意して、プラットフォーム依存しない部分に関しては自分のPCで動いているJenkins上で自動テストまで行えるようになりました。プラットフォームに依存した部分は開発機材をそのまま使うので自動化にまでは至っていませんが、手動でテストは行えるようになってます。これをしたからってさすがにバグが無くなるわけではありませんが、不具合があった部分はテストをしていないところだったり、テストが不十分なところだったりするわけで、つくづくうまく出来てるなあとか思ったり。
今後はサウンドプログラムの仕様を安定させることと、より機能を増やすことが目標かなと思います。あと手の混んだことはあとあと手を付けられなくなるので早めに予測してやっておくことでしょうか。締め切り直前に派手な変更とかできませんしね(色々ご迷惑をお掛けしてスミマセン)。
あ、あと、いつもなら実機上のプログラムにサウンドのテスト用メニューなどを仕込んでおいて実際の音の確認などをするわけですが、今回は外部(PC)に音の動作確認用のプログラムを用意して、実機と通信して動作確認を行うようなことをしてみました。その結果昨年はC#WPFを覚えることになりました。今も勉強中で、WPFWindows上でしか試せませんがC#はmonoを使ってOS Xでも動くので自宅のMBPRなどでも試せるので、継続してぼちぼちやってます。

音屋としての話

ここではすでにマスターアップ済みの仕事について書き留めます。もう一つの方はまた今度。
今回二つのうちの一つのBGMを担当しましたが、今回(おそらく)初めてまじめにオケものを作ることになって、文字通り四苦八苦しました。これまで未経験のジャンルであってもわりと自分のやれる方向に寄せる形で対応してきたことが仇となったのか、今回マジで逃げ場がない状況となったためいろいろ手をつくしました。とはいえ、才能のない自分は道具でカバーするのですよ。
ということでソフト音源。オーケストラ用音源っていろいろありますが、ちょっと手の届きづらいお値段だったりしてなかなか手を出せませんでしたが、その中でも比較的手に入れやすい音源を選びました。まず弦楽器にはCINEMATIC STRINGS 2を使いました。
ソフトウェア音源 「CINEMATIC STRINGS 2」 | SONICWIRE - Virtual Instruments
YouTubeなどでのデモ演奏や説明を見て今回要望されている曲調にも合いそうということでコレにしました。そして、管楽器にはWIVI ORCHESTRALを使いました。
ソフトウェア音源 「WIVI ORCHESTRAL & BAND BRASS / DOWNLOAD」 | SONICWIRE - Virtual Instruments
CINEMATIC STRINGS 2はいわゆるサンプリング音源といい、実際の楽器の演奏を録音してそれをソフト音源に仕立てたものですが、WIVI ORCHESTRALはいわゆる物理モデル音源といい…詳しくは物理モデル音源 - Wikipediaを読んでいただくとして…サンプリング音源とは異なるものです。出音にはわりと満足してますが、結局最後まで使い切れなかったように思います。
あと、これは実際音源の選び方が良かったのか今でもわかりませんが、こういうのも使いました。
Epic Dhol Ensemble
曲の要望に沿ったつもりなのですが、よくよく考えるとEpic Toms Ensembleの方が合致するのではないかとか、まあ作った後に考えても遅いわけですが。この辺知識や経験がないせいでいちいち自信がなくて決められないのが難点です。
当初これらの音源を入手する前にサンプル的に曲を打ち込んで他の方々に聞いてもらったところダメ出しを食らいましたが、上記などの音源を用意してアレコレしてみたところなんとか受け入れられるくらいには作れるようになりました(こう書くと簡単そうに見えるし、実際他の人からだとそう見えるのだろうなあ)。いやあ音源さまさまですよ。正直今でもちゃんと作れてた実感はありませんが、こういうのは今後何度もやっていかないと手応えを感じられないのでしょうね。
オケもの以外は従来通りというか、手慣れたやり方でやってます(曲を量産しないといけないので)。以下使用音源を列記してみる。慣れたものも使い切れていないものも色々。

  • Nativeinstruments KONTAKT 5のデフォルト音色たち/Scarbee Funk Guitarist/Session Horns
  • Toontrack SUPERIOR 2
  • KORG Legacy collection M1
  • Prominy SR5/LPC
  • Impact Soundworks Shreddage/Shreddage X

SEに関しては素材データとの格闘に尽きるので書くことありません。最近は音を一から作ることがほとんどなく、過去の資産的な素材と、新しく仕入れる素材を組み合わせ何とかすることが多いです。それでも足りないものを自作する感じでしょうか。
音声は基本的に声優さんのお声の波形データを編集するのみなので、こちらも特別変わったことはありません。音量バランスについては毎回悩みますが、今回あるタイミングでプログラマの人が実機での全体の音量バランスを調べていただけました。当時はBGMを用意するのが手一杯でしたので大変助かりました。
今後について…音屋としての自分に未来があるのかどうか正直不安ですが、求められるうちは頑張ろうと思います。ホント年々しんどくなるばかりでなんとかしたいのですが、なんとかするにはおそらく経験と慣れしか無いのかなあとも思ってます。集中力もどんどん薄れていますし、なんとかなるのだろうか。

その他

細かいことは面倒なので書きませんが、去年は自分の都合(主に自宅での睡眠時間の確保)のため生活サイクルがひどかったものでした。それでもそのサイクルがうまく回っている最中は良かったのですが、締め切りが押し迫ってきてからは会社に常駐することが常態化してしまって、大変よろしくない状態でした。今後改善できるかどうかは自分次第なので、なんとか、せめて毎日帰宅して、土日は自宅でゆっくり出来るくらいのことはしたいと思います。

プライベートな話

上記の通り昨年は自分としては仕事漬けの年だったので自宅での記憶が「寝てた」か「アニメ見てた」か「ご飯食べた」かしか記憶になくて…。その「アニメ見てた」も夏アニメの頃には(時間的にも自分的にも)余裕がなくてできなくなりました。夏コミ(C84)と先日の冬コミ(C85)、RubyKaigiへの参加はいい思い出になりました。

まとめのまとめ

書けば書くほど気が重くなるというか、年明け早々反省会ですね。年が明ける前にしておけば良かった。
えー、重ね重ね本年もよろしくお願いいたします。

++age

日付的には昨日になりますが、43歳になりました。TwitterFacebookなどでお祝いの言葉を頂いた皆さん、ありがとうございました。今後ともよろしくです。
ちなみに昨日は多忙によるテンパりと身体の不調でヘトヘトでした。いきなりこんな調子でアレですが、また一年なんとか乗り切っていきたいと思います。

RubyKaigi 2013 三日目

二日目が終わって宿に戻り、晩飯を食べたらすぐに寝てしまった。夜中に起きてアニメ見たり日記を書いたり風呂に入ったりしていたりしたら朝になってしまい、そのまま出発。
IMG_0119
早めに出たので時間に余裕はあったが、キャリーケースを置く場所を探すのに一苦労。結局東京テレポート駅SUICAが使えるロッカーを使った。
IMG_0125
ちなみに宿はRubyKaigi 2013のウェブサイトでも紹介されていたホテルサンルート有明でした。いつもつかう浅草のビジネスホテルと一日に付き+1000円くらいで泊まれたので、場所や設備の割に安かったという印象。コミケ時期は予約でいっぱいだろうけど他のタイミングでまた使ってみたいな。

早めに会場入りしたら、スタッフの皆さんが記念撮影してた。

10:00

朝一はAsync programming is all about programming synchronously。咳さんファンなのでw あと、スライドのフッターに僕のコメントを入れていただいたので、それを確認するためにも遅刻はできないな、と。
キューで同期とかシングルスレッドで複数待つ処理とかは、自分の経験した仕事と重ね合わせて聞いていた。
次はIf you do not enter the tiger's cave, you will not catch its cub: Objects, DCI, and Programming。DCI (data context interaction)のお話ということで、その場で色々と単語をググりながら話を聞いた。
castと聞くとついCやC++のcastを思い出しちゃうんだけど、それはどちらかというと(自分はdynamic_castは使わないので)オブジェクトから型を剥がす方向で、DCIはオブジェクトに型をかぶせることで別の型とみなすような感じ、と理解してる(間違ってると思うけど)。ただRubyそれを実装するのに従来の方法よりよりよい方法があるよねってのが今回の話、かな(自信なし)。

11:00

4階へ移り、Aホールの話を
聞いていたが、正直意識が朦朧としていてほとんど覚えてません。すみません… なんかあちこちウロウロしていた気はします。

12:00

IMG_0130 IMG_0131
12時より少し前にheroku弁当の配布が始まったので、そのまま弁当タイムへ突入。三日間美味しいお弁当をありがとうございました。
マイクロソフト提供のフリードリンクも連日大変助かりました。感謝。

13:30

昼一はBe a library developer!。ライブラリを作ることを経験することで、よりよいソフトウェアを書くことが出来るようになるのではないか、という提案。想像ではなく(経験をした上で)思い出すこと。
実はRubyKaigi 2006のとあるセッションで須藤さんの隣りに座ったことがあって、当時須藤さんのことはすでに知っていたのでえらく緊張した覚えがある(そちらに顔を向けられないほど)。今ならもっと緊張する自信あるねw
次はBeyond Ruby。冒頭の「XXXを書いたことがないなら座る」はえらく笑った。Newspeakは初めて知った。

14:30

Bホールへ移ったが人で一杯だったので、4階へ移動しようとしたところ咳さんを発見。少しだけ話をさせていただいた。これだけでRubyKaigiに来た甲斐がありました。

4階でうとうとしつつもBホールの様子を見る。
TRICK (Transcendental Ruby Imbroglio Contest for rubyKaigi)。個人的には音が出る作品のインパクトが強いので遠藤さんの"Most Classic"が好きですね。まあそれよりも、上位3作品がRubyリポジトリにcommitされて、次回Ruby配布物に同梱されることの方がよっぽどインパクトがありましたがw

15:30

IMG_0132
ジュンク堂の横で高橋征義さんによる「このコンピュータ書がすごい! RubyKaigi版」が始まった。色んな本のおすすめポイントがものすごい勢いで語られていて、なんかお得感満載なトークでした。これを聞く人だかりもすごかった。
お昼時かこの時間帯か忘れたが、WEB+DB PRESS Vol.74を買った。RubyMotionの連載に興味がある。最近になってiOSだけじゃなくてMac OS Xにも対応したってところがより気になるところ。

WEB+DB PRESS Vol.74

WEB+DB PRESS Vol.74

16:00

Bホールで卜部さんによるRuby 1.8.7話。Ruby 1.8.7へ黙祷を捧げたり、commitログからcommiterの専門分野の偏りや頻度を見るグラフなど興味深かった。
次はAホールへ移ったが1階は満員っぽかったので、今回はじめて二階へ上がった。
Contributing to Ruby。ドキュメント関連のcommitでお見かけする方。以前、QA@ITでのやりとり*1からRubyへコメントの修正パッチを報告したことがあって、そのパッチをcommitしていただいた。

17:00

トリはFight with Diversityakrさんらしく淡々とした語り口で、ndbmライブラリの多岐にわたるライブラリへの対応についての苦労話をされていました。以前のSEGVといい、socketといい(これはRubyだけじゃなくて各OSへの報告も含むか)、今回のndbmといい、akrさんの粘り強い作業にはただただすごいとしか言えない。
…などと書いてますが、会場ではもう船を漕ぎまくってました。ホントもうスミマセン…

18:00

クロージングも終わり、RubyKaigi 2013も無事終了。お疲れ様でした。
キャリーケースを預けていた東京テレポート駅から品川へ移動、品川駅構内でEX予約を使って座席指定で新幹線を予約、そのまま名古屋へ戻りました。自宅付近はちょうど西枇杷島の花火大会の後だからか、人が賑わっていました。

ひとこと

眠気が三日間で一番ひどくて大変でしたが、なんとか無事三日間参加し終えられてホッとしてます。
こういう大きなイベントって自分は他にはCEDECくらいしか参加したことがありませんが、CEDECは仕事で行くのと自分の専門分野で参加するのでかなり真剣に話を聞きに行ったりあれこれ考えることが多くて必死感が強いのですが、RubyKaigiはそれよりはゆるいスタンスで参加できるのでとても気軽でよかったです(この辺は仕事によるのでしょうね)。あとはセッションを聞かない自由(4階やホワイエでひたすらプログラムしたりだべったりとか)というのもアリなのだなあ、とか。
とまあ、かなり満足度が高かったです。来年以降参加できるかどうかはわかりませんが、せめて今回の様な節々での参加は可能な限り続けていきたいです。
スタッフやスポンサー、参加者の皆さん、お疲れ様でした!

RubyKaigi 2013 二日目

昨日変な時間に寝てしまい、夜中に起きてそのまま変なテンションで日記を書いた。その後一旦寝て起きたら時間ギリギリで、ゆりかもめに乗るつもりがTWRの駅の改札くぐったり、青梅駅通過後に大きく曲がって会場から離れていくんじゃないかとハラハラしたりしながら、なんとか予定(11:00)より10分ちょい遅れて到着。

11:00〜

Bホールが満員ぽかったので4階の電源部屋で Shrink to Grow の発表を聞きながら涼む。mruby.shいつも読んでます。次回のRubyKaigiはもっとmrubyの話題が増えると良いな。
Webruby: Now you can write your favorite Ruby code for the browser! 。mrubyってこういう広がりが早い段階からあるのが面白いよね。周辺のツールなりライブラリが揃っているというのもあるんだろうけど、やっぱり実現する人はすごい。

12:00〜

IMG_0112 IMG_0113
本日もheroku弁当を頂いた。ありがとうございます。今日は数が多かったらしく弁当のおかわりもOKだったらしい。
今日もつい書籍を買ってしまった。今日買ったのはartonさんの「10日でおぼえるC#入門教室」。現在C#を勉強中なので参考にしたい。

10日でおぼえるC#入門教室 (10日でおぼえるシリーズ)

10日でおぼえるC#入門教室 (10日でおぼえるシリーズ)

「あなたがRubyを好きな理由」を尋ねられたので以下のように呟いた:

13:30〜

Aホールにて、キーノート前のクックパッドの紹介。昔は単なるレシピサイトという印象だったが、今ではすっかりRubyをガンガン使う会社というイメージ。
キーノートは Concurrency in Ruby: In search of inspirationRubyで並行処理を行う場合の注意点や対策について(で良いのかな)。内容をしっかり理解したわけではないが、スライドにコードがたくさん使われていたのは助かった。
基本的にはRubyにかぎらず、日頃使っているC++でもスレッドを使う時に気をつけることと似ている印象。発表中Twitterなどではもっと根本的に直すべきみたいなツッコミが入れられてて、まあそうかもなあなどと思ったり。AtomicReferenceは丁度昨日kazuhoさんの Kazuho@Cybozu Labs: スレッド間で共有する変数のアクセス権制御を C++ コンパイラで強制する方法 という記事を読んでいて、自分にはわりとナウな話題だった。

14:30〜

Ruby on Windows -- the past, the present, and the futureWindows版のお話。会社では日頃mswin64版を利用しているので、ひっそり感謝しつつ興味深く拝聴した。mswin版はRuby本体だけではなく、ビルドの際に利用するconfigure.batなど周辺のものも他のプラットフォームと同様に使えるようすごく整えられているので、いつもすごいと思いながら使っている。
次に How NougakuDo connect Windows Azure and Rails Application 。前半はWindows Azure上でartonプロダクトの能楽堂を利用する話、後半はゲームサーバーサービスというサービスの話。後半が急に自分の業界と近い話になって内心喜んでたりw。
Windows Azureのような重量課金制のサービスってわりと本気で使う気にならないともったいないような気がして未だに試したことがないが、興味はあるのでいつか試してみたい(仕事として)。後半のゲームサーバーサービスも興味があるので後で調べる。
こういうサーバーを使った機能を自前でも用意出来ればいいんだけど、未だにそういうのに苦手意識があるので(特に規模的な話で)、その辺を何とかできないかなと日頃から考えてはいる。Windows上で開発できて、そのままの感覚でサーバー上でも動かせる環境というのはわりとうちの会社的にも理想的(というか他のプラットフォームを利用した途端、自分以外の人がメンテ不能になりかねない)なんだよね。今のところプラットフォーマーの用意してくれているサービスを利用する形で実現できることしかしていないので(サーバー云々というのは)今すぐ必要な技術ではないけど、将来的に自前でもそういうことができるということパブリッシャーにも言えるようになるのは重要なので、密かに勉強するしかないのです、はい。

15:30〜

Aホールでウトウトしながら次の発表を待つ。

16:00〜

まずは Ruby's GC 2.0GCの話。GCの説明のグラフに@mamiと出た途端聴衆が一斉に察したのは面白かった(もちろんその後期待通りの流れと結末に)。bitmap markingは今回の説明でようやく理解できた(と思う)。
次は CRuby Committers Who's Who in 2013 と題した、主なコミッターの方々の紹介。単なる紹介にとどまらず、日々Rubyのコミットログを眺めて日記で解説している近永さんならではの内容だった。svnさんが紹介されてウケたw

17:00〜

ライトニングトークはすべて英語で発表されててビビった。一つ一つの内容をメモりそこねたのが残念だが、どの発表も興味深く面白かったと記憶している。

18:00〜

Ruby Committers vs. the Worldと題した、コミッター集合写真撮影会からのQ&A回。主に青木さん貫禄の登場、外堀が埋められていくusaさん、スクリーンに映し出された「お前ら質問しないとこのままつらい時間が続くぞ」的なメッセージが印象に残っている。あと、以前GitHubリポジトリ(ruby/ruby)は参照用だと思っていたがプルリクエストを普通に受け入れているようなのでsvnリポジトリとどう折り合いをつけているのかと思ったら、わりと大変らしいことはわかった(その後svnからgitへの移行話などがでて結構でかい話題に)。
以前からruby-devなどを読んでいて、コミッター同士のやりとりとかが時折すごくギスギスした雰囲気に感じられるのが苦手なんだけど、こうして集まって話をしている様子を見るとそんなことも忘れてしまうなあ、などと思った。あと、こうして面と向かって話すことでいろいろ決まることもあるよなあ、とか(以前から言われてることではあるが)。
IMG_0115
19:30からのGitHubのdrinkupには参加せず、帰りしなにガンダムの写真を撮った後、宿に戻った。
IMG_0116 IMG_0117 IMG_0118

ひとこと

mrubyとWindows絡みの話が聞けたし、全体的にわりと満足した。明日は名古屋に戻るので手荷物が増えるし、遅刻しないようにしたい…。明日も頑張る。

RubyKaigi 2013 一日目

IMG_0106
RubyKaigi 2006以来7年ぶり2回目の参加。初めてのPassbookの利用にビビりながらも受付を済ませ、バッグやらTシャツやらをいただく。ちなみにTwitterでやたらとこのバッグの匂いについての言及を見かけた。
鍵のかかっていないアクセスポイント(dena_use_ruby)を見つけたが、使っていいものかわからずこっそり接続してたところ、その後自由に利用して良いと知り一安心。

10:00〜

オープニングが終わって、The History of Ruby;20th Anniversary Ed.。RubyKaigi 2006で行われた発表のアップデート。俺が、俺達がRubyの歴史の生き証人だ!という勢いを感じた。

11:00〜

キーノート直前のpixivの紹介。見るだけですがいつも利用してます。
matzさんのキーノート。ポケコンやらI/Oなどのキーワードに反応しつつ、プログラミング言語作ってて楽しそうだなあ、などと話を聞きながら思った。ただまあ逆逆ポーランド記法が受けすぎて他の印象があまり残っていないw

12:00〜

IMG_0107 IMG_0108
heroku弁当美味しかった。参加する前は現地での食事をどうしようかと思っていたので助かった。
卜部昌平のあまりreblogしないtumblr - #rubykaigi バイヤーズガイド '13に影響されてGoogleのテスト本を購入。あとでじっくり読む。

テストから見えてくる グーグルのソフトウェア開発

テストから見えてくる グーグルのソフトウェア開発

13:30〜

BホールにてRuby ArchaeologyRuby考古学。メールとかチャットのログはとっておくものだなあ。
Ruby2.0 reference manual for Japanese。以前るりまのドキュメント作成に参加したおかげで今回参加費を浮かせることができたのでとても感謝しつつ、最近はめっきり参加していないのでやや後ろめたい気持ちもあったり。リポジトリGitHubへ移行して、作業手順が更新されたあたりでまた参加したいな。

14:30〜

4階の電源部屋へ移り、趣味のプログラムをいじりつつ発表を眺める。
The Future of JRuby?Javaには縁がないのでJRubyを触ったことはないが、発表を見ると速度面の改善がなかなかすごい感じ。
Ruby 'root'。いつもhsbtさんの日記を読んで色々頑張っていらっしゃるとは思っているが、それを再認識させられた。スターつけました。

15:30〜

マイクロソフト提供のフリードリンクを利用。ありがたい。

16:00〜

再びAホールに移りToward efficient Ruby 2.1へ。Ruby 2.1は今年の年末にリリースする予定。RGenGCはまだまだ理解が足りないが興味があるのであとでスライドを読む。
この辺りから睡眠不足による眠気がひどく、おそらく船を漕ぎまくっていたのではないかと思う。申し訳ないです。

17:00〜

4階の先ほどとは別の電源部屋へ移動。We Are Familyが長引いているようだった。
You have to test multiple versions of your gem's dependencies. You used Appraisal. It's super affective!RubyJSを聞くが、もうウトウトしまくり。
部屋を出た時にはすでに18:00からのコミュニティの発表が始まっていたが、もう眠気でしんどかったので今日はここまでということで宿へ戻った。
IMG_0109 IMG_0111

ひとこと

この歳になって未だ人見知りの激しい自分にはこの手のイベントのぼっち参加は正直辛い面もあるが、Rubyについて話し合う場が好きということと、このイベント自体の雰囲気も好きなのでつい参加したくなってしまう。それはそれとして、ひとまず一日目を終えてホッとしている。なんとか最終日まで頑張って参加していきたい。