あああああああ、休日おわてしまた。いや、今週は何かしらやったのでそこまで終わってしまった感はないか。
LOOX U用の予備バッテリーが欲しいなーと思ってたが、専用バッテリーより汎用バッテリーの方がいろいろ使いまわせてよさそうだったのでXP8000というのを買ってみた。LOOX Uの1/3くらいの大きさで、ネットブックは3時間と書いてあったが、LOOX Uなら上手くいけば5~6時間くらいは動いてくれそう。実際どこまで使えるかはしばらくこいつだけ使って試してみよう。ケーブルの種類もいろいろついてて、Hybrid W-ZERO3からPSPからiPod nanoまで充電できるみたいなのでつかいではいくらでもあるのが嬉しいところ。
あれー、LOOX Uにつないでみたけど充電状態にならんな。あれー?それはまずいぞー。
irpackの0.2.3を出しました。変更点はアセンブリの読み込みに失敗することがあるのを修正です。
もっと具体的に言うとstringioとかのIronRuby.Librariesアセンブリに依存してたやつがちゃんと動かなかったのに対処しました。
.NETでは同じアセンブリをいくつも読み込むことができちゃうんだけど、読み込む度にちゃんと別物として扱ってくれるので、名前同じなんで同じだろーとか適当に読み込みまくるとひどいことになる。
それに対処するために、読み込もうとしてる完全名のアセンブリが既に読み込まれてたらそいつを返すことにしてたんだけど、stringioとかはIronRuby.Librariesを部分名('IronRuby.Libraries')で読み込もうとする。しかし部分名のチェックはしてないので、IronRuby.Librariesは既に読み込まれてるにもかかわらず同じ完全名のアセンブリはないなーと読み込めなかったことにすると、IronRubyさんは気を効かせてIronRuby.Libraries.dllはあるかなーと調べてくる。それはあるなーと読み込んで返すとあら2つ目のIronRuby.Librariesを読み込んじゃった。これはなんだか意図した動作をしてくれないのでおしまい。
問題は2つあって、1つは既に読み込まれているかどうかにチェックするところに部分名が渡されるのに完全名しか期待してなかったこと。もう1つはアセンブリのファイルを読み込んでよーという時に既に読み込まれているかどうかをチェックしてないことだ。
今回は前者だけ対処した。読み込もうとしてるアセンブリ名と部分名が一致してるアセンブリがあったらそいつを返してあげるようにした。本当は読み込み元のアセンブリのバージョンとかも見ないといけないのかも…。それはまた問題が出てから考えてもいいか。
後者はアセンブリを読み込んでみてから同じ完全名のアセンブリが既に読み込まれてたら以前読み込んでた方を返すって方がいいのかな…?ただそれだと一回ファイル読み込んでみないといけないのがどうだかなぁと思ったんだけど。よく考えたら読み込もうとしているファイルパスが既に読み込まれているアセンブリのLocationと一致していたら読み込まれていた方を返すでよさそうな気がする。今度対処しておこう。
家で動かしてた分にはとくに問題なく動いてる様子だが、会社でやってみたら作った実行ファイルの起動がやたらと遅くてエントリーのスクリプトに到達するのに10秒以上かかるんだけど。しかも初回起動だからってわけでもなさげ。プロセスの動作状況を見てたら某アンチウィルスソフトが頑張ってる模様。あらまあ、確かに自分のリソースからコードを動的に読み込むなんてかなり怪しい動作だわな。こいつ怪しいアプリだから殺すね!とか言われないだけマシか。IronRuby.dllとかのアセンブリを埋め込まなければ特に遅くはないので、起動時間に問題ありそうなら埋め込まない方向で。家ではMSEを入れてるけどこいつはそこまで賢い動作をしてくれないのか特に遅くはならないようだ。いいのか悪いのかはよくわからん。というか会社のマシンはスペック的には十分速いはずなのに、なぜか動作が全体的に遅いんだよな。