2003-02-05 (Wed) 不定期連載?
〆 [tdiary]xreaで日記更新時にnamazuのインデックス作成
くわさんのところから。
くわさんなら説明するまでもないことばかりですが、namazuなんてはじめて、とか、プラグインなんて作るの難しそうとか思っている人にそれなりに有用だと思うので書いてみるテスト。
まず、あまりにも端折ったnamazuの説明から。
namazuは、ユーザから見ると、検索するためのnamazuと、検索のインデックスを作成するmknmzからなります(本当は、ほかにもたくさんのものから構成されてます)。
ある文章群をnamazuで検索するには、まず、mknmzでその文章群用のキーワードインデックスを作成します。そして、naamzuでそのインデックスを見て探している言葉が含まれる文章を順位をつけて教えてくれます。
つぎに(←namazuみじかっ)、これまた端折ったsqueeze.rbの説明。
squeeze.rbはプラグインとして用いられた場合、tDiaryがもつ
update_proc: 日記更新時およびツッコミ追加時に呼び出される
というメソッドを使って、更新時とツッコミ追加時に
data_dir/cache/html/
以下にyear/(monthdate)として一日毎の文章を保存しています。ただし、このメソッドは直接使ってはいけません。add_update_procを用います。
これで、やっとtDiary上の文章をsqueeze.rbとnamazuを用いて検索するしくみにはいります。
まず、squeeze.rbが作成した文章に対して、mknmzでインデックスを作成します。
つぎにそのインデックスを用いて探している言葉が含まれる文章をさがすのですが、squeeze.rbが作成した文章(普通はWeb上にはない)にたいしてmknmzでインデックスを作成するので、そのままではnamazu.cgiで検索してもWeb上ではみえません。
そこで登場するのが、namazu.cgiに対する
Replace /virtual/shimoi/ydiary/cache/html/(\d\d\d\d)/ http://shimoi.s26.xrea.com/ydiary/?date=\1
というオプションです。namazu.cgiは自分自身が置いてあるディレクトリに.namazurcというファイルがあれば、そのファイルに書いてあるオプションを用います。ない場合は別のところにある規定値が使われます。
うちの.namazurcは、こんなの。
Index /virtual/shimoi/namazu/index/ydiary Replace /virtual/shimoi/ydiary/cache/html/(\d\d\d\d)/ http://shimoi.s26.xrea.com/ydiary/?date=\1 Lang ja
この(\d\d\d\d)というのは2003等、四桁の数字にマッチします。例えば、
/virtual/shimoi/ydiary/cache/html/2003/0205
というファイルに探している言葉がある場合、namazuは検索結果の表示を
http://shimoi.s26.xrea.com/ydiary/?date=20030205
に置きかえます。これにより検索結果からのリンクを辿るとができるようになります。
で、本題。日記更新時に、インデックスを更新するための、簡単ですが、これでいいのか?という方法(汗)。squeeze.rbがその日のHTMLを作成したあとにmknmzを実行すればいいのですが、squeeze.rbもupdate_procを使っているので、zzzmknmz.rb等というsqueeze.rbよりも後に読みこまれそうな名前にして、
# zzzmknmz.rb
@my_mknmz = "/usr/local/bin/mknmz"
@my_mknmz_outdir="/virtual/shimoi/namazu/index/ydiary/"
@my_mknmz_target="/virtual/shimoi/ydiary/cache/html"
@my_mknmz_logfile="/virtual/shimoi/log/namazu.log"
add_update_proc do
my_mknmz
''
end
def my_mknmz()
cmd_line = %Q[#{@my_mknmz} --media-type='text/html' --indexing-lang=ja -O #{@my_mknmz_outdir} #{@my_mknmz_target} > #{@my_mknmz_logfile} 2>&1]
system(cmd_line)
end
みたいなのを作ってpluginディレクトリに置けばいいです。もちろん変数は修正してください。waitを入れようかとも思いましたが、大丈夫そうなのでいれてません。
動かなかったらnamazuのlogを見ましょう。logが更新されていれば、原因はmknmzのコマンドに関することです。そうでなければ、このプラグインです。だめだと思ったら、このプラグインを削除してください。
ところで、s26.xrea.com の mknmz、
LANG=ja; export LANG
としても、warningがでて、localeを"C"としてインデクスが作成されてしまってました。みなさんもlogを見てみましょう。数日前はいけてたんですけどね。調べるのも面倒なので、cgiと上のプラグインでは indexing-lang というオプションで逃げました。
ここまで、書いてなんですが、僕はこのプラグイン使ってません。テストはしましたが。
あと、update_proc以外にもいくつかありますので、興味をもたれたかたは、tDiaryの配布物に含まれているHOWTO-make-plugin.htmlを読みましょう。
〆 [tdiary]絵日記プラグインは、ValidでないHTMLを生成します
こちらによるとwidthを指定しないとValidでないらしいです。heightもいるのか、widthとheightのどちらでいいのか、とか調べてないですが。調べないと。
追記:なくてもいいらしいです。
ということで、TDiaryEnikkiで配布しているものは、ValidなHTMLを生成しません。
追記:大丈夫らしいです。
heightだけでもいいのであれば、
アップロード後のサムネイル表示時はVaiid日記表示時はValidではない
という状態になってます。image_size.rbを使えば簡単に対応できますが、image_size.rbがなくてもリサイズ以外は動くというのが今回の売りだったのでショックです。
まとまった時間がとれたら考えます。
追記:考えないかもしれません。
〆 [xrea]分かち書き
やはり、ここしばらくは、インデックスの作成が変だったみたいです。インデックスのあるディレクトリのNMZ.wというファイルを開いてみて最後のほうにある日本語のところにやたらと長いものが含まれていたら、分かち書きされてないです。というか、分かち書きされたかどうかは、logを見ればわかります。
ということでインデックス作り直しました。はやーい!
〆 HTML 4.01 Specification
調べていただいてどうもありがとうございます。
実は、IMPLIEDってなにかも知らなかったので、HTML 4.01 Specificationを少し見てみました。
で、関連するのは、13 Objects, Images, and Appletsで、IMPLIEDと書いてあるけど、IMPLIEDの説明なし。
で、わざわざUpper-caseで書いてあるので定義されていると思って調べてみると、3 On SGML and HTMLに書いてありました。
Whether the default value of the attribute is implicit (keyword "#IMPLIED"), in which case the default value must be supplied by the user agent (in some cases via inheritance from parent elements); always required (keyword "#REQUIRED"); or fixed to the given value (keyword "#FIXED"). Some attribute definitions explicitly specify a default value for the attribute.
だそうです。
でも、さらに疑問。自分でも使っておいてValidの意味がわからないことに気が付いた(汗)。
で、ごく簡単に検索してみたけど、「ValidでStrictなHTML」とかかっこいい言い回しはいくつか見つけました。まだ意味わからず。
結局、規格をまもっているかってことでしょうか?http://validator.w3.org/
でも、そうすると「ValidでStrictなHTML」って変な言い回しだと思うので、誤解している可能性高し。
いつかちゃんと調べます。todoにも設定!あと約2800日以内に。
追記:StrictというのはStrict DTDのようですね。ということは、「HTML 4.01 Strict DTDに対してValidなHTML」というような表現を使うべきか?