12月05日(日)

MTのダイナミックパブリッシング機構

カテゴリ: MovableType このエントリーを含むはてなブックマーク はてなブックマーク - MTのダイナミックパブリッシング機構

MovableTypeは、3.0からダイナミックパブリッシング機能を備えるようになった。エントリーの数が増えてくると再構築に時間がかかるようになるという問題を、静的なファイルを発行せずに、その場で動的に表示することで凌ごうという機能である。ダイナミックパブリッシングは、主にそれほど見られないだろうアーカイブに対して行われるが、テンプレート単位に設定できるので、その気になれば全ダイナミックパブリッシングも可能である。

ダイナミックパブリッシング機能で最も気になるのが、URLからどうやって発行するページを求めているかということだ。特にアーカイブページのURLには任意のパターンが指定できるので、URLから求めるというのは事実上不可能に思える。とするとどうやってページを発行するのに必要となる、テンプレートとページのタイプ(インデックスや個別アーカイブなど)、そしてエントリーIDやカテゴリー名などの情報をURLから得ているのか。

分かってみれば単純なことだった。再構築を行うと、FileInfoというテーブルに発行したページの情報が記録されるのである。ここをURLで検索すれば、該当するページを発行する為の情報が得られるという訳だ。ダイナミックなページの場合、ファイルは出力されずにFileInfoだけに記録される。つまり仮想的に発行されている訳だ。このような仕組みの為、すべてをダイナミックパブリッシングにしても、サイトの再構築は必要となる。

PHP必須なのは、純粋にCGIなPerlでは遅そうという理由のようだ。Perlではできないという訳ではない。その為だけに簡易ながらもPHP版のMTライブラリを作ったというのはさすがというかなんというか。Berkeley DB未サポートというのも、単にPHP版ライブラリがSQLベタベタだからという感じがするが、これは頑張って対応する利点がないからだと思っておこう。いや、そもそもPHPからBerkeley DBにアクセスできるのだろうか。

12月06日(月)

IRQL_NOT_LESS_OR_EQUAL

カテゴリ: Windows このエントリーを含むはてなブックマーク はてなブックマーク - IRQL_NOT_LESS_OR_EQUAL

びいさんの日記でIRQLの話を読んでからというもの、IRQLとはなんぞやというのが気になっていたのだが、ちょうど届いた「アーキテクチャ徹底解説Windows2000(上)」に載っていた。

IRQLとは割り込み要求レベルの略で、優先順位付きの割り込み機構の優先順位と同じようなものである。CPUに送られた割り込み要求のうち、より高いIRQLを持つ割り込み要求が優先して処理され、それより低いIRQLを持つものは処理が終わるまで待たされる。ハードウェア割り込み、CPU例外、DPC、APC、ユーザーモードのスレッドなど、CPUが実行するものはその種類ごとに、必ず何がしかのIRQLに割り当てられている。したがってIRQLは、割り込み処理に限らずCPUが実行するものの優先順位を決めるものだといえる。

IRQLは0から31まであり、定義済みのレベルがいくつかある。そのうち0、1、2はソフトウェア割り込みで、IRQL 0はパッシブレベル、つまり何も割り込まれていない状況を示す。ユーザーモードのスレッドはこのレベルで実行されるので、ユーザーモードのスレッドがシステムの処理よりも優先されることはない。IRQL 2がDPC/ディスパッチレベルで、スレッドのスケジューリングを行う為のレベルである。スケジューリングがIRQLのひとつになっているのは、スケジューリング中にスケジューリングが発生しないようにである。したがって、これ以上のレベルではスケジューリングが起るようなこと、具体的には待ち状態に入る処理や、ページ可能メモリにアクセスすることはできない。ページフォルトを起こすとディスクIOの待ちが発生しスケジューリングが起るからである。

もしCPUのIRQLレベルがDPC/ディスパッチレベルがそれ以上の時にそれらのことをやってしまった場合は、システムクラッシュが起り、ブルースクリーンと共にストップコードIRQL_NOT_LESS_OR_EQUALが表示される。したがってこのストップコードの原因は間違いなくドライバのバグであるが、毎回必ず発生するという訳でもない。ページ可能メモリにアクセスしたとしても、そのページが物理メモリに存在していればページフォルトは起らないからだ。

仕組み的にはそれほどややこしくないのだが、IRQLという名前がIRQのイメージを呼び起こすのでややこしくなっている感じがしないでもない。

12月12日(日)

MTのインポート機能の実装の謎

カテゴリ: MovableType このエントリーを含むはてなブックマーク はてなブックマーク - MTのインポート機能の実装の謎

MT-3.11-jaでの話。エントリーに関連する独自データを追加した場合、そのデータもインポート・エクスポートできるようにならないかと思うのが人の常である。調べてみると、MT::ImportExportというクラスがあり、その中にdo_import()とexport()というメソッドが定義されている。おお、これは簡単と思い、必要な処理を両方のメソッドに追加した。だが、エクスポートはうまく行くのにもかかわらず、インポートではどうやっても追加した処理が行われないようだ。というよりもインポート処理時にdo_import()自体を通っていないようだ。これはいったい。

実際に使われているインポート処理は、MT::App::CMSクラスのdo_inport()メソッドにあった。エクスポートは同クラスのexport()メソッドからMT::ImportExportの該当メソッドを呼ぶようになっているのだが、インポートだけは直に書かれているのだった。むう、なんという罠。インポート処理を移せない、なにか海よりも深い事情があったのだろうか。

12月16日(木)

誕生日プレゼント

カテゴリ: その他 このエントリーを含むはてなブックマーク はてなブックマーク - 誕生日プレゼント

ごっさん(誰)から誕生日プレゼントとして貰った、J-PHONEの文字が眩しいJ-P51に機種変更した。J-D03からなので、4年前の最新機種から2年前の最新機種にパワーアップ。感覚的にはファミコンからスーファミに進化した感じ?

12月27日(月)

メモリンク

http://ukai.jp/debuan/2003s/subversion-arch.txt
なんだかよく分からないけど、Subversionのアーキテクチャについて書かれたもの。
MSDN Library: WMI Classes
WMI(Windows Management Instrumentation)から操作できる情報のクラス名についてのドキュメント。このドキュメントは日本語のMSDNライブラリには存在しないことに注意。
Carbon: Rendering Unicode Text With ATSUI: Caret Handling
書字方向がまぜこぜになったときのキャレットや選択領域の挙動とか、画面上のクリック位置からキャレットの位置の求め方などのドキュメント。
RS125.ORG: 異文化コミュニケーション
謎の英訳「String DUKU (ストリング ドゥク)」についての話。