Ellinikonblue.net Devlosxom

ここはまだ壮大な夢の途中…

Posted on Sep 12, 2007 at 22:08

bracket_fep 用 bsnap_hs/bsnap_tx プラグイン

 Highslide JS を利用した 機能強化版 snap_in プラグイン の実装はほぼ終わりました。
 highslide プラグインと命名しようかと思ったのですが、 あまりにもひねりがないので、 bsnap_hs プラグイン とすることにしました。
 この bsnap_hs プラグインは bracket_fep プラグイン 用のプラグインとして実装していて、 これまでの snap_in プラグイン 同様、エントリ内で
[imagefile.jpg]
とした位置に画像を挿入します。 ただし、プラグイン内のパラメータで指定する画像ディレクトリと サムネイルディレクトリに同名の画像ファイルが存在すると Highslide JS が有効になり、 通常状態ではサムネイル画像が表示され、クリックすると画像ファイルに拡大されます。
 サムネイルが存在せず、画像ファイルだけが存在する場合は、 これまでの snap_in プラグインと同様の動きになります (単にエントリに画像を挿入するだけ)。

 以下は Highslide JS を 有効にした場合の利用例。
Image:20070910highslide_on.jpg
 無効にした場合の利用例。
Image:20070910highslide_off.jpg
 上記二つの画像は、エントリテキスト上は同じ表現になっていますが、 サムネイルディレクトリに同名のファイルがあるかないかで 動作が変化しています。

 さて、もともとの snap_in プラグイン は、画像を取り込む以外に、定型のテキストを取り込む機能を有しています。 この機能も bsnap_hs プラグインに取り込もうと思ったのですが、 コードが汚くなりそうだったので、突貫で定型テキストを取り込むだけの bracket_fep プラグイン 用プラグインも別途用意しました。
 以下、その bsnap_tx プラグイン のテストです。
 我ながらいい感じなので、さていつ公開しようかな。。。というとこです。
 なんせこの Devlosxom だけで こそこそやってることなんで気軽気軽 (^ε^)

Posted on Sep 05, 2007 at 22:05

bfep 版 highslide プラグイン(仮称)開発開始

 いきなり Highslide JS を 利用したサムネイル対応画像挿入プラグインの実装に入りました。
 このエントリが開発のためのテストエントリになります。
 進行状況は、下図の写真をいじっているとわかるかも… (^^;>
Image:20070904bhighslide.jpg
Posted on Sep 01, 2007 at 12:00

gsitemap プラグイン 2007 年版

 ひらめきました! (^^)b
 なにをかというと、 gsitemap プラグイン の新しい実装方法です。

 そもそもこの gsitemap プラグイン はどういうものかというと、 名前から察することができる方もいると思いますが、 Google サイトマップ に 提供する XML ファイルを生成するプラグインです。
 意外にこのプラグイン、うちのいい加減にでっち上げたプラグインの中では、 ご使用いただいている方の多いプラグインではあるのですが、 開発(と言うほど偉そうなものではありませんが) 当時 、 即興で作ったために、エントリ数が多いと Internal Server Error を引き起こす 問題を解決しないまま、サイトマップに記載するエントリ数を制限するリミッタを設定するという 超いい加減な方法でアドホックに対処して、ほったらかしにしていました。

 後になって冷静に考えると、専用フレーバーを使って blosxom の フレームワークをそのまま利用して、 サイトマップデータをメモリ上に生成するので、 あまりにもエントリ数が多い場合、メモリがオーバーフローするだろうとすぐに想像がつきました。
 ではデータをファイルとして生成してしまえばよいのですが、 この生成するスクリプトをどう実装するかと言う問題になります。 CGI で作り込んでしまえば、さほど労せずできそうですが、 それは blosxom の スタイルではありません。「機能はプラグインで追加する」というのが正道です。

 と言うことで悩んでいたのですが、最近、 gin プラグインに entries_kache プラグイン の機能を取り込んでいくにあたって、 このエントリインデックスファイルをサイトマップファイルに変換するプラグインにする と言う実装方法を思いつきました。
 これなら gin プラグインが entries_kache プラグイン の機能を取り込んでも、 JSON 形式のエントリインデックスを読み込む部分だけをすり替えるだけで使えそうです。
 方向性が決まれば、実装はそんなに難しくなさそうですので、 この Devlosxom の方で、 早速実験して、うまくいくようでしたら早々に公開したいと思います。
Posted on Aug 12, 2007 at 00:25

gin プラグイン仕様 v2007.8.11

 対策を 施した にもかかわらず、また消えました。。。エイリアス情報 orz
 アルゴリズム的に消えないと思っていましたが、 ここは消えた現実を真摯に受け止めて、気合いを入れ直してコードを見直したのですが、 私の能力ではもう解決不能。。。

 と言うことで、仕様を変更することにしました。
 これまでは gin プラグインが出力したカテゴリ情報ファイル (categories_index.json) に直接、カテゴリに対するエイリアス情報を 書き込んでいましたが、エイリアス情報は別ファイル (categories.alias) とし、カテゴリ情報出力時にエントリ情報シーク結果とマージして、 出力するようにします。
 この仕様であれば、一度作成したエイリアス情報は基本読み込むだけですから、 消えることはありません。 また、gin プラグインが出力するカテゴリ情報を利用する categories プラグインを 作り替える必要もありません。名案!(自画自賛。失礼 (_ _"> )

 エイリアス情報を記載する categories.alias ファイル(ファイル名はデフォルト)は 以下のようなディレクトリ名とエイリアス名をセットにして記載する JSON 形式ファイルとします。
{
  { "directory": "/home/public_html/devlosxom/data/About", "alias": "このブログについて" },
  { "directory": "/home/public_html/devlosxom/data/Doc", "alias": "ドキュメント" },
  { "directory": "/home/public_html/devlosxom/data/Doc/Idea", "alias": "アイデア" },
  { "directory": "/home/public_html/devlosxom/data/Doc/Resources", "alias": "参考資料・メモ" },
  { "directory": "/home/public_html/devlosxom/data/Plugin", "alias": "プラグイン" },
  { "directory": "/home/public_html/devlosxom/data/Plugin/Spec", "alias": "仕様" }
}
 現在、この仕様で gin プラグインを改装中です。
 そんなに難しい改造でもないので、時間さえとれればすぐにできると思います。 うまく動き始めたら即 Ellinikonblue.com Weblog の方でテストを開始するつもりです。
Posted on Jul 18, 2007 at 23:09

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
Posted on Jul 15, 2007 at 00:46

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

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

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

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 の方でも紹介して、 そろそろこのブログもオープンにしようかな。。。
Posted on May 04, 2007 at 13:39

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 は正規表現形式ではなく、 リスト形式で記述できるように変更