開発合宿@伊東+mikutter超会議

せっかくゴールデンウイークだしどっか行こうという同僚の呼びかけにより、静岡県の伊東で2泊3日の開発合宿をした。宿は開発合宿プランがあることで有名な山喜旅館。

自分はmikutterのDM表示をTLと同じ、MiraclePainterを使った描画に切り替えるという作業をしていた(未来からこの記事を読んでいる人のために書いておくと、mikutterのDM表示は単にListViewのカラムに本文をぶち込んでるだけで、時刻やリンクが表示されない時代があった)。そもそもこの機能自体は2年くらい前からほしいほしいと言っていたがめんどくさそうなので放置していたのだけど、つついさん(@tsutsuii)と思しき人からAmazonギフトが定期的に届くという現実があり、さすがに申し訳ないので、いい機会だし時間を溶かそうと思って着手する事にした。

mikutterのGUIコードは少なくとも2回の大改修を経ている上、Pluggaloidとmethod_missingを活用した超疎結合アーキテクチャになっていて、隅々まで理解しようと思うと、あっと言う間に時間が溶けていく。平たく言えば、オブジェクトどうしの関連がめちゃくちゃ追いづらい。まあRubyコード一般にも言えるといえばそうだけど……。しかも普通のRubyコードにはない性質として、ちょっと間違えたことを書くとすぐにSEGVして落ちるので精神力がどんどん削られていく。

技術的な話は夏に出る薄い本に書くとして、初日15時~と2日目9時~でほぼ全ての時間を解析と実装テストとアニソン三昧に費やした結果、とりあえず汎用的な形でDMはMiraclePainterにより描画されるようになったので、成果としてはまずまずだと思う。アニソン三昧には逆光のフリューゲルとDIVER#2100をリクエストしたけど、どちらも採用されなかった。まあExterminateは聞けたのでよしとする。

宿の人におすすめしてもらった、魚楽亭という店で食べた金目鯛の煮付けがすごくおいしかった。写真撮るの忘れたけど、カサゴのから揚げも一緒に注文しており、これもパリパリでおいしかった。


開発合宿中、MiraclePainterどうなってるんだ全然わからんとかTwitterで言っていたところ、@toshi_aさんに捕捉され、合宿が終わってから京都に行ってmikutter超会議を開くことになった。mikutterはGtk::ListViewのセルレンダラをRuby側でオーバーライドすることで高速な描画を実現していて、そこがCのインターフェースをそのままRubyに持ってきたような設計になっており、ただでさえ魔界なのだが、そもそもRubyGTKはこのような用途を想定していないっぽく(mikutter以外でRubyGTKそんなことやってるRubyアプリケーションないのでは?)、ちょっと間違えると普通にSEGVして落ちるのは仕方ないらしい。超会議では主にMiraclePainterで色々なものを表示させる話をしつつ、つついさんと室長(@brsywe)にMiraclePainter版DMのデモを見せたり、京都銀行攻撃(https://twitter.com/shijin_cmpb/status/30613662058151936をRTしたりURL引用したりするとクライアントによってはTLが埋まる)で遊んだりしていた。

夜はとしぁ家に泊めてもらった。MiraclePainter版DMの改良をする予定だったけど、mikutterって設計甘いところ多いよねーみたいな話から、実はcall/cc使ってるところがあるという話になり、やってることを見たらいかにも競プロっぽい感じの問題で、簡単に脱call/ccできそうだったので、30分くらいがんばったら実装できた。ところでRubyでcall/cc使わないほうがいいみたいな話ってどっかで読んだ記憶があるんだけどなんだっけ。知ってる人教えてください。

そんな感じで、本当に久しぶりにmikutterのコードをいじったGWでした。楽しかった。