火曜あたりから頭痛と腹痛がきてついでに台風も来たので水曜休み。台風は関東はそれていったので大したことなかったが、頭痛と腹痛はそれなりだったので休んで正解だったようだ。木金は休日シフトでそのまま休み。おなかにちょっと違和感はあるが元気にはなった。
最近LOOX U使ってる時にgVimが落ちる時がある。メモリが割り当てられませんでしたとか言ったり何も言わないまま落ちたりだけど、他の環境でそんなこと起きたことない。メモリも十分空いてるし。てことはハードの問題なんだろうか。嫌だなぁ、まだそんなに使ってないんだけど。スキャンディスクでもかけとくか。…うーん、やってみたけどディスクにエラーは無いようだが。
Lionはまだ入れてない。Snow Leopardの時はついにスタックがフォルダの中を辿れるようになったというかそんなの最初からやっとけよ!という新機能があったのですぐ入れたけど、Lionはどこにも興味が引かれなかったので落ち着いてからにしよう。欲しい機能もないのにアプリがいくらか動かなくなるだけのアップデートに2600円払う程アレじゃない。というか見た目的には大してかわってないし安いとはいえOSのメジャーバージョンアップだぞ?中身は大幅に変わってんだぞ?みんな落ち着けよ。
最近Macbookのトラックパッド押し込みがやりづらくてこんなに重かったかなーと思ってたがバッテリーふくらみの影響だったようだ。バッテリー外したらペコペコと軽く押せるようになった。家に置きっぱなしのマシンなのでずっとACアダプタなのはいいんだけど、家の中で移動させることはそこそこあって、その度にMagSafeな電源ケーブルがぽろぽろ外れてしまうのでバッテリーを入れてないと危険。MagDangerだよこれでは。
新しいMacbook Airとか出てるしいっそ買い替えるかー!という話もあるが、今のMacbook Late 2008でスペックに全く不満はないんだよね。あるとすれば画面解像度が低いところだがそれをちょっと稼ぐために10万以上出して新しいマシン買う程ではない。あとMacbook AirってIntel GPUだろ?だったら俺は9400Mを選ぶぜ!
そんなわけでバッテリーだけ新しくしよう。調べたら互換バッテリーなんかもあって1万切ってたりもするみたいだがなんか怪しいわ。純正を見たら1万4800円だったのでこれでいいな。2万以上するかとびくびくしてたがそんなことないのね。3年使ってこれなら許容範囲だろう。
以前見つけたmonoでIronRuby動かすと正規表現がおかしいよーというのを調べてみた。
IronRubyではmonoというか.NETのRegexクラスを使って正規表現を実装してるんだけど、Rubyの正規表現とは文法が違っちゃうので内部で一旦.NETの正規表現文法に変換している。そこで変換後の正規表現がなんかおかしい気がするなーというところまでは気付いてたんで、ステップ実行して中身を見ていった。
変な文字列が出来てたのは文字クラスの反転部分だった。
[^\[\]\s]
これがまずそう。見ていくと
[\0-\uffff-[\[\]\s]]
こんな風に変換をされてて、なんでこんなことするのよというかまずいんじゃね…と思ったが.NETのドキュメントにも書いてある普通の反転方法のようだ。0x0000~0xffff(とにかく全部)にマッチするクラスから[\[\]\s]を引いた分。反転ですね。範囲指定と減算の-がまぎらわしい。
ドキュメントにも書いてある例が上手く動かないならmonoが悪いんじゃ、とmonoでいろいろ試してみるがやっぱりmonoが悪そうだ。Bugtrackを見ると文字クラスの減算は以前からいくらかバグが上がってるけど直ってないようだ。困ったねー。
しかしそもそも反転するだけならこんなことする必要ないじゃん?
[^\[\]\s]
これって.NETでそのまま通るじゃないですか!なんでわざわざ変換してんだ?と見ていくと[]内での&&に対応するためのようだ。そんな文法ありましたっけとるりまを確認するが載ってないな。IronRubyの拡張だろうか…ってそんな拡張する理由がわからん。あー鬼車のドキュメント見ればいいのか。あった、見た目通りだが文字集合の積演算だと。これにちゃんと対応したんだな。それと否定をいっしょに扱うために^も変換してるというわけか。まあ実際には[]のネストに対応するためとも言えそうだが。
ということは文字クラスの減算をmonoがちゃんと実装できてないから^は普通に実装してくれーと言っても&&とか[]内の[^]が実装できないじゃん!となるわけか。&&とか多段[]はあんまり使ってるの見ないけど単発の[^]は普通に使うからなんとかしてくれって説得するのはめんどくさそうだなー。そもそもmonoを直すのが筋ってもんだろう。
仕方ないのでmonoの正規表現辺りがなんとかできないか見たけどJVM用?という謎のソースが沢山あって意味わかんなかったので諦めた。さすがに正規表現エンジンまで手を出すのはそう簡単ではないか。
そんなわけで全く解決はしてないんだけど、さてどうしたものかね…。