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

WSM Watcher for Mac OS X (2)

発言者:よしもと
( Date Sunday, September 30, 2001 23:18:51 )


容量制限なので、新しく起こします。

重松さん、今落として試してみました。

(1)10.1でも機動はOK
(2)ただ、表示されないタイトル、本文の発言がある。
(3)環境設定ができない。

ファーストインプレッションはこんな感じです。

でも、さっくと立ち上がってうれしいです。

重松修 さんからのコメント
( Monday, October 01, 2001 10:36:02 )

OS X 10.1 でも OK でしたか。どうも、かなり環境に依存する問題の
ようです。10.1 ですが入手し損ねてしまいました。有償のものを
頼もうと思っていますが、その価値あるのか。。。>Apple

表示されない発言は私も確認しました。URL encode/decode の bug かも
しれませんね。違いはそこだけだと思いますので。

環境設定は、OS X には対応していませんから、動かないと思います。
こちらは、追って対応していきたいと思います。

でも、REALbasic ですが、OS X 10.1 に対応は有償になりそうな雰囲気です。
うーん、また、REAL software に寄付金払わないといけないのだろうか。。。

よしもと さんからのコメント
( Monday, October 01, 2001 11:00:51 )

> その価値あるのか。。。>Apple

10.1は悪くないと思いますよ、個人的には。

# おまけに、9.2.1のフルインストールCDもつきますし :-)

> 表示されない発言は私も確認しました。URL encode/decode の bug かも
> しれませんね。違いはそこだけだと思いますので。

実は以前田中さんのオリジナルを3.5.1でmakeしたもの試したことがある
んですが、そのときも似たような症状が起きました。あと、スプールに保
存されているファイルには、ちゃんと発言が記録されているようなので、
もしかしたら、他に原因があるのかもしれません。ただ、ざっと調べた
だけですの、確信は持てませんが...



> でも、REALbasic ですが、OS X 10.1 に対応は有償になりそうな雰囲気です。
> うーん、また、REAL software に寄付金払わないといけないのだろうか。。。

そうなんですかぁ。困ったもんだなぁ。



重松修 さんからのコメント
( Monday, October 01, 2001 11:09:01 )

スプールの中身も確認してみます。情報ありがとうございます。

REALbasic はサポートポリシーが非常に不明瞭ですが、
3.5 をリリースしてすぐに、4.0 のアルファがリリースされ、
そのなかで、3.5 のバグを修正しているんですね。
で、その修正は、4.0 でしか対応しないと、CEO がメーリングリストで
言及しています。
つまり、彼らには、瑕疵担保責任という自覚がないということです。
また、すぐに見つかるその程度のバグですら、十分テストせずに
製品として販売しているということでもあります。

私は、REALbasic は単なる interface builder としてしか使っていません。
FaceSpan の OS X 用がでて、それが安くてできが良かったら、
OSAX + FaceSpan という開発スタイルも悪くないかな、と思っています。
OSAX であれば、共有ライブラリベースで開発が出来ますから、
C++ の例外や STL といったテンプレートライブラリが活用できますから。

当面は、WSM Watcher はまずは REALbasic で凌いで、
Cocoa ベースか、AppleScript + FaceSpan で作り直すのがいいかも
知れません。
この会議室の正確からいえば、AppleScript の方がらしくていいな、
とおもいますが。

よしもと さんからのコメント
( Monday, October 01, 2001 12:17:40 )

> 当面は、WSM Watcher はまずは REALbasic で凌いで、
> Cocoa ベースか、AppleScript + FaceSpan で作り直すのがいいかも
> 知れません。

そうですね。時間が取れるようになったら、Cocoaの練習問題として
トライしてみたいと思います。

#その前に誰かが作ってくれそうではありますが :-)

> この会議室の正確からいえば、AppleScript の方がらしくていいな、
> とおもいますが。

AppleScript Studio が出れば、結構使えるかもしれないですね。

→  AppleScript Studio 

重松修 さんからのコメント
( Monday, October 01, 2001 12:33:57 )

AppleScript Studio いい感じですね。(スクリーンショットを見た範囲で)
Ruby+GTK/Ruby のような感覚で、スクリプト言語に GUI をかぶせる、
とう感じでしょうか。
今年中には入手可能になるというように読めるのですが、
これは個人的に「期待大」です。:-)
私も今から OSAX の作り方の勉強を始めようかな。
そういえば、田中先生 CodeWarrior へ移行されたんでしたっけ?
Tanaka's OSAX の OS X 対応も気になっています。

