まだ重たいCMSをお使いですか?
毎秒1000リクエスト を捌く超高速CMS「adiary

2006/05/29(月)POSTしたものを保存させると……

Content-Type技、色々

データをブラウザで開くのではなく、直接ファイルに保存させたい場合は、

Content-Type: application/xxx-data

という風にしておけば、大抵は未登録のコンテントタイプなので保存指示ウィンドウが出るようになります。

しかし、POST時にこの方法を用いてファイルを保存させようとすると、ファイル名選択ダイアログが出てきません(Firefoxにて確認)。各種blogツールにおいて、エクスポート時のメソッドがなぜGETなのか今まで疑問だったのですが、ようやく謎が解けました。

教訓:POSTメソッド発行時にファイルに保存させようとしてはいけない

おまけ

cgiのファイルなどを実行させずに、そのままのファイル名でブラウザで表示させたい場合は

AddType text/plain .cgi
RemoveHandler .cgi

というふうにします(Apache2用)。http://adiary.abk.nu/tools/tdiary2adiary.cgiで使ってる技です。

追記。mod_perlの影響か、RemoveHandler がうまく働かなくなってましたので、次のようにしました。

AddType text/plain .cgi
AddHandler default-handler .cgi

Content-Typeを変更せずにファイルとして保存させる

cgiの場合、もっとスマートにファイルとして保存させる方法を発見しました。

Content-Disposition: attachment; filename=export_file_name.txt
Content-Type: text/plain; charset=(文字コード);

とすれば良いようです。

2006/05/27(土)tDiaryからはてな形式に変換

入力スタイル変換

tdiary2adiary.cgiに、ついカッとなって、はてな形式への入力スタイル変換を付けてしまいました(笑) その上、さらにカッとなってtDiaryを解放状態で設置して、ログ変換のリアルタイムサンプルに(ぉぃぉぃ)。はてな自体が、もともとtDiaryを参考にしているだけあって、入力スタイル変換はとても簡単でした。

もちろんはてな入力スタイルに強い影響を受けている、adiaryへもそのまま取り込むこともできます。しかしてtDiaryからはてなへの移行って単なるtDiary or はてなダイアリーのサポートツール。何やってるんだろ(笑)

tDiaryのエクスポートツール

tDiaryに、tDiary2形式でいいから、そのまま1つのファイルにまとめて出力(エクスポート)するツール付属すればいいのにねぇ……。

2006/05/25(木)5/25版スナップショット

  • セクションアンカー、サブセクションアンカーを任意に設定できるようにしました(日記帳の設定より)。
  • その関係で、従来から引き継ぎの場合は「日記帳の詳細設定→パーサー関連の設定→セクションアンカー」に「■」を設定してください。*1
  • tDiaryスタイル互換パーサーに amazon.rb 相当の機能を実装しました*2
  • ローカルIP/グローバルIP併用サーバでの運用対策を再々度修正。3度目の正直?(^^;
  • 内部のファイル/SELECT文キャッシュ機構において、キャッシュそのものではなくキャッシュのコピーを返すよう変更しました。*3
  • RSS 内の相対リンクを絶対リンクに書き換えるようにしました。
  • その他、色々bug-fix

*1 : 未設定のときに標準設定を読み出す仕組みがあればいいんですが、スマートな方法が浮かばす考え中

*2 : 他に欲しいもの、欠かせないもの、何かありますか? >tDiary user

*3 : 数ms遅くなりましたが、安全のために気にしない方向で

2006/05/25(木)タグの認識を正規表現で

一昔前の掲示板などで利用出来るタグを制限できるものがありますが、それと同等のモジュール(自作)をadiaryでは使用しています。属性値を認めると途端にタグの解析が難しくなります。

#!/usr/local/bin/perl
use strict;

my $inp = join('', <>);
while($inp =~ /(<\w([^>"']|[=\s\n]".*?"|[=\s\n]'.*?')*?>)/s) {
	$inp = $';
	print "$1\n";
}

だいたいこれでタグを認識できますが、IE/Firefox/Operaなどで色々確認した結果、壊れた(不正な形式の)htmlタグの解釈は統一されておらず、結局、その辺の仕様まで完全にサポートすることは非常に難しく、そこをつつけば、この手のタグ制限ルーチンの解析を避けて、ブラウザに対し不正なタグを認識させる(XSSする)ことが可能なようです。

2006/05/24(水)5/24版スナップショット

tDiaryスタイルのパーサーは非常に簡単でした。1パスのパーサー、1時間ちょいで出来ました。標準パーサーもこれぐらいスリムにしたいけど……無理、絶対無理(苦笑) いやたぶん現状4パスを3パス、2パスぐらいにまではできると思いますが、ソースがスパゲティーの極みみたいになるので、処理速度よりも安全(+メンテ性)を取ります、はい(^^;

tDiaryって普及している割に、インポーターもエクスポーターもないんだよなぁ……。公式に作る気はないんだろうか……というよりも、プラグインで誰か作りましょうってことなのかもしれず。