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

WSM Watcher

発言者:田中求之
( Date Tuesday, May 11, 1999 22:35:20 )


ブラウザを使わずに、この会議室の新しい発言を随時読めるようにする、WSM Watcher
の 1.0b をリリースします。

WSM Watcher を起動して、check ボタンをクリックすると、過去24時間の投稿が
時系列で読み込まれます(ただし、該当する発言が40を越えていた場合には、最近の
40発言)。そして、その後、check をクリックするたびに、新しい発言がないかどう
かを調べて、新しい発言があった場合には、それを取り込みます。取り込んだ発言が
40を越えた場合には、古いものから順に消えていきます。

また、「10分ごとにチェック」のボタンをチェックしておくと、ソフトの方で
10分ごとにチェックを行います。

別の発言で紹介した、最近の発言を時系列で表示する CGI にちょいと手を加えて、
独自の様式でデータを送りだすようにし、それに対して HTTP プロトコルを使って
アクセスをするというのが、大まかな仕組みです。

1.0b の制約として、Proxy 経由のアクセスには対応していないことがあげられます。
Firewall の中からのアクセスには使えませんので注意してください。

REALbasic 1.1.1 で作成したフリーウェアです。PPC 版と 68K 版とわけて
作ってあります。

→  WSM_Watcher_PPC.hqx

田中求之 さんからのコメント
( Tuesday, May 11, 1999 22:36:07 )

68K 版です

→  WSM_Watcher_68K.hqx

田中求之 さんからのコメント
( Tuesday, May 11, 1999 22:38:13 )

REALbasic のプロジェクトです。

なお、2.0.2 では、NthField などの文字処理が異常に遅くなっているというバグが
ありますので、このプロジェクトを使ってコンパイルしても使い物にはならないと
思います。2.x を使用されている方は、バグが取れるまでは試さないほうがよい
でしょう。

→  wsn_monitor.project.hqx

田中求之 さんからのコメント
( Tuesday, May 11, 1999 22:39:57 )

>最近の発言を時系列で表示する CGI にちょいと手を加えて

この部分について、簡単に説明しておきます。

● Watcher 用プロトコルの概要

基本的には HTTP プロトコルを簡略化したものです。

http://mtlab.ecn.fpu.ac.jp/webcon.mtxt$last?raw

にアクセスすると、過去24時間に投稿されたメッセージ(ただし該当する発
言が40を越えた場合には、最近の40発言)が、時系列(古い順番)に送ら
れてきます。その際のフォーマットが、HTML のページの表示用とは異なります。


以下のようなデータが送られてきます(ヘッダ部分を含む)

======================================================================
HTTP/1.0 200 OK
Timestamp: 990511214951

<LIST>
<DATA>
<DATE>05/10 22:23</DATE>
<URL>http://mtlab.ecn.fpu.ac.jp/webcon.mtxt$990500000000.html</URL>
<ANCHOR>990510000000</ANCHOR>
<TITLE>タイトル</TITLE>
<NAME>発言者</NAME>
<MESSAGE>メッセージ</MESSAGE>
</DATA>
<DATA>
...以下発言の数だけ <DATA> 〜 </DATA> の組が送られてくる
</DATA>
</LIST>
======================================================================

分かりにくい場合には、ブラウザで上記の URL にアクセスし、送られてきた内
容を Page Source で確認してみてください。

最初の3行のヘッダは CRLF が改行コードですが、あとはすべて CR が改行
コードとして使われます。また、タイトル、発言者、メッセージは HTML に変
換されています。つまり、<, >, & は HTML エンコードされています。また、
漢字コードは SJIS です。

ようするに、各発言が <DATA> タグによって区切られ、発言の各要素が、それ
ぞれタグに囲まれた形になったデータとして送られてくるわけです。ですから、
受け取った側では、タグを目印にデータを処理します。


