iso tank - blosxom

lamitapプラグイン導入

曉に死すさんとこのlamitapプラグインを 導入。ようするにサイトの内容に変更がなければ304 Not Modifiedを返してやるという仕組み。 304が返るとどうなるかって? ま、まぁブラウザによってはサーバーのデータを一々取得にいかないで キャッシュを読み込んだりしてくれるんじゃないかなー。と。そ、そこんとこわかってよ! もう!

flavourdirにあわせて少々コード変更。

flavourdir+themeと後方参照の罠

先々週の日曜から恩師に頼まれて高校生ドモにスキー教えてたら、最終日に熱出した。 なんとかスキー教習終えて家に帰って熱測ったら38度2分とかでてんの。ふざけてる。 オイラは恩師の頼みで仕方なく(会社にナイショで)無償奉仕で高校生にスキー教えた。 仕方なくである! キャホホーイ! その見返りが38度2分とはコレどういうことか。 キャホホーイ! 納得いかん。キャホホーイ! まあそんなわけで死んでました。今は生きてます。

さて本題に入ろうか。このブログのメインプログラムは言うまでもなく blosxom(ブロッサム)です。blosxomには Movable Type(以下"MT") と似たような「テンプレート機能」があります。ただし「テンプレート」と呼ばずに 「フレーバー」と呼びます。風味とか味つけとかいう意味らしいです。MTのテンプレートや 「テーマ」などのシステムがどういうものかは正直知らないですが、blosxomの場合は、 整形されたHTMLファイルとCSSとそれらに関連づけられた画像等を一セット用意すれば HTMLファイルを分割するだけでそれがフレーバーになる感じです。

で、ここに長所とも短所ともとれる特徴がある。blosxomの「フレーバー」システムは、 テンプレートといえるHTMLデータを、「content_type」「head」「date」「story」「foot」 の5つに分割して管理・保存しなければならないのです。例えば「cupy」というフレーバー (フレーバーの名前は自由につけることができる)を作成したとして、cupyフレーバーは 「content_type.cupy」「head.cupy」〜「foot.cupy」と、最低でも5つのファイルを作る 必要があるのです。つまりフレーバーの数が増えればそれに×5倍してファイル数の増える増える。 CSSや画像を別に用意する必要も(場合によっては)あるわけで。さらにその上、 フレーバーを設置するディレクトリは基本的に記事を設置するディレクトリと同じなの。 つまり記事データとフレーバーファイルがゴッチャ混ぜになってアララ大変なことにもなりかねぬ。

と、いうわけで例によってプラグインでこれを解決するのです。幸い、既に考案されてる プラグインに「flavourdir」という、記事を設置するディレクトリとフレーバーを設置する ディレクトリを分割してしまえるプラグインがあるのです。さらにその上、「theme」という わざわざ5分割して保存することなくフレーバーをひとまとめのファイルにして管理する プラグインもあったのです。ここにきてようやく表題に追いついた。

ようはこの二つのプラグインを合体さして「別ディレクトリに追いやりつつ見やすく、 管理しやすくしてしまおう」という魂胆。ソースを眺めて大体アタリをつけてれっつら ガチャン。プラグイン、バグった。当たり前やがな。そんなポン付けで動いたら誰も苦労せん。 それはさておきなんで動かないのだろうか。いつもここから俺のPerlのおべんきょうがはじまる。 ポン付けでも文法的にはさして問題なかった気はするのだが。む、む。 content_typeのフレーバーだけがなぜか適用されている事に気づいた。ということはアレか、 いやコレか。

色々考えてるうちに「後方参照」という単語に行きついた。

だれかまじめに教えてほしいんですけど、

do {
    処理
} while (条件文);

という処理があったときさー、

