日記書くことないなぁ。
平日は帰ってきて寝て起きて仕事行く以外ほんと何もやってないし。 土日は寝て起きて本読んで寝て起きて本読んでおわり。
とてもどうでもいいが、Rubyってend
無しでも書けんじゃねと思ってちょっと試してみたら例外処理以外はけっこうなんとかなりそうだったが色々とめんどいところが出てきて不便だった。
まあなんでそんな話を思い付いたのかってif
修飾子は()
で括った複文にも適用できる、というか()
の中に当然のように複文が書けるのに気付いたからだった。
(
foo
bar
) if baz
みたいな。書いてみると今まで出来ないと思ってたのが不思議なくらい普通だな。
これだったら||=
の右辺にも複文を素直に書けんじゃねーか。今まで気付かずにbegin~end
でやってたからちょっとすごい見た目になってたんだよねぇ。
def hoge
@hoge ||= begin
foo
bar
end
end
こんなんだったのが、
def hoge
@hoge ||= (
foo
bar
)
end
こんな感じに。あらちょっとわかりやすい。||= begin
という一瞬何事かと思うコードも好きですけどね。
そんな感じで()
と修飾子のif
やらなんやらを組み合わせて、さらにブロックは{}
を使うよう徹底したらend
無しでもいけんでねという気がした。が、例外処理が無理っぽい気がする。rescue
修飾子だと意味違っちゃうし、def~end
も使わずdefine_method
で代用するので普通のrescue
ができねえわー。
あとelse
もcase
も使えなくて悲しい。if~else
は?:
使えばいけるけど、elsif
が無理なんで多段は厳しい。
あ、うそうそ。if
修飾子は条件が不成立だったらnil
返すのか。||
でつないでやればelse
相当になるじゃん。うわでも条件成立して実行した結果がnil
とかfalse
だったら駄目か。いまいちだな。
まあ出来たから何ってわけでもないんですけどね。
FizzBuzz = Module.new {
define_singleton_method(:fizzbuzz) {|num|
('fizzbuzz' if num%15==0) ||
('fizz' if num%3==0) ||
('buzz' if num%5==0) ||
(num)
}
}
(1..30).each {|i|
puts FizzBuzz.fizzbuzz(i)
}
FizzBuzz書いてみたらこんなんなった。なんかちょっとJavaScriptっぽくなっちゃった。きもい。
結論: end
は必要
半月以上放置してしまったが、やっとちょっといじることができた。
HTTPインターフェースのためにASP.NETをホスティングしようとして上手くいってなかった続き。Not Found的なメッセージが出力されるので渡すパスが間違ってんだろうと調べてたら、SimpleWorkerRequestに渡すパスはアプリがマウントされてる仮想パスからの相対パスが正しいようだ。絶対パス渡してたわ。頭の/を抜いてあげたらちょっと動くようになったっぽい。返ってくる値が空文字列ですが。
サンプルを見たらSimpleWorkerRequestに渡してるStreamWriterをちゃんと閉じてるな。MemoryStreamをラップしたやつだから大丈夫だと思ってたがStreamWriter自身でもバッファリングされてんのか。StreamWriterを閉じてからMemoryStreamの中身を取得したらちゃんとページの内容がとれた。やったー。
しかしここからがちょっと大変。ASP.NETのアプリはたとえばpublic_html/binの中にdllとして置かれるんだが、ホスティング元の親アプリのアセンブリとか自動的参照してくれるわけではないので、明示的に参照するとpublic_html/binの中に親アプリのアセンブリもコピられちゃう。コピんなよと消すと当然ながらアセンブリが読み込めねーと文句行ってくるわけだ。AppDomainが別でアセンブリ読み込み基準パスはpublic_html/binの中になるのか。こまったね。
解決方法としては親アプリのアセンブリをGACに入れておけばいいんだけど、いちいちインストールしないといけなくてめんどいよねそれは。なんとかできないかなぁ。 ApplicationHost使わなければいいのかもしれないけど、それはそれでひどく大変そうなんだよなぁ。
あれ、Cassiniのソース見てたらなんか裏技っぽい方法で起動してるな。つかべつにApplicationHost使わなくても簡単そう。これちょっと参考にやってみるか。
他にはSimpleWorkerRequestはHTTPヘッダを一切返してくれないしリクエストヘッダも送れないのでそれもなんとかしないといけない。というかSimpleWorkerRequestはいじるの前提のクラスっぽい。これはそこまで大変じゃなさそうなので手をつけさえすればすぐできると思うけど。
そんなわけだがASP.NETのホスティングはなかなか大変そう……。俺がASP.NETのアプリを作る方法すら知らんというのも問題だわな。もうめんどくさいから自前でIronRubyをホストしてRackのアダプタ用意した方が早いんじゃね。Rubyならまだ慣れてるし。 でもIronRubyはmonoで動かした時がとても不安か。うーん。