88171.net

Blosxom エントリキャッシュプラグイン

cacheentries

なんだかんだでこのBlosxomには1400超のエントリがあるわけで、これだけのファイルに毎度毎度stat()かけてるとさすがにちょっと重い。特に、試しにabで100並列でアクセスしてみたら悲惨なことになったので、ちょっとどうにかしてみるかと思い立った。

巷にはEntries Cache Pluginというのもあるんだけど、

とか考えると欲しいものとはちょっと違うことがわかったので、車輪の再発明感を覚えつつも自分で書くことにした。

本当に何も凝ったことはせず、デフォの&$entries()から返ってきた[ \%files, \%indexes, \%others ]をStorableでファイルにぶっ込んでおき、一定時間内はそのファイルから読むという、ただそれだけ。ロックもStorableのアドバイザリロック機構をそのまま使ってるので何も考えてない。

これだけなんだけど、チョー適当に計測した感じでは100並列アクセスの所要時間がざっくり半分に、1並列アクセスでもちょっとだけ速くなった。よしよし。

まあそんなアクセスないんだけどな、ここ。

既存のテキストを Git 管理下に置くスクリプト

ちょっと前に書いた、既存の blosxom 用テキスト群から Git リポジトリを作るスクリプト。 git init したワーキングコピーにドバッとテキストを置いて叩くと、各ファイルの mtime を元にコミット日時を設定して個別にコミットしてくれる。

#!/bin/bash
find . -name \*.txt | sort | while read file; do
    time="`stat --format=%Y $file` +0900"
    git add $file
    env GIT_AUTHOR_DATE="$time" GIT_COMMITTER_DATE="$time" \
        git commit -m 'initial revision' $file
done

まぁ、これを書いたきっかけは「テキストを Git 管理できたらナウいんじゃね?」という単なる思いつきで、生の .git を直接データとして見にいく blosxom プラグインもちょっと書いてはみたんだけど、

とか考え始めたらいろいろめんどくさくなったので、きっとこのままお蔵入りだろうな。

ここで使ってるblosxomプラグイン一覧

できるだけがんばってオリジナルの作者さんのページにリンクしてあるつもり。 運用状況に応じて、気が向いたら更新していくかも。

Markdown

Markdown教徒には必須。 一切手を入れていないし、今後入れるつもりもない。 デコレーション的な意味合いでHTMLソースをどうしてもいじりたい部分は、 後述の自作プラグインで対応してる。

bqprettify

自作。 Font Awesome でblockquote要素をデコレーションするためだけ。

breadcrumbs

パンくずリスト。 階層分けができるからにはこれは欲しい。 ちなみに、拡張子を徹底排除する方向で少し改造済み。

codeprettify

自作。 Google Code Prettify でpre要素を色付けするためだけ。

disqus

microtemplate導入に伴って廃止。

自作。 Disqus のコメントフォームを表示するだけ。

extensionless

cool URI教徒な方がお作りあそばされたプラグイン。 cool URI教徒には必須。

headinglevel

うちは見出しレベルを

というルールにしているものの、 Markdownパーサに手を入れないという原則に従うと 記事中の見出しが困ったことになってしまう。 記事中の見出しを ### から始めるのもデータ的にダサい。 自作しようかと思ったら見事にマッチするプラグインがあったので、 'html' => +2 で使わせてもらってる。

それにしても、作者さんのページのコメント、

個別記事ページのデータとしての最適化を考えた場合、 今時のWeblogツールの多くがどのページをとって見てもサイト名(Weblog名) をh1要素としているのは安易な実装なのではないかと考えたりもするのです。

blosxom plugin: headinglevel - 徒書

うーん、一理ある…。

lastmodified2

きちんとキャッシュコントロールしてくれるプラグイン。 体感速度的にもそうなんだけど、 どちらかというと Last-modified 返さないのが気持ち悪いので。

microtemplate

最初はデフォでいいかなぁと思ったものの、 どうしてもテンプレート内で条件分岐したい要件が出てきたので導入。

notfound