do {
    $q =~ /(foo)(bar)/;
    $a = $1;
    $b = $2;
} while ($p =~ s/(PATTERN)// and $1);

みたいなふうなコードがあったとしてさー、whileの条件文内でマッチした場合、 do内の処理の$a=$1にはPATTERNが入っちゃうわけでしょうか? とすると$2はfoo?  とりあえずなんとかはしたしうまいとこ動いてるようだけど、なんかしっくりしない。

とりあえず改造版flavourdir

1/30追記。ちゃんと使い方ぐらい書いておこうかと思った。

フレーバーを入れておきたいディレクトリを$flavour_dirに、フレーバーファイル の拡張子を$extに(フレーバー名でなくファイルの拡張子。)設定して、フォールバック の有無(もし$flavour_dirに希望のフレーバーが無かった場合、元のテンプレート機能、 つまり$blosxom::datadir内を漁ってフレーバーを探すかどうか)を指定したら、 $flavour_dirで指定したディレクトリにフレーバーを入れるだけ。フレーバーファイルの 書式は<!-- blosxom content_type text/html; charset=UTF-8 -->とか <!-- blosxom head --><!-- blosxom date --><!-- blosxom story --> <!-- blosxom foot -->を、それぞれのブロックの先頭に書いておけばOK。 というか本当に単純にflavourdir+themeしただけなのでここまで書いておきながら やっぱ別に説明とかいらなかったなーとか後悔。

entries_kacheプラグイン改造

entries_kacheをちょこっとだけいじりました。ほとんどメモのようなものなので、 「続きを読む」つけましたよ。

元:entries_kacheプラグイン(徒書※現在停止中)

エントリファイルの作成日時をキャッシュしてファイルに保存しておくプラグイン。 またエントリにメタ情報としてmeta-creation_dateを挿入・保存しておく。

メタ情報やキャッシュファイルの情報を読み取り、entriesサブルーチンを上書きして動作し、 ファイル名に作成日時を関連付けたハッシュを生成、%filesとして返す。

blosxom本来のentriesサブルーチンは、単純にファイルの”更新日時”を取得して、 ファイル名に”更新日時”を関連付けた%filesを返すようになっている。

”じゃーutimeで更新日時を変更しちゃえばいいじゃん”ってなことで 適当なところで

foreach (sort keys %files) {
    utime ($time, $files{$_}, $_);
}

を挿入。

ファイルの更新日時そのものを書き換えたので、blosxom本来の”通常の”entriesサブルーチンでも 正常に(?)表示されるようになったハズなので、startサブルーチンは

sub start {
    $reindex = (CGI::param('reindex')) ? 1 : 0;
    return $reindex;
}

つまりreindexのオプションを付けないとプラグインが動作しないように変更。 ちと軽くなったような気がする(∵)

writeback_updateプラグイン作成してみた

最近blosxomいじりばっかりです。楽しい? チョー楽しい。

Writeback、つまりblosxom語では「コメント&トラックバック」のことを「Writeback(ライトバック)」と言うわけなんですけれど、 blosxomのシステム上、あとWriteback(プラグイン)のシステム上、投稿データは記事単位に分割されて保存されており、 スパム投稿があった場合は、基本的にはFTPにアクセスしてファイルの内容を手動で削除する方法が主流 (と思っています。少なくともWeb上で削除を行うようなインターフェースは標準では実装されてないので)。

しかし、これを行うとつまり、[単純にテキストファイルを開く→問題の行を削除する→ 上書き保存したテキストファイルをFTPに上書きアップロード]しているだけの事になるので、 もちろんの事ながら「ファイルの更新日時」が変更される。これが変更されると、ある種のプラグイン、 具体的にはrecentwritebacks_treeプラグインで ちょっとした問題が発生する。

このrecentwritebacks_treeプラグインは、ファイルのModify-Timeを直接取得してファイルに順位をつけ、 最も新しいコメントが投稿されたファイルの順に「最新のWriteback」を表示する仕組みになっている。 つまり編集したファイルが先頭に来てしまい、なんというか困るのです。

そういう経緯もあり、先述のrecentwritebacks_treeのコードを一部利用したりなんかしながら、 必要な時に任意で動作させてファイルの更新日時を半ば強引に”正常化”する writeback_updateプラグインというものを作ってみた。 URLの後ろに”?update=1”で動作。ファイル内の投稿日時を取得してそれを”ファイルの更新日時”として書き換えてしまう。

大雑把に作ってみただけなので改良の余地がありまくりんぐ。

List Title at Year & Month プラグイン導入

all about of blosxomさんトコの List Title at YearプラグインList Title at Monthプラグインを導入してみましたよ。 右のメニューの「Log」の各日付をクリックしていただけるとわかりますが、その年/月ごとの記事を、 タイトルだけリストしてズラーーッと並べます。以前は記事が延々と下の下のさらに最下層のコキュートスを超越した先ぐらいまで表示されまくるもんで困ってました。

List Title at YearもMonthも、ソックリのコードを持つプラグインで、 Yearは年ごと表示だけ、Monthは月ごと表示だけに対応してたもようだったので、 せっかくだから年にも月にも対応した一個のプラグインにまとめちゃいました。 はいはいおもちゃ遊びおもちゃ遊び。Kyoさんマジでごめんなさい。

おもちゃ遊びついでに、昇順表示・降順表示を設定できるようにしてみました。 しかしまだまだ勉強不足であることを痛感するKONOZAMA。とはいえこうやってPerlとかいじってる時間が 一番ウキウキしてるんですよね、自分。はー仕事したくないわ。

追記:結局消しました。