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

EasyBBS EX to plugin

発言者:前薗 健一
( Date Thursday, January 29, 1998 23:38:04 )


AppleScript 版の EasyBBS EX から CW PP の plug-in への移植を
ようやく漕ぎ着けたのですが、本日の作業としては、とりあえず
細かいところは抜きにして "room.bbs" の処理をクライアントに返せる
とこまできました。

今のところ、フォルダの構造の違いが一番のネックになっています。
思っていたより大変な気がしてきました。(^^;

本来なら、最初から移植すればいいのですが、EasyBBS plugin の
ソースを元に書き換えているので、かなり汚いコードになっています。

ひととおり動くようになったら、書き直すのがいいかもしれませんね。

田中求之 さんからのコメント
( Friday, January 30, 1998 01:49:26 )

>ひととおり動くようになったら、書き直すのがいいかもしれませんね。

思いきって書き直したほうが、後々楽かもしれませんよ。 (^_^;;

バーチャルホスト対応のことを視野に入れると、フォルダーの位置の割り出しと
URL の操作(処理)が一つの鍵になりますから、WebSTAR 3.0 や QPQ Plus
のことを考えて、あらかじめ対応しておいたほうがいいかもしれませんね。

石津@RJC さんからのコメント
( Friday, January 30, 1998 02:27:58 )

できたらWebTenにも対応していただけると嬉しいな。(^_^;
いえ、独り言です(^_^;。

前薗 健一 さんからのコメント
( Friday, January 30, 1998 05:21:05 )

WebTen と WebSTAR 互換の違いってありましたっけ?

石津@RJC さんからのコメント
( Friday, January 30, 1998 10:15:46 )

>WebTen と WebSTAR 互換の違いってありましたっけ?

WebTen1.1.1まではなかったんですけど、2.0でPlug-inとサーバrootの
位置が変更になったため、Virtualドメインやホストを使うとPlug-in
を利用したURLのパスが正しく表示されません。
これはTeleFinder5.5でも同様です。
サーバ側の問題なのかW*APIの仕様なのかわかりませんが、ちょっと
不便はしています。
cgiで設定すれば回避方法があるんですけど、plug-inだとどうもなり
ませんですね。

joyhiro さんからのコメント
( Friday, January 30, 1998 12:25:55 )

自作plug-inからフォルダーの位置の割り出しをするのに私もはまりました。
WebSTAR2.0のバーチャルでつまったんですが、
<FORM METHOD="POST" ACTION="/....の
/を取ったらうまくいってます。
対処療法的ですが...

田中求之 さんからのコメント
( Friday, January 30, 1998 15:26:21 )

>サーバ側の問題なのかW*APIの仕様なのかわかりませんが、ちょっと
>不便はしています。

バーチャルホストに Plugin が対応するには、サーバーからルートフォルダー
に関する情報などを渡してもらう必要がありますし、またアクセスに使われた
ホスト名と URL の情報も必要になります。

で、この辺のことは W*API 1.3 で決められているはずなのですが、これが
まだ一般には公開されていないのですよ。CGI 用の AppleEvent も追加
項目として上記の情報が得られなければどうしようもないのですが、このへん
のことも不明です( QPQ は独自にパラメーターの追加を行っています)。

仕様が固まるまで(公開されるまで)、しばらくは混乱が続くと思います。

前薗 健一 さんからのコメント
( Saturday, January 31, 1998 00:44:57 )

EasyBBS++, EasyBBS plugin-b03 の時もフォルダ情報取得には苦労した
のですが、サーバに依っても違うんですね。
とりあえずは、WebSTAR 互換の http サーバで動くことを優先しますが、
余裕ができたら WebTen にも対応したいと思います。

石津@RJC さんからのコメント
( Saturday, January 31, 1998 13:00:20 )

WebTen2.0のGMupdateがリリースされました。
ひょっとするとこれでパスの問題がfixされているかも...?

またテストしてから報告しますね。

田中求之 さんからのコメント
( Sunday, February 01, 1998 00:44:41 )

WebSTAR 3.0 Beta の Developer 用フォルダーにはいっている WAPI.h
(ヘッダーファイル)を見ていたら、バーチャルホスト対応を考えたと思われる
いくつかの API が追加されていました。また、 Conditional_Get 用に
HTTP リクエストの If-Modified ヘッダーに記されている日付の文字列を
渡してくれる API なんてのもできてます。


前薗 健一 さんからのコメント
( Sunday, February 01, 1998 15:03:51 )

WebSTAR 3.0 Beta の Developer 用フォルダーというのは見つからなかった
のですが、現行の W*API でいけそうです。試しにテストしてみたのですが

WSAPI_GetIndexedParameter();
  piRequestHeaderField
    HOST [www2.mae.or.jp]
    USER-AGENT [Mozilla/3.0 (Macintosh; I; PPC)]
    ACCEPT [image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*]
WSAPI_GetParameter();
  piFileMIMEType [text/html]
  piServerField [Server: WebSTAR/2.1 ID/33324]
  piServerDirectoryPath [Mac8500:servers:WebSTAR 2.1]
  piURLPhysicalPath [:ken:ex2:room.bbs]
  piIfModifiedDate []

知らないといことは悲しいですね。これまでの苦労はいったい...

よしもと さんからのコメント
( Sunday, February 01, 1998 15:28:24 )

Developer用フォルダーはデフォルトではインストールされません。
カスタムインストールしてください。

joyhiro さんからのコメント
( Sunday, February 01, 1998 21:54:13 )

ついでながら
piServerDirectoryPath
piURLPhysicalPath
を組み合わせて使ってますが、QPQ1.0.2でも取れてます。

前薗 健一 さんからのコメント
( Sunday, February 01, 1998 23:49:02 )

to よしもとさん

re-install しました。 m(..)m

前薗 健一 さんからのコメント
( Monday, February 02, 1998 00:03:04 )

to 田中さん

田中さんが AppleScript の Text Item Delimiters とか list とか、
僕が for, while
ループとかで面倒臭いことで苦労していましたが、W*API v1.2 でも
かなり楽にできることが判明しました。

やっぱ、ドキュメントより、ヘッダファイルとサンプルですね。

田中求之 さんからのコメント
( Monday, February 02, 1998 01:07:28 )

Plugin はいいよなぁ、サーバーからいっぱい調理済みの情報がもらえて…


重松修 さんからのコメント
( Monday, February 02, 1998 02:04:46 )

すごく間抜けで抽象的な質問なのですが、Plug-inはC++でしか作れないものな
のでしょうか?

私の開発環境は、FutureBASICなのですが、W*APIは残念ながら、C++以外一切
考慮されていないような雰囲気でした。

たとえば、普通のCGIはAppleEventでやりとりしますが、W*APIの場合はどのよう
な感じなのでしょうか?FBはスレッドマネージャに標準では対応していないから、
マルチスレッドのアプリケーションを作るのは大変難しいです。

InternetConfigなどは、ToolBoxと同じく、スタックに引数やセレクタを積み、
あるいは、DOレジスタにもセレクタをいれて、トラップするようなことをして
いるのですが、W*APIも同じく、インラインアセンブラで、そのあたりの関数を
書けば、何とかなるのでしょうか?

それともそもそも、C++出ない環境でプラグインを作ろうとすること自体が無理
があるのでしょうか。

私は、32Kの制限に不都合を感じているので、現在のCGIをプラグインに書き直
したいと思っているのですが。

NetscapeのプラグインSDKもそうなんですが、なんかほんとC/C++以外の開発
環境って、冷遇以前に、全く相手にもされてないような気がして、とても大変
です。;_;

前薗 健一 さんからのコメント
( Monday, February 02, 1998 03:47:52 )

> Plugin はいいよなぁ、サーバーからいっぱい調理済みの情報がもらえて…

な〜にをおっしゃいますか。
田中さんのおかげで、僕らもちょっとした料理人になれたんです。(^^)
調理方法を教えて下さったのは田中さんです。

前薗 健一 さんからのコメント
( Monday, February 02, 1998 04:01:27 )

to 重松さん

私の知る限り、plug-in の開発は、標準で提供されている C/C++ と
よしもとさんが開発された perl-plugin です。

perl のインタプリタで可能ですから BASIC のインタプリタでも可能とは
思うのですが、技術的なことはわかりません。


>NetscapeのプラグインSDKもそうなんですが、なんかほんとC/C++以外の開発
>環境って、冷遇以前に、全く相手にもされてないような気がして、とても大変
>です。;_;

今でこそ C/C++ compiler が一般的ですが、僕が Mac の勉強を始めた頃
なんて Pascal しかなくて泣いていました。(;_;)
ちなみに、その頃の私は、MSX BASIC と MS DOS Assembler しか
知りませんでした。

よしもと さんからのコメント
( Monday, February 02, 1998 07:26:11 )

perlの場合5.xxxになって、インタープリタを簡単にC/C++のコードの中に
埋め込めるようになっているので、pluginに組み込むことができましたが、
BASICだとそうはいかないでしょうね。

まあ、Perl-Pluginといっても、中身はC/C++で書いているわけですから...

田中求之 さんからのコメント
( Monday, February 02, 1998 11:53:56 )

>私の開発環境は、FutureBASICなのですが、W*APIは残念ながら、C++以外一切
>考慮されていないような雰囲気でした。

現実的な問題として、C/C++ というか、Code Warrier を開発環境として使って
いないと、Plugin の作成は難しいようですね。

Plugin は、68K は Code Resource, PPC は Code Fragment Module
になっているはずですから(そうだよね?)、構造としては開発言語には依存しない
わけですが、ヘッダーやサンプル、フレームワークなどはすべて C/C++ で提供
されているようですから、これらが利用できないとなると大変ですよね。

私は HyperTalk (CompileIt!) が開発環境ですから、Plugin の開発は到底
無理ですので、あきらめています (;_;)

さすがに、C/C++ を学び直す気力(と時間)はないですぅ。ですから、他の人を
サポートして(煽って)、自分の欲しいものを作ってもらうという戦略に転換
しました。

HyperCard が QTi と統合された v3 になると、XCMD の役目も低くなるし
(機種互換のネックになりますから)、AppleScript が PPC 対応になると
osax も 68K コードだけではやってられない(むしろボトルネックになる?)
でしょうから、CompileIt! であれこれやってられるのも、今のうちかな…

重松修 さんからのコメント
( Monday, February 02, 1998 21:57:01 )

前薗さん、田中先生、吉本さん、情報ありがとうございます。

CodeWorrierを買えばいいんでしょうが、なんせ全然お金がない。アカデミック版
というのがあるそうなので、春休みに学費以上を稼いだら、購入しようと画策
しているのですが、FutureBASICもすばらしい環境で、PhotoShopのPlug-inは
作れるので、多分、W*APIも作れるのだとは思ってはいるのですが。。。

Perlも魅力的な言語なのですが、どうも、FutureBASICになれて、最近は
AppleScirptもどんどん忘れているという状態で、Javaは完全に忘れてしまいました。
なんか、新しい言語を覚える気力がない、というのが最大の原因のような気がします。

せめてPascalのヘッダファイルがあれば、FutureBASICへのコンバータがあるので、
何とかなるんですが。。。

前薗 健一 さんからのコメント
( Monday, February 09, 1998 00:39:37 )

移植の進捗状況です。

あと 10 日程で Mac World Expo なので、ちと焦っているのですが、
ほぼ、6〜7割位完了しています。テストは抜きです。

先週に続き、ここ2、3日、風邪で寝込んでいたというのは言い訳になりますか?
(^^;

できれば、今週の水曜位までに移植とテストを終えてベータ公開。
Expo までに BUG FIX, ドキュメントの整理までいきたいとは思っては
いるのですが...

前薗 健一 さんからのコメント
( Sunday, February 15, 1998 00:16:09 )

進捗です。
約8割といったところです。

ところで EasyBBS EX 1.0.2 の

on room_search(BBSInfoList)
  --
    else if "xStamp=" is in BBS_param then
  --
end room_search

の if 文には絶対に入らないと思うのですが、そういう理解でいいですよね?
 > 田中さん

田中求之 さんからのコメント
( Sunday, February 15, 1998 00:42:43 )

>if 文には絶対に入らないと思うのですが、そういう理解でいいですよね?

xStamp は、クライアントサイドでのアクセスコントロール用の機能ですので、
トップページの検索項目には現れていませんが、この会議室や EasyBBS
には組み込んであるんですよ。

以下の URL を手動で打ち込んで試してもらえばわかります。

http://mtlab.ecn.fpu.ac.jp/webcon.mtxt?xstamp=980210000000

田中求之 さんからのコメント
( Sunday, February 15, 1998 00:44:56 )

以下のページも参照してください。



→  Web Scripter's Meeting 用スクリプト

前薗 健一 さんからのコメント
( Sunday, February 15, 1998 04:29:18 )

なるほど、了解です、実装しておきます。

mread.bbs と同じような扱いになっているんですね。

残るは mread.bbs まわりの cookie 関連ですので、1, 2 日あれば
コーディングは済む予定です。

前薗 健一 さんからのコメント
( Monday, February 16, 1998 21:53:53 )

xStamp でさらに質問なのですが。

set myList to dirLister file msgFldr modBefore xDate type "TEXT" ofName ".html"
set myData to "<TT> " & (xDate as string) & " </TT>以後に投稿/コメントされたページ:<P><UL>" 

では矛盾がありますよね?

modAfter

が正解ですよね?

田中求之 さんからのコメント
( Monday, February 16, 1998 23:02:39 )

オー マイ スティーブ・ガッド

前薗 健一 さんからのコメント
( Tuesday, February 17, 1998 00:32:04 )

さらに (^^;

on makeList(BBSInfoList, myList, ckValue)
  --
  repeat with myF in myList
    --
    if ("BBS_MSG_" & ckValue & ".html") > myF then  ---- ここ
    --
    end if
  end repeat
  --
end makeList

ckValue の中身は "YYMMDDhhmmss" の文字列ですが、これが
"991231235959" から "000101000000" になったとたんに
機能しなくなるという「2000年問題」を含んでいると思うのですが。

plug-in の方では対処しておきます。(^^)v

田中求之 さんからのコメント
( Tuesday, February 17, 1998 13:53:48 )

EasyBBS は 1999年末までが有効期限です …ってのはダメ?(笑)

EX には、このほかにも 2000 年になったらひかかる個所がありますので
修正しますね。

なお、Tanaka's osax で TimeStamp を日付データに変換する際には
(StampToDate) 000101000000 は 2000年1月1日に変換されます。

前薗 健一 さんからのコメント
( Tuesday, February 17, 1998 15:24:35 )

EasyBBS の賞味期限は 1999/12/31 というスペックにしましょうか?(^^)
以降は、充分に過熱してからお使いくださいとか。(^^;;
注:保存は冷凍庫にてお願いします。

> なお、Tanaka's osax で TimeStamp を日付データに変換する際には
> (StampToDate) 000101000000 は 2000年1月1日に変換されます。

さすが田中さん。賢いですね。

前薗 健一 さんからのコメント
( Wednesday, February 18, 1998 21:27:34 )

度々すみません。

on cookieHeader(cookValue, tgPath)
  return
  --
  & "Set-Cookie: " & cookValue & "; Path=" & tgPath & "; expires=09-Nov-99 GMT; Max-Age=2592000;Version=1" & crlf
  --
end cookieHeader

の expires=09-Nov-99 GMT; Max-Age=2592000; ですが、本来なら
dynamic に変化する価ではないのでしょうか?

RFC を調べればいいことなのでしょうが...

田中求之 さんからのコメント
( Thursday, February 19, 1998 00:00:28 )

>expires=09-Nov-99 GMT; Max-Age=2592000; ですが、本来なら
>dynamic に変化する価ではないのでしょうか?

いいえ、これは Cookie をセットする側が自由に決めて指定できます。
EasyBBS EX の有効期限は1999年なので(笑)、上記のような日付を
用いていますが、別の値にしてもかまいませんよ。ただし、expires
を指定しないと、セッション終了と同時に Cookie のデータも消えます
ので(ファイルには記録されない)、かならず先の日付を使ってください。

それと、Max-Age の指定は不要ですので削ってください。これは、もともと
Internet Draft を読んで、今後は Max-Age も使われるようになる
かと思って組み込んだのですが、Draft で仕様を詰めているものは Cookie2
になりそうで、現在の Netscape 社の Cookie とは区別するようですから、
Max-Age は必要ありません。


前薗 健一 さんからのコメント
( Thursday, February 19, 1998 00:57:32 )

なるほど。ありがとうございます。

expires には1年後を指定するようにしておきます。

田中求之 さんからのコメント
( Thursday, February 19, 1998 01:28:59 )

なお、日付のフォーマットは EX のものは、実は正式なものではありません。
単に私が試した範囲ではこの書式でもちゃんと機能するじゃないか、という
ことで用いているものですので、できれば、正しい書式を使ってください。

Cookie の expires の正式な書式は、RFC850スタイルとRFC1123スタイルの
混合型になっていて、

Fri, 01-JAN-1999 05:00:00 GMT

のように、

Wkdy, DD-MMM-YYYY HH:MM:SS GMT

というものです。RFC850の Year が4桁になって2000年問題に対処した
書式というところでしょうか。

前薗 健一 さんからのコメント
( Thursday, February 19, 1998 02:19:28 )

了解です。ありがとうございます。

前薗 健一 さんからのコメント
( Saturday, April 11, 1998 00:13:53 )

WebSTAR のドキュメントを読んでいていて気が付いたのですが

WSAPI_GetIndexedParameter();
WSAPI_ReadHTTPData();

の W*API って AppleScript から呼べるんですね。
知らなかった... (^^;;

田中求之 さんからのコメント
( Saturday, April 11, 1998 00:34:07 )

WebSTAR 2.0 で実装されました( W*API 1.2 ですね)。今のところ必要性は感じ
たことはないのでつかったことはありませんが。

これって、WebSTAR 以外にも実装されてたっけ?

前薗 健一 さんからのコメント
( Saturday, April 11, 1998 03:27:38 )

> 今のところ必要性は感じ
> たことはないのでつかったことはありませんが。

記憶が確かではないのですが、EasyBBS EX で fullRequest とか cookie
の処理で、田中さん得意の delimiter & list 処理をしていたとおもうのですが、
WSAPI_GetIndexedParameter(); を使えば楽かな?と思ったのでした。

前薗 健一 さんからのコメント
( Saturday, April 11, 1998 03:32:08 )

> これって、WebSTAR 以外にも実装されてたっけ?

僕は WebSTAR しか持っていないのですが、それ以外の WWW server を
お持ちの方、OSA の辞書を調べてみてください。m(..)m

田中求之 さんからのコメント
( Saturday, April 11, 1998 04:25:36 )

QPQ は持ってないですね。やっぱ WebSTAR だけが実装してるのでしょう。

>田中さん得意の delimiter & list 処理をしていたとおもうのですが、
>WSAPI_GetIndexedParameter(); を使えば楽かな?と思ったのでした。

でも、AppleEvent で WebSTAR と交信するのとスクリプトのリスト処理
だと、どっちもどっちという感じだと思うけどなぁ。 ま、full_request
を分解して処理するのに僕が慣れてしまっているというのもあるでしょうね。

どうせなら、W*API の関数をすべて AppleEvent でも呼べるようにして
くれたらよかったのに (^_^;;

前薗 健一 さんからのコメント
( Sunday, April 12, 1998 00:02:21 )

AppleEvent の over head は気になるところですね。AppleScript で処理した
方がおそらく早いでしょうね。

> どうせなら、W*API の関数をすべて AppleEvent でも呼べるように

そう思います。仕様を見ると connection ID を key にして interface をとって
いますので、可能だとは思うのですが。