五月雨について
config.ymlについては、この他にIgnorePathという指定ができるのが便利。IgnorePath指定では、XPath風の記述によって、変更があったかどうかの判定において無視する部分を設定することができる。Last-Modifiedが取れないようなサイト(広告埋め込みとか)で、サイズが比較的よく変わる(tDiaryとか)ページなんかで特に効いてくる。
適切なXPath風の指定をどうやって見付けるかというのはなかなか難しいのだけど、今のところ添付ツールのhtmlignとhtmldiffを使ってトライ&エラーでやっている。
htmldiffは二つのHTMLファイルのdiffを取るもの。見たところ変更がなさそうなのにアンテナで変化を検出していておかしいなあ、と思ったときには、以前のHTMLファイルと今のHTMLファイルを指定してこのツールにかけてやるとよい。今のHTMLファイルはともかく以前のものはどうするのかというと、これはsamidareが保存していてくれる。samidareに--dump-filenames2オプションと、対象としたいサイトのURLを与えて起動すると、最新のものと一つ前のもののファイル名が表示される。これら二つのパスを指定してhtmldiffを実行すればよい。
htmldiffの結果、無視すべき部分が見付かったとする。そうすると適切なパスを作らなくてはならない*1わけだが、この段階ではhtmlignが助けてくれる。htmlignは対象とするHTMLファイルと無視したいパスを指定して実行すると、指定したパスの部分を除外したHTMLと、元々のHTMLのdiffを取ったものを出力してくれる。これによってどういうパスを記述すればよいのかをさぐることができる。
*1 多少の誤検出は無視するという手もある。
samidareのその後 1
どうもIgnorePathがうまく効いてくれないなと悩む。で、よく見るとhtmlignと正規表現の作り方が違っていた。こんな感じかな?
--- samidare 3 Aug 2003 08:56:32 -0000 1.70
+++ samidare 3 Aug 2003 16:40:38 -0000
@@ -285,9 +285,9 @@
if /\[(\d+)\]\z/ =~ step
n = $1.to_i
if $1.to_i == 1
- "(?:\[#{n}\])?"
+ Regexp.quote($`) + "(?:\\[#{n}\\])?"
else
- "\[#{n}\]"
+ Regexp.quote(step)
end
else
Regexp.quote(step) + '(\[\d+\])?'
samidare 7
あたりを付けてsamidareを入手し試してみる。これ、いいなあ。さっそくsamidareに変えちゃおうかな。
xtemplateのdebを作った。
追記: 追いかけていないのでよくわからないのだけど、いつまで待っても終わってくれなくなったことが数回。実行してすぐにsegvをくらったことが一回。「 [BUG] obj_free() called for broken object」が一回。SocketとThreadの組み合わせのせいかなあ。他でもこういうのに出くわすことがあって、Rubyの問題のような気がしているのだけど追いかけるのが大変。
追記2: --single-threadでも「 [BUG] gc_sweep(): unknown data type 0x4023105c(41)」が。ううん。