また、ヘッダの2行目の Timestamp ヘッダには、処理を行った時間を 
Timestamp 形式で記してあります。そこで、これを記録しておいて、次のアク
セスの際に search_arg にしてアクセスを行うと、先程のアクセス以降に書き
込まれたデータだけが送られて来るようになっています。たとえば、上記の例
では Timestamp ヘッダの値が 990511214951 になっていますので、

http://mtlab.ecn.fpu.ac.jp/webcon.mtxt$last?990511214951

とすると、先程のアクセス以降の発言のデータが送られてきます。こうするこ
とで、いったんアクセスした後には、新しい発言のデータだけを追加的に取り
寄せることができるようにしてあります。

なお、新たな発言が無かった場合には、

<LIST>
</LIST>

という<LIST>タグだけが送られてきます。

以上がおおまかな仕組みです。

よしもと さんからのコメント
( Wednesday, May 12, 1999 04:12:52 )

使ってみました。
いや、なかなかいいですね。
不精な僕にぴったりです (^^;

田中求之 さんからのコメント
( Wednesday, May 12, 1999 16:35:25 )

>いや、なかなかいいですね。

でしょ? 作った本人も、けっこう使えるじゃん、と思っています。最初は、単に、
port 80 から流れてくるデータをモニターするために作った、CGI のデバッグ用の
ツールだったんですが (^_^;;

で、先程、Proxy 対応の機能を追加し、同じページの発言を見やすくする機能を
追加しました。また、スプールファイルに取り込んだデータを書き込むようにし、
起動時にスプールが古くなければ(24時間以内の作成なら)、そのスプールの
データを読み込んで表示するようにしました(起動時のトラフィックを少しでも
減らすため)。

今夜にでも、1.0b2 として公開します。

で、あとは、当然のことながら、コメントの投稿機能の実装ってわけですね (^_^)V

田中求之 さんからのコメント
( Wednesday, May 12, 1999 20:01:13 )

>コメントの投稿機能の実装ってわけですね (^_^)V

MacOS 8.6 のアップデータを落している間に実装してみました。

うまくいくかな?

田中求之 さんからのコメント
( Wednesday, May 12, 1999 23:10:08 )

投稿の基本的な機能は実装できたようです。

ただ、REALbasic 1.x だと、インライン入力ができないのが難点ではありますが。

田中求之 さんからのコメント
( Thursday, May 13, 1999 01:42:16 )

1.0b2 です

改良点は
1: Proxy 経由のアクセスに対応
2: 同じページの発言だけをみるモードを追加
3: コメントの投稿機能を追加
4: 参考ページの URL を確認できるようにした

です。2は、発言を選択してから、コメントリストの右下の View chain ボタンを
クリックしてください。その発言と同じページのものだけがリスト表示されます。なお、
このモードでブラウズしているときには、新規発言のチェック機能は働きません。

3のコメント投稿は、まだ十分なテストが行えていません。もし試される場合には、
このページへのコメントで試してみてください (^_^;;  発言を選択してから
コメントのボタンをクリックすると、選択部分が引用されて表示されるようになって
ます。なお、新規発言の投稿は実装していません(するつもりもありません)。

4は、マウスをページ名のところへもっていくと、URL の表示に切り替わります

では、まず PPC 版から

→  WSM_Watcher_PPC_1.0b2.hqx

田中求之 さんからのコメント
( Thursday, May 13, 1999 01:43:22 )

あ、スプール機能も追加されてます。

68 K 版です

→  WSM_Watcher_68K_1.0b2.hqx

田中求之 さんからのコメント
( Thursday, May 13, 1999 01:44:47 )

REALbasic 1.x 用のプロジェクトです

→  wsn_watcher_1.0b2_RB.hqx

田中求之 さんからのコメント
( Thursday, May 13, 1999 01:46:47 )

あ、そうそう、アイコンもついてます (^_^;;

よしもと さんからのコメント
( Thursday, May 13, 1999 03:51:07 )

WSM Waterでコメントしています (^^;

いや、b2になって細かいところが改善されていますね。例のデータの転送量ですが、
出来ればプログレスバーになると良いかなぁ、って思ったりもしますです (^^;

#チェックが20分ごとに変更になっている (^^;

藤川 さんからのコメント
( Thursday, May 13, 1999 09:10:16 )

使わせていただきました。
いいですね、これ(^^)。ブラウザより全然軽いし。

欲を言うとチェックインターバルの時間が20分のみですけど
ここが任意(もしくはプルダウンで10、20、30、60分とか選択)
だともっと良いです(^^)

peace さんからのコメント
( Thursday, May 13, 1999 13:02:34 )

う〜ん、素晴らしい!色々活用法がありそうですね。
ソースも勉強になります。(っても、まったく理解できてませんが・・・)

毎度素敵な物を開発される田中先生に感謝です〜

これを改造すれば、自分のページ更新専用アプリができるかな?
と思ったので質問させていただきます。
投稿部分はどうなっているのでしょうか?フォームの返り値を作って
送っているのでしょうか。また、例えばPERLのCGIに送るとかも
できるのでしょうか・・・
お忙しくなければ、よろしくお教え下さい。
(もち、自分でも頑張ってソースから読んでみます)

田中求之 さんからのコメント
( Thursday, May 13, 1999 17:22:43 )

吉本さん曰く:
>出来ればプログレスバーになると良いかなぁ

サーバ側の負担を少しでも減らすため、今は、単純にデータ(実は1発言ごとに記録された
ファイルなんだけど)を Send partial で垂れ流しているだけなんで、転送開始の時点では
何バイトのデータが送りだされるかは確定してないんですよ。もちろん、あらかじめ計算
してヘッダに付けるようにすればいいわけですが、面倒だなって (^_^;;


藤川さん曰く:
>ここが任意

このあたりの仕様は次のバージョンで変えます。藤川さんがおっしゃるような、いくつか
の候補の中からポップアップメニューで選ぶように変更する予定です。それと、投稿直後
には自動的にチェックにいくようにする予定です。

peace さん曰く:
> これを改造すれば、自分のページ更新専用アプリができるかな?

このソフトのポイントは、CGI 側から独自の形式のデータを送りだすようにしてあること
にあります。この部分が好きなように設定できる(プログラミングできる)のであれば、
応用は可能だと思います。

> 投稿部分はどうなっているのでしょうか?

ブラウザで投稿する場合と全く同じデータを生成して HTTP プロトコルで送り込むように
してます。CGI の側からすれば、ブラウザでページ上から投稿されたのと全く変わらない
データを受け取るようになってます。

ブラウザで投稿した場合には、発言の書き込みが完了するとリダイレクトヘッダを受け
取って、書き込みが終わったページへ移るようになっていますが、Watcher は、リダイ
レクトヘッダを受け取ったら書き込みが無事に行われた通知を表示します。

なお、ソースは、特に 1.0b2 から錯綜している部分がありますので、読みにくいかも
しれません。すいません (^_^;;

田中求之 さんからのコメント
( Thursday, May 13, 1999 19:20:17 )

さきほど、すこしヘッダをいじったので、1.0b2 では動作がおかしくなっていると
思います。今夜、1.0b3 を出しますので、ちょっとお待ちください。

で、プログレスバー対応を考えてみたんですが、やっぱ面倒なので、やめました。
現在は、サーバから送られてくるデータをいったんバッファにすべて読み込んでか
ら処理してるのですが、ヘッダの content-length を読むためには、受信中に
バッファの内容をチェックしないといけないので、それが嫌なのでした (^_^;;

よしもと さんからのコメント
( Thursday, May 13, 1999 20:54:00 )

>で、プログレスバー対応を考えてみたんですが、

これは別にいいですよ。単に見かけだけの問題ですから (^^;

それより、元の発言を選択しておくと、勝手に引用してくれるんだ。
凄く便利、便利。
これなら、Webブラウザで見るより快適ですぅ。

田中求之 さんからのコメント
( Thursday, May 13, 1999 22:54:39 )

>元の発言を選択しておくと、勝手に引用してくれるんだ。

へへへ。これぐらいのことは組み込んでおかないと、あえてアプリにする
意味がありませんってば (^_^;;

あとは、REALbasic 1.x が TSM 対応だったら言うことないんですがね。
飯森さんの Inline TSM を引っ張り出してこようかな。

とりあえず、定期的にチェックする間隔を変えられるようにしたのと、
投稿後は自動的にチェックに行く機能を実装しました。この後、
ソースの点検を行ってから 1.0b3 としてリリースします。

よしもと さんからのコメント
( Thursday, May 13, 1999 23:38:20 )

>へへへ。これぐらいのことは組み込んでおかないと、あえてアプリにする
>意味がありませんってば (^_^;;

流石、田中さんね (^^;
確かに、細かいところに行き届いた仕様になっていますです。

折角b3のでデバッグ中になんですけど、time outの時間設定できた方が良くないですか?
僕なんかは困らないけど、ダイアルアップ・ユーザーにはあった方が親切かも?

一度ご検討を...

#これで、インライン入力が出来れば、完璧ですね (^^;

田中求之 さんからのコメント
( Friday, May 14, 1999 01:11:36 )

>time outの時間設定できた方が良くないですか?

なるほど。確かにそうですね。

ということで、2分間たってもサーバにアクセスできなかった時には接続を
打ち切る仕様にしておきました。

1.0b3 は、このあと2時過ぎにはアップできると思います。

田中求之 さんからのコメント
( Friday, May 14, 1999 02:09:00 )

1.0b3 です

変更点:
1:チェック間隔を選択制に
2:投稿直後には自動的にチェックするように
3:エラーチェックの強化

などです。サーバ側の設定を変更したため、これ以前のバージョンでは不具合が
生じる恐れがあります。

まず PPC から

→  WSM_Watcher_PPC_1.0b3.hqx

田中求之 さんからのコメント
( Friday, May 14, 1999 02:09:56 )

68K 版

→  WSM_Watcher_68K_1.0b3.hqx

田中求之 さんからのコメント
( Friday, May 14, 1999 02:10:57 )

で、REALbasic 1.x 用のプロジェクトです。

→  wsn_watcher_RB_1.0b3.hqx

よしもと さんからのコメント
( Friday, May 14, 1999 04:28:59 )

>1.0b3 です

早速使っています。
いや、どんどん良くなっているなぁ。

ところで、いまb3と言うことですが、今後はどのようにしていこうとお考えですか?

田中求之 さんからのコメント
( Friday, May 14, 1999 11:07:23 )

>ところで、いまb3と言うことですが、今後はどのようにしていこうとお考えですか?

コメントの名前と、最後にチェックを行った日時を Preference に記録するように
することと、コメントをまとめて書けるようにしたら、1.0 として完成の予定です。

今は、コメントごとにリクエストを送ってますが、これを、まとめて次回のチェッ
ク時に行えるようにしたいと思ってます。こうすれば、出張などの際に、チェック
して、いったん接続を切ってまとめてコメント書いて、で、つないで一気に送信
ってのが可能になるので。

たむら さんからのコメント
( Friday, May 14, 1999 11:43:24 )

 ちょっと出遅れていますが、とても便利に使用させてもらっています。
で、要望です。

☆メーラーみたいに、スペースキーだけで下向きに読めていって欲しい
 上下方向キーでメッセージは進められますが、下のメッセージの欄が長い
 時はスクロールさせなければならないので・・・・・

☆メッセージ表示部分の大きさを可変にして欲しい
 上の要望が不可であれば、こちらを実装していただけるとありがたいです。

☆チェックして新規メッセージを取り込んだ後、新規の最初のレコードが
 選択されていて欲しい
  #これは「最後にチェックを行った日時を Preference に記録する」
   に関連して実装されると思っていいのでしょうか?

 いろいろ並べてすみませんが、できればよろしくお願いします。
(さっきproxy経由で投稿したら610バイトくらいでエラーになったので、
ポートを8000にかえてみたけどだめでした。ブラウザから送信しています。)

たまちゃん さんからのコメント
( Friday, May 14, 1999 11:56:04 )

>>さっきproxy経由で投稿したら610バイトくらいでエラーになった

1.0b2 と同様、1.0b3 でも proxy 経由での投稿が出来ません。ご確認できる
ようでしたら、確認していただけると助かります。他の方はどうですか?

proxy サーバは Squid/2.2 です。

田中求之 さんからのコメント
( Friday, May 14, 1999 15:17:30 )

あっちゃぁ〜 Proxy の処理にバグがあるようですね。

早速調べて対処します。

田中求之 さんからのコメント
( Friday, May 14, 1999 15:21:30 )

>早速調べて対処します。

これでうまくいったかな?

田中求之 さんからのコメント
( Friday, May 14, 1999 15:23:23 )

Proxy にリクエストを送る際の HTTP ヘッダに不備がありましたが、修正しました。
今夜リリースの 1.0b4 では修正済みになります。

田中求之 さんからのコメント
( Friday, May 14, 1999 15:30:53 )

メッセージのナビゲートについては、今、いくつかの案を試しています。
1.0b4 には組み込めると思います。

>☆チェックして新規メッセージを取り込んだ後、新規の最初のレコードが
> 選択されていて欲しい

これは、あえて実装していないのです。というのも、定期的にチェックを
行うようにしていた場合、メッセージを読んでいる最中にもチェックが
入りますよね。すると、もし新規発言に切り替わるようになっていると、
メッセージを読んでいる最中にも関わらず新しい発言の方へ強制的に切り
替わることになります。これはインターフェースとしては良くないという
判断です。この点は変更するつもりはありませんので、あしからず御了承
ください(「便利さ」と「大きなお世話」の見極めが微妙なところですが)。

田中求之 さんからのコメント
( Friday, May 14, 1999 18:24:04 )

>メッセージのナビゲートについては、今、いくつかの案を試しています。

結局、ウィンドウのサイズを縦方向のみ可変(正確には拡大可能)ということで逃げま
した。EditField のスクロール値がコントロールできないことと、折り返しの入った場
合の行カウントの問題がありますので、スペースでスクロールする機能は実装できそう
もないので。

田中求之 さんからのコメント
( Friday, May 14, 1999 18:24:37 )

>メッセージを読んでいる最中にも関わらず新しい発言の方へ強制的に切り
>替わることになります。これはインターフェースとしては良くないという

1.0b3 では、投稿後は強制的にメッセージのチェックを行うようにしていましたが、
この機能も、上記の原則との一貫性を持たせるために削除しました。

そのかわり (?)、チェックなどをメニューからショートカットで呼び出せるように
もしました。

田中求之 さんからのコメント
( Saturday, May 15, 1999 03:46:42 )

1.0b4 の登録は今日(土曜日)の午後になると思います。コーディングは終わった
のですが、眠いので、最終チェックせずに寝ます (^_^;;

細かいところで色々と手を入れていたら、時間が取られてしまった…

田中求之 さんからのコメント
( Saturday, May 15, 1999 13:08:18 )

これは新しいバージョンのテストです。

メッセージの扱いを根本から変えるという変更を行ったので、無事にコメント
できるか、ちょっと不安なのです。

この投稿がうまくいくようであれば、1.0b4 を公開します。

田中求之 さんからのコメント
( Saturday, May 15, 1999 13:11:32 )

>この投稿がうまくいくようであれば

どうやら問題がないようですね。

1.0b4 の変更点は以下の通りです

1: Proxy で投稿できないバグに対処
2: 連続投稿機能の実装
3: ウィンドウサイズを可変に
4: View All <-> View chain の切り替えの高速化
5: メニューコマンドの充実
6: 発言者と発言保持数を Pref で設定可能に
7: 内部のコードの大幅な書き直し