このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

PartialEngine というツールをリリースします

発言者:田中求之
( Date Sunday, November 12, 2000 15:32:51 )


WebSTAR で send partial を利用する際のサポートを行うツール、PartialEngine
というのを、近いうちに出します。これは、ようは、指示を受けて
データを send partial で webSTAR に送り込む部分をアプリケーション
として独立させたものです。

で、今日から、このサイトでアルファ版のテストを開始しています。
この関係で、WSM Watcher でのアクセスがおかしくなる(コネクトして
ずっと反応がなくなる)ことがあります。原因は、今、究明中ですが
(おそらく send partial の処理を開始するタイミングだと思うのですが)
すみませんが、ご了承ください。

田中求之 さんからのコメント
( Sunday, November 12, 2000 15:36:13 )

なお、もし WSM Watcher が反応がなくなった場合には、Quit して再起動する
必要があります。WSM Watcher の方も、この事態に対応した 1.5 を出します。

田中求之 さんからのコメント
( Sunday, November 12, 2000 18:12:15 )

partialEngine_1.0b.sit を登録しました(FAT 版)

このアプリケーションは WebSTAR 用の CGI の中で Send Partial を
使うための補助アプリケーションです。

REALbasic で作ったフリーウェアで以下の3つのコマンドを実装してあります。

send files:ダイレクトパラメータで渡されたリストに含まれているファイルの
データを次々に送信します。

send data:ダイレクトパラメータで渡されたデータを、4Kに分割して次々に送
信します。

send folderItems:ダイレクトパラメータで指定されたフォルダー内のテキスト
ファイルを、ファイル名順に、次々と送信します。

これをつかって、たとえば、巨大なデータを CGI の中から送信したいときには、

ignoring application responses
  tell application "partialEngine"
    send data myBigData connection ID cID
  end tell
end ignoring

return "<SEND_PARTIAL>"

というようなスクリプトを書けば、partialEngine が send partial でデータを
送信するわけです(myBigData が送信するデータで、これには HTTP ヘッダも含
んだ形でデータが収められているとする。また、cID は CGI に WebSTAR から渡
された connection ID である)。

このように、必ず ignoring application responses ブロックの中で呼びだす必
要があります。また、send partial ですので、CGI の側は、呼びだしたらすぐ
に WebSTAR に対して "<SEND_PARTIAL>" をリプライする必要があります。

現在のバージョン 1.0b では、タイミングを調整するために、処理の開始までに
1秒の待ちが入るようになっています。


上記のような巨大なデータの送信以外にも使えます。

たとえば、Form で受け取った書き込みを HTML 形式に整えてフォルダーにぶち
込んでおき、あとから、その内容を一ページで表示して見せるという場合には
send folderItems が使えます。Tanaka's osax のページの中にあるコメントの
コーナーは、この機能を使っています(というか、このコーナーを簡単に作るた
めに作ったツールだったりする)。

header パラメータに HTTP ヘッダとページの冒頭部分の HTML を書いておき、
footer にページの最後の部分を書いておく。そして、ファイルの入ったフォル
ダーを指定して、send folderItems を呼ぶ、という手順になります。

あるいは WSM Watcher のサーバ側の処理は、フォルダー内に蓄えられた発言/
コメントに内から、指定された日時以降のものを一気に送りだすようになってい
るのですが、ここでは send files を使っています。


たぶん、この説明では分かりにくいと思いますので、近いうちに、サンプルの
CGI を登録します。

→  partialEngine_1.0b.sit

glad さんからのコメント
( Monday, November 13, 2000 00:01:41 )

まだ、last 1 mileのボトルネックが解消されていない現在に置いて、大切なアプローチです。

田中求之 さんからのコメント
( Monday, November 13, 2000 16:30:19 )

PartialEngine を使った掲示板のサンプルを登録しておきました。

掲示板の発言を収めるフォルダーを作り、そのパスを keijiFldr プロパティに
セットします。そして、keiji.acgi という名前で WebSTAR と同じフォルダーに
CGI としてセーブして、呼びだしてください。

発言を書き込んでいくと、新しい順に全ての発言が表示されます。
Send Partial ですので、どんなに発言数が増えても、かならず全てが表示
されるようになります。

なお、Tanaka's osax 2.0 が必要です

→  keiji.acgi.text.sit

田中求之 さんからのコメント
( Tuesday, November 14, 2000 13:29:24 )

WebSTAR 以外のサーバでも使用できるようにした 1.0b2 を登録しておきました。
Quid Pro Quo での動作は確認済みです。

Edit メニューの Preference でサーバを選択します。Other の場合には、
サーバソフトのクリエーターを指定してください。

また、Preference で処理開始までにどの程度の待ちを入れるかを調整
できるようにしておきました。LC475 の場合には 60 ticks ぐらいないと
うまくいかないようですが、G3 だと 0 ticks で問題ないようでした。

また、ウィンドウを目立たないものに変更しました。

→  partialEngine_1.0b2.sit

