September 29, 2007
SBM と言ってもソフトバンク モバイルじゃなくて、ソーシャル ブックマークの話。
かなりの今さら感が漂う雰囲気ですが、このウェブログにも、その SBM にエントリを追加するためのアイコンを設置してみました。
こういった機能って、Web デザインやプログラミングのノウハウ系だとか、おもしろネタをピックアップした blog などでは有用ですが、このウェブログのような日記系には無用の長物であるような気もします。
しかし、少しでも興味を持っていただけたなら、気軽にブックマークできるような仕組みは用意しておきたい。ほら、私って優しいから、アクセスされた方に不便を強いるのは心苦しいんですよ…なんて書くと、すごく嫌みな感じですよね。おまえ何様だよ。
まあ、ぶっちゃけ url_hash を使ってみたかっただけだなんて、恥ずかしくて死んでも言えないです! ><
August 30, 2007
RSS リーダーを使わず、律儀にも毎回ブラウザで更新をチェックされている方は気づいたかもしれませんが、最近このウェブログは連日のようにトラックバック スパムを受け取るようになってしまいました。
なぜ今頃になってスパムが送られてくるのか、はっきりとした理由は不明なのですが、思い当たる点は一つ…それは、以前システムの不都合で見送っていた Weblogs.com などへの更新 ping を再開したこと。どうも様子を見ていると、エントリを更新した直後にトラックバックが送信されていて、しかも受信しているのは最近の新しいエントリに集中しているのです。なので ping 送信がスパムのトリガとなっている可能性は高い気がします。
とはいえスパム自体は別に珍しいわけではなく、今までも日常的に受信していて、その 99.9 パーセントは事前の対策で撃墜できていました。問題なのは最近になって、今まで 0.1 パーセントだった撃墜できないタイプのスパムが急増したことです。
ちなみに従来この blog で行ってきたスパム対策は、ひらがなを含まなければ拒否という代物。これはトラックバック スパムのほとんどが英文という実情では非常に有効でした。でした…と過去形なのは、そう。前述の対策は、単に ASCII のみなら拒否するのでなく、ひらがなの存在をチェックしているのがポイントで、これにより日本語以外のマルチ バイトを含むスパムも排除できます。しかし逆に言うなら、日本語の文章でさえあれば内容は問いません。そして…前述のように更新 ping の再開と同時期に、来るようになったわけですよ、日本語のスパムが。
これには参りましたね…見つけるたびに毎回 FTP で削除して、ブラウザから rwbc のキャッシュをリビルドしなければならない。全く面倒で仕方ないです。
そんなわけで昨日から私の blog では、トラックバック元のページにトラックバック先の URI が含まれていなければ受け付けない、つまり言及リンクのないトラバは拒否するようにしました。すでに livedoor Blog などが同じ仕組みを導入しており、決して目新しいアプローチではないのですが、無差別に送られてくるスパムの性質を考えれば効果的な手段だと思います。内部の処理としては至って単純で、Perl モジュール LWP::Simple を使ってトラックバック元のページを取得し、正規表現でトラックバック先の URI が含まれているかチェックする機能を writeback (改造版) に追加しただけなんですけどね。なので実はリンクでなくとも、q 要素や blockquote 要素の cite 属性など、とにかくトラバ先の URI さえ含まれていれば何でもよかったりします。
しかし、この方法はスパムか否かにかかわらず、言及リンクのないトラックバックの是非を問うことになりますね…果たして、私のエントリにリンクしていなければ一律に拒否するのは妥当なのか。
これに関して個人的な見解を言わせてもらうと、私は仮に共通のテーマを扱っていても、自分のエントリに全く言及されないトラックバックは好意的に受け止められません。今までは黙認してきましたが、少なくともうれしいと感じたことはないです。なぜならそれらはスパムでなくとも、一方的に自らのサイトへトラフィックを誘導したいように思えるからです。端的に言うと、愛が感じられない。
そういう主観的な理由でトラックバックを拒むことに、また批判はあるかと思います。けれども、ここは私のウェブログです。そして以前にも書きましたが、私は自分の blog を一人でも多くの人にではなく、興味のある人だけに見てもらえればいいと思っています。同様にトラックバックも、私の定めた URI を含めて言及するという規定に納得できる方からしか受けたくない。それくらいの選択の自由は許されるはずです。繰り返しますが、ここは私のウェブログなのですから。ましてや言及のないトラックバックで不愉快な思いをしているのだから、それを拒むのは当然の権利だと私は考えます。
それにしても、こういう問題の対策って面倒くさい。メールの場合も同じですけど、スパムへの対処なんて非生産的な作業、本当に時間の無駄だと思う。まあ、それでも手動で削除する手間と自衛を考えれば仕方がありませんけど。やれやれです。
May 08, 2007
諸般の事情により、サイトの URI を移転。そしてリニューアル…ではないけど、内部的な仕組みを大幅に変更しました。同時に CSS も、従来と同等のデザインを維持しつつ全面的に書き直したり。
ま、例によって中身は何も変わってないわけですが。
ではなぜこのエントリを書いているかというと、この blog に使っている blosxom のシステムにも変更を加えたので、それを少しばかり記録しておこうかなあと思いまして。
その変更ですが、まず今回 atomfeed と rss10 プラグインの 2 つを外し、関連する RSS 1.0 フレーバーも削除しました。これらはフィード配信の FeedBurner への移行に伴い不必要となったのに、今まで面倒で放置していたのです…が、微々たるサイズながら無駄にサーバーの容量を消費しているわけですし、何より負荷の点から好ましくないので、思い切って撤去してしまいました。
次に archives プラグイン。以前から気になっていたのですが、これの生成するリストって、長期間ウェブログを続けていると延々と縦に伸びてしまうんですよね。おかげでエントリ個別のページを表示したとき、サイドバーが本文よりも長くなり非常に見栄えが悪い。どうすべきか迷ったのですが、今回これを年月日ごとの閲覧時は表示中の年、そうでない場合は最新の年のみ月別のページへのリンクを生成するよう改めました。
その他の変更としては、改造版 writeback に対応するため REQUEST_METHOD が POST の場合のみキャッシュ追加の処理を行うよう変更した rwbc を、よりオリジナルの動作に近くなるよう QUERY_STRING が __mode=rss を含まなければ実行するよう改めたり。
訪問者に影響する変更としては、そのくらいですかね。あと blosxom 本体とは無関係ですが、Lightbox JS を導入してみました。今まで、いわゆるクリックで拡大というアクションを簡単に実現する方法で悩んでいたのですが、これのおかげでそれが一挙に解決しました。
…と、一通りまとめてみましたが、こういう現状の環境を記したエントリって、今後の変更によっては価値を失ってしまうんですよねえ。実は何を隠そう、以前の「My blosxom plugins」というエントリがまさにそれで、今回の変更により当時との不整合が発生してしまいました。ならば削除してしまえば…とも思ったのですが、MT と比べ絶対的なユーザー数の少ない blosxom の情報を求めて、私ごときの文章でも参考にしてくださる方はいらっしゃるようで、消すのも忍びない。それ以前に私は、一度投稿したエントリの加筆訂正はともかく、削除するのは嫌いです。
そんなわけで、このエントリは以前の投稿をフォローすべく、そのエントリに加筆訂正の上、この投稿へのリンクを張ったものとなっています。この投稿自体が今後、現状と一致しなくなってしまった場合は…どうしましょうねえw まあ、そのときに考えればいいですかね。
May 04, 2007
Weblogs.com その他に更新 ping を打つための、ping_weblogs_com_xmlrpc プラグイン。
以前に導入したこれが、いつ頃からか調子が悪くなりエラーを出すようになった。しかも困ったことに、その内容を blosxom の出力の予期せぬ場所にはき出すので、HTML が乱れる。すると当然ながら正常に blog も閲覧できなくなる。
これでは困るので、このトラブルに気づいてから今まで私のウェブログでは、ping_weblogs_com_xmlrpc の動作を無効化していました。しかし近日中に blog も含めサイト全体のメンテナンスを行う予定で、そのためにもこのプラグインがエラーを起こしている原因を突き止め、そして以前のように再び更新 ping を送信できるようにしたい! まあ無理して送っても仕方ない気はするけど…というか俺、必死だな。
何はともあれ、ping_weblogs_com_xmlrpc を有効化し、デバッグ用のサーバー設定で CGI を実行してみた。すると、どうやら ping 送信先 2 つのサーバーがエラーを返していることが判明しました。その一方は 405 Method Not Allowed、もう一方は PHP 関数エラーの列。何これ? どちらも海外のサーバーなのですが、最初は問題なかったのに突然エラーを出すようになった理由は何だろう。よくわからないので、この 2 つは ping 送信先リストから外してしまいました。代わりに新しく国内と海外、計 2 つのサーバーを追加して、プラマイ 0 に (何か違う気がする)。場当たり的な感じはしますが、この変更で一応、再び私の blog は更新 ping を送信できそうです。
しかし、この検証の過程ではリストの各サーバーに無意味な ping を何度も送ってしまいました…サーバーを管理している中の方、ごめんなさい。そして、更新されたと思って見に来た方、本当にごめんなさいぃぃぃ…。
July 28, 2006
以前にしばらくは blosxom ネタ強化期間として
エントリを書いていくような発言をしたのに、相も変わらず有言未実行。あまりのオオカミ少年ぶりに、そろそろ blosxomer としての信用を失うなと感じつつも、どうせ誰も期待してねーよ! とも思ったり。まあそれはともかく、このウェブログで使用している blosxom プラグインの見直しに伴い、新たに自作した rss_date を今さらながら公開しました。
rss_date
このプラグインを使用すると、RSS 1.0 の channel 要素の dc:date や、RSS 2.0 のlastBuildDate 要素などで使用可能な、ページの最終更新日を W3CDTF および RFC 822 形式で出力できます。これらはフレーバーだけでは生成できないので、このような代物を自作したというわけです。
さらに、標準のフレーバー コンポーネントではエントリ日時を分単位までしか出力できませんが、それってフィードとしてどうなのよ? という点も以前から気になっていたので、エントリが投稿された秒を提供するストーリー コンポーネントも出力するようにしました。
…と、能書きを連ねてみましたが、やはり具体的な使用例を見ないとわかりにくいと思うので、以下は実際の使い方を記述します。
最初に rss_date 本体ですが、これは特に設定を書き換える必要はないと思います。ご自分の blosxom のプラグイン ディレクトリにそのまま放り込めば OK です。
次にフレーバーへの記述ですが、blosxom starter kit 付属の RSS 1.0 フレーバーを例にすると、以下のようになります。
まず head.rss の記述。
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
xml:lang="$blog_language">
<channel rdf:about="$url/index.rss">
<title>$blog_title</title>
<link>$url</link>
<description>$blog_description</description>
<dc:creator>$rss10::creator (mailto:$rss10::email)</dc:creator>
<dc:date>{{{date_w3c}}}$rss10::tz_offset</dc:date>
<admin:generatorAgent rdf:resource="$rss10::generatorAgent"/>
<admin:errorReportsTo rdf:resource="mailto:$rss10::email"/>
{{{items}}}
</channel>
このように {{{date_w3c}}} と書くと、その場所にページの最終更新日となる W3CDTF を挿入します。RSS 1.0 の場合は channel 要素の下に、UTC からのオフセット値とともに dc:date 要素として追記します。同様に {{{date_rfc}}} と書くと、最終更新日を RFC 822 形式で挿入します。RSS 2.0 の lastBuildDate (または pubDate) 要素には、こちらを利用し <lastBuildDate>{{{date_rfc}}} +0900</lastBuildDate> のように記述します。
次に story.rss。
<item rdf:about="$url$path/$fn.htm">
<title>$rss10::title</title>
<link>$url$path/$fn.htm</link>
<description>$rss10::description</description>
<dc:subject>$categories::alias</dc:subject>
<dc:creator>$rss10::creator (mailto:$rss10::email)</dc:creator>
<dc:date>$yr-$mo_num-$da$rss10::T$ti$rss10::colon$rss_date::sec$rss10::tz_offset</dc:date>
<content:encoded><![CDATA[$body]]></content:encoded>
<trackback:ping rdf:resource="$url$path/$fn.trackback"/>
</item>
上記のように $rss_date::sec と記述すると、その場所にエントリが投稿された秒を出力します。ちなみに $ti は hh:mm 形式でエントリの時間を返す変数。つまり例では $ti$rss10::colon$rss_date::sec ($rss10::colon は「: (コロン)」を出力する rss10 プラグインの変数) と記述していますから、21:15:33 といった hh:mm:ss 形式で時刻が出力されます。
このように rss_date はフィードの日時出力を拡張するためのプラグインですが、たとえば foot.flavour に Last Updated in {{{date_w3c}}}. と記述すれば、よくあるフッターのページ最終更新日表示に使えたりと、RSS 以外にも利用できます。
技術的には別にどうってことはない…というかむしろ至ってシンプルなスクリプトですが、工夫次第で使い方は広がると思うので、活用してください。やはり blosxom は、こうやって手軽にプラグインを作れるのがいいですね。
May 24, 2006
というわけで (何)、しばらくは blosxom ネタ強化期間として、まずは blosxomer (謎) のお約束である私の使っているプラグイン大公開を行ってみます。
今回の更新で、使用プラグインの構成は下記のようになりました。
- absolute
- エントリ中のリンクや
img 要素が相対パスで記述されている場合に、絶対パスに変換して表示。今回から導入したのだけど、typo によるリンク ミスも入力の手間も減っていい感じ。設定書き換えのついでに use strict で動作するよう変更。
- anyencoding
- このウェブログは互換性と管理の都合でエントリ作成と HTML の出力を Shift_JIS で行っているのですが、フィードの場合は UTF-8 に変換するため使用。導入当初の以前のバージョンは環境の違いで動かなくてはまった…。
- archives
- 年および月ごとのページへのリンク一覧を表示。基本ですね。以前は Movable Type のデフォルトっぽく表示される flatarchives を使っていたのですが、何から何まで MT のまねというのもどうかと思ったのでこちらに変更、今度はいかにも blosxom な見た目に。年月日ごとの閲覧時にパンくずリストを出力できるよう改造し、
use strict 動作に変更。さらに後述の categories プラグイン同様リンクの後にエントリの件数を表示するかどうか選択できるようにした…が、非表示にすると見た目がいまいちだったのでデフォルトの表示する設定に。更新さぼった月が一目でわかるorz
atomfeed
Atom フィードを出力するため今回導入。Atom 0.3 を出力するオリジナルをベースに、その改良版を参考にして use strict で Atom 1.0 を出力するよう改造。content 要素は出力しないので XML::Parser 使う部分はばっさり削除。フレーバーは内蔵のを書き換えたハード コーディングで使用中とかいうひどい仕様 (w
- back_and_forth
- エントリ個別のページに、前後のエントリへのリンクを表示。MT でおなじみの機能ですね。
- categories
- categories プラグインの改造版。さらに改造してパンくずリストを出力するようにした。category_set を使えばいいのに車輪の再発明したのは気にしない。
- date_fullname
- Apr や Wed のような短縮形ではなく、April や Wednesday のような完全な日付表記を date.flavour で表示可能にする (参照: date_fullname プラグイン)。head.flavour に
$date_fullname::path_info_mo と書くと、同様に月または日ごとの閲覧時に表示できるよう改造し、use strict 動作に。
- date_title
- head.flavour の
title 要素に年月日を追加。
- entries_kache
- entries_cache の改造版 (参照: entries_kache プラグイン)。W3CDTF イイ! (・∀・)
- entry_title
- head.flavour の
title 要素にエントリのタイトルを追加。
- excerpt
- RSS の
description 要素および Atom の summary 要素に使用するエントリの要約を作成。仕様を考えると、エントリの最初に現れるピリオド (.)/感嘆符 (!)/疑問符 (?) までを取り出す foreshortened よりも、こちらのほうが日本語を含む多言語に向いていると思います。
- gentime
- ページ生成にかかった時間を出力。お遊びです。サーバー負荷率と混雑度の目安でもありますが。
- interpolate_fancy
- エントリ個別のページと、そうでない場合の表示切り替えなどに使用。条件指定に正規表現を使うので、ある程度プログラムの知識がないと使用は難しい (日本語資料)。実は私もプラグイン内部の挙動は理解してなかったり…。
- lamitap
- Last-modified ヘッダーを出力。今までは last_modified を使っていたのですが、フレーバーやプラグインを変更した場合や、フィードの更新時刻も出力したかったので、こちらに変更。
- list_title_at_month
- 月ごとの閲覧の場合に、タイトルのみを並べて表示。月ごとのページのみ古いエントリが上だと訪問者をとまどわせると思うので、
$files_ref->{$b} <=> $files_ref->{$a} をひっくり返し、他のページ同様新しいエントリを上に変更…というか、フレーバーがハード コーディングって…orz
- list_title_at_year
- 年ごとの閲覧の場合に、タイトルのみを並べて表示。list_title_at_month と全く同じ部分をそれぞれ変更。
- notfound
- 存在しないページを要求された場合に、404 Not Found を出力。運用上ないと困るプラグイン。
- paginate_simple
- カテゴリごとの閲覧時に、前後のページへのナビゲーションを提供。同じ目的では paging のほうがメジャーなんですが、これはフレーバーで外見を変えられないし、他のプラグインとの相性も出そうだし、何より自身のサイトのデザインにそぐわないので paginate_simple を選びました。paging 同様、2 ページ目以降の場合に
$paginate_simple::meta_robots にロボット除外 meta 要素を出力するよう改造。
- ping_weblogs_com_xmlrpc
- Weblogs.com などに更新 ping を送信。今回から導入。環境的ハードルから動かない人続出で、なかなか大変らしい。61 行目を
print TOUCH, time; と typo しているコンマを消すのはデフォルトらしい。らしいらしい。
- rss_date
- RSS 1.0 の
channel 要素の dc:date と RSS 2.0 の lastBuildDate 要素を出力するため、今回自作したしょぼいプラグイン。RSS 1.0 だけなら下記の rss10 プラグインをごりごり書き換えてもよかったのですが、汎用性を考え新規に作りました。
rss10
RSS 1.0 の出力に必要。blosxom starter kit 付属のを参考に一部を改造。use strict 動作に変更。
- rwbc
- 最近のコメントおよびトラックバックを表示。まだ公開されてさほど経過していない新しいプラグイン。最近の writeback を RSS で取得できるのが超便利。下記 writeback プラグインの __mode=rss と相性が出るので、
REQUEST_METHOD が POST の場合のみ QUERY_STRING が __mode=rss を含まなければキャッシュ追加動作するよう変更。
- url_hash
- エントリの URI に対する MD5 ハッシュ値を出力。ソーシャル ブックマークにエントリを追加するリンクに使用。
- writeback
- コメントやトラックバックを受け付け。この改造版の挙動を理解するのは本当に苦労した…で、さらに改造を加えた上で
use strict 動作に。これまた使っている変数が多くて苦労した…隠し機能 (というわけでもないが) の __mode=rss とかも殺さず残し、entries_kache と併用しても description 要素を正しく出力できるよう改良してありますが、あまり意味はない気がします。
- xhtml2html
- 私のサイトでは HTTP_ACCEPT の内容に応じて XHTML を application/xhtml+xml または text/html でサーブしているので、これを blosxom でも同様に行うために使用。
…こうやってリスト アップしてみると、我ながらすごい数のプラグインですね。しかも kyo さんと北村さんのところからいただいてきたのばかり…あうぅ、もうお二人には足を向けて寝られません。本当感謝してます! まあ 9 割方私の手による怪しい改造が入っているわけですが。
ちなみに見ての通り、上記のリストで挙動がよくわからない interpolate_fancy 以外はすべて use strict してあるわけですが、これは将来的に mod_perl + ModBlosxom + ModBlosxom::plugin::_compat という構成に移行する可能性を想定してのことだったりします…が、環境的ハードルから移行可能性は低いと思います。今のところ。
あと、このエントリとあんまり関係ないのですが、この blog を何を狂ったか all about blosxom に追加してしまいました! それから、意味もなくはてなポイントも受け取れるようにしてみました。
そういえば、はてなも mod_perl で動いているらしいです。今日初めて知りました…。
補足 @ May 8, 2007
FeedBurner への移行により RSS 1.0 および Atom の出力を中止したため、関連プラグインは外しました。その他の変更に関して「サイトと blog をメンテ」もご参照ください。
補足 @ Sep 29, 2007
SBM 対応に伴い、url_hash を追加。
April 13, 2005
なんとなくウェブログの日付表示を変えてみたくなったので、以前見つけた date_fullname プラグインを入れてみました。
これを使うと、通常は Apr や Wed のように省略形でしか得られない blosxom の月や曜日を、April や Wednesday のような完全な名前で取得できます。
使い方は簡単で、完全な月を表示したければ $date_fullname::mo を、完全な曜日を表示したければ $date_fullname::dw を date.flavour に記述するだけ。プラグイン本体の書き換えは不要。
さっそくフレーバーを書き換え、アップロードしてみた。
なんか、$date_fullname::mo $da, $yr などと書いたせいで、微妙に Movable Type 風味に。
しかし、やっぱり April とか言われても、いまいち日本人には直感性に欠けるような気がする。そのうち飽きたら元に戻すかも。
February 28, 2005
先日よりこのウェブログは RSS 2.0 の配信を始めたのですが、実は出力内容に記述ミスがありました。しかも私は配信開始当日に FEED Validator で問題の箇所を発見していながら、今まで放置していました。面倒くさかったので。てへり。
そんなわけで今日は正しい RSS 2.0 が得られるよう、フレーバーを修正しました。その結果、見事に FEED Validator で Congratulations! の評価を得られました。Congratulations です。めでたいです。今夜は赤飯です。嘘ですが。
RSS 2.0 の配信に成功したので、今度は Atom も配信したいなと思ったり思わなかったり。どっちだよ。
まあとりあえず、神無月の巫女は果てしなく微妙というのが、今日の結論です。6 話までしか見てないけど。
…blosxom と全然関係ないやん。
February 25, 2005
今までこのウェブログは、公式には RSS 1.0 だけを配信していたのですが、本日より RSS 2.0 も配信開始してみました。それと同時に、既存の RSS 1.0 の内容はサマリーだけに変更しました。なので、完全なウェブログの本文が必要な方は、お手数ですが RSS 2.0 を使用するようご利用のソフトウェアの設定を変更してくださいませ。
何で RSS 1.0 から本文を消しちゃったのかと言うと、RSS 1.0 は RDF Site Summary、つまり要約なのだから、本文は必要なかろうと。そう思ったからです。うわ、安直。
で、先ほどこのウェブログは公式には RSS 1.0 しか配信していなかったと書きましたが、これも補足。
実は blosxom には、標準で RSS 0.91 を出力する機能があるのですが、私は今までこれを使わず RSS 1.0 を配信していました。
しかし RSS 0.91 の出力機能自体は残していたので、その URI にアクセスすれば RSS を取得できたのです。
ところが、この blosxom 標準の RSS はあまり美しくないコードを吐き出すので、以前から何とかしたいと思っていました。そこで今回それを RSS 2.0 で上書きするようにしました。
というわけで、今日はようやく懸念だった RSS 2.0 の配信と RSS 0.91 の問題が解決したのです。いやー素晴らしい。
それにしても RSS 2.0 は Really Simple Syndication の文字通り、シンプルでよいですね。blosxom の場合 RSS 1.0 を出力するには rss10 というプラグインが必要なのですが、RSS 2.0 の場合はフレーバー (テンプレート) を作成するだけで OK な感じ。
ちなみに RSS 2.0 フレーバーの作成にあたっては、我らが blosxom の偉い人、kyo さんの RSS 2.0 Notes を参考にさせていただきました。相変わらず、お世話になりっぱなし。多謝。
補足 @ May 08, 2007
このウェブログの RSS 配信は FeedBurner による出力に切り替えたため (参照: FeedBurner に移行)、現在 RSS 1.0 の自サイトでの提供は行っておりません。
February 15, 2005
以前も書きましたが、blosxom はウェブログに新規エントリを追加する場合、エントリ内容を記述したテキスト ファイルを FTP でアップロードすることにより行います。
通常 blog ツールはエントリを表示する場合、各エントリを日付順にソートして表示します。これは blosxom も同様なのですが、では blosxom の場合、ソートの基準となる日付情報をどのように取得するのでしょうか。
blosxom はこの処理を、ファイルのタイム スタンプを基準に行います。つまり各エントリが作成された (FTP された) 日時が、エントリの日付となるのです。単純ですが、エントリ 1 つを 1 ファイルとして管理する blosxom の場合、これは理にかなった方法と言えます。
しかし、この方法には致命的な欠点があります。それはタイム スタンプが変わってしまうと、エントリの表示順も変わってしまうことです…つまり、一度掲載したエントリを後日編集すると、そのエントリは更新した日が掲載日となってしまうのです。これでは後からエントリの修正などができず、非常に不便です。
そこで登場するのが、entries_index というプラグインです。このプラグインを導入すると、blosxom は各エントリが最初に掲載された日時をインデックス化します。そしてエントリを表示する際はファイルのタイム スタンプの代わりに、このインデックス情報をエントリの日時として使用するようになります。これによりユーザーは後から自由にエントリの編集が可能となり、blosxom の利便性は大幅に向上します。
一般的なユーザーなら、URI や誤字の修正などの必要から、一度掲載したエントリを再編集することは必ずあると思います。ですから entries_index の機能は blosxom ユーザーになくてはならない存在と言えます。しかし entries_index はエントリの日時を作成日に固定するだけであり、エントリの日時そのものを操作することはできません。
ウェブログを続けていると、何らかの理由でエントリの日付を変更したくなる場合があります。たとえば昨日の出来事だったけれども、その日は忙しくて掲載できなかったとき。あるいはせっかくエントリを書いたのに、掲載するのを忘れてしまったとき。こんなとき、エントリを過去の日付で掲載するにはどうすればいいでしょうか。
entries_index を使用している場合、インデックス情報ファイルを書き換えれば、そのエントリを過去の日付に変更することは可能です。しかし entries_index の生成するインデックス情報に含まれる日時は 1970-01-01T00:00:00Z からの経過秒数 (エポック秒、いわゆる UNIX タイム スタンプ) で記録されているため、ユーザーが手動で書き換えるのはかなり面倒です。
そんなとき便利なのが entries_cache です。このプラグインは entries_index に代わるもので、エントリのファイル中にメタ情報として日時を記入することにより、そのエントリの日時を自由に変更することが可能になります。メタ情報の記入は、次のような 1 行をエントリ ファイルの 2 行目 (エントリ タイトルと本文の間) に加えるだけです。
meta-creation_date: 02/15/2005 21:30:00
このように指定すると、そのエントリは2005年2月15日21時30分0秒に掲載したものと見なされます。ちなみにこの記述を行った場合、メタ情報と本文の間には空行を入れるのが好ましいようです。また、この記述を省略した場合は entries_cache プラグインに自動挿入させることも可能で、entries_index 同様エントリの日付固定も行えます。
entries_index の機能に加え、エントリの日時が自由自在に変更可能になる entries_cache プラグイン。私もこれは愛用していたのですが、1 つだけ不満点がありました。それはメタ情報として使用する日付を米国式の表記 (月/日/年の形式) で指定する必要があり、年/月/日の形式を一般的に利用する日本人には違和感がある点です。どうせなら W3CDTF で指定できればよかったのに。
…と思っていたら、どうやら世の中には私と同じように考えた方がいらっしゃるようで、entries_cache を改造した entries_kache というプラグインを発見しました。これを使うとメタ情報を W3CDTF で指定でき、さらにバグっぽいのも修正され動作の安全性も向上しているようです。しかも entries_cache から乗り換える場合にも適切に設定すれば、過去のエントリのメタ情報を自動で W3CDTF にしてくれるという親切設計。
さっそくダウンロードしてきて、昨日より使ってみました。今まで納得いかなかった日付の表記も自分の好みのものになり、精神衛生上も非常にいい感じです。
ところで、entries_kache ってなんて読むの? エントリーズ・カッシュ? 教えて曉に死すの中の人!