田中求之 さんからのコメント
( Monday, October 01, 2001 14:13:29 )

>そういえば、田中先生 CodeWarrior へ移行されたんでしたっけ?
>Tanaka's OSAX の OS X 対応も気になっています。

まだ移行できていません。今のところ OS X の様子見ってところです。
っていうか、Cocoa 環境で osax ってどこまで意味のあるツールになる
んかいな?という点で、まだ疑問を持ってます。

AppleScript Studio が出てから考えようというところでしょうか。

重松修 さんからのコメント
( Monday, October 01, 2001 15:41:14 )

とりあえず、WSM Watcher ですが、いくつかの問題点を見つけました。
まずは、制御コードを含んだメッセージなどもそのままうけとりますから、
危険なので、プラグイン内部で 16 進数を吐くように置き換えました。
また、メッセージが消える問題ですが、これは、REALbasic コードの
バグのようです。

Function pickTag(myData as string, myTag as string) As string
   dim x, y as integer
   
   x = InstrB(myData,"<"+myTag+">")
   if x = 0 then
      return ""
   end if
   x = x + LenB("<"+myTag+">")
   y = InstrB(x,myData,"</" + myTag + ">")
   
   If y = 0 Then
      Return "バグってマス"+mytag
   End If
   
   return MidB(myData,x,(y-x))
   
End Function

とすればわかりますが、特定のデータからの切り出しに失敗しています。
とりあえず、適当に対処してみます。

重松修 さんからのコメント
( Monday, October 01, 2001 16:52:49 )

田中先生のコードには問題はないと思うんですが、なぜか動かないので、
plugin にしてしまいました。これでとりあえず、メッセージが表示されない
不具合は回避できています。
けど、ページを開くとコメントをつけた人の名前が欠落しますね。
このほかにもバグはまだまだあると思います。
順次なおしていきます。
新しいものはもう少し私の方で確認後にアップしますので、
OS X 10.1 を利用できる方はその辺も含めて、試していただければと思います。

重松修 さんからのコメント
( Tuesday, October 02, 2001 16:13:07 )

遅くなりましたが、それっぽいコーナーを作りアップロードしました。

とりあえず、スプールの読み込みはこぼれはないと思うんですが、
新しい発言が引っ張ってこれないような気がしています。。。
スプールを捨てると、キチンととってきますが、私のところだけでしょうか。
また、環境設定は、ファイルメニューにあるものは OS X 10.0.4 では
動作しました。


→  WSM Watcher for OS X

よしもと さんからのコメント
( Tuesday, October 02, 2001 22:35:29 )

ご苦労様です。

今落として試しましたが、確かに新規発言が取ってこれません。
あと、「環境設定」は選択できないままになっています。

とりあえず、ご報告

よしもと さんからのコメント
( Tuesday, October 02, 2001 22:41:03 )

> ファイルメニューにあるものは

すいません、見落としていました。これはOKです。
それから、スプールを捨てると取り込みはOKになりますが。

「112発言取り込みました 未読発言:80」

となり、一致しません :-) まあ、使う分には支障ありませんが...

よしもと さんからのコメント
( Tuesday, October 02, 2001 22:43:07 )

やっぱり一度取ってきてしまうと、新たに新規発言は取ってこれないみたいですね。

今回はWSM for Xからの発言のテストも兼ねて。

田中求之 さんからのコメント
( Tuesday, October 02, 2001 22:50:37 )

>「112発言取り込みました 未読発言:80」
>となり、一致しません :-) 

これは、MacOS 版でも同じ動作ですよ。メッセージは、サーバから返された
ものをすべて取り込むんですが、保存数を上回ったものは、古いものから捨てる
ようになってます。

ですから、保存メッセージ数を 80 とかにしておいて、2週ぶりに動かしたり
すると、取込み数が未読数をはるかに上回ります。

OS X 版ですが、AppleScript が XML-RPC のクライアント機能を組み込んだので、
サーバ側を XML-RPC 対応に仕立てたら、けっこう簡単というか、使い物に
なりそうな気がしています。

田中求之 さんからのコメント
( Tuesday, October 02, 2001 22:53:44 )

そういえば、このところ、WSM Watcher へのリクエストの中に、パラメータが
00 になっているものが混じっているんですが、これがもしかして OS X 版
からのアクセスかな? 最終チェック時の Timestamp になっているべき所
(http_search_args)が、ログでは 00 になってます。

その他、サーバ側の記録をチェックして欲しいことがありましたら、遠慮なく
言ってください。

重松修 さんからのコメント
( Tuesday, October 02, 2001 23:52:16 )

