くまりゅう日記

もっと過去の日記
[.NET | BeOS | Blender | COLLADA | fossil | mono | monotone | NPR | OpenGL | PeerCastStation | Riko | Ruby | Silverlight | TRPG | XNA | ゲーム | ゲーム作り | ]

2011-11-30

日記

日記書くことないなぁ。

平日は帰ってきて寝て起きて仕事行く以外ほんと何もやってないし。 土日は寝て起きて本読んで寝て起きて本読んでおわり。

[Ruby] endlessでRuby

とてもどうでもいいが、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ができねえわー。

あとelsecaseも使えなくて悲しい。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は必要

PeerCastStation日記

半月以上放置してしまったが、やっとちょっといじることができた。

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で動かした時がとても不安か。うーん。


ページのトップへ | トップ «前の日記(2011-11-21) 最新 次の日記(2011-12-06)» | 編集 | kumaryu.net by kumaryu