May 24, 2006

My blosxom plugins

というわけで (何)、しばらくは 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:dateRSS 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 を追加。

TrackBacks

  • トラックバック内容 (excerpt) には必ずひらがなを含めてください。入っていない場合は拒否します。
  • このエントリの URI を含まない (リンクしていない) トラックバック元からは受信しません。

Comments

投稿フォーム

  • コメント以外の入力は任意です。
  • コメント文中には必ずひらがなを含めてください。入っていない場合は拒否します。
  • メール アドレスは公開されませんが、URI を入力した場合は名前がリンクとなります。なお、いずれもコメント欄への入力についてはリンクされます。
  • このページの URI をリファラとして送信しない UA からの投稿は受け付けません。