いその@とし研 さんからのコメント
( Wednesday, November 15, 2000 16:43:37 )

お世話になります。

G3 B&W (OS は 9.0.4)
Quid Pro Quo 2.0f1
partialEngine_1.0b2.sit
keiji.acgi.text.sit

の組合せで試してみたところ、ブラウザにヘッダ部分(<HR SIZE=1><P>まで
)
が表示されたところで、partialEngine に次のようなエラーが出て止まってし
まいまいました。

 An exception of class NilObjectException was not handled.
 The application must shut down.

ご報告まで。

# Quid Pro Quo 2.0f1 がいけない?
# Quid Pro Quo 1.0.2 では、サーバから何も返ってこなかったんですが、
 send partial に対応してないんでしたっけ?

田中求之 さんからのコメント
( Wednesday, November 15, 2000 17:46:32 )

>An exception of class NilObjectException was not handled.

あ、ちゃあ。これが出るってことは、基本的には私の方のミスの可能性が
高いですね。

調べてみます。

>Quid Pro Quo 1.0.2 では、サーバから何も返ってこなかったんですが、
>send partial に対応してないんでしたっけ?

対応しているはずですよ。

田中求之 さんからのコメント
( Wednesday, November 15, 2000 18:06:49 )

今、研究室の G3 で試してみたところ、

・WebSTAR 2.1 - 4.3 は全く問題なし
・Quid Pro Quo 2.1 は問題なし
・Quid Pro Quo 1.0.2 は反応なし(サーバからデータが送りだされない)

という結果になりました。QPQ 1.02 ではなぜか動きませんねぇ。何でだろ?
AppleScript で組むのと違わないはずなのに…

もう少し調べてみます。

田中求之 さんからのコメント
( Wednesday, November 15, 2000 18:23:35 )

partialEngine の利用例の紹介です(上記のテストにも使った)

以前にこのサイトでも動かしていたことがあるんですが、Clip2gif を使った
スクリーンのネットワークダンプ(って、ようするにスクリーンの GIF 画像が
見られるだけですけど)が、モニターが大きな場合でも動かせます。

property crlf : (ASCII character 13) & (ASCII character 10)
property http_10_header : "HTTP/1.0 200 OK" & crlf ツ
  & "Pragma: no-cache" & crlf ツ
  & "Content-type: image/gif" & crlf & crlf

on handle CGI request with connection ID cID
  try
    tell application "clip2gif"
      set r to {0, 0, 1024, 768} --- モニターの表示領域
      set bar to save screen as GIF in string crop r
      
    end tell
    ignoring application responses
      tell application "partialEngine"
        send data (http_10_header & bar) connection ID cID
      end tell
    end ignoring
    
    return "<SEND_PARTIAL>"
    
  on error
    return "HTTP/1.0 400 ERR" & crlf & crlf
  end try
end handle CGI request

いその@とし研 さんからのコメント
( Wednesday, November 15, 2000 21:03:34 )

「苦労して」Quid Pro Quo 2.1.2 を探し当てて、試したところ、上手くいきました。

# もう一度 Quid Pro Quo 2.0f1 でやってみると、今度は上手くいきました。
# 前回は、partialEngine をメニューから終了するときに、一度エラーが出て
 たのでそのせいですかね?(その後再起動をかけてます。こういうのって RB
 だとよくあるような気がする...)

ということで、田中さんのせいではありませんでした。失礼しました。

田中求之 さんからのコメント
( Thursday, November 16, 2000 00:22:11 )

>前回は、partialEngine をメニューから終了するときに、一度エラーが出て
>たのでそのせいですかね?

ビルドしたものが不安定なのかな? FAT 版にするとどうも不安定なような気がするので、
今度のリリースでは PPC と 68K を分けますね。

で、Quid Pro Quo 1.x でうまく動かなかった原因が分りました。QPQ 1.x と QPQ 2.x
とではクリエータが違うんですよ。これをすっかり忘れていて、QPQ 2 の方のクリエータ
だけでプログラムを組んでました。QPQ 1.x のクリエータを設定できるようにしてみたら
ちゃんと動くようになりました。

明日にでも 1.0b3 として登録します。

田中求之 さんからのコメント
( Thursday, November 16, 2000 10:30:00 )

QPQ 1.x にも対応した 1.0b3 です。Preference で QPQ 1.x を選んでもらうと
1.x でも動きます。1.0 と 1.02 で動作確認をしました。

今回から 68K と PPC とを分けます。

68K は
  http://mtlab.ecn.fpu.ac.jp/mySamples/partialEngine_1.0b3_68K.sit

PPC は↓

→  partialEngine_1.0b3_PPC.sit

いその@とし研 さんからのコメント
( Thursday, November 16, 2000 15:33:43 )

> で、Quid Pro Quo 1.x でうまく動かなかった原因が分りました。QPQ 1.x と QPQ 2.x
> とではクリエータが違うんですよ。

partialEngine_1.0b2 でも、サーバを Other にしてクリエータを適切に指定してやることで、Quid Pro Quo 1.0.2 で動きました。