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

RealBASIC で CGI を作る

発言者:田中求之
( Date Friday, May 29, 1998 13:51:50 )


「REALbasicでCGIは作成できますか?」がいっぱいになりましたので、ここに
続けます。

RealBASIC の AppleEvent で Boolean のパラメーターも扱えるように
して欲しいという要望をメールしたら、confirmation が返事としてかえって
きました(ようは、あなたのメールをちゃんと受け取ったよん、という内容
なんで、本当に受け入れてもらえるかどうかは分からないのですが)。

バグレポート・要望に confirmation が返ってきたのは初めてです。やっぱ
力いれてるなぁ、という感じですね。

Netscape のソースコード公開などにともなって、ネットワーク上でのソフトウェア
開発のありかたが色々と話題になってきてますが(これについては私もページを準備中)
こうした confirm のような、「コミュニケーションを行いながら作っていく」と
いうスタンスをどこまではっきりと示せるのか、ってけっこう重要なポイントですね。

好対照を見せてるのが Quid Pro Quo ....  MLで一番盛りあがっている話題が
MLでのサポートが全然無いじゃないかという批判ネタという状況ですから、先行き
かなり危ないです。

あ、もうすでにご存知の方も多いとは思いますが、Netscape がソース公開に
踏み切ったきっかけになったとも言われている、有名な文書がありますので、
ネットワークのソフトウェア文化について興味のある方は一読を。

Linux の Red Hot Software の Eric S. Raymond さんが書いたものです。

→  The Cathedral and the Bazaar

田中求之 さんからのコメント
( Friday, May 29, 1998 13:55:05 )