timestamp の件確認しました。
Preferences からの読み込みの時点で「00 OK」という内容になっています。
ファイルの内容をバイナリで見ても「0C3030204F4B」ですので、読み込みの
問題ではないようです。何故、そういうデータになるのか、追ってみます。
田中先生、情報ありがとうございました。

重松修 さんからのコメント
( Wednesday, October 03, 2001 10:35:09 )

この件ですが、不正なタイムスタンプのリクエストに対して、HTTP/1.0 200 OK を返す、
というサーバの仕様の問題、また、次に Timestamp: という項目の探し方が、
InStrB() で、見つからなくても、その判定をしていなかったこと、
さらに切り出しがオフセット決め打ちであったことにより、一度不正な値になると、
延々不正な値であり続ける問題でした。

何故不正な値になるのかは未だ不明ですが、とりあえず、私の環境では、
それなりに、動作するようになりました。
もう少しテストをして、新しいバージョンをアップします。

重松修 さんからのコメント
( Wednesday, October 03, 2001 12:56:29 )

とりあえず、現在のところ、安定して動いているようです。
ソース バイナリ一式いつものところにあげてありますので、お試し下さい。
ただし、今回はデバッグ版ですので、デバッグ用のウインドウが開くことがあります。
また、速度よりも、バグ取りを優先してあるため、遅いかも知れませんが、
そのうち plugin にしますので、許してください。

それから、icon, creator ですが、新しくした方がよいですか?>田中先生

→  http://www.ravi.ne.jp/~shige/WSM/

田中求之 さんからのコメント
( Wednesday, October 03, 2001 13:52:10 )

>不正なタイムスタンプのリクエストに対して、HTTP/1.0 200 OK を返す、
>というサーバの仕様の問題

この仕様は確かにまずい(少なくとも一般に公開するものとしては)ですねぇ。
今週末のサーバのメンテナンスの時に、修正しておきます。

>それから、icon, creator ですが、新しくした方がよいですか?>田中先生

そうですね。その方が混乱がなくていいかもしれません。

重松修 さんからのコメント
( Wednesday, October 03, 2001 14:41:22 )

アイコン・クリエータについては早急に対処したいと思います。m(__)m
# どなたか絵心のある方、アイコン、作っていただけないですか?

あとは、コントロールのサイズ調節や、OS X と Classic での Preferences メニューの
切り替え、文字列操作の速度アップなど、課題は山積みですが、少しずつ改良して
いこうと思っています。

また、時間がとれたら、PHP 版のサーバスクリプトも用意したいと思います。

よしもと さんからのコメント
( Wednesday, October 03, 2001 22:25:12 )

重松さん、ご苦労様です。
これで、Xな環境がまた一つ充実しました :-)

>あとは、コントロールのサイズ調節や、OS X と Classic での Preferences メニューの
>切り替え、文字列操作の速度アップなど、課題は山積みですが、少しずつ改良して
>いこうと思っています。

よろしくお願いします。大したことは出来ませんが、時間の許す限り協力させてください。

#リスト部分のリサイズが出来るようになるとうれしい :-)

田中求之 さんからのコメント
( Wednesday, October 03, 2001 23:54:17 )

