gin プラグイン:エイリアス消失対策

[ プラグイン ]

 blosxom に おけるエントリのメタ情報を JSON 形式で出力する gin プラグインEllinikonblue.com Weblog の方で 最終的なテストしていたのですが、重大な一つ問題が見つかりました。
 実は Ellinikonblue.net Photolog で 実験していたときに一度だけ発現した問題で、 gin プラグイン はエントリのメタ情報の一つとして、 カテゴリ情報を一つの JSON ファイルとして出力します。 各カテゴリへのエイリアス(別名)は、このファイルに直接記述することで実現しますが、 この JSON ファイルに記述したエイリアスが消失すると言う問題です。
 Ellinikonblue.net Photolog で 発現した際もそのときは原因がわからず放置していたのですが、 うちの blosxom で 動作しているサイト群で、最大の PV を誇る Ellinikonblue.com Weblogで 三ヶ月テストして、たった一回と言う発生頻度も非常に少ない問題でした。
 ただやはりエイリアス情報とは言え、消失するということは大問題です。

 ソースコードとにらめっこした結果、 この消失問題が発生する条件は、ごく短いタイムスライスの間に gin プラグイン が多重起動した場合(通常、更新タイミングでない限り機能(起動)しない)、 entries_kache プラグイン と同期して、メタ情報を更新する際の JSON ファイル出力最中に、 同ファイルのオープンを要求することしか考えられません。 この条件を満たしてしまうと書き換え中の JSON ファイルの内容を 読み込まずに処理を先に進めるアルゴリズムになっています。
 上記の条件を熟考して、最初はロック機構を実装しようと思ったのですが、 gin プラグイン が機能しているのは、ごく短い時間で、 かつ機能する頻度も通常は1時間に一度なので、 万が一このタイミングでカテゴリ情報ファイルを開き損なった場合、 5 秒間スリープして、再度オープンを試みるか、それでもだめなら 機能を中断すると言う処理を入れ込みました。
 これでクリティカルなタイムスライスに多重起動しても、 リトライするか、最悪、エイリアス情報消失につながる書き込みをしません(そのはず…)。

 この対処を施した gin プラグイン でまた少々テストです。
 ここ の 公開がまた延びたな…これで orz

Jul 18, 2007 at 23:09 | コメント (0) | トラックバック (0)

asin_complex プラグインアップデート

[ プラグイン ]

 一ヶ月くらい前の話になるのですが、 asin_complex plug-inAmazon.co.jp の 商品画像へのリンクを作成する際、失敗することが目立って多くなっていることが 気になり始めました。

 これまでも商品画像が落ちることはあって、それなりに対策は打っていたのですが、 どうもこれまでとは違う「新商品でかつ商品画像が登録されていない 製品のものに限って落ちる」という規則性があることに気づきました。
 よくよく調べてみると、これまでは商品画像がまだ登録されていない新商品には、 ダミーの商品画像への URL が XSLT の問い合わせで返ってきたのですが、 新製品に関しては全く画像への URL を返さないようになっていました。 いつから仕様が変わったのかわかりませんが、 直近で登録されている商品については、 商品画像が登録されるまでは商品画像への URL は何も返さないようです。
 これに対しての対策と、商品画像があってもうまく判別できないことがあったので、 以下の対策を施しました。
  1. 問い合わせの結果で商品画像の URL を返さないときの処理を追加
  2. 商品画像の確認は 5 秒おきに 5 回までリトライを行って、成功した時点で 商品画像への URL を確定する
 半月くらい試した結果、安定性も向上したように思いますので、 Ellinikonblue.com PukiWiki でも 公開することにしました。 もしご使用の方がいらっしゃいましたら、アップデートをご検討ください。

Jul 15, 2007 at 00:46 | コメント (0) | トラックバック (0)

gin プラグイン仕様 v2007.5.4