RealBASIC とは関係ないですが、話の行きがかり上 (^_^;;

上記の文書の翻訳版は以下のページです

→  The Cathedral and the Bazaar

田中求之 さんからのコメント
( Friday, May 29, 1998 21:31:52 )

RealBASIC Plugin SDK がリリースされました。

ドキュメントを読んでみると、コードリソースとして作れと書いてあります。

…ということは CompileIt! で作成可能か??

田中求之 さんからのコメント
( Saturday, May 30, 1998 00:09:49 )

この発言の冒頭の要望に対する Andrew さんからの返事が来ました。

>r36 will have a BooleanParam property, as well as a whole set of other
>properties, etc for building object specifier records.

ということです。かなり AppleEvent の扱いの自由度が高まりそうです (^_^)

r36 はまもなく出てくるようですので、楽しみ。

帆足 さんからのコメント
( Saturday, May 30, 1998 21:55:12 )

ちょっと、立ち寄らない間にそこまで話が進んでいたか!!

田中さんのサンプルを落としているんですが、まだ十分しゃぶって
いないんですよねぇ。そうこうしているうちに、RBはバージョンアップしちゃうし。。。ううう

来週から少しは時間がとれるから、さわってみようっと

こんなに忙しくなにを作ってるかというと、→を作っていたのでした。
下地はあって、FM3.0の部分を田中さんのサンプルソースを
参考に作りました。→ありがとうございますぅ

イベント用にお遊びで作ったんですが、プリクラのようにはがきに印刷して
あげると結構喜んだりします。

ちょっとスピード的に難があるんですが、そこは世間話でもしてもらって
のんびりやってます。

こういうCGIもRBに置き換えると結構レスポンス良くなるのかしら?



→  OneShot Page

田中求之 さんからのコメント
( Sunday, May 31, 1998 17:30:10 )

DR1r36 が出ました。

AppleEvent 関連が無茶苦茶強化されています(リリースノートが長すぎるので
紹介はパス)。

たぶん、これで GripGrop 全文検索 CGI が、RB でマルチスレッド CGI として
組めそうです。少なくとも Send Partial が Thread 内で動かせますので、
複数のプログラムに分割しなくても Partial が使いたい放題だ (^_^;;

田中求之 さんからのコメント
( Monday, June 01, 1998 00:09:02 )

Thread で Send Partial する CGI を作ってみました。ちゃんとマルチスレッドで
Send Partial してくれます。

もっとも、Q840AV 上で WebSTAR3.0 + Netscape 4.05 + CGI では、マルチ
スレッドっても、2つのスレッド走らせただけで、かなり重くなりますが (^_^;;


帆足 さんからのコメント
( Monday, June 01, 1998 08:39:44 )

私も今日知ったのでした。

>AppleEvent 関連が無茶苦茶強化されています(リリースノートが長すぎるので
>紹介はパス)。

リリースノートの半分をAppleEventが占めていますね。

AppleEventの部分だけでも紹介すると、

●AppleEventObjectSpecifierクラスを新しく追加。
●AppleEventObjectSpecifier型の
 GetNamedObjectDescriptor(DesiredClass As String, Object As
 AppleEventObjectSpecifier, name as string)関数を新しく追加。
●AppleEventObjectSpecifier型の
 GetIndexedObjectDescriptor(DesiredClass As String, Object As
 AppleEventObjectSpecifier, index as integer)関数を新しく追加。
●AppleEventObjectSpecifier型の
 GetPropertyObjectDescriptor(Object As AppleEventObjectSpecifier,
 name as string)関数を新しく追加。
●AppleEventObjectSpecifier型の
 GetOrdinalObjectDescriptor(DesiredClass As String,
 Object As AppleEventObjectSpecifier, OrdinalKey As string)
 関数を新しく追加。
●AppleEventObjectSpecifier型の
 GetStringComparisonObjectDescriptor(comparisonKey As String,
 comparisonForm As String, field As String, value As String)
 関数を新しく追加。
●AppleEventObjectSpecifier型の
 GetTestObjectDescriptor(DesiredClass As String,
 Object As AppleEventObjectSpecifier,
 Comparison As AppleEventObjectSpecifier)関数を新しく追加。
●AppleEventObjectSpecifier型の
 GetRangeObjectDescriptor(DesiredClass As String,
 Object As AppleEventObjectSpecifier,
 RangeStart As AppleEventObjectSpecifier,
 RangeEnd As AppleEventObjectSpecifier)関数を新しく追加。
●AppleEventの、読み書きできるBoolean型の
 ReplyBooleanプロパティを新しく追加。
●AppleEventの、読み書きできるInteger型の
 ReplyIntegerプロパティを新しく追加。
●AppleEventの、読み書きできるString型の
 MacTypeParam(keyword as string)プロパティを新しく追加。
●AppleEventの、読み書きできるBoolean型の
 BooleanParam(keyword as string)プロパティを新しく追加。
●AppleEventの、AppleEventObjectSpecifier型の
 ObjectSpecifierParam(keyword as string)プロパティを新しく追加。

---------[mac-pro:03969] [Rb] REALbasic DR1r36 is Released.より引用

うーん、すごい。。。


平岡 さんからのコメント
( Monday, June 01, 1998 17:01:23 )

CrossBasicのころはサーチエンジン入力のための
インターフェースとかを作りましたが、
CGIまでいけるようになったんですか...すごい。
またさわりたいなと思うんですが、
お世話になったCrossBasic時代にあった日本語メニューパッチに
頼り切りで英語にはついていけません。
RealBasic用の日本語パッチはどこかにありませんでしょうか?

Tanny! さんからのコメント
( Tuesday, June 02, 1998 12:02:04 )

REALbasicのFTPサイトにCGIのサンプルがでてます。
田中先生のは難しすぎて何がなんだかわからなかったので、これを見て勉強します。

たぶん最近は日本語化キットはでてないと思いますよ。>平岡さん

→  RB-ECHO CGI EXAMPLE

田中求之 さんからのコメント
( Tuesday, June 02, 1998 13:02:29 )

>田中先生のは難しすぎて何がなんだかわからなかったので

解説は、たぶん、8月に発売予定の Macintosh Developer Journal (技術評論社)
32号に載ると思います (^_^;;

平岡 さんからのコメント
( Tuesday, June 02, 1998 13:37:37 )

>たぶん最近は日本語化キットはでてないと思いますよ。

う〜ん、そうですかぁ...
あれに慣れちゃったアタシが悪いんだ...くぅ〜

>田中先生のは難しすぎて何がなんだかわからなかったので

AppleventによるMac内の汎用性の高さとRealBasicのGUI作成能力の相乗効果で
MacでのServer CGIの形がまた違ったものになるかもしれませんね。
また今の流れで制作していっても、RealBasicの能力が向上することによって
Remote管理的もできるカッチリしたプログラムも可能ですね。
多少難しくても取り組む価値はあるかな...と思います。

田中求之 さんからのコメント
( Tuesday, June 02, 1998 14:29:23 )

>あれに慣れちゃったアタシが悪いんだ...くぅ〜

ほぼ毎週リリースが続いているという状況ですので、英語版を直接使うようにして
おかないと、ついていけないという状況なのは確かですね。

Tanny! さんからのコメント
( Wednesday, June 03, 1998 01:24:20 )

> 解説は、たぶん、8月に発売予定の Macintosh Developer Journal (技術評論社)
> 32号に載ると思います (^_^;;

おおっ!買わなくては...

田中求之 さんからのコメント
( Wednesday, June 03, 1998 01:47:19 )

こういうのは旬のうちに味わうのが大切ですので(そして気がついたことなどは早めに
RB の開発者にフィードバックする必要がありますので)、草稿段階のものを、間もなく
登録します(今、書きかけのものを整理して PDF 化してるところ (^_^;; )

田中求之 さんからのコメント
( Wednesday, June 03, 1998 04:07:23 )

…っつうことで(最近これが多いな (^_^; )、草稿 DR1 です。

Acrobat 3.0 の PDF ファイルです。

→  making_CGI_with_RB_DR1.pdf

平岡 さんからのコメント
( Wednesday, June 03, 1998 06:28:27 )

>…っつうことで(最近これが多いな (^_^; )、草稿 DR1 です

これは役に立ちます。

RBでも従来のCGIのお約束は代わりがないってオチになりそうですね。

田中求之 さんからのコメント
( Thursday, June 04, 1998 18:22:09 )

CGI とは直接関係ありませんが、AppleScript 対応のメール送信用アプリケーションの
サンプルです。ビルドしたものは、AppleScript から使えます。コマンドは MondoMail
互換で組みました (^_^;; 改行コードや漢字コードの変換機能は組み込んでいません。
エラーの際も、単純に処理を打ち切るという、ごくシンプルなものです。

AppleScript 対応にするといっても、オブジェクト・モデルを実装しないのであれば、
きちんと aete リソースを書いてつけておくだけでよいのです(付属の resources
に aete リソースが入っています)。


→  RB_scriptMailer.hqx

重松修 さんからのコメント
( Friday, June 05, 1998 04:48:50 )

aeteリソースを見る限りでは、返値がNULLになっているようなのですが、
メールが送れたかかどうかの返事をしない、ということでしょうか。
# ResEditはaeteリソースは標準では見えないですよね?私はどこかで
テンプレートを拾ってきたのですが。

あと、前から不思議に思っていたんですが、「.」だけの行を含むメールは
どうやって送信するんでしょうか?

FutureBASICでスクリプタブルなアプリケーションを作ってみたいと思っています。

田中求之 さんからのコメント
( Friday, June 05, 1998 14:12:22 )

>aeteリソースを見る限りでは、返値がNULLになっているようなのですが、
>メールが送れたかかどうかの返事をしない、ということでしょうか。

動かしてもらえばすぐにわかりますが、Socket の処理は非同期で行われますので、
イベントに reply を返す時点では、メールの送信がうまくいったかどうかを確認
できないのです(もちろん、Socket の処理が終了するまで待つようにすればいい
わけですが、ネットワークの処理の時間がどれくらいかかるか分からないことを
考えると、非同期で処理させるべきでしょう)。

また、複数のイベントが送られてきたとき、イベントの数だけ Socket を走らせ
ますので、メールサーバーの SMTP コネクションを複数占領してしまうという
問題もあります。

あくまでも、サンプルであり、かつ、私自身の役に立てばよいということで仕様を
ラフに設定してありますが、汎用的な使い方をするためには、イベントで受け取った
メッセージをファイルとしてスプールし、定期的にスプールを送信するように
する。そして、無事に送れたものは、スプールから削除する、といったものに
する必要があるでしょうね。これであれば、ファイルとして作成したメールも
送れるというメリットもありますしね。

ま、'aete リソースをきちんと作れば AppleScript 対応になる' ことを
示すのが目的ですから。

kozka さんからのコメント
( Friday, June 05, 1998 15:31:18 )

 RB_scriptMailerのTimer1というオブジェクトが使われていない気が、、、

田中求之 さんからのコメント
( Friday, June 05, 1998 15:51:51 )

Timer1 オブジェクトの Action を見てください。 myStatus が close に
なっていたら、ウィンドを閉じるということをやらせています。

つまり、ウィンドウを自動的に閉じるために Timer を使ってます。

kozka さんからのコメント
( Friday, June 05, 1998 17:14:13 )

タイマーは自動で動いていたんですね。(multi)
myStatus を closeにするときにウィンドウを閉じたらまずいのですか?



田中求之 さんからのコメント
( Friday, June 05, 1998 18:23:00 )

いや、まずくないです。

ただ、今後、メソッドやイベントの処理を追加・拡張することなどを考えると、Status
で状況を示せば、自動的にしかるべき処理がなされるほうが、楽ちんでしょ? (^_^;;
(Timer を使ってみたかっただけ、という話もある (^_^;;

重松修 さんからのコメント
( Saturday, June 06, 1998 07:12:10 )

このスレッドに書くのが適切か分からないのですが、。。。

私もFutureBASICで田中先生が作られたのと同じ(ような)アプリケーション
をでっち上げました。カスタムヘッダは面倒なので無視してますけど。

で、困った事態が発生しました。SendMailでは動くのに、EIMSでは動かない!

MAIL FROM : <foo@bar.net>

でこけます。(ToT)

何か違うんでしょうか。

いちおう、SMTPサーバーと話している内容はモニタできるようにしてある
アプリを参考ページのところにアップしておきました。名前は〜.acgiです
けど、まだCGIとしては動きません。

エラーチェックはものすごくアバウトですので、注意して下さい。

お時間がありましたら、ちょっと試してみていただければ助かります。
よろしくお願いいたします。

→  FormMail.acgi

重松修 さんからのコメント
( Saturday, June 06, 1998 07:46:01 )

毎度お騒がせいたしました。原因、やっと分かりました。
MAIL FROM : <foo@bar.net>
を
MAIL FROM: <foo@bar.net>
にしたらなおりました。

EIMSはすごくチェックが厳しいですね。(というか、それが当たり前なのかもだけど)
sendmailは、
MAIL FROM : foo@bar.net
でもうけつけてくれるのに。

田中求之 さんからのコメント
( Tuesday, June 09, 1998 12:35:12 )

MDJ 原稿「RealBASIC で CGI を作る」の Draft 2 を登録しておきます。
FORM のメッセージをファイルに記録する CGI の例を追加し、文中のCGIの
プロジェクト、および使用した XFCN も同封しておきます。

これ以上の Draft の公開は行いませんので、あしからず

なお、文書中にも書いておきましたが、草稿ですので、転載・再配布あるいは
この文書自体へのリンクはご遠慮ください。

→  RB_CGI.hqx