2006年 09月 25日

Ruby で CGI 書くとき

require "cgi" して簡単なのを書くときの指針がやっとできたのでメモ。

require "cgi"

class HogeCgiApplication
    def initialize(cgi, opt={})
        @cgi = cgi
    end
    
    def run
        # リクエストの応じて他のメソッドに飛ばす
        _, mode, rest = @cgi.path_info.to_s.split("/", 3)
        if mode && respond_to?(mode)
            send(mode, *rest)
        end
    end

    def view
        show(:param => "hoge")
    end

    def show(stash={})
        b = binding
        stash.each do |k, v|
            eval("#{k} = stash[:#{k}]", b)
        end

        template = File.read(@opt[:Template])
        self.class.class_eval { include ERB::Util }
        @cgi.out("type" => "text/html") { ERB.new(template).result(binding) }
        exit
    end
end

cgi = CGI.new
hoge = HogeCgiApplication(cgi)
hoge.run

セッション使ったりするので必ず cgi.out を使う。場合によっては cgi.out をオーバーライドしてうんぬんできる。

でもまぁフレームワーク使うならそれでいいんだろうなぁ。

自宅のは .rb なのは fcgi で動くようなラッパ書いて動かしてるけど……

http://lab.lowreal.net/trac/browser/c/cgi-wrapper 前に lowreal.net に書いたけど、エラーとかキャッチしてスタックトレース出すようにしたり。元のファイルを書き換えずにエラーハンドル追加できるので結構自分で使う分には便利に使ってたりする。CGI バージョンは今はたぶんちゃんと動いてないな。

daap

256kbps の mp3 を再生中だと 70KB/s ぐらいネットワーク受信がある。外からだと結構きつそう。

fcgi

のラッパ使って ruby cgi を動かしてると、require でロードされたスクリプトがずっと残るのでときどきハマる。一度 load に書き換えてあげたりして

小さいアプリケーションでもフレームワーク使った方がいいっていうのはすごく思う。だけど、例えば XREA で使おうとか思ったとき、Rails や Catalyst ぐらい巨大だと CGI 動作じゃ死にたくなる。
なんか K*NT 指向なんだけどさ!!

chokan のソース

今動いてるやつも少し前にインポートしたよ!
http://lab.lowreal.net/trac/browser/chokan/old/0.2

新しいの作ろうとしてるけど全然やってないよ!

深く

深く考えずにとりあえずコーディングしてみる、というのを実践してみた。「やった感」と「動いた感」はあるので楽しい。いっぽう、「無駄なことをいっぱいしているんじゃないか?」「設計がダサくないか?」と不安になる。
思うに、ひたすら経験な気がした。他のソースを読みまくって、「あーこういうケースで、あのすぱーはかーはああしていたなぁ」とか思い出すと、コード書いてるときにあんまり悩まないようになる、気がする。そうなりたい。が、どこまでモチベーション続くかは一生謎

新しいほう

http://lab.lowreal.net/trac/browser/chokan/trunk
ファイルの配置変えとかと、config の統一をやった。とりあえず動く、けど、既存プラグインを移植してない。
@s << notice() より、@chokan.notice() とかのほうがよさそう。そうすれば余計なインスタンス変数 (プラグインごとに設定してる) をなくせるかなぁ。

2006年 09月 24日

外出先 (というか学校 ) から DAAP が実用になるかやってみる。

2006年 09月 23日

gvim のメニュー文字化け

起動時にエラーがでたり文字化けしたり。
export LANG=ja_JP.UTF-8
して open -a Vim.app すれば化けないのだけど、Dock から起動するときにアレなので
~/.MacOS/environment.plist 編集した。リログインすると設定が反映されるみたい。
SSHKeyChain の環境変数のところでも変更できる。

replaygain

iTunes が独自の変なタグつけるのがいやなので、他のを探してるんだけど全然見つからないわな。fb2k 使いたい!!
検索すると Darwine で動かしてる人がいる。それはやだなw

http://cogosx.sourceforge.net/
replaygain は読まないっぽいけどシンプルなのでこれを使ってみる。

scrobbler のことを忘れてた。だめだな

songbird

動くレベルになったのかな。前 windows でやったときは日本語がダメだったけど

Nightly on Intel Mac を入れてみた。Id3 読めてない。日本語のファイル名は大丈夫ぽい

DAAP

mt-daap を ubuntu に入れた。hamachi 経由だけど、普通に itunes 起動したら見つけてくれるんだなぁ。
deb パッケージを dpkg -i で入れて /etc/mt-daap.conf を設定しただけ。拍子抜けな簡単さだ……

gerry

お腹痛い。。

hamachi

UniversalBinary って書いてあるけど嘘だよなぁ。PowerPC エミュレーションで動いてる。
と思ってフォーラム見てみたらまさにソレなスレッドがあった。

zsh and goo

_ej () {
	compadd $(ruby -ropen-uri -e "print open('http://dictionary.goo.ne.jp/xml/lookupfw.php?MT=$words[2]').read.scan(%r(<cand>(.+?)</cand>)).flatten.join(' ')")
}
compdef _ej ej

ruby 丸投げ。でも goo の辞書が上位数件しか返してこなくてつまんない。というかコマンドラインで使える辞書を調べてない。edict と何かを組み合わせるのかな。

daap

id3v2.4 でつけてると曲頭の一分ぐらいが飛ぶ模様。付け直して rsync 中

あ、違う。なにか他の要因がありそう。STE で付け直すととりあえず直るけど