毎秒1000リクエスト を捌く超高速CMS「adiary」
2006/05/24(水)5/24版スナップショット
- tDiary形式のテキストパーサーを実装しました。
- tDiaryのログデータをadiary形式のデータファイルに変換するツール(エクスポーター)を作成しました。
- その他、bug-fix
tDiaryスタイルのパーサーは非常に簡単でした。1パスのパーサー、1時間ちょいで出来ました。標準パーサーもこれぐらいスリムにしたいけど……無理、絶対無理(苦笑) いやたぶん現状4パスを3パス、2パスぐらいにまではできると思いますが、ソースがスパゲティーの極みみたいになるので、処理速度よりも安全(+メンテ性)を取ります、はい(^^;
tDiaryって普及している割に、インポーターもエクスポーターもないんだよなぁ……。公式に作る気はないんだろうか……というよりも、プラグインで誰か作りましょうってことなのかもしれず。
2006/05/23(火)5/23版スナップショット
- Movable Type形式のインポートに対応しました*1。
- 【TextParser】perlモジュールによるタグの拡張をプラグイン式として実装しました。
- その他、細かいbug-fix
余談ですが
Movable Type形式そのもの(Movable Typeの実装)に欠陥があり、本文データにセパレータである「-----\n」や「--------\n」を含むとまともにインポートできない(Movable Type自身ですら読み出せない)Movable Type形式のデータを吐き出します。それでいいのかMovable Type(笑
まぁ、説明のタイトルからして「Movable Type形式フォーマット」ではなく「Movable Typeの読み込みフォーマット」なので、書き出しはおまけ*2なのだと思いますが(笑)
2006/05/20(土)5/20版スナップショット
- はてな/adiary形式のインポータを作成しました(Movable Type形式はまだ)。
- シングルユーザーモードでのカテゴリ検索の不具合を修正。
- w3m でうまく動作しない不具合に対応しました。
- 一部のフォームが<input type="input">と意味不明なことになっていたので修正しました*1。
- 【TextParser】listブロック中やtableブロック中でコメントやエスケープ処理に問題があったのを修正しました*2。また、はてな記法との互換性を若干高めました。
- 【TextParser】[[keyword]]はすべてはてなキーワードへのリンクにしておいたのですが、pukiwiki的記法と間違えやすいようなので、\[(\[[\w\-]+?:.+?\])\]なときは二重括弧も通常の括弧[tag]記法表記と同一に扱うようにしました。
- 【文字コード変換】http://www.fiberbit.net/user/hobbit-t/html/jcode.html で指摘されている全角なみ線(~)等のUTF-8変換表問題(文字化け)に(かなり後ろ向きに)対応しました(汗)。
- その他、細かいbug-fix
テキストパーサーの変更。
従来 [[tag-name:data]] → [keyword:tag-name:data] はてなキーワード記法 改変 [[tag-name:data]] → [tag-name:data] 通常の省略記法
UTF-8変換問題について
昔から言われているUnicodeコンソーシアムの変換表問題です。詳細はこちらのサイトを参照頂くとして、この問題(バグ?)に対応しないと、通常の環境(Windows等)でまともに表示出来ない文字になってしまいます。以下は後ろ向きな対応ソース。よく使う文字以外は無視しました。
if ($EXTRA_UTF8_PATCH && $from =~ /UTF.*8/i) { $$str =~ s/\xEF\xBD\x9E/\xE3\x80\x9C/g; # ~ EFBD9E E3809C $$str =~ s/\xEF\xBC\x8D/\xE2\x88\x92/g; # - EFBC8D E28892 $$str =~ s/\xE2\x88\xA5/\xE2\x80\x96/g; # ∥ E288A5 E28096 } (中略) if ($EXTRA_UTF8_PATCH && $to =~ /UTF.*8/i) { $$str =~ s/\xE3\x80\x9C/\xEF\xBD\x9E/g; # ~ EFBD9E E3809C $$str =~ s/\xE2\x88\x92/\xEF\xBC\x8D/g; # - EFBC8D E28892 $$str =~ s/\xE2\x80\x96/\xE2\x88\xA5/g; # ∥ E288A5 E28096 }
なお、確認した限りにおいてはてなダイアリーではエクスポートは正しい文字コードで行われる(修正された文字コードを出力する)が、インポートでは誤った文字コードしか認識しないようです。*3
おまけ。はてなダイアリーのMovable Type形式でのエクスポートデータを他のblogシステムで読み込むと表示かおかしくなる問題について。データ全体から「CONVERT BREAKS: 1」→「CONVERT BREAKS: 0」に変更すると幸せになれます。……というかはてなダイアリー側で修正した方がいいような気も……(;;
(変更前) ALLOW COMMENTS: 1 CONVERT BREAKS: 1 ALLOW PINGS: 1 (変更後) ALLOW COMMENTS: 1 CONVERT BREAKS: 0 ALLOW PINGS: 1
2006/05/16(火)5/16版スナップショット
2006/05/15(月)ブロッククラス指定記法
5/15スナップショット
- 標準パーサーに「空行まで1段落。改行そのまま」モードを追加しました。
- その関係で conf ファイルが変わっています。新しいサンプルをベースにしましょう。
- 標準パーサーで、ブロック開始タグの後にブロックのクラスを指定できるようにしました。
- 更新通知pingを実装しました。初期設定では、日記作成画面の「更新通知」にチェックをいれれば、ping.bloggers.jpにPingを飛ばします。
ブロッククラス指定記法
後の改変において、>>~<<系のブロックのクラス指定はブロック開始タグ後にクラス名を書く方式のみに仕様変更しました。::によるクラス指定は、table/listブロック専用となります。
例えば次のようにクラス指定を行います。
>>mono monoクラスを指定することで、内部を等幅フォントで表示可能になり、 "my $top = $lines->[0];"といった表示か見やすくなります。 <<
とするとブロックのクラスが指定でき、
monoクラスを指定することで、内部を等幅フォントで表示可能になり、
"my $top = $lines->[0];"といった表示か見やすくなります。
となります。出力されるHTMLソースは
<blockquote class="mono"> <p>monoクラスを指定することで、内部を等幅フォントで表示可能になり、</p> <p>"my $top = $lines->[0];"といった表示か見やすくなります。</p> </blockquote>
です。