2006年05月14日 22:22

NBで気になり始めたこと

これは致し方ないことといってしまえばそれまでなんですけど、再びiBlog(つまり(^^)v2との比較です。

NanoBlogger(以下NB)では、サイドバーにあるRecent entryなどをローカルで(つまり會澤のCube上で)展開してhtmlファイルに組み込んでいる。一方。iBlogでは(本来プレーンの状態では存在しないけど)Recent entryを実現するためにJavaScriptを利用していたわけです。単一のJavaScriptファイルにエントリタイトルなどを組み込み、すべてのhtmlファイルから参照していたわけですね。
さて、ここで当然のことではあるが、NBのRecent entryは新規投稿があったときに書き換えられる必要が出てくる。ところが、そのためには全てのファイルに対して書き換え作業が生じてしまう。NBにはファイルをアップデートするためのコマンドが存在するんです。そしてそのコマンドにはオプションが存在するわけ。
nb -u [ all | DATE | main | max ]
それぞれ、全て、対象日付のみ、トップページのみ、NBが判断する適切なファイル(maxがデフォルト)。となっている。さて、Recent entryというのは先ほどもいったように表示を指定しているすべてのhtmlファイルが更新の対象になる。ところが、デフォルトである(新規エントリを更新したときも)このmaxが使用されるようだ。そうすると更新からもれてしまうファイルが存在することになるんですね。

ところがなかなか悩ましいことに、全てのファイルを更新する「all」を指定すると時間がかかるんですよ。現時点でこのブログには約50のエントリがあります。で、これを全て更新すると5分近くの時間がかかります。エントリ数が増えてくるともちろん増えてくるわけですね。それも、カテゴリ・ページなどがありますので直線的な増え方ではないことが予想されます。このことはネット上でこのブログを見てくれている人にとっては関係ありません。會澤のマック上で時間がかかるかわりにネットから読み込むべきファイルはその記事の長さに単純に比例するだけで、最小限になっているからです。
iBlogではどうだったでしょう。先ほども述べましたが、更新すべきは一つのJavaScriptファイルのみで済みます。更新時にかかるマシンパワーは最小限になるわけです。ところが、ネット上からファイルを読み込む閲覧ユーザーはどうなるでしょう。単純に考えても、html本体+JavaScriptファイルを読み込む必要が出てきます。さて、エントリが増えてくるとどうなるでしょう。html本体は最小限ですが、JavaScriptは非常に大きくなってくることが想像できると思います。これがイヤでNBに移行してきたわけです。
とはいうものの、公開時に時間がかかるのは辛いわけですね。結構マシンパワー食いますから。

対策として會澤が現在とっているのは次の2点です。
  1. 新規エントリ投稿時にはNBが判断する最適な状態(つまりmax)の公開状態のまま公開する。
  2. 一定の時間に(時間はかかるけど)全てのファイルに対して更新をかけ公開する。
この方法だと、1.と2.の間にタイムラグが生じます。些細なことだといってしまえばそれまでですが、気にはなります。しかし、會澤は無視してこのまま行きたいと思っております。
実は、もう一つ考えていることがあります。ファイルサーバーとしての利用が主なiMacをNB公開サーバーとして活用することです。NBにはドラフト機能が存在します。一定の決められたフォーマットのテキストファイルをNBに渡してやるだけでエントリとして公開してくれます。會澤はこの機能を使っています。
  1. サーバーの特定のフォルダにフォルダ監視のAppleScriptを仕込み、ドラフトファイルをそのフォルダに放り込んだらNBを起動する。
  2. 公開する際には全てのアップデートをかけ公開することを原則とする。
マシンパワーに関してはサーバーにパワーを分散することになり、非常に効率的です。エントリを更新する度にフル・アップデート&公開。という手順で行けば上記タイムラグは生じません。
ただ、問題になるのはiMacの処理能力の低さと、イベント監視の方法です。単純にフォルダアクションを仕込んだだけではiMacが行っている公開処理中にダブった形で新規更新のイベントが生じてしまう可能性があります。フォルダアクションではなく、シェルスクリプトで常にNBの動作状態を監視するという方法も、NB自体が基本コマンドの組み合わせでできていることからどんな動作状態であるのかスクリプトが把握するのが難しそうです。難しいなぁ。

とはいえ、些細なことであると考えてしばらく放って置きます。

ふと思いつきましたが、メールにドラフトファイルを添付して送る。iMacがドラフトファイル付のメールを受信したら更新ファイルとして処理するなんて方法もあり得るなぁ。モブログってヤツですか?いいなぁ。やれるかなぁ。
このエントリに頂いたコメント。この表示は随時更新されます。

by OKAMURA(2006-05-15T05:47:46-05:00)

Recent Entries に関して二つ方針があると思います。(NB の基本を継承するとして)


1. RSS を元に JavaScript で表示する。

2. RSS を元に html ファイルを生成して IFREAME で表示する。


1 は更に次の二つに分かれます。


1-1. RSS から js ファイルを生成して書くページではそれをロードして表示する。

1-2. RSS を CRssFeed.js を使って表示する。

by 會澤(2006-05-15T13:48:18-05:00)

IFREAMEはできれば使いたくないなぁ。

RSSをもとにすれば確かに小さなものになりますね。そして常に最新。トライしてみます。

by t0mori(2006-05-15T15:18:47-05:00)

うーん、何がいけないのか皆目分らないですけど、このエントリのパーマリンクが変ですね。 RSS からも飛べませんし、トップや Recent Enry からも飛べないです。

或いは iBlog 的に考えれば(汗 エントリ独自の HTML の生成に失敗してるんでしょうか?

by 會澤(2006-05-15T21:22:43-05:00)

エントリの生成は早朝に自動運転させているのですが、そのどこかのタイミングで失敗したんでしょうか。

5/16 5:10の段階で確認し、t0moriさんのおっしゃるようにリンク先のファイルが生成されていないことを確認しました。手動で再度生成させた上転送しましたのでOKだと思います。


ご指摘痛み入ります。(;^_^A アセアセ…

by 會澤(2006-05-21T12:55:18-05:00)

OKAMURAさんのコメントにある1-1を採用してみました。sedコマンドを使ってローカル上で生成されたrss.xmlから直接jsファイルを作成しています。


アドバイス感謝です。

コメントを書き込むためには、下の「Comments」リンクをご利用下さい。
このエントリに頂いたコメント。この表示は随時更新されます。

by OKAMURA(2006-05-15T05:47:46-05:00)

Recent Entries に関して二つ方針があると思います。(NB の基本を継承するとして)


1. RSS を元に JavaScript で表示する。

2. RSS を元に html ファイルを生成して IFREAME で表示する。


1 は更に次の二つに分かれます。


1-1. RSS から js ファイルを生成して書くページではそれをロードして表示する。

1-2. RSS を CRssFeed.js を使って表示する。

by 會澤(2006-05-15T13:48:18-05:00)

IFREAMEはできれば使いたくないなぁ。

RSSをもとにすれば確かに小さなものになりますね。そして常に最新。トライしてみます。

by t0mori(2006-05-15T15:18:47-05:00)

うーん、何がいけないのか皆目分らないですけど、このエントリのパーマリンクが変ですね。 RSS からも飛べませんし、トップや Recent Enry からも飛べないです。

或いは iBlog 的に考えれば(汗 エントリ独自の HTML の生成に失敗してるんでしょうか?

by 會澤(2006-05-15T21:22:43-05:00)

エントリの生成は早朝に自動運転させているのですが、そのどこかのタイミングで失敗したんでしょうか。

5/16 5:10の段階で確認し、t0moriさんのおっしゃるようにリンク先のファイルが生成されていないことを確認しました。手動で再度生成させた上転送しましたのでOKだと思います。


ご指摘痛み入ります。(;^_^A アセアセ…

by 會澤(2006-05-21T12:55:18-05:00)

OKAMURAさんのコメントにある1-1を採用してみました。sedコマンドを使ってローカル上で生成されたrss.xmlから直接jsファイルを作成しています。


アドバイス感謝です。

コメントを書き込むためには、下の「Comments」リンクをご利用下さい。

Posted by kaizawa | TrackBacks