Inside WSM Watcher の続きです (^_^;; サーバ側の実装について。
なお、この中にも書いておきましたが、今週末にサーバのメンテナンスを
行なう際に、http_search_args が不適切なものだった場合(空、あるいは
Timestamp になっていない)、ステータスコード 406 のヘッダを返すように
します。

========================================================================
●サーバ側の実装
========================================================================

サーバ側でどのような処理を行なっているのかを説明する。この説明は、WSM 
Watcher のクライアントを作成するうえで必要になる情報ではない。

WSM watcher に関連する処理は、すべて、Web Scripter's Meeting の処理を行
なっている CGI が受け持っている。以下の説明において、CGI とは、特に断り
の無いかぎり、この Web Scripter's Meeting の処理を行なっている CGI のこ
とである。また、会議室とは Web Scripter's Meeting を指す。

------------------------------------------------------------------------
1:メッセージの保存
------------------------------------------------------------------------

CGI は、会議室にコメントや新規話題の投稿があった時点で、その投稿を WSM
Watcher のメッセージのフォーマットに整えて、決められたフォルダーの中に
テキストファイルとして保存するようになっている。

つまり、投稿されたメッセージを、先程説明した <DATA> .... </DATA> のタグ
を付けたフォーマットに整え、それをテキストファイルに書きだす。1ファイ
ル1メッセージである。

メッセージの中に <SERIAL_NUMBER> という要素があったが、これは、実は、フォ
ルダーの中に記録する際のメッセージのファイル名なのである。

1メッセージ1ファイルになっていることで、発言の削除(時折会議室に書き
込まれる spam まがいの発言の削除など)や修正の際には、該当するファイル
を削除するだけでよいようになっている。

また、会議室のトップページで、24時間以内にどれだけの発言があったかを
表示するようになっているが、これは、この Watcher 用のフォルダーの中に
24時間以内に作られたファイルがいくつあるかをカウントした数字が表示さ
れるようになっているのである。

ファイルをそのままにしておくと、どんどん増えていってしまうので、現在は、
毎晩、夜中に走らせている会議室のメンテナンスのスクリプト(60日以内に
更新された話題の一覧ページの作成などを行なっているスクリプト)の中で、
30日より前に作成されたものは削除するという処理を行なうようにしている。
このため、WSM Watcher では、過去30日分しか取り出せないようになってい
るわけである。

なお、会議室に発言の投稿があった場合、現在では CGI は、ページの作成/更
新、メール配送、および配送用ファイルの書き込み(Digest あるいは Daily 
Digest 用)、そして WSM Watcher 用のファイルの作成と、いくつものファイ
ル処理を行なうようになっている。このことによる処理の低下を避けるため、
CGI は、ページの作成/更新を行なった後、その他の処理は別のアプリケーショ
ンに任せるようにしている。また、その際には、下請けアプリケーションの処
理の終了をまたずに CGI としての処理を続行するようにしている。このため、
Watcher から投稿を行なった場合、サーバからは書き込み完了を知らせるリプ
ライが返ってきても、その時点では、Web のページは更新されているが、
Watcher 用のメッセージファイルは作成されていないことがありうる。このこ
とがあるため、投稿してすぐにチェックしても、書き込みが取りこめないこと
が起きるのである。


------------------------------------------------------------------------
2:メッセージの送出
------------------------------------------------------------------------

クライアントからリクエストがきた場合、CGI は以下のような手順で処理を行
なう。

まず http_search_args をチェックし、メッセージの検索を行なう日時を確定
する。パラメータが raw だった場合は、アクセスから2日以内(アクセスした
時点から48時間前)、timestamp が送られてきた場合には、その timestamp 
を基準にする。いずれにも当てはまらない場合、パラメータが空であるとか、
timestamp の書式に当てはまらない場合は、ステータス 406 のエラーを示すヘッ
ダをクライアントに返す(*これは現時点の実装とは若干異なる)。

メッセージを検索する日時が確定したら、次のフォルダー内から、指定された
日時以降に作成されたファイルを探す。

もし該当するファイルが見つからなかった場合には、304 Not Found のヘッダ
をクライアントに返す。

該当するファイルが見つかった場合には、ステータスヘッダと Timestamp ヘッ
ダを付けて、<LIST> タグをまずおくってから、該当するファイルの内容を順次
送りだす。ファイル名は記録時の Timestamp になっているので、ファイル名の
順に送りだしていけば、古いメッセージから順に送りだしていくことになる。

すべてのファイルの中身を送信し終わった時点で </LIST> タグをおくって、コ
ネクションを切る。

クライアント側で保存されるメッセージ数に関係なく、サーバは、該当するメッ
セージをすべて送りだすようになっている(保存数にあわせて処理を行なうの
は、クライアント側に任されている)。

過去30日分のメッセージしか保存しないようになっているため、timestamp 
で指定された日時がそれより古い場合でも、30日前までのメッセージまでし
か送り出せないようになっている。なお、以前は、最大で 60 メッセージとい
う数の制限を加えていたが、現在では、メッセージ数による制限は加えていな
い。

なお、CGI がファイルの中身を順に送りだして行く処理は、AppleScript では
行なえないため( CGI からサーバにリプライできるデータに 32K という制限
が加わっている)、実際の処理は partialEngine というアプリケーションに任
せるようになっている( Send Partial を使って CGI から partialEngine へ
処理を移す)。

partialEngine
<http://mtlab.ecn.fpu.ac.jp/mySamples/partialEngine_1.0b3_68K.sit>
<http://mtlab.ecn.fpu.ac.jp/mySamples/partialEngine_1.0b3_PPC.sit>

重松修 さんからのコメント
( Thursday, October 04, 2001 01:11:28 )

新しいバージョンを作成しました。お試し下さい。

改良点
・スプールの読み込みを plugin に変更。高速化。
・Debug の追加。これが OFF の時には、ログを吐きません。
・About 窓の変更しました。(モードレスにしました。)

新たに気づいた問題点
・Select All が有効に機能していない。


→  http://ganymede.ravi.ne.jp/~shige/WSM/

よしもと さんからのコメント
( Thursday, October 04, 2001 10:14:24 )

>改良点
>・スプールの読み込みを plugin に変更。高速化。

これは強烈に早くなりました。どうもありがとうございます。

田中求之 さんからのコメント
( Friday, October 05, 2001 23:12:53 )

本日の夕方のサーバのメンテナンスの際に、CGI のスクリプトを修正し、
http_search_args が不適切なものだった場合には

HTTP/1.0 406 Not Acceptable

というヘッダを返すようにしました(Timestamp ヘッダはありません)。


で、これに合わせて MacOS 用の WSM Watcher の修正を行ない、1.5 として
リリースします(検索機能や Script メニューなどを削って、基本機能だけに
しっかりまとめ直したものにするつもりです)。

先ほど、この修正を行なっていたんですが、スプールの読み込みや受け取った
メッセージの切り分けの処理を、NthField を使うものから MemoryBlock で
処理するものに書き換えてみたら、かなり早くなりました。また XFCN も
使用しないで済むようにしました。Rb 2.0.2 で動かしても、そこそこの
速度で動くようになりました。

連休明けにでもリリースします。

よしもと さんからのコメント
( Friday, October 05, 2001 23:25:56 )

えっと、ショートカットなんですが、「コマンド+H」で「Go New」になっていますが
これ変更できませんか?「コマンド+H」で「アプリケーションを隠す」とぶつかって
いるんで...

# 他にもぶつかっているのがあるかも?

田中求之 さんからのコメント
( Saturday, October 06, 2001 15:22:19 )

>次に Timestamp: という項目の探し方が、
>InStrB() で、見つからなくても、その判定をしていなかったこと、

Rb 2 だと、確かに、この部分の判定がコケますねぇ。さっき気がつきました。
InstrB("Times") で処理を行なうようにすると問題ないようです。

田中求之 さんからのコメント
( Sunday, October 07, 2001 16:12:11 )

その後、色々とテストしてみたのですが、やはり Rb2 では InstrB の動作がおかしくなる
ことがおきますね。結局、InstrB を使わないようにコードを書き換えました。

明日にでも 1.5 のベータを出しますが、Rb 1 でビルドしたものと Rb2 でビルドしたものの
両方を出します。後者は、処理速度は若干遅くなりますが、インライン入力が可能なバージョン
という位置づけです。

さんからのコメント
( Wednesday, October 10, 2001 17:26:34 )

OS X 10.1で試してみましたが、動作はあまり問題ありませんが
メニューのフォントカラーがおかしいのと、各ボタンから若干文字が溢れて
いるのは、私だけでしょうか? (^^;

J.浅倉 さんからのコメント
( Wednesday, October 10, 2001 17:46:23 )

ボタンからはみ出てるのは私もですが、意味は分か
りますので、文句はもうしませんです。

が、ScrollArrowをDoubleBothにすると、一覧側に、
す、スライドバーがありません。(^^;;
少々高さが足りないかと....。


こんな事するのが悪いでしょうか。
もうしませんです....


重松修 さんからのコメント
( Wednesday, October 10, 2001 18:28:59 )

1.4 は基本的に、田中先生の WSM を単に OS X でも動作するように
改変したもので、ボタンなどのサイズの調整はおこなっていません。
1.5 が作成中のようですし、致命的な問題の修整にとどめたいと思います。

あくまでも、「暇ができたら」ですが、OS X らしい動作をするように
修正してフィードバックして行きたいと思いますので、今後共宣しくおねがいします。

不具合の修正ですが、iBook がキートップの交換で手もとに無いので、
戻って来てからになります。

よしもと さんからのコメント
( Monday, October 15, 2001 14:36:55 )

「Open URL」を使うと、「#」が「%」に変換されて、うまく開けないよう
です。

「$011008135812.html#23011015143106」
    ->「$011008135812.html%23011015143106」

な感じで。

重松修 さんからのコメント
( Monday, October 15, 2001 17:03:58 )

URL エンコードしすぎるってことですね。
iBook が戻りしだい修正します。m(__)m

よしもと さんからのコメント
( Monday, October 15, 2001 17:31:44 )

>iBook が戻りしだい修正します。m(__)m

特に困っていませんので、重松さんの時間のある時にでもよろしくお願いします。

#US キーボードいいですよぉ :-)