<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>blosxom / Drkcore</title><link>http://blog.kzfmix.com/blosxom</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Thu, 10 May 2007 22:05:22 +0919</lastBuildDate><item><title>blosxomの移行</title><link>http://blog.kzfmix.com/entry/1178802322</link><description>&lt;p&gt;昼間の雷雨のせいで瞬停があって、サーバーが落ちてた。ちょっとUPSから外してたのでタイミングが悪かった。&lt;/p&gt;
&lt;p&gt;で、このサーバー不安定だから、新しいサーバーに変えるタイミングでblosxomもやめようかなとか思ってるんだけど、データのマイグレーションがめんどくさそうで躊躇してた。&lt;/p&gt;
&lt;p&gt;どうしよーかなー？と思ってたら、RSSに全エントリ吐き出して、それをparseすればいいじゃんとか思った。それかstaticで吐き出しておいて、そのまま残すかな。&lt;/p&gt;
&lt;p&gt;あと、ちゃんとドメインとる。&lt;/p&gt;
&lt;p&gt;ここらへんを今月来月の目標に。&lt;/p&gt;</description><pubDate>Thu, 10 May 2007 22:05:22 +0919</pubDate><category>blosxom</category></item><item><title>新しいサーバーにblosxomを移したりしてたが</title><link>http://blog.kzfmix.com/entry/1171294134</link><description>&lt;p&gt;新しいサーバーにblosxomを移そうとしているがやっぱ遅い、っていうか負荷かかりすぎ。あとは、自作の変なプラグインが入ってるので、cpanのモジュール入れたりするのが大変すぎ。あとこれだと、折角、サーバーのスペックあげても、容赦ないロボット来たらやられちゃうナァって感じの負荷量。&lt;/p&gt;
&lt;p&gt;modだmodとか言って&lt;a href="http://www.donzoko.net/cgi-bin/blosxom/blosxom.cgi/Modblosxom/intro.html"&gt;Modblosxom&lt;/a&gt;にしようかしらと思って、移行しようとしてみたけど、今の環境をそのままmodblosxomで動かすにはモジュール化しなければいけないプラグイン多すぎだ。&lt;/p&gt;
&lt;p&gt;じゃぁ、いっそ&lt;a href="http://pyblosxom.sourceforge.net/"&gt;pyblosxom&lt;/a&gt;でpythonの勉強も兼ねていじってみようか。と思ってたら、&lt;a href="http://www.everes.net/2006/nov/12/djblogkit_01/"&gt;Djangoのblogキット&lt;/a&gt;ってのもあるらしい。悩む。turbogeasでも似たようなものあるのかな？&lt;/p&gt;
&lt;p&gt;perlだったら、&lt;a href="http://catlxom.org/trac/"&gt;catlxom&lt;/a&gt;とか&lt;a href="http://code.google.com/p/bifty/"&gt;bifty&lt;/a&gt;、あとは&lt;a href="http://typeface-project.org/"&gt;Typeface&lt;/a&gt;あたりな気がするが。&lt;/p&gt;
&lt;p&gt;むー。ずっとblosxom使っていて気になってたのはやっぱ下書きを保存しておく機能がないとつらいよなってことなので、変えるんだったら下書き機能が標準でついてるやつ。&lt;/p&gt;
&lt;p&gt;変えないんだったら、blosxomをもうちょいいじって、基本はstaticでサイドバーのコメントとかトラックバックとかJSONにするのがいいような気がする。あとは&lt;a href="http://blog.kzfmix.com/entry/1157204347"&gt;dynamic_cache&lt;/a&gt;はスパムとか来るたびにrecacheで今までのキャッシュ消しちゃうので、こっちをなんとかしても、負荷対策になるような気がする。&lt;/p&gt;</description><pubDate>Tue, 13 Feb 2007 00:28:54 +0919</pubDate><category>blosxom</category></item><item><title>Lingua::JA::SummarizeとHyper Estraierでsimilar_entryプラグイン</title><link>http://blog.kzfmix.com/entry/1168517954</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1168697376"&gt;Lingua::JA::Summarizeの特徴語をHyper Estraierで検索できるようにした&lt;/a&gt;ので、類似のエントリを表示するblosxomプラグインを書いた。&lt;br /&gt;
個別のエントリの下のほうに5個表示するようになってる。&lt;/p&gt;
&lt;p&gt;色々眺めてみてるけど、短いエントリは精度が悪いのと、単純にOR検索だとあんま思ったような結果が得られない。やっぱ適当な重み付けが必要なんだろうナァ。&lt;/p&gt;
&lt;p&gt;estseek.cgiの場合はこんな感じで評価するようだ。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hyperestraier.sourceforge.net/uguide-ja.html" title="User's Guide of Hyper Estraier Version 1 (Japanese)"&gt;User's Guide of Hyper Estraier Version 1 (Japanese)&lt;/a&gt;
&lt;blockquote&gt;estseek.cgiの場合、「[similar]」というリンクを選択すると類似検索を行うことができます。類似検索の結果は類似度の降順に並べられます。類似度はベクトル空間モデルという考え方に基づいて算出されます。文書からキーワードを取り出してベクトルとして表現し、ベクトル同士のなす角の余弦を類似度とするものです。&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://chasen.org/~daiti-m/paper/naist-dlec2004-lmodel.pdf"&gt;あとでこれ読む&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 11 Jan 2007 21:19:14 +0919</pubDate><category>blosxom</category></item><item><title>Hyper Estraier</title><link>http://blog.kzfmix.com/entry/1165186898</link><description>&lt;p&gt;あるとわかっているのに辿りつけないもどかしさというか、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;google 検索結果返す 故にエントリ有り&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;というようなgoogle認識論的なアプローチに依存しすぎるということはちょっとツライことに気付いた。&lt;/p&gt;
&lt;p&gt;ちゅうのは、自サイトの検索を&lt;a href="http://blog.kzfmix.com/entry/1145527712"&gt;google&lt;/a&gt;に任せてからそこそこ経つんだけど、googleは被リンク数が少ないと（クローラーはガッツリ持ってくくせに）検索結果の表示対象にならない。そのため、自分で書いたエントリが&lt;strong&gt;あるはずなのに探せない&lt;/strong&gt;という状況が頻発した。&lt;/p&gt;
&lt;p&gt;なんで、やっぱ自前で検索エンジン入れる必要があるなぁと、&lt;a href="http://hyperestraier.sourceforge.net/"&gt;Hyper Estraier&lt;/a&gt;を利用して検索できるようにした。&lt;/p&gt;
&lt;p&gt;僕のサイトは&lt;a href="http://blosxom.info/"&gt;blosxom&lt;/a&gt;で構築されている。これは、データベースでなく普通のテキストファイルでエントリを管理しているので、Hyper Estraierのestcmdでデータディレクトリを検索対象にすればよい。ただし、これだと、タイトル属性がないために、検索結果のタイトルがファイル名になってしまう。&lt;/p&gt;
&lt;p&gt;blosxomのエントリデータは先頭行がタイトルのテキストデータなので、ここら辺をちょっといじくるblosxom用のフィルタを作成した。&lt;/p&gt;
&lt;p&gt;まずは、フィルタを作成。/usr/local/share/hyperestraier/filterのestfxpdftohtmlをコピーしてフィルタを作成。下はdiffってみたけど、要するにpdftotextのコマンドをblosxom用のコンバートコマンドに書き換えれば良いだけ。僕の使っている&lt;a href="/tools/estfxblosxomtohtml.txt"&gt;estfxblosxomtohtml&lt;/a&gt;。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="gd"&gt;--- estfxpdftohtml      2006-12-02 16:09:34.000000000 +0900&lt;/span&gt;
&lt;span class="gi"&gt;+++ estfxblosxomtohtml  2006-12-02 17:47:04.000000000 +0900&lt;/span&gt;
&lt;span class="gu"&gt;@@ -1,14 +1,14 @@&lt;/span&gt;
 #! /bin/sh
 #================================================================
&lt;span class="gd"&gt;-# extfxpdftohtml&lt;/span&gt;
&lt;span class="gi"&gt;+# extfxblosxomtohtml&lt;/span&gt;
 # Convert PDF into HTML
 #================================================================

 # set variables
 PATH=&amp;quot;$PATH:/usr/local/bin:$HOME/bin:.&amp;quot; ; export PATH
&lt;span class="gd"&gt;-progname=&amp;quot;estfxpdftohtml&amp;quot;&lt;/span&gt;
&lt;span class="gi"&gt;+progname=&amp;quot;estfxblosxomtohtml&amp;quot;&lt;/span&gt;

 # check arguments
&lt;span class="gu"&gt;@@ -56,7 +56,7 @@&lt;/span&gt;

 # output the result
&lt;span class="gd"&gt;-pdftotext -enc UTF-8 -htmlmeta &amp;quot;$infile&amp;quot; - 2&amp;gt; &amp;quot;/dev/null&amp;quot; | output&lt;/span&gt;
&lt;span class="gi"&gt;+bldata2html &amp;quot;$infile&amp;quot; - 2&amp;gt; &amp;quot;/dev/null&amp;quot; | output&lt;/span&gt;

 # exit normally
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;で、blosxomのデータをhtmlに吐くには先頭行だけtitle属性で囲んで、あとはそのまま出力すればいいんだけど、僕はmarkdown使っているので、フィルタリングしてhtmlに出力するようなスクリプトにした。これがpdftotxtにあたるbldata2htmlで/usr/local/binとかのパスの通ったところに保存する。&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;#!/usr/bin/perl&lt;/span&gt;

&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;FileHandle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Text::&lt;/span&gt;&lt;span class="n"&gt;Markdown&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;markdown&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$filename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;FileHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$filename&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s-Regexp"&gt;&amp;lt;$fh&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;chomp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$title&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nb"&gt;local&lt;/span&gt; &lt;span class="vg"&gt;$/&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;undef&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s-Regexp"&gt;&amp;lt;$fh&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;markdown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;&amp;lt;title&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$title&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;&amp;lt;/title&amp;gt;\n&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;あとは、実際にインデックスをつくる。txt属性はestfxblosxomtohtmlフィルタをかますようにオプションを指定しておく。最後のextkeysは検索速度向上のため。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PATH:&lt;/span&gt;&lt;span class="sr"&gt;/usr/&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="sr"&gt;/share/&lt;/span&gt;&lt;span class="n"&gt;hyperestraier&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;export&lt;/span&gt; &lt;span class="n"&gt;PATH&lt;/span&gt;
&lt;span class="n"&gt;estcmd&lt;/span&gt; &lt;span class="n"&gt;gather&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;il&lt;/span&gt; &lt;span class="n"&gt;ja&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;fx&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;.txt&amp;quot;&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;H@estfxblosxomtohtml&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt; &lt;span class="n"&gt;casket&lt;/span&gt; &lt;span class="sr"&gt;/var/&lt;/span&gt;&lt;span class="n"&gt;blosxom&lt;/span&gt;&lt;span class="sr"&gt;/data/&lt;/span&gt;
&lt;span class="n"&gt;estcmd&lt;/span&gt; &lt;span class="n"&gt;extkeys&lt;/span&gt; &lt;span class="n"&gt;casket&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;で、実際に&lt;a href="/cgi-bin/estseek.cgi"&gt;estseekで検索する&lt;/a&gt;といい感じ。後は定期的にインデックスの更新するようにしとけば、自サイトの検索はOK。今のとこ、cronでインデックスの更新するようにしていないので、blosomの検索フォームはgoogleのままだけど、そのうち変更しよう。&lt;/p&gt;
&lt;p&gt;あとは、blosxomのエントリに類似エントリ検索をした結果を表示するプラグインを作っておけば便利かな。&lt;/p&gt;</description><pubDate>Mon, 04 Dec 2006 08:01:38 +0919</pubDate><category>blosxom</category></item><item><title>スパムをはじくblosxomプラグイン2種</title><link>http://blog.kzfmix.com/entry/1163593186</link><description>&lt;p&gt;最近、やたらとスパムなトラックバックが多い。毎回ファイル見ながら消すのも面倒になってきたので、スパムよけのプラグインを入れてみた。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://andi.jp/blosxom/plugins/ban_norefer_tb.html" title="れっつ日記 - 【移植】言及リンクのない TrackBack ping を弾くプラグイン"&gt;れっつ日記 - 【移植】言及リンクのない TrackBack ping を弾くプラグイン&lt;/a&gt;
&lt;blockquote&gt;本プラグインをインストールするとトラックバック元のサイトに自分のブログへのリンクが含まれているかを確認し、含まれていない場合トラックバックをエラーにします。&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;で、コメントスパムよけのcaptchaなプラグインもついでに探してみたら、それっぽいのを&lt;a href="http://bill.wards.net/blosxom/computers/blosxom/colophon/index.html"&gt;発見&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;他にも&lt;a href="http://cu39.s57.xrea.com/tags/spam"&gt;こんな感じ&lt;/a&gt;で色々あるらしいが、とりあえずcaptchaプラグインを入れてみた。&lt;/p&gt;
&lt;p&gt;captchaプラグインを使うためには次の二つのモジュールとプラグインが必要。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Authen::Captchaモジュール&lt;/li&gt;
&lt;li&gt;interpolate_fancyプラグイン&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただし、captchaの認証のコードはこんな感じで失敗するとdieするだけなので、&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nb"&gt;die&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;captcha failed ($reasons{$results})\n&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;試しに認証失敗してやると、こんな感じの綺麗とはいえないエラーを吐く。&lt;/p&gt;
&lt;p&gt;&lt;img alt="captcha error" src="http://www.kzfmix.com/images/blosxom/captchaerror.png" /&gt;&lt;/p&gt;
&lt;p&gt;スパム対策が効いてるようだったら、後で手を加えよう。&lt;/p&gt;</description><pubDate>Wed, 15 Nov 2006 21:19:46 +0919</pubDate><category>blosxom</category></item><item><title>Net::MovableTypeを使ってblosxomに投稿</title><link>http://blog.kzfmix.com/entry/1160753699</link><description>&lt;p&gt;あーそういえば、&lt;a href="http://blog.kzfmix.com/entry/1111722466"&gt;BXR&lt;/a&gt;ってのがあったなというのを思い出したので、Net::MovableTypeで投稿することを思いついた。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$mt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nn"&gt;Net::&lt;/span&gt;&lt;span class="n"&gt;MovableType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;http://localhost/blosxom-xmlrpc.cgi/RPC2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$mt&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;kzfm&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$mt&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;okbkj&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$mt&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;blogId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;title&lt;/span&gt;       &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Hello World from Net::MovableType&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;おーけーおーけーＯＫ牧場&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nv"&gt;$mt&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;newPost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$entry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;img alt="mttest" src="http://www.kzfmix.com/images/blosxom/mttest.png" /&gt;&lt;/p&gt;
&lt;p&gt;おー、かなりOK牧場だ。&lt;/p&gt;
&lt;p&gt;ちなみにpackage blosxomのnewPostをちょっといじって常にランダムなファイル名を付与するようにした。ファイル名考えなくていいってだけでも精神的にはかなりラク。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c"&gt;#    if ( defined( $struct-&amp;gt;{&amp;#39;postid&amp;#39;} ) ) {&lt;/span&gt;
&lt;span class="c"&gt;#        $filename = BXR::getFilenameFromPostId( $struct-&amp;gt;{&amp;#39;postid&amp;#39;} );&lt;/span&gt;
&lt;span class="c"&gt;#    }&lt;/span&gt;
&lt;span class="c"&gt;#    else {&lt;/span&gt;
&lt;span class="c"&gt;#        $filename = lc( $struct-&amp;gt;{&amp;#39;title&amp;#39;} );&lt;/span&gt;
&lt;span class="c"&gt;#        $filename =~ s/\W+/_/g;&lt;/span&gt;
&lt;span class="c"&gt;#        $filename =~ s/_+$//;&lt;/span&gt;
&lt;span class="c"&gt;#        $filename = BXR::getRandomFilename() unless $filename =~ m/[a-z]/;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;これで、Plagger::Plugin::Publish::MTを使ってChangelog2blosxomができるはず。ここまでやれれば、僕はchangelogだけに集中すればよくて、それ以降の処理はplaggerがよきにはからってくれるのでかなり調子いいかも。あとは学会とかセミナーの参加ログもchangelogでとってるのでms-wordにpublishしたいなぁ。&lt;/p&gt;</description><pubDate>Sat, 14 Oct 2006 00:34:59 +0919</pubDate><category>perl</category><category>plagger</category><category>blosxom</category></item><item><title>dynamic_cacheプラグインで静的なキャッシュを</title><link>http://blog.kzfmix.com/entry/1157204347</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1144804315"&gt;うちのマシンは非力&lt;/a&gt;でcgiの起動は結構負荷がかかるので、以前から&lt;a href="http://blog.kzfmix.com/entry/1156856461"&gt;どうにかしたいなぁ&lt;/a&gt;と思っていた。いま使っている&lt;a href="http://blog.kzfmix.com/entry/1133918278"&gt;dynamic_cacheプラグイン&lt;/a&gt;で、負荷軽減はかなりされたんだが、それでも最初にcgiを起動してしまうので、どうにかして静的なキャッシュの仕組みを作れないかと四苦八苦してみた。&lt;/p&gt;
&lt;p&gt;現在、サーバーの設定は.htaccessでファイルとかディレクトリがない場合に、blosxom.cgiを実行するようになっている。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;RewriteCond&lt;/span&gt; &lt;span class="nv"&gt;%&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;REQUEST_FILENAME&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;!-&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;
&lt;span class="n"&gt;RewriteCond&lt;/span&gt; &lt;span class="nv"&gt;%&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;REQUEST_FILENAME&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;!-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;
&lt;span class="n"&gt;RewriteRule&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;blosxom&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cgi&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;QSA&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;だから、blosxomのディレクトリとdynamic_cacheのキャッシュ先を一緒にすれば、キャッシュされたファイルは次回からは直接httpdにより処理される。&lt;/p&gt;
&lt;p&gt;ここまでは以前試してあったのだが、これだと問題が３つある。一つは設定に関することで、残りの二つはプラグインをいじらないといけない問題だ。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;rootのindex.htmlとblosxom.cgiがバッティングしてえらいことになる。&lt;/li&gt;
&lt;li&gt;dynamic_cacheはヘッダーも含めてキャッシュするので、キャッシュ表示の際にContent-Typesとか表示されてしまう。&lt;/li&gt;
&lt;li&gt;recache=allでキャッシュディレクトリ以下のすべてのファイルが消去されてしまうため、キャッシュ先をルートに設定するとblosxomのサブディレクトリ以外の画像ファイルとかも消してしまう。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;1に関しては&lt;a href="http://blog.kzfmix.com/entry/1156856461"&gt;先日発見した&lt;/a&gt;通りに適当なディレクトリを用意してそこにRewriteするようにすればよい。うちだとこんな感じ。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;DirectoryIndex&lt;/span&gt; &lt;span class="nb"&gt;index&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;
&lt;span class="n"&gt;RewriteEngine&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;

&lt;span class="n"&gt;RewriteCond&lt;/span&gt; &lt;span class="nv"&gt;%&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;REQUEST_FILENAME&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;!-&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;
&lt;span class="n"&gt;RewriteCond&lt;/span&gt; &lt;span class="nv"&gt;%&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;REQUEST_FILENAME&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;!-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;
&lt;span class="n"&gt;RewriteRule&lt;/span&gt;   &lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="o"&gt;^.&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;        &lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;bldir&lt;/span&gt;&lt;span class="sr"&gt;/blosxom.cgi/&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;QSA&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;で、残りの二つはdynamic_cacheプラグインを修正して対応。2はヘッダー除いて保存するようにdynamic_cacheを書き換えた。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="c1"&gt;# キャッシュファイル出力&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$fh&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;gt; $cache_dir/$cachefile&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;blosxom::&lt;/span&gt;&lt;span class="nv"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=~&lt;/span&gt; &lt;span class="sr"&gt;s/^Content-Type: .*?; charset=.*?\r?\n\r?\n//&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt; &lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;blosxom::&lt;/span&gt;&lt;span class="nv"&gt;output&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nb"&gt;close&lt;/span&gt; &lt;span class="nv"&gt;$fh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;logput&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;SAVE &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;3に関しては、dynamic_cacheで使っている&lt;a href="http://mfpm.blogdb.jp/app/view/File::Path/"&gt;File::Path&lt;/a&gt;って知らなかった。&lt;br /&gt;
&lt;a href="http://search.cpan.org/~nwclark/perl-5.8.8/lib/File/Path.pm"&gt;ドキュメント&lt;/a&gt;読んだら、消したいディレクトリとかファイルのリストのリファレンスを与えればよいらしい。&lt;br /&gt;
dynamic_cacheだとキャッシュ用ディレクトリを消すようになっていたので、ここを書き換えた。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="c1"&gt;# キャッシュ全クリア&lt;/span&gt;
    &lt;span class="c1"&gt;# 【flavourの記述例】&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;recache&amp;quot; value=&amp;quot;all&amp;quot;&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$recache&lt;/span&gt;&lt;span class="o"&gt;=~&lt;/span&gt;&lt;span class="sr"&gt;/all/i&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="nn"&gt;File::&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;@del_dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$cache_dir&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Computer&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Etc&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;daily&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Food&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                  &lt;span class="s"&gt;&amp;quot;trekking&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;index.rss10&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;index.html&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                  &lt;span class="s"&gt;&amp;quot;2004&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;2005&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;2006&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                  &lt;span class="s"&gt;&amp;quot;index.rss&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;index.xml&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nn"&gt;File::Path::&lt;/span&gt;&lt;span class="n"&gt;rmtree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="nv"&gt;@del_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;logput&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;CLEAR&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ALL&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;こんな感じで、今のところ静的にキャッシュされている感じだが、このせいで、taggingプラグインみたいにgetで処理するプラグインが動かなくなってしまった。&lt;/p&gt;
&lt;p&gt;これもRewriteRuleでうまく処理できるのだろうか？&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1148131645"&gt;Search::Estraier&lt;/a&gt;を使うことを考えたほうがよいかなと思ったりもしてるが。&lt;/p&gt;</description><pubDate>Sat, 02 Sep 2006 22:39:07 +0919</pubDate><category>blosxom</category><category>apache</category></item><item><title>またもやblosxomの遅さが気になってきたヨ</title><link>http://blog.kzfmix.com/entry/1156856461</link><description>&lt;p&gt;ココ何日か、blosxomの遅さが気になりはじめてきた。クライアントでページを表示させるのに10秒以上かかると、さすがに遅いナァって思うし、サーバー状況をtopで眺めてると、5つくらいのblosxom.cgiでスワップしそうになるので精神衛生上もよくない。
やっぱ静的なキャッシュにしたいなぁという思いが強まってきた。とりあえず気休め程度にページングとかのキャッシュ対象にしていないプラグインをはずしてみたり、last.fmのやたらと遅いjsをやめてみたりしている。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1133918278"&gt;以前dynamic_cacheで試した方法&lt;/a&gt;だとうまくいかなかったからなぁと何気に検索かけてみたら、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://torus.jp/doc/blosxom/semi_static.html"&gt;をを～cgiはドットなディレクトリに配置すればいいんだ&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;と。&lt;/p&gt;
&lt;p&gt;昔参考にしたのにちゃんと理解してなかったヨ。&lt;/p&gt;
&lt;p&gt;新しいサーバーはこの設定で動かしてみよう。&lt;/p&gt;
&lt;p&gt;あと、google sitemaps使ってるけど、ヒットしないページが結構あるので、ついでに検索は&lt;a href="http://blog.kzfmix.com/entry/1148131645"&gt;Search::Estraier&lt;/a&gt;に変更したい。&lt;/p&gt;</description><pubDate>Tue, 29 Aug 2006 22:01:01 +0919</pubDate><category>blosxom</category></item><item><title>Catalyst::Plugin::Flavourはdev向けでいれる</title><link>http://blog.kzfmix.com/entry/1148810676</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1148482001"&gt;catlxom&lt;/a&gt;動かんから週末ちゃんとみようとか思ってたら、ナイスなタイミングでエントリが。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mizzy.org/program/" title="mizzy.org"&gt;mizzy.org&lt;/a&gt;
&lt;blockquote&gt;まず、cpan コマンドで Catalyst::Plugin::Flavour をインストールすると、バージョン 0.02 が入るのですが、これだと catlxom は動きません。DEVELOPER RELEASE の 0.029_01 のソースをもってきてインストールする必要があります。&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;これで解決。&lt;/p&gt;
&lt;p&gt;で、家のサーバーで動かそうとFC1(perl-5.8.3)な環境で試したら、&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;code&gt;&lt;pre&gt;$ ./script/catlxom_server.pl 
Operation `""': no method found, argument in overloaded package
 Catlxom::Plugins at /usr/lib/perl5/5.8.3/overload.pm line 97.
Compilation failed in require at ./script/catlxom_server.pl 
line 49.
&lt;/pre&gt;&lt;/code&gt;
&lt;/blockquote&gt;

&lt;p&gt;perlのバージョンあげなあかんかな。&lt;/p&gt;</description><pubDate>Sun, 28 May 2006 19:04:36 +0919</pubDate><category>blosxom</category><category>catalyst</category></item><item><title>catlxom</title><link>http://blog.kzfmix.com/entry/1148482001</link><description>&lt;p&gt;なんか&lt;a href="http://blog.kzfmix.com/entry/1144804404"&gt;最近サーバー不調&lt;/a&gt;だし、新しいマシン買ってmod_blosxomにでも乗り換えようかなとか思ってたら、&lt;a href="http://unknownplace.org/memo/tag/catlxom"&gt;catlxom&lt;/a&gt;なるものの開発が進んでるらしい。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;をを～素晴らしい&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;早速svn co してcolinux上で走らせてみますよ。&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;code&gt;&lt;pre&gt;$ ./script/catlxom_server.pl 
You can connect to your server at http://colinux:3000
[Wed May 24 22:04:17 2006] [catalyst] [error] 
Caught exception in Catlxom-&gt;default "Can't locate object 
method "year" via package "html" (perhaps you forgot to load "html"?) 
at /home/kzfm/catalyst/catlxom/plugins/Filter/Date.pm line 15."
&lt;/pre&gt;&lt;/code&gt;
&lt;/blockquote&gt;

&lt;p&gt;とエラー。Date.pmみてみると&lt;/p&gt;
&lt;blockquote class="terminal"&gt;&lt;code&gt;&lt;pre&gt;    for (qw/year month day/) {
        if ( $c-&gt;flavour-&gt;$_ ) {
&lt;/pre&gt;&lt;/code&gt;
&lt;/blockquote&gt;

&lt;p&gt;だから、Catalyst::Plugin::Flavourのここらへんから追っかけていけばいいのかなぁ。
&lt;blockquote class="terminal"&gt;
&lt;code&gt;&lt;pre&gt;$c-&amp;gt;flavour( $c-&amp;gt;config-&amp;gt;{flavour}-&amp;gt;{default_flavour} || 'html' )
        unless $c-&amp;gt;flavour;
    $c;
}
&lt;/pre&gt;&lt;/code&gt;
&lt;/blockquote&gt;&lt;/p&gt;
&lt;p&gt;でも、なんでこれが、htmlロードすんの忘れてんじゃない？というエラーになるのかが良くわかってない。&lt;strong&gt;$c-&amp;gt;flavour-&amp;gt;$_&lt;/strong&gt;が気になる。週末にちゃんと読もう。&lt;/p&gt;
&lt;p&gt;あと、IRCくらい扱えるようにしといたほうが色々といいのかなとか思ってChatZilla入れたけど、いまいち使い方がわからん。これも週末に少し触ってみよう。&lt;/p&gt;</description><pubDate>Wed, 24 May 2006 23:46:41 +0919</pubDate><category>blosxom</category><category>catalyst</category></item></channel></rss>