[ プラグイン » 仕様 ]

 blosxom における エントリのメタ情報を一括してインデクシングするプラグインを こつこつ作っていました。 gin(Generate INdex) プラグインと命名しました。 ジン (gin) は様々なカクテルのベースになるお酒なので、それにちなんでみました。
 この gin プラグインが、ある程度形になってきましたので、 とりあえずここまでの仕様とまとめておきます。
  1. エントリの分類(カテゴリ)、エントリ日時を一括してインデクシングします
  2. インデクシングされた情報は JSON 形式で出力されます
  3. エントリの分類情報で、子カテゴリ数を親カテゴリに含めるかどうかは、 このプラグイン内で設定します
  4. エントリの分類名に対するエイリアス(別名)は、このプラグインが出力する JSON ファイルに記述します
  5. gin プラグインが出力する JSON ファイルを元にする archives/categories プラグイン互換のプラグインを用意しました
    (現在このページで使用中)
 分類情報の JSON ファイルは以下のようになります。
{
	{ "directory": "/home/public_html/devlosxom/data", "count": 7 },
	{ "directory": "/home/public_html/devlosxom/data/About", "count": 2, "alias": "このブログについて" },
	{ "directory": "/home/public_html/devlosxom/data/Doc", "count": 4, "alias": "ドキュメント" },
	{ "directory": "/home/public_html/devlosxom/data/Doc/Idea", "count": 1, "alias": "アイデア" },
	{ "directory": "/home/public_html/devlosxom/data/Plugin", "count": 1, "alias": "プラグイン" },
	{ "directory": "/home/public_html/devlosxom/data/Plugin/Spec", "count": 1, "alias": "仕様" }
}
 エントリ日時情報の JSON ファイルは以下のようになります。
{
	{ "year": 2007, "count": 7 },
		{ "year": 2007, "month": 5, "count": 1 },
			{ "year": 2007, "month": 5, "day": 4, "count": 1 },
		{ "year": 2007, "month": 4, "count": 2 },
			{ "year": 2007, "month": 4, "day": 18, "count": 1 },
			{ "year": 2007, "month": 4, "day": 7, "count": 1 },
		{ "year": 2007, "month": 3, "count": 3 },
			{ "year": 2007, "month": 3, "day": 24, "count": 1 },
			{ "year": 2007, "month": 3, "day": 3, "count": 1 },
			{ "year": 2007, "month": 3, "day": 2, "count": 1 },
		{ "year": 2007, "month": 2, "count": 1 },
			{ "year": 2007, "month": 2, "day": 26, "count": 1 },
	"count" : 7
}
 今後、さらに以下の機能を追加していく予定です(優先順位順)。
  1. entries_kache プラグイン に同期して、メタ情報を更新するようにする
  2. 最終的には entries_kache プラグインの機能を取り込んで、 entries_kache プラグインが出力するエントリに関するメタ情報も JSON 形式で出力するようにする
 entries_kache プラグインと同期して更新するところまでできれば、 Ellinikonblue.com Weblog の方でも紹介して、 そろそろこのブログもオープンにしようかな。。。

May 05, 2007 at 13:52 | コメント (0) | トラックバック (0)

nofound プラグイン仕様 v2007.4.18

[ プラグイン » 仕様 ]

Ellinikonblue.com Weblog 「 nofound プラグイン」

 ずいぶん前に Ellinikonblue.com Weblog の 方に書きましたが、 徒書notfound プラグイン をベースにした nofound プラグイン が何とかできました。
 これ以上手を加えることもないとは思いますので、 その改変した部分を仕様としてまとめておきます。
  1. @noindex_flavours に設定したフレーバーに対して、インデックスページを要求する (例 index.writeback )は not found を返すように設定可能にした
  2. 設定値 @except_flavours, @noindex_flavours は正規表現形式ではなく、 リスト形式で記述できるように変更

May 04, 2007 at 13:39 | コメント (0) | トラックバック (1)