kumaryu日記
2009-08-15 まだまだ困った
_ 休みなんて無いよ
ないない。休みなんて無いよ。土日すら出勤だよ。
夏休みとか数年に一回しか休めないんだよな。
最近は帰ってくるのも遅かったりするんで何も進まんなぁ。しかしここを乗り切れば楽になるはずだ。
あ、そうそう、関係ないけどSIGGRAPH ASIA 2009の登録受付が始まってましたよ。
年末はアジアの都市に旅行でもいかがでしょうか。アジアの都市っていっても横浜なんですけどね。
え、俺?さあどうでしょうねぇ…。早期割引とSIGGRAPH会員割引併せて67000円だと思ったら税別だったでござるの巻。
_ IronRubyとSilverlightと困った
IronRubyとSilverlight弄りの方は忙しくなる前に大体終わってたり。
サーバもできたので機能としては揃ってきたんだけど、サーバ側の設定用アプリも作りたい。
サーバを起動するポートとかも設定したいし、wxRubyあたりで作ろうかと悩んだんだが、せっかくなのでこれもSilverlightで作ろう。
起動するポート番号の設定はできないけど、まあ次回起動したときはその番号になるとかでもいいんじゃないだろうか。
そんな感じで設定アプリを作ってたんですが。
チェックボックスつきリストを作る必要があったんですよ。これはListBoxとDataTemplateですぐ作れる。SilverlightっつーかWPFっつーかはすごいなぁ。良くできすぎだよ。
で、出来たのはいいんだけど、チェック状態の変更イベントを受け取ってサーバに投げてやる方法が分からん。
イベント…はできるのかな。アイテムの数が動的に増減するんだが。うーん出来なさげ。出来たとしてもそう簡単では無いなこれは。
素直に行くと、バインドされてるオブジェクトのプロパティが変更されたら通知するのがよさげ。
しかしバインドされているオブジェクトのプロパティのsetメソッドは動的に生成してる。ILGeneratorで。
つまり、プロパティが変更されたらなんとかして通知っていうのを、.NETのアセンブラで書かないといけない。しんどい。激しくしんどい。
本当は動的に生成したクラスのプロパティは自分のフィールドに値を取得/設定するんじゃなくて、元になったオブジェクトに委譲するようにするといいんだけどね。
でもILでIronRubyのオブジェクトのメソッドを呼び出すことを考えたらきっとイベント通知どころの話じゃない。C#でもかなり苦労するだろうというのに。
でまあいろいろ考えはしたんだけど、結局ILでぐちゃぐちゃ弄り倒すか、諦めるかしか選択肢が無いと観念したので。
諦めた。
設定変更したら適用ボタンを押してもらうようにした。完全敗北宣言。
ここしばらくIronRubyとSilverlight3を簡単に、それはもう上っ面をちょこっとなめただけぐらいには弄ったんだけど、結論としては全く使えない。
HelloWorldが動いたうごいたー、って言って喜ぶくらいには使えるんだけど、それは使えるうちには入らないよな。
なんといってもC#とのギャップ。C#(つかCLR)はクラス指向、型指向の言語で、Rubyはオブジェクト指向の言語というのをまざまざと見せつけられる結果。
Bindingもオブジェクトのプロパティを見るなんて出来なくて、オブジェクトの型情報のプロパティを見る事しか出来ない。
JSONクラスは暗黙の型変換なんていう「変数」の型に完全依存な実装。
まあそれ以外はすんなり行けるというのはだいぶ頑張っていると思うんだけど、実用的なレベルではないよ。
じゃあIronRubyは駄目な子なのかという話になるけど、現状は全然ダメ。でも.NETの方が歩み寄ってくれれば可能性あり。
.NET Framework 4.0ではDLRが標準で入る。ただ標準のクラスライブラリとして入ってるだけかと思ったらもうちょい拡張されてるみたい。
特定のインターフェースを実装しているオブジェクトには、プロパティの問い合わせとかをオブジェクトに対して行えるようになってるみたい。型情報じゃなくてオブジェクト自体にね。
WPFのバインディングもその仕組みを使ってくれるなら、IronRubyで作ったオブジェクトもちゃんとバインディング出来るようになるんだけど。
まだ.NET 4.0のβはいじってないのでそういうことが出来るようになってるかどうかは分からないけど、きっとできると信じてるよ!
それが出来てSilverlightもそのうち.NET4ベースになってくれれば、今度こそちゃんとIronRubyが使えるようになるんだけどなぁ。まあそれでも苦労するところはでそうだけど。JSONとか。
とりあえずあとでがっかりしないように今のうちに.NET4のβを触っておこうかなぁ。でもめんどいなぁ。
_ [Riko] コミットした
いまさらながらRubyKaigi発表時点のRikoとPuzzCastのソースをコミットした。あとついでにruby_daeも。タグは打ってないけど。一気にコミットするのは悪い癖だ。
どちらも基本的にはそんなに変わってないんだけどね。
コミットするときにどうしようか悩んだけど、どちらもRuby1.9.1ではプロファイル取れないバージョンになってます。break有り。
来月の連休に簡単なオンラインイベントを開くことにしたんで、そこまでに1本ゲーム作りたいんだよねぇ。
まだ一ヶ月あるとはいえ、がっつり作業できるのはやはり休みだけだし、9月の頭にはJGCあるし、イベントの開催準備もしないといけない*1ので時間はもう全く無いと言えよう。
だが土日で一本ゲーム作る人とかもいるんだよね。それを考えると一ヶ月あれば4本はゲーム作れるじゃないですか!
4本は無理でも2本くらいならさくさく作れるかもなぁ。
*1 これは簡単だけど