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

2006/04/20(木)今回の更新内容

更新内容

  • TextParser が完成。conf ファイル80~100行目付近のパーサー設定をマージする必要あります。
  • 「続きを読む」の実装
  • ユーザースケルトン機能。diary.user.skel/ 内に置いたスケルトンを優先処理するようになりました。カスタマイズしたスケルトンをこのディレクトリに置いておくことで、本来のスケルトンの書き換えずに代替させたり、各スケルトンの前処理をさせることもできます。
  • 日記編集画面のデザイン改良。ほか

日記入力パーサー(テキストパーサー)については、とりあえずはてな記法を参照ください。その中の入力支援記法はだいだい使えます。

今回のスナップショットで、これで基本的な機能(メイン部)は、ほぼ完成になります。

ToDo

  • 画像アップロード
  • RSS
  • 更新通知ping
  • モバイル対応
  • Movable Typeなどのデータインポート

2006/04/19(水)高機能化

プログラムというのは基礎工事さえしっかりしてれば、高機能化は比較的容易です。というわけではてな記法に似た簡略記法が使えるようになって、Amazonアソシエイトも自動挿入など無駄に高機能かつ使いやすくなっています。が、……このblogプログラム、はたして普及するんでしょうか?(^^;

たぶん普及するとしたら、ある時点でどこかで紹介されてその後が指数的になると思われるのですが……。んー読めないなぁ。tDiaryとかMovable Typeとかからのデータインポーター作ればいいのかもしれないけど、それこそ誰かサードパーティー(?)ツールとして任せたいのココロ。

そのためには、こちらのシステムの仕様書をきちんとつくらないとですか(苦笑)

2006/04/18(火)はてな記法の実装

はてなテーマを使用して*1、はてな記法まで実装したら、はてな盗作疑惑ですか(笑) まあどちらも完全互換ではないし、そもそもプログラムはフルスクラッチですから。*2

テキストパーサーの実装は結構頭を使いました。perlの正規表現を使ってこれだけ悩むのだから、Cで構文解析とかやりたくないですね(苦笑) こうやって実際に使い始めるとまともなテキストパーサーはほぼ必須でした。というか、ないと使い物にならなかったです、はい(汗)

テキストパーサーはプラグイン式でいくらでも拡張可能にしてありますので、みなさんお好みのパーサーをご用意くださいませ。TeXライクパーサーとかあったらそれもいいかなと思ったり思わなかったり。

*1 : はてなのCSSはほとんどがGPLなので、それを有効活用しただけなんですけど

*2 : はてなにしてもtDiaryテーマ+wiki的記法がベースにあるので、オープンソース的な循環みたいなもんかと。そのうちadiaryベースの何かがでるかもですね

2006/04/18(火)今回のスナップショット変更点

  • TextParserをまともに実装しました。だいたいのはてな記法が使えます(完成度7割)。
  • (日記帳の設定に)簡易設定モードの追加しました。
  • mod_perl2/SpeedyCGI時、スケルトン内perl式のコンパイル結果をメモリキャッシュして実行速度を約3割改善しました。
  • その他色々

テキストパーサーの実装に伴い conf ファイルにパーサー関係の設定が色々追加されています(ひとかたまりになっています)。設定をマージするか、適当に書き直してください。はてな記法に対応するスタイルシートか標準テーマではすべて用意されていません(汗)*1

追記

段落処理については、<p>タグで処理するのが本来的だと思うのですが、掲示板のように改行を入れたらその場で改行したい<br>派の方が多いようなので、選択式にしておきました。

Wikipediaタグ機能のチェック。ブログとか。[wiki:ブログ]と書いただけ。あっちなみに現snapshotには入ってません(笑) [google:検索してみる]とかは入ってますけど(^^ ついでに[[はてなキーワード]]への手動リンクタグに対応してみた。無駄に高機能になってる気が(苦笑) あと何があればいいですかね~? >パーサー

さらに追記

さらに色々追加。[wdic:みかか:通信用語の基礎知識]とかAmazonで検索とか、[ya:sansui 907:Yahoo auctionで検索]とか[[カカクメソッド:はてなキーワード]]とか。ソースを柔軟に書いたせいで調子に乗って追加しすぎました(笑)。ちなみにソースはこんなかんじ。

# 通信用語の基礎知識
$tags {'wdic'} = 'http://www.wdic.org/w/WDIC/';
$code {'wdic'} = 'UTF-8';
$title{'wdic'} = '通信用語の基礎知識';

あとASIN入れれば [asin:4873111269:image:small] と書くだけで#asin: is not allowとなったり。manとか, manとか。

まあたぶん[eg:To Heart:[eg]タグ]が一番要らないかな(笑)

*1 : はてなテーマを使用すれば大丈夫です

2006/04/15(土)mod_perl で chdir

mod_perl2 (on Apache 2.x)で無理矢理MT(Movable Type)を動かそうとしたり、古いスクリプトをmod_perl2で動かそうとする人たちがいまして。そういうページの中で、mod_perl2はカレントディレクトリをスクリプトのdirに変更しないというのが日本ではなぜか迷信のごとく広まっています。……いやある意味では正しいのですけど。例えばこちらのページでは

PerlFixupHandler "sub { \
	chdir('/project/sfo/www/www.sfo.jp/lib/mt'); \
	return OK; \
}"
PerlResponseHandler ModPerl::Registry

とやって明示的に chdir しています(別にやり玉に挙げているわけではなくて、どこのサイトを見てもおよそこんな感じです)。そもそもなぜ、ModPerl::Registry がスクリプトの場所にカレントディレクトリを変更しないかといえば、worker モデルの場合(Apacheがスレッド動作モデル)の場合、chdir しても途中でカレントディレクトリが変わる可能性がある=あまり意味がないからです。だから chdir を明示的に発行するときは、Apache が prefork(従来のプロセスをforkして並列動作する方式)で動いてることを期待しています。

ここからが本題。mod_perl2のマニュアルによるとmod_perl2にはPrefork専用のハンドラーがあり、

PerlResponseHandler ModPerl::RegistryPrefork
PerlResponseHandler ModPerl::PerlRunPrefork

と(どちらか一つを)書けば chdir してくれるそうです。まあ英語のマニュアルだから自分もcgi開発でもなければ読まなかったのですが、日本での普及率をGoogle先生に聞いてみるとこんな結果になります(汗)

というわけで、以降普及することを期待して終わり(笑)