URLにマッチする記事が一つもなかった場合に、 きちんと404を返してくれるプラグイン。 カテゴリのRSSは出したいので skip ルーティンをまるっと削除し、 ErrorDocumentを読んでその内容を返すように改造して使わせてもらってる。

previous_next

archives的なページを作る気がないので、 これを使って古い記事への到達性を(なんとか)確保している。 ちなみにこれも、拡張子を徹底排除する方向で少し改造済み。

search_control

microtemplate導入に伴って廃止。

自作。早い話が tDiarysearch_control.rb

検索エンジンのロボットに、余分なページのインデックスを作らないようにお願いしてみます。

storytitle

titleが $blog_title 決め打ちというのも寂しいので。

template_dir

$datadir にはデータしか置きたくないので。

top

WikiのFrontPage的な機能は絶対に欲しかったものの、 未来の日付でエントリ作るとかダサすぎるから絶対に避けたくて。 地味だけどほんとありがたいです、これ。

email2blosxom

いくらコマンドライン教徒といえども、 毎度毎度サーバにログインして書くのも面倒なので、 例によってメールでpostするためのスクリプト email2blosxom を書いてみた。

まぁ全体的に自分向けに書き捨てた感じなので、 もし使う場合はうまいこといじくり回してください。

以下、perldoc email2blosxom から。

NAME
       email2blosxom - A MIME message to individual file(s) converter

SYNOPSIS
       email2blosxom < mailfile

DESCRIPTION
       email2blosxom parses MIME message and splits into individual file(s).  As its name
       suggests, it's been intended to post new article for blosxom
       <http://blosxom.sourceforge.net/>.  However, it simplly behaves as, to say, MIME splitter.

CONFIGURATION
   DATA
       This script contains text template in itself, after the "__DATA__" token, in Template
       Toolkit format.  Substitutable variables are:

       title
           title text (expanded from e-mail subject)

       body
           body text (expanded from e-mail body)

       picts
           array of pictures (may be empty if no picture attached)

       pict.name
           file name of a picture

       pict.alt
           file name of a picture (identical with "pict.name", but you can overwrite by
           $cleanup_text, if you want)

   $output_file
       Points where to put text file into.  If you want some complex naming (i.e. include current
       date in file name), you can set this variable calling anonymous subroutine.

           our $output_file = &{sub{
               ... do something ...
               return $filename;
           }};

       If the file (or something) already exists, incremental number (like
       /some/path/basename-N.suffix) is automatically added.

   $picture_directory
       Points where to put attached picture(s) into.

       The original file name (included in MIME header) will be respected, but when the file
       already exists, will be treated in the same way as $output_file.

   $cleanup_text
       Reference to subroutine to be called just before writing new text file, to cleanup (i.e.
       escaping) text.

       This subroutine will be passed a hash reference.

           $ref = {
               'title' => title text,
               'body'  => body text,
               'picts' => [
                           {
                            name => file name of 1st picture,
                            alt  => identical with name,
                           },
                           .....
               ],
           };

   umask(XXXX)
       You may want set umask, especially when directories to put files into are shared by other
       users.

KNOWN BUGS
       ·   This script itself doesn't have any authentication mechanism (and I have no plan to
           implement.)

           You MUST filter e-mails using other programs, like procmail, before passing to this
           script.

       ·   This script sees 1st MIME part as text, and other parts (if exist) as attachments.  I
           know thant fixing this wouldn't be a hard work.  But because this behaviour seems to
           be OK in practical use, I won't fix it ;-)

AUTHOR
       ohkawa <http://88171.net/>

LICENSE
       This software is distributed under CC BY 3.0 license.

       <https://creativecommons.org/licenses/by/3.0/>

blosxom Disqusプラグイン

探してはみたものの(主にspam対策的な意味で) 良さげなコメントプラグインが見つからず、 でも一応コメント欄くらいは付けとくかなと思って、 Disqus用のプラグインを 書いたFacebookのComments Box も考えたんだけど、あんまりFacebookにロックインされるのもどうかなぁ、と。

いや、でもコメント欄を外出しにするなんて、 昔は考えてもみなかったけどね。 時代は変わりますわ。