たつをの ChangeLog : 2005-02-25

こんばんは。Ajax Tatsuo です。
ところで、Ajax って何て読むんでしょうね。
アジャックス? アヤックス? エージャックス? アイァクス?

さて、Ajax の練習[2005-02-24-3]の続き。

自分の Blog の記事の全テキストを対象に、Google Suggest
<http://www.google.com/webhp?complete=1&hl=en> みたいなことをやっ
てみたいのだが、chalowの検索CGIであるclsearch.cgiは、インデックス
方式ではなくテキスト走査方式(つまりgrep式)なので、Ajax 的にキー
入力のたびに検索するとなるとちょっと遅い。つうか重すぎ。

そこで、今日のところは妥協して、検索キーのヒット数だけを出すような
比較的軽い処理にしようかと。それでもテキスト走査方式だと遅いので、
インデックス方式の検索エンジン SUFARY を CGI から呼び出して使うこ
とに(see 付録)。妥協により本来の目標からだいぶずれて来たが。まあ
ともかく、そんなわけで、「たつをの ChangeLog」を対象にインクリ
メンタルに検索キーのヒット数を表示する Ajax な仕掛け
ができた。

↓まずはお試しあれ。日本語も行けるよ。IE6 & FF で動作確認済。
  (SUFARYはmmapしてるから最初は遅いかも。とりあえず一文字入れて
    数字が出るのを待ってから次の文字入れると良いかと)


これの利点は「そのキーで検索してちゃんと結果が出てくるかが submit
する前に分かっちゃう」こと。メインの検索 CGI (clsearch.cgi) を呼ぶ
回数が減らせる。ヒット数が 0 でないときだけ「search」ボタン(submit)
で本番検索すればいいだけ。clsearch.cgi はヒット数が 0 だと最後まで
走査するので時間がかかるのだ。

付録:
SUFARY を呼び出している CGI。キーを受け取り、それがヒットした数を
返す。SUFARY 付属の検索コマンド sass に、ヒット数だけ返すオプショ
ン (-c) があるので、それを使っただけ。
#!/usr/bin/env perl
use strict;
use Jcode;
my $sass_path = "/usr/local/bin/sass";
my $file_name = "/home/yto/www/clog/cl.txt";
print "Content-Type: text/html;\n\n";
(my $key = shift @ARGV) =~ s/[\"\`]//g; # "
$key = Jcode->new($key, "utf8")->euc if ($key =~ /[\x80-\xff]/);
print `$sass_path -i -c "$key" $file_name`;

追記050226:
「[徳]Ajax で ChangeLog を検索する」
<http://tokuhirom.dnsalias.org/~tokuhirom/cl/2005-02-26-1.html>
では、sary ライブラリを ruby から使って検索してる。私も次のステッ
プとして Perl の SUFARY モジュールを使ったものを作る予定。

民宿たつを

2005-02-25-2
昨日から taku-ku が京都南部から来て宿泊。日曜までの予定。
曰く、「上京して一旗上げたい」。

[2005-02-24-3]と同じく、
「Ajax: Web アプリケーション開発の新しいアプローチ」
<http://antipop.zapto.org/docs/translations/ajax.html> より:
現在のインタラクション・デザインにおいて「グラマラス」であると評さ
れうるのは、どちらかといえば、Web アプリケーションを創造することで
あろう。つまるところ、あなたが、Web 上にないインタラクション・デザ
インについて誰かがあれこれいうのを聞いたのはいつのことだっただろう
か(あぁ、iPod を除くとしての話しだが)。全てのクールで革新的なプ
ロジェクトは、オンラインにある。
「全てのクールで革新的なプロジェクトは、オンラインにある」。
まさにそう。強く感じる。さすがに全てではないけどほとんどがそうだ。

たつをの ChangeLog
Powered by chalow