最近8時出勤を諦めて9時出勤にしてみたらだいぶ楽になった。
朝に1時間余裕が出来たおかげで平日すこしながらも作業する余裕ができた。7時に家を出ようとすると5時に起きても作業時間は1時間も取れなくてあまり作業する気にならなかった。ちょっと悩んだらすぐ時間切れになっちゃうもんね。8時に出るなら1時間半、ちょっと寝過ごしても1時間くらいは作業できるようになったわ。まあしょっちゅう大幅に寝過すんですけどね。
しかし平日に作業できるとだいぶ気が楽になる。やっぱ仕事ばっかりやってちゃだめだねー。やってることはどっちにしろプログラム書いてるだけなんだけどさ。
少しづつ進める。
ASP.NETのホスティング自体はCassiniのソースを参考に書けたんだが、これはこれでいいんだろうか。なんかSystem.Web.Compilation.BuildManagerHostとかいうドキュメントに載ってない隠しクラス使ってんだが……。 いやmonoでサポートされてなかったらダメじゃね?調べたらサポートされてたわ。あー、しかし追加されたのが今年の4月。最近すぎる。mono 2.6.xをターゲットにしてるんでちょっと無理っぽいなー。
どうしようかと悩んでたらASP.NETはオーバースペックじゃね?と言われたんでやっぱりそうだと思い直してASP.NETは諦め、テンプレートエンジンを探す。いろいろ探したけどDotLiquidってのが手軽そうだったのでこれを使うことに。
普通のHTTPでファイルをホストする部分まで書いたがテンプレートエンジンはまだ関係ない。あとはhtmlとかにテンプレート適用して返すだけだわ。どういうAPIにするか考えないといけないけど。
そうそう、mono 2.6.xをターゲットにしてるのはUbuntuで使えるようにと思ってのことだったんだけど、そういやmonoのプレインストールやめるかもという話もあったのでどうなったのかあらためて調べてみた。すると11.10でmonoの2.10.5が入ってるとのこと。おっと、3.0まで更新されないのかと思ってたんだが2.10系が入ってしまったか。これなら.NET4も使えるんだが、.NET3.5にこだわる必要もないかなぁ?
まあみんながみんな最新のUbuntu使ってるわけでもないし(11.10はLTSでもないし)、monoの2.6.xを目標にするのは悪くもないか。あと.NET3.5はWindows7では標準なのは楽かも。.NET3.0では無理かと聞かれたことはあるんだがLINQが使えないのはさすがに無理だった。何もインストールさせてもらえないVistaマシンで使おうとしたんだろうか……。
monoはIronRubyを動かせない。
もちろん試しにmono ir.exe
とちょろっと打ってみると何の問題もなく起動はするんだけど、そのままrequire 'rubygems'
とでも打ってみると’>= 0’がだめなバージョン指定だとかなんとかとよくわからないことをのたまう。RubyGemsの中で文句を言うのでこのクソgem野郎がとか思ってその場所を見にいってみるが特に変なことはないようだ。つか.NETではちゃんと動いてるしそりゃそうか。
ちゃんと見てみるにバージョン指定を解析する正規表現にひっかからないのが問題だったようだ。
/\A\s*(=|<|>|!=|<=|>=|~=)?\s*([0-9]+(\.[0-9a-zA-Z]+)*)\s*z/
こんな感じの正規表現だった。ぱっと見はよくわからんが、まあ’>= 0’にはマッチしそうというのはわかる。これがなんでmonoだと動かないの?
短くしていってみるとマッチがおかしい。/\A\s*(=|<|>|!=|<=|>=|~=)?\s*/ =~ '>= 0'
のマッチした部分を見ると’>’ですって。ちょっと諦めるの早すぎじゃないですかね?もうちょっと長くマッチできるでしょう。
IronRubyのRuby→CLR正規表現の変換が何かやってるのかとも思ったが、CLRのRegexを直接使っても同じだった。monoの正規表現実装の問題かよー。
以前も調べたがmonoの正規表現は文字クラスの減算を実装してないせいもあって、IronRubyで使われる正規表現を動かせるレベルにないようだ。こまったなー。 試したのはOSXでmonoの2.10.6を使ってだけど、最新のソースを見ても最近正規表現周りに手が入った様子はないので変わらんだろう。
解決方法は二つ思い付く。
結論: めんどい。
どっちが楽かというと難しいが、2の方が楽かな。monoはiPhoneやAndroidで手一杯のようだから誰もハードに使ってない(と思われる)正規表現を直してくれと言っても直らないだろう。自分で直す手もあるが正規表現のエンジンとか書くの大変そう。
鬼車移植はJRubyでは既にJavaに移植したやつを使ってるらしいのでこれは説得力があるし、それをC#に再移植という手もある。問題は.NETの正規表現ってコンパイルして最適化とかしてくれるんだが自前で移植した鬼車ではそこまでできないだろうというところ。それはどのエンジン使うか選択できればそれでいいんじゃないかという気がする。
一番の問題はどっちにしても大変だし問題あるよと言っても勝手に直ったりしないだろうということだ。しかし俺も忙しくて手を出してる暇がないしなぁ。誰かやってくれー。