無造作に積まれに積まれ、長い月日を経て出来上がった魔塔「ブック&CDタワー」を何とかしよう、ということで整理。雑然としていたタワーが、小綺麗なマンション風に生まれ変わりました。床積みであることには変わりませんが、見た目はかなり良くなりました。見た目だけは。
今日も掃除。要らないCD-Rを処分しているときに、冗談半分にエアガンでCD-Rを撃ってみたところ、一撃でCD-Rが粉砕されました。当たり所によっては皮膜が剥げるだけですが、これはなかなか楽しい。跳弾に気をつけることと、飛び散った皮膜の破片を掃除することを忘れないように…って掃除する箇所を増やしているような気が。
アキバ。あるものを買いにラジコンショップを探していました。探してみると意外と見つからないものです。昔は結構目立つ場所にいくつかあったと思うのですが。昔何度か行ったフタバ産業は店舗が移転しており、ちょっとわかりにくい場所にありました。この店に行くのは十数年ぶりでしょうか。昔よりも店内は広くなっていますし、雰囲気も変わっていました。ただ、ここでは目当てのものは見つからず結局LAOX ASOBITCITYで買うことになりました。
あとは絶対可憐と絶望先生を購入。書泉ブックタワーの漫画売り場、真ん中にエロマンガを平積みにするのはいかがなものかと思います。
KAGドキュメントのソースソースファイルの一つであるtags.database.tmlを、あんなことやこんなことをしてRFC822っぽい形式に変換しました。細かくバラしたので800ファイルになりました。続きは明日。
Perl/Tkであんなことやこんなことを。百聞は一見にしかず。
例によってサクラエディタ+PerlScriptで問題が出まして、Tkモジュールをuseするスクリプトを、同一プロセスから複数回実行すると意味不明なエラーが出たり。これは、Tkを使う部分だけ別のプロセスにして、標準出力で結果を受け取ることで回避しました(PerlReplace - miau's blog?の記事が役に立ちました)。
PerlScript、なんだか毎回変なところに労力を奪われています。もっと本質的な部分に注力したいんですけど…
RFC821はSMTPで、テキストメッセージフォーマットはRFC822でした。修正。ときどき混同します。ちなみに、数値に2000を足したRFC2821,2822がそれぞれRFC821,822をobsoleteしています。STD0010,0011はそれぞれRFC821,822のままだったような気が。
メモ。
WWWサイトを巡回していると、邪魔なトラックバックフォームとか、どういう基準で分類されたのかよくわからないカテゴリ一覧だとか、必要もないのに埋め込まれているスクリプトやらインナーフレームだとか、レンダリング時に無駄にアクセスが増えるだけのアフィリエイトとか、そういったノイズ *1 が大量に含まれたページに遭遇することが少なくありません。こういうサイトは「ブログ系」に多く、全リソースを取得するのに時間が掛かるだけでなく、レンダリング処理も重たくなるため、不快です。今まではFirefoxのプラグインを使って、サイト別にスタイルシートを用意し、ノイズとなるリソースを表示させないようにしていました。しかしこの方法では、Firefoxは全リソースを取得→作成者スタイルシートを適用→サイト別スタイルシートを適用、という動きをするため、最終的に見た目上のノイズは減るものの、そこに至るまでのプロセスが重たくなってしまいます。結局、あまり改善されていません。
何とかならないものかと考えたあげく、自宅のDeleGateにFTOCL(DeleGate→クライアント間のフィルタ)を設置することにしました。フィルタは、CFIを利用してContent-Typeがtext/htmlかapplication/xhtml+xmlの時だけ起動させます。
#!cfi Content-Type: text/html Content-Type: application/xhtml+xml Message-Filter: /path/to/dgmf/lib/DGMFilter/filter.pl
フィルタの実装はPerlで書きました。text/htmlにアクセスするたびにPerlのプロセスが起動される *2 ため、多少重いかなと予想していましたが、Pentium !!!(河童) 800MHz Dualにとっては大したことはないようです。速度面ではむしろフィルタスクリプトの実装に因るところが大きく、長い文字列に対して正規表現で修飾子i(大文字小文字無視)などを使うとそれなりに重たくなります。この辺に気をつけてさえいれば、特に違和感なくサイトを閲覧できるようになります。というか、毎回プロセスが起動される方式であれば、当然毎回スクリプトが読み直されるわけで、ちょっとした変更やデバッグの際にはこの方が適しているとも言えます。下手に常駐型にして、変更のたびに何かを再起動するのは、面倒なことこの上ありませんからね。
フィルタの実装はサイトごとに異なるので、サイトの数だけ実装が必要になりますが、最近はサイト単位にドメインが割り振られていることが多いので、ドメイン(完全修飾)単位で実装を分離します。URLのパスやポート番号で実装を分離したいときには、環境変数PATH_INFOやSERVER_PORTを引いて場合分けすればよいので、ドメイン単位の分離方法でも特に問題はありません。ドメイン名の文字列はそのままファイル名としても使用できるので、「ドメイン名 + '.pl'」としてドメイン単位にスクリプトファイルを分割できます。実行時には、ドメイン名に応じて随時requireするだけです。この方式の利点は、透過的なインターフェースを使って実装できることにあります。つまり、どのスクリプトファイルも同じ名前、同じ引数のサブルーチン(具体的にはeditHeaderとeditBody)を書くだけでよい、ということです。必要に応じてスクリプトファイルを配置し、不要になったらリネームなり削除なりするだけで、追加削除を簡単に行うことが出来ます。
さて、試しにいくつかのサイト向けにフィルタを書いてみました。誰も見ないアフィリエイトとか、無駄なIMGタグとかをガリガリ削ったところ、サイトによっては驚くほど軽快になりました。快適快適。
アキバ。鉄道むすめのグッズでも買おうかと思いましたが、いざ実物を目にして、買っても使い道がないことがわかったので購入中止。その代わりというわけでもないのですが、割と出来がよいと評判の水銀燈を購入。あとは本を数冊。ちなみに、鉄道むすめのフィギュア自体は午前中に既に届いているので問題なし。
ところで、「水銀燈」でググると凄いのがトップに来ますね。
昨日の続き。
対応サイト追加と、デバッグモード等追加。デバッグモード、フィルタの有効無効切り替えは設定ファイルで行えるようにしました。単にフラグとして機能すればよいので、特定の名前でファイルを作ると有効に、そのファイルを消せば無効になる形式にしました。こうしておくと、touch conf/debugmodeやrm conf/debugmodeとするだけで切り替えられます。エディタ不要。