kumaryu日記
2009-07-28 あつすぎる
_ 忘れた
ワンフェスに行くのに、カメラを持ってくるのすら、忘れた。
今回のワンフェスは大きすぎるかと思ったけど、別にそんなこともなくビッグサイトより楽だった。
幕張が遠いのと11時頃に行ったのになぜか入場するのに炎天下の外周を延々20分も歩かされたのさえ目を瞑ればメッセいいね。
広いからつまらず歩けるし、エロフィギュアコーナーが分かれてるからその辺をお子さまが歩いてても安心。
今回は特に買うつもりが無かったんだけど、来たからには何か買わないと、ということで小さいイカ娘があったので買おうかどうかとうろうろしてたら目の前で売り切れた。ひさびさに買わずに後悔するより買って後悔という教訓を体感しました。
他にどうしても欲しいという物は無かった*1ので、さらっと見て何も買わずに退散。
あと最近フィギュアが沢山届いてしまったのでこれ以上増やすわけにもいかないというのが。冬目景のスキットスクーターが最高です。もう一個保存用に買うかと思うくらいに最高です。
しかしモチベーションアップにはなったので良かった。モデル作りたい。キャス子モデルをもっとかわいくしたい。
とりあえずテクスチャ描き用にイラレCS4のバージョンアップ版を買って帰りました。うん、知ってる。ソフトの問題じゃないんだってのは知ってるよ。
*1 あっても完売してるしね
_ [Ruby] IronRuby続き
DataGridは結局CLRのプロパティを作らないとどうにもならんということが分かった。
ちぇー、どうしても型情報を作る必要があるって事か。
探してたらC#でそういうことをやってるサンプルがあったのでそれを移植。
やることは、アセンブリを作って、モジュールを作って、型を作って、メソッドとプロパティとフィールドを作って、インスタンス化。うーんめんどい!
実際は言う程面倒では無いんだが。ほんとがちがちの静的型。
C#では結構面倒そうなところもRubyで書くと楽チンですね。まあ動的型付けな言語で動的な型いじるのが楽なのは当然なんだけど。
なんとか移植してみたものの当然すんなりは動かないので地獄のデバッグのお時間。MacとSilverlightではちゃんとエラーが出てくれない*1ので泣きそうなんだが、なんかWindowsでもでなかったわ。なんでだろ。
さすがに途中でつまったんだが、Silverlightのコントロールをいじってる部分は無理としても、型作ってるところまではmonoでいけんじゃね?と気づいてmonoで実行したらちゃんと行番号つきでエラー出るよ!幸せ!
つかSilverlightでデバッグできないのは困るんだけどなんでだろう?IronRuby 0.6.0じゃなくてDLRを落としてきた方が良かったかな。
とにかくそんな感じでHashの配列からDataGridに設定できるデータが作れました。なぜか編集が出来ないけど。
コードとしては
- 配列の先頭のHashを拾ってそれのキーと値を全部拾っておく
- 新しい一時モジュールを作ってそこに一時クラスを追加
- 拾ったキーと値の型からプロパティを作って追加
- 配列の要素数分、一時クラスをインスタンス化
- 作ったインスタンスのプロパティに各Hashの値を設定
- インスタンスの配列をItemsSourceプロパティにぶちこんでおっけー
な感じ。
一時的なクラスとそのインスタンスを作ってHashの中身をそっちにコピーする感じですね。
ただこれはちょっとダサいので、出来ればRubyのオブジェクトを渡したら、それの型つきラッパーみたいなの作りたい。
まあMSIL書くのが理解するまで大変だけどなんとかなるだろと思ったら、実はメソッドの型が確定しないので駄目じゃないですか?メソッド呼ぶまで戻り値わからんので。
型を確定させるのに実際に呼んで値を取得してしまうか、手動で指定させるという手はあるけどなぁ。いやどっちにしろどれをプロパティ扱いにするかは指定が必要か。
どちらもめんどくさいので現状のHashから型作る方法で満足しようかな。ここしばらくで作ろうとしてる物はDataGrid上で編集するもの無いし。
参考にしたページと出来たコードは後で書く。
*1 何が起きてもNullReferenceExceptionが飛んでくる。なぜ?
_ [Ruby] IronRubyで例外が見れない
ソースを整理したら動かなくなっちゃった。
まあ動くようにすればいいだけだが、Silverlight上で動かすとなぜかエラーが全部NullReferenceExceptionになってしまいデバッグしづらくてぶち切れることこの上なし。
Macだから悪いんだと思ってたが、Windowsでやっても出たわ。
このまま続けていくのは不可能なのでなんとか解決策を考える。
どうせみんな困ってんだろうと検索してみたけどそれっぽいのは全くヒットせず。あれー、俺だけなのかな。
出てる例外メッセージを良く見ると、Microsoft.Silverlight.ErrorFormatterとかで例外が投げられてるっぽいんだが。
例外は
- IronRuby内で例外発生!rescueもされてない
- ランタイムが受け取ってJavaScriptに渡す
- JavaScriptがメッセージを整形して投げ直す
- ランタイムが受け取って整形して例外表示域に設定
こんな感じで渡っていくっぽい。
ErrorFormatterは4番の処理。
ソースがあるので中を見ると、普通に整形してるだけだ。スタックトレースの取得もやってるがSyntaxErrorの場合はスタックトレースも何もないのでその場合は特に取得してない。
そういえばSyntaxErrorの場合は普通にエラー表示できてたなぁ。
ということは、エラー表示しようとして整形中にバックトレースが取れなくてぬるぽが出てガッ、じゃなくて、そこで終わっちゃってるって事かな。
なんでバックトレースが取れないのよと調べてみたら、CodePlexのIronPython and IronRuby in Silverlightとかいうところに、DLR標準でバックトレース取れなくなったからIronRubyはちゃんと自前で対処するように、という感じのIssueがあがってた。これかなー?
しかしそのプロジェクトはもう古いっぽいし、そのIssueも去年の物だ。つかCodePlexに似たようなプロジェクト大量にあるんだが一体どこ見ればいいんだ!!
IronRubyのソースを見たら、例外にバックトレースを設定してる部分は見つかる。ということはこれはあってるんだろうか。でも現にでないんだよなぁ。
NightlyBuildで実行したらどうだろうかと落としてきたらmonoでChironが動かなかった。ありゃ残念。0.6.0付属のChironは動くんだけどなぁ。
最近の変更を調べようとも思ったんだが、IronRubyのgithubリポジトリにはtfsと同期としか書いてねぇ。なんて使えないコミットメッセージ。てかtfsって何よ。Team Foundation Serverらしい。それ何よ?
そんなわけで解決せずに今ココ。困ったなぁ。