2007-02-08(木) [長年日記]
■ svnnotify
こないだからまじめにRubyForgeを使うようになって、結果的に開発のためにsvnを使うようになったんだけど(個人的なドキュメント管理にはだいぶ前から使っていた。原稿とか)、まずはcommit logをメールで受け取りたいと。
でも、svnのサンプルに付いてるようなショボいのはいやん、と思ったので調べていたら、RubyForgeのFAQにHow do I get diff emails when I commit code?というのがあった。おお、これこれ。
でもこのまま使ってみるとHTMLメールになっちゃって、W-ZERO3で読めなかったりするものだから、もうちょっとシンプルにしようと思ってsvnnotifyを探すも見つからない。ウロウロしてたらCPANにあった。CPANか〜。
で、久々にCPANをセットアップ中。続きはあとで書く。まぁ、ドキュメントだけあればいいんだが。
続き。
「diffを色付けされたHTMLで受け取りつつ、テキストしか読めないメーラーでも読めるようにしたい」というニーズであれば、post-commitを以下のようにするのが吉なようだ:
#!/bin/sh REPOS="$1" REV="$2" PATH=/usr/bin:/bin:/usr/local/bin PROJECT=/var/svn/hatenagraphup svnnotify --repos-path "$REPOS" --revision "$REV" \ --svnlook /usr/local/bin/svnlook \ --to sho@spc.gr.jp --from `whoami`@rubyforge.org \ --with-diff --subject-cx \ --handler Alternative --alternative HTML::ColorDiff
もちろん、SVN::Notifyだけでなく、SVN::Notify::HTML::ColorDiffやSVN::Notify::Alternativeが必要。
でも、よく考えてみたらHTMLメールなんて別に欲しくないし、そういう整形やら色付けされたリソースは、メールよりもむしろfeedして受け取ったほうが嬉しいよなぁと思い、現状はシンプルにこんな感じとなった:
#!/bin/sh REPOS="$1" REV="$2" PATH=/usr/bin:/bin:/usr/local/bin PROJECT=/var/svn/hatenagraphup svnnotify --repos-path "$REPOS" --revision "$REV" \ --svnlook /usr/local/bin/svnlook \ --to sho@spc.gr.jp --from `whoami`@rubyforge.org \ --with-diff --subject-prefix '[hatenagraphup] ' --subject-cx
これで受け取ったメールからfeedを生成するようなツールを書けばいいじゃんね。つーかそれPla
2007-02-07(水) [長年日記]
■ tDiary: 環境変数とproxyでハマる
最近はWebサービスを使うプラグインが増えてきて、必然的にtDiaryの動いているWebサーバからHTTPリクエストを出すことになるんだが、企業内で運用されてたりするとproxyを経由しなくてはいけない。この手のプラグインのさきがけであるamazon.rbが@options['amazon.proxy']というオプションを持っていたため、これを使いまわすプラグインがあり、「あんまりだ」という話になった。
そこで解決策として、新たに@options['proxy']というオプションを設け、これを共有することにした。HTTP以外のproxyなんて考慮しない大胆な設計。これを「HTTP脳」と名付けよう(余談)。
そうなるとさらに楽をしたくなるもので、GETリクエストしか使わない簡便なWebサービスの場合、open-uriを使ってproxy対応も「お任せ」にしたい。open-uriは環境変数を見てくれるので、@options['proxy']の値を環境変数に設定したらいいのではないか、ということで実装してみた。
まずはENV['HTTP_PROXY']に代入してみたところ、この値を見てくれない。調べてみたらruby-dev:22013という大昔の投稿を発見する。なるほど、たしかに危険だ。
じゃあ、ということでENV['CGI_HTTP_PROXY']を設定したら、proxyへのコネクションを開くところでこんどはInsecure operationなる例外が。これも調べてみると、ENVへのプログラム内部からの代入はすべて「汚染済み」扱いされてしまって、おまけにfronzen状態なのでuntaintもできない、と。そりゃそうか。今日は新発見が多いなぁ。何年Rubyやってんだ、おれ。
というわけで、@options['proxy']は採用するけど、それ以上の楽はできない、ということになりました。とほほ。巻き戻さないと(←ENV['HTTP_PROXY']代入版をcommit済みだったりする)。
2007-02-06(火) [長年日記]
■ はてなグラフでダイエットに挑戦(3)
先月、はてなグラフのAPIにデータ取得機能を要望したものの、まったく採択される兆しがない。もっとポイントをつぎ込まないとダメ?
しょうがない。ダイエットは待ったなしなので(というほどでもないが)、体重管理だけでもやろう。
ということで、「体重計に乗ったその場でメールを送るとグラフに反映させるツール」……を書くんじゃなくて、コマンドラインからグラフを更新させる汎用的なコマンドを作成した。せっかくなのでRubyForgeで公開(→hatena-graph-update)。
これをインストールして、procmailあたりでこんな感じの設定を書けばいい(.netrcを使ってID/PASSを書かずに済ませている):
:0 * ^TO_.*weight@example.com | sed '1,/^$/d' | hatena-graph-update weight
あとはメール本文に体重を記入して、weight@example.comにメールするだけ。でも体重グラフは非公開だよ!(笑)
その代わり、この日記に来るツッコミspam/リンク元spamの数を、ログから算出してグラフ化して公開中。サイドバーの下のほうに張ってある。これはdailyにcronでこんな感じに実行:
#!/bin/sh yesterday=`date -d yesterday +%Y-%m-%d` cd ~/var/log mv spam.log spam.log.$yesterday wc -l < spam.log.$yesterday |\ hatena-graph-update -u hoge -p hoge -d $yesterday spam
◆ yoosee [open-uri のソース見ると opt_proxy が String の時はそれを使うっぽいので open(..]
◆ ただただし [現在の実装がそうなっているんです。それを環境変数に頼ることで不要にし、proxyの存在を気にかけない実装者がいても問..]