Mitsukiの魔法実験室

Mitsuki's Magic Laboratory
Since 2002.09.14

コメント機能

Posted at 2006/09/26 22:01 in Diary|WebDev

 直した、つもり。
 ついでにトラックバック送信機能も変だったので直した、かもしれない。

blosxomをタグ化してみる

Posted at 2006/08/05 00:55 in Programming|WebDev

 今更blosxom? とか言われそうですが(笑)、久しぶりにいじってみました。テーマは「タグ化」。

 blosxomは標準ではディレクトリ=カテゴリーなわけですが、はてなブックマーク等に慣れてくると、なにかと自由の利くタグを使いたくなってきます。タグ対応pluginは探せば既存でもいくつかあるようですが、やり方を思いついたので自分でも実装してみました。
 ソースはこちら

 おおざっぱな仕組みは、filter()で

  1. エントリーファイルの1行目(タイトル行)からタグ([]で囲った文字列)を収集
  2. エントリーファイルの存在するパスもタグとして収集
  3. リクエストのパスをターゲットのタグとし、対象となるファイル以外をファイル一覧(%files)から削除

あとは通常のシーケンスでエントリーが表示されるので、story()で表示用のタグリンクを作成、というシンプルもの。
 ただし、通常はカテゴリー(ディレクトリ)内のエントリー以外は表示をスキップする処理が走るので、blosxom.cgiを修正してカテゴリー機能自体を無効にする必要があります。


sub generate {
(中略)
      # Only stories in the right hierarchy
#     $path =~ /^$currentdir/				\
        or $path_file eq "$datadir/$currentdir"		\
        or next; #←コメントアウト(実際は1行)

 また、recentwritebacks_treeのような、エントリーファイルからタイトルを拾ってくるpluginは、タイトルからタグ部分を除去するように改造する必要があります。


sub gettitle {
(中略)
  if($fh->open($file)) {
    $ret = <$fh>;
    $fh->close;
    $ret =~ s!(\[[^]]+\])*!!g; #←追加
  }
  chomp($ret);

 他にもタグリストのキャッシュ機能なんかも実装してありますが、細かい話なので省略。

 この仕組みので面白いのは、エントリーファイルのパスも自動的にタグ扱いしてくれる点。つまり、既にカテゴリー分けされてる既存のエントリーは、何もしなくても最初から自動的にそのカテゴリー(ディレクトリ)名のタグが付いてくれます。
 また、カテゴリーを2階層以上掘ってある場合、エントリーが属する上位のカテゴリーも全てタグとして付いてきます。例えば「/NetGame/RagnarokOnline/sample.txt」というエントリーの場合、「NetGame」と「RagnarokOnline」のタグが一気に付くわけです。「NetGame」直下に置けば「NetGame」だけに属し、「RagnarokOnline」の下に置けば「NetGame」「RagnarokOnline」両方に属する、つまり「RagnarokOnline」は「NetGame」をも含むという、タグ同士の包含関係のようなことが実現できるわけですね。

 というわけで、かなり久しぶりにperlをいじりましたが……やっぱり自分で書くならrubyの方が好きだなあ(ぉぃ)。

hbatom blosxom-plugin

Posted at 2006/08/04 23:32 in Programming|WebDev

 某#techでPerl話をしていたところ微妙にPerlが書きたくなったので、久しぶりにごそごそ書いてみました。右上にある「Recent bookmarks」がその成果。
 やってることはというと、単に「はてなブックマーク」のatom feed拾ってきて、XML::Parserで抜き出して成形しているだけです。ソースはこちら。blosxom 2.0用です。

 ……そういえばblosxom3.0ってどうなったんだろう。

2005.9.25 追記:
 負荷軽減のため、Atomそのままではなく、パースしてHTMLにしたものキャッシュするようにした。毎回XML::Parserしていたのが、Atom取得時だけになったので、大分軽くなったはず。

 まあ自宅サーバ(Non MMX Pentinum200MHz)は素のCGI起動が遅いので、あんまり効果ないですが……。

ID機能を実装してみる

Posted at 2005/09/28 01:49 in Diary|WebDev

 writebackプラグインを改造して、コメントに2ちゃんねるのトリップ風のIDを付けられるようにしてみました。入力欄の「solt」のところに適当なキーワードを入れておくと、対応するIDが書き出されます。

サイトいじり

Posted at 2005/02/20 00:10 in Diary|WebDev

 久しぶりにあちこちいじってました。

 カテゴリー別表示のページをカテゴリー毎のトップページ的に使えないかと思って、カテゴリーの先頭に常に特定のエントリーを表示させる方法がないものかと探してみたものの、都合のいいものが探し出せなかったので、ごそごそとプラグインを自作(ファイル名の頭の数値はロード順の調整用。archivesプラグインより先に読み込まれる必要があるので)。
「notice.txt」という特定のファイルがカテゴリ内にあった場合、それをヘッダー部に表示(head.htmlフレーバーに変数を埋め込む)。ちなみに、「notice.txt」の更新日付は強制的に1(つまりunix epoc timeの1970年1月1日)で上書きしてるので、「notice.txt」の本物のエントリーは常に一番最後に表示される。wikieditish等で編集する場合は、こちらを使う。
 あとは、「1970年1月1日」と表示されるのが格好悪いので日付部分を「Notes」に書き換えたり、拡張子が「.tail.txt」の場合は「notice.txt」と同様に更新日付を戻して最後尾に表示されるようにしたり(リンクなど、通常のエントリーとは区別しておきたい用途用)、その手のファイルをサイドバーのArchivesに表示されないようにarchivesプラグインを改造したり、細かい部分をいろいろ調整。

 成果の大半はROカテゴリーの方で使用中。
 リンクのページのIndexは、エントリーを解析して自動生成するようになってたりと、昔自作してたローカル静的生成時代のノウハウも取り込んであったり(これも自作プラグイン。元になるtxtはこんな感じ)。

Page 2/2: [<] 1 2