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

Tanaka's osax 2.0 ベータテスト開始

発言者:田中求之
( Date Monday, April 20, 1998 00:21:10 )


コマンドやパラメーターの名前を全面的に変更し、またコマンドをスクラップ&ビルドで
整理した 2.0 のベータテストを開始します。

当初は、1.x とコンパチ(つまりコマンド名だけを変更)を予定していたのですが、この
機会に、思いきってコマンドを整理しました。また、MT Parse CGI (DecodeArgs)な
どは、全面的に書き直して、漢字コードの判定精度の向上や、field 名も含んだリスト
にできるなどの改良を加えてあります。

なお、CGI Kit や EasyBBS あるいはこれまでこの会議室などで発表してきた
サンプルは 2.0 では動きませんので、それらを試す場合は 1.29 をお使いください。

また、2.0 と 1.x を同時に使用しないでください。


→  Tanaka's osax 2.0 beta

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

2.0b5 のリリースに伴って、このサイトの CGI も全面的に 2.0 ベースのスクリプトに
移行しました。過酷な条件での動作テストには、この会議室の CGI が最適なので (^_^;;

スクリプトの書き換えのミスなどで、しばらくはエラーが出るかも知れませんがご了承く
ださい。

田中求之 さんからのコメント
( Tuesday, April 28, 1998 11:04:55 )

現在登録されている 2.0b5 の MT Replace には重大なバグがあり、実質的に
使い物になりません。すみません、登録するものを間違えてしまいました(開発
途中でテストしてたやつを間違って登録しちゃった) (^_^;; (^_^;;

この後、すぐに、 2.0b6 を登録しますので、そちらを使ってください。もっとも
すでに(本来の)2.0b5 に手を加えて、MT Replace がリストを受け取れるよう
になっちゃっているバージョンですが… (文字列のリストを渡すと、リストの
各項目に関して置換を行う)



田中求之 さんからのコメント
( Tuesday, April 28, 1998 12:12:07 )

2.0b6 登録しました。

→  2.0 ベータのページ(下手な英語ですみません)

びn さんからのコメント
( Saturday, May 02, 1998 03:22:42 )

2.0を用いたCGIのサンプルは、既にどこかで公開されていますでしょうか?

田中求之 さんからのコメント
( Saturday, May 02, 1998 10:47:11 )

まだです。とりあえず、osax 自体のバグ(およびネーミングの問題点)を潰すことを
優先してますので、CGI Kit や EasyBBS の書き換えには着手してません。

ただ、EasyBBS の処理速度を上げることが可能になる(だろう)新しいコマンドや
改良を加えていますので、次のベータ版( 2.0b7 )と同じタイミングで EasyBBS
の EX II を出す予定でいます(手元で実験しているスクリプトなので)。

田中求之 さんからのコメント
( Tuesday, May 05, 1998 20:17:34 )

2.0b7 を登録すると同時に、EasyBBS EX II b1 も登録しておきました。
EX II b については別発言を見てください。

→  EasyBBS EX II ベータテスト開始

びn さんからのコメント
( Wednesday, May 06, 1998 15:40:38 )

早速サンプルを参考にして、以前のバージョン1.2xで作成したCGIを2.0用に
書き直して試してみました。
試していて気になったことがひとつあります。
1.2xのDecodeJArgsでは、"ARG1=VALUE1&ARG2=&ARG3="のような値が空になっ
ている物を含むpost_argsでは対応する項が空のリストを返してくれたのですが、
MT Parse CGIでは全てのフィールドに何か入っていないとエラーなってしまう
ようです。これは仕様でしょうか?

田中求之 さんからのコメント
( Wednesday, May 06, 1998 15:44:20 )

あ、MT Parse CGI のバグです (^_^;;

…この会議室、よくエラーにならずに動いてるなぁ… (^_^;;


田中求之 さんからのコメント
( Wednesday, May 06, 1998 15:46:29 )

けっこう致命的なバグなので、今夜、すぐに修正します。

田中求之 さんからのコメント
( Wednesday, May 06, 1998 15:50:59 )

念のため、バグの内容を正確に言っておくと、最後の項目(フィールド)が空の時
エラーを返します。

(だからこの会議室ではエラーが出なかったんです (^_^;;  )

山本 武 さんからのコメント
( Wednesday, May 06, 1998 17:44:28 )

まだ、2.0対応版は使っていないのですが、以前から気になっていたことがあります。

makeListハンドラが呼ばれるときは一般にこういった呼び方をしています。
-------ここから-----
& "UL" & return
& makeList(BBSInfoList, myList, "") & "/UL p "
(タグを適当に省いています)
--------ここまで------
この部分は、UL,+makelist+/ULとなっていますが、ここはUL,/ULを書く部分ごと、
makelistに含めてしまったほうが良いのではないかと考えています。

 というのも、リスト表示よりはテーブル表示の方が最近見易いなあと思うのですが、
その場合、makelistの中身を書き換えるだけでなく、それを呼び出す部分にも手を
入れないといけません。(UL../ULをTABLE.../TABLEに書き換えます)。

 であれば、いっそのことmakelistの中に全部入っていれば..と思っていたのでした。
もし、makelistが続けて呼ばれたりすることがあるのならULは外に出すべきですが
現状そういった使い方はされていないようです。

 本来、カスタマイズする側がやればいいことといえばそうなのですが、
カスタマイズ性をアップするという観点から、一度検討しては頂けないでしょうか

田中求之 さんからのコメント
( Wednesday, May 06, 1998 19:40:14 )

EasyBBS の方の話ですね。

以前は <UL> と <OL> を使い分けていたので、その頃の仕様を引きずったままに
なっていたのですが、現在は EasyBBS では <UL> に統一しましたので、確かに
<UL> も含めてリストを作った方がいいでしょうね。

2.0 対応版から修正しましょう。

山本 武 さんからのコメント
( Wednesday, May 06, 1998 20:18:37 )

 修正よろしくお願いします。
 それとスレッドを勘違いしたようですね。
 EasyBBSに関しての質問でした。気を付けます。

田中求之 さんからのコメント
( Thursday, May 07, 1998 16:06:02 )

MT Parse CGI のバグを修正した 2.0b8 を先程登録しておきました。

バグ自体は、たった一ヶ所を書き換えるだけで修正できたのですが、作業を始めたら
プログラマーズ・ハイになっちゃって (^_^;;  気がついたら半分ほどのコードの
全面書き直しをやってしまいました (^_^;;

デコードする際に、書式のチェックを行うようにしましたので、CGI の argument
としておかしいもの(たとえば Field name が無いとか、デリミターの = や &
の並び方がおかしいもの)は、エラーとしてはじきます。

また、with field name で呼んだ際には、 field 名(入力欄)もリストに含める
わけですが、この場合、field name については、URL のデコードは行いますが
漢字コードの変換処理は行いません(Field name はアルファベットだけでつける
べきものですから)。

さらに、漢字コードの判定において、SJIS の半角カタカナ領域に相当する文字
(これが EUC の領域と重なるために、EUC と SJIS の厳密な判定が難しい
原因なのですが)が全体の3分の1以上を占めていた場合には、EUC であると
判定するようにしました。これは、ネットワークにおいて半角カタカタを使うような
人間はしかるべき扱いを受けても仕方がないと考えたためです。半角カタカナを
使用していたら即座に EUC との判定を行うことも考えたのですが、この領域は
Mac Roman (いわゆる英語フォント)において一部の記号(≦とか≠など)
に用いられているため、これを考慮して、3分の1という判定基準を設定
しました。

また、若干の高速化のために、メモリーを多めに消費する方法に切り替えました。
パラメーターで与えた argument の5倍のメモリーを使用します。といっても
arugument は通常は 32K という制限がありますので、これが問題になる
ことはまずないと思います。



→  Tanaka_osax_2.0b8.hqx

田中求之 さんからのコメント
( Thursday, May 07, 1998 16:12:08 )

>また、若干の高速化のために、メモリーを多めに消費する方法に切り替えました。
>パラメーターで与えた argument の5倍のメモリーを使用します。

この部分については、たぶん、次のリリースで消費量を押さえることができると
思います。今回のリリースでは、細かい計算をせずに最初に大ざっぱに作業用の
バッファーを取るという方針で行きましたので (^_^;;

で、細かい点でバグが残っていますので(通常の CGI での仕様ではまず問題に
なることはない)、これも次のリリースで修正します。

田中求之 さんからのコメント
( Friday, May 08, 1998 00:48:33 )

MT parse CGI の消費メモリーを必要最低限に押さえ、バグの修正を行った
2.0b9 を登録しておきます(ページ登録は明日になります)。

このサーバーも、明日のメンテの時に 2.0b9 に取り換えます。

→  Tanaka_osax_2.0b9.hqx

猫の手 さんからのコメント
( Friday, May 08, 1998 09:01:42 )

 教えて欲しいのですが、MT Pack CGIとは、何をするコマンドですか?

田中求之 さんからのコメント
( Friday, May 08, 1998 11:44:15 )

>MT Pack CGIとは、何をするコマンドですか?

文字列から、HTTP の POST データを生成するものです。

MT Pack CGI {{"name", "田中求之"}, {"mag", "マックでサーバー"}}

を実行すると、

"name=%93c%92%86%8B%81%94V&mag=%83}%83b%83N%82%C5%83T%81[%83o%81["

を返します。


基本的には CGI のデバッグ用に作ったコマンドですが、NetEvents と組み合わせれば
ブラザーなしで会議室への投稿が可能になります。また、メールでこの会議室に投稿する
システム(現在のレポートメールシステムの拡張)の密かな準備だったりします (^_^;;

猫の手 さんからのコメント
( Friday, May 08, 1998 12:58:47 )

 なるほど、結構、おいしいコマンドかもしれないですね。
使い方を考えてみよう。

ところで、また質問なんですが、
MT Pick Strings file "abcdefg" start with "<td>" end with "</td>" with triming
と、すると、何かパラメータが足りないと行って来ます。どこが悪いのでしょうか。

田中求之 さんからのコメント
( Friday, May 08, 1998 13:30:21 )

ファイルから抜きだすときには source パラメーターでファイルを指定しますので

MT Pick Strings source file "abcdefg" start with "<td>" end with "</td>" with triming
                ^^^^^^

としてください(ダイレクトパラメーターには文字列しか渡せません)。

なお、MT Pick Lines も同様に、ファイルからの抜き出しの場合は source を指定して
ください。

猫の手 さんからのコメント
( Friday, May 08, 1998 22:04:16 )

 馬鹿ですねえ、sourceがいるとは、気が付かなかった。
 sourceとしてファイル名を追加するのよと言う表示かと思っていました。

 ありがとうございました。

田中求之 さんからのコメント
( Saturday, May 09, 1998 01:07:27 )

わかりにくい用語説明になっていてすみません (^_^;;

日本語の解説も準備しなければと思うのですが、デバッグ&改良に時間をかけている
段階なので、もうしばらくお待ちを。


猫の手 さんからのコメント
( Monday, May 11, 1998 12:43:33 )

 いえ、用語説明がわかりにくいわけではないです。
私が、一旦そう思いこんだだけです。
そうすると、他の見方が出来なくなってしまって。

 ところで、scripterを使っているのですが、
Tanaka's osaxの用語説明の一部しか見えないのですが、
なぜでしょうか。ずっといぜんから、2.0までそうなんですけど。

田中求之 さんからのコメント
( Monday, May 11, 1998 12:58:31 )

> ところで、scripterを使っているのですが、
>Tanaka's osaxの用語説明の一部しか見えないのですが、
>なぜでしょうか。

これは私にも分かりません。 Scripter の辞書情報の処理方法に問題があるのでは
ないかと思っています( ScriptDebugger など、他のソフトではちゃんと表示
されるため)

Cal さんに聞けば分かるのかもしれませんが、Scripter に関しては、以前から
「日本の OS では、細工をしないと起動できない」というレポートを出している
のに(1.0 の時から)いっこうに修正する気が無いようなので、サポートに関して
は、当てにできないと思っています。

猫の手 さんからのコメント
( Tuesday, May 12, 1998 08:07:28 )

 田中さんのところでもそうなんですか。
私のところの設定の問題だけかと思っていました。

田中求之 さんからのコメント
( Friday, May 15, 1998 20:06:59 )

MT Extract String と MT Search Position を追加した新しい b10 を
先程登録しておきました。

野本夏俊 さんからのコメント
( Saturday, May 16, 1998 03:10:51 )

これは助かります!
MT Search Positionはoffsetコマンドのbyte length版(表現が変?)
と考えていいんですよね?
全部の値を一辺に返してくれるのがとても便利です。

ところで、MT Extract String ですが、
MT Extract String "123" from -4
とすると、
"123" doesn't understand the MT Extract String message.(number -1708)
とちょっと変なエラーメッセージを返します。
こういうのって変更できるのかどうか知りませんが、
エラー -1720か、"123"をそのまま返してしまう方が良くないですか?

田中求之 さんからのコメント
( Saturday, May 16, 1998 10:53:54 )

MT Search Position の方は、リストも受け取れます。

MT Search Position {"Thelonious Monk", "Zoot Sims"} search "o"
---> {{5, 8, 13}, {2, 3}}


>ちょっと変なエラーメッセージを返します。

変ですか? "123" というオブジェクトは(3バイトなので)「後ろから4バイト目」
っていわれても分からない、と、私としては特に違和感を感じないんですが (^_^;;

もっとも、エラーの時にどうするか(エラーというより無効なパラメーターの時ですね)
については、考えてみます。ただ、私は、無効であれば素直にエラーを返してくれた
方がすっきりとしたスクリプトになるので好きなんですよね。

野本夏俊 さんからのコメント
( Saturday, May 16, 1998 14:11:21 )

>MT Search Position の方は、リストも受け取れます。

そいつは賢い!有効利用を考えて見ます。こちらはわけの解らないもの
(入れ子のリストなど)はそのまま突っ返すみたいですね。

>私としては特に違和感を感じないんですが (^_^;;

あ、それなら別にいいんです。 〜 doesn't understand 〜 message.
ってアプリケーションにユーザー定義関数を送ったときにお馴染みだったので
ちょっと変に感じたんですが、「パラメーターエラーです。」とか返されるよりは
よっぽど親切ですもんね。

田中求之 さんからのコメント
( Saturday, May 16, 1998 22:06:50 )

>こちらはわけの解らないもの
>(入れ子のリストなど)はそのまま突っ返すみたいですね。

これ、バグです (^_^;;

b11 で -1708 を返すように修正します。

田中求之 さんからのコメント
( Saturday, May 16, 1998 22:29:06 )

>b11 で -1708 を返すように修正します。

-1700 (Can't make expected type) です (^_^;;

猫の手 さんからのコメント
( Sunday, May 17, 1998 11:26:05 )

 いつの間に、tanaka's osaxにオリジナルアイコンが付いたのですか?

田中求之 さんからのコメント
( Sunday, May 17, 1998 12:14:24 )

えっと、b8 か b9 だったはずです。オリジナルアイコンっても、osax のアイコンに
田中の文字を入れただけですけど (^_^;;  こういうとき、シンプルな漢字の名前も
悪くないと思いますね。

月曜には b11 出します。

田中求之 さんからのコメント
( Monday, May 18, 1998 15:06:28 )

b11 を登録しておきました。

・MT Search Position のエラー処理のミスの修正

・MT List Files に of attribute パラメーターを追加

・MT Count Files を新たに追加(ファイルの数を数えるコマンド)

が変更点です。



→  2.0b

野本夏俊 さんからのコメント
( Wednesday, June 17, 1998 19:14:13 )

今、全面的に見直しをされていることと思いますが、この機会(?)にできれば
追加していただきたいコマンドがあります。

リストを結合するものなんですが、例えば
List1={item1_1, item1_2, item1_3, .....}
List2={item2_1, item2_2, item2_3, .....}
List3={item3_1, item3_2, item3_3, .....}
List4= .........というものがあったとして、

MT Merge Lists {List1, List2, List3, List4, ....} とすると、

{{item1_1, item2_1, item3_1, ...}, {item1_2, item2_2, item3_2, ...}, ...}

と返してくれるものがあるとすごく便利だと思うんですが、
加えていただけないでしょうか? ようするに、

set Merged_List to {}
repeat with i from 1 to (count of List1)
  set end of Merged_List to {item i of List1, item i of List2, ....}
end repeat

とするのと同じことなんですが、項目が多いとかなり時間がかかりますし、
入れ子のリストが有ったりすると、すごく待たされることになります。
で、osaxで処理すると相当速くなるんでは、などと甘い期待をしているのですが、
どうでしょう?
データベースにフィールドを追加したりスプレッドシートにコラムを追加する
様な作業をイメージしていただくと解りやすいと思います。

パラメータとして渡すリストのなかに単なるデータがあったら全アイテムに同じものを
挿入するようになっていればさらにうれしいです。例えば、

MT Merge Lists {List1, TheData, List2, List3, ....} とすると、
{{item1_1, TheData, item2_1, ...}, {item1_2, TheData, item2_2, ...}, ...}
を返すわけです。

さらに、リストの長さが異なる場合には、返値の長さを、
[1番目のリスト(または番号指定)、最長のリスト、最短のリスト、項目数指定] 
から選べて、(デフォルトは1番目)足りない部分は""で補うようになっていたら、
言うことないんですけど.....(相当贅沢言ってますね....(^^;)
お忙しいこととは思いますが、どうかご検討ください。よろしくお願いします。

田中求之 さんからのコメント
( Wednesday, June 17, 1998 20:50:08 )

いまさら私が作らなくても、すでに ACME Script Widgets 2.5 の中に
combine lists というコマンドがありますよ。

combine lists {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}

---> {{1, 4, 7}, {2, 5, 8}, {3, 6, 9}}

野本夏俊 さんからのコメント
( Wednesday, June 17, 1998 21:32:01 )

>ACME Script Widgets 2.5 の中にcombine lists というコマンドがありますよ。

ありがとうございます。さっそくダウンロードしました。
ざっと見た感じではTanaka's osaxと共通する部分の多いosaxですね。
もうすこし円高になってくれんかな〜... ま、でも4千円ちょっとか。

野本夏俊 さんからのコメント
( Tuesday, September 08, 1998 13:15:21 )

MT List Filesの「of attribute」パラメータに「document」を加えていただく
ことはできませんでしょうか?

MT List Files Reference of attribute {document:true}
で書類ファイルだけを取り出せる(アプリケーションやスーツケースを含まない)
ようになれば嬉しいです。

あるいは指定した条件に合致しないものだけをリストアップする様なオプションも
できれば欲しいです。
MT List Files Reference of type "APPL" with not match
でアプリケーション以外のファイルを取り出せるとか...

毎度図々しいお願いですが、何とかご検討ください。

田中求之 さんからのコメント
( Wednesday, September 09, 1998 13:27:03 )

osax の開発は、今、ちょっとした事情で止まってます(そろそろ再開せねばとは
思うのですが)。

of attribute は、ファイルの属性を指定するパラメーターですので、これに
document というファイル中身の種類を指定する項目を入れるのは無理です
(概念が異ります)

of type に NOT を指定することができないか、という点ですが、これを
組み込むとなると、内部の仕様をけっこう変更しないといけないので
(また、コマンドの書き方というやっかいな問題も持ち上がってきます)
はっきり言って、やりたくないです (^_^;;   ま、検討はしてみますが…

野本夏俊 さんからのコメント
( Thursday, September 10, 1998 10:03:50 )

なるほど、いろいろ難しそうですね。
とりあえずあきらめます。

モリヤ さんからのコメント
( Thursday, November 05, 1998 18:25:30 )

 HTMLの特殊文字をエスケープしてくれるようなコマンドをTanaka's 
osaxに追加していただくわけにはいかないですか? 現在は,xReplace
を5回使って(まだ1.41を使っているので),以下のようにしていま
す。これが一発のコマンドになると,速くなるんではないかなぁとか思
うんですが。

set myData to xReplace myData search "\"" replace ((ASCII character 0) & "quot;")
set myData to xReplace myData search "<" replace ((ASCII character 0) & "lt;")
set myData to xReplace myData search ">" replace ((ASCII character 0) & "gt;")
set myData to xReplace myData search "&" replace "&amp;"
set myData to xReplace myData search (ASCII character 0) replace "&"

 HTMLの特殊文字は他にもいろいろあるんでしょうが,上記4つにだけ
対応したら良いのではないかと思った由縁は,以下リンク先の説明を読
んだからです。

#既にそういう機能を持つosaxが存在している場合には,お教えいただ
#けると嬉しいです。

→  特殊文字について

SHUICHI.T さんからのコメント
( Thursday, November 05, 1998 18:42:49 )

5回も置換する必要はないと思いますが...
(& を &amp; に置換してから <, >, " を &lt; などに置換すれば良い (4回))

→  SHUICHI.T のページ

モリヤ さんからのコメント
( Thursday, November 05, 1998 20:33:24 )

スミマセン。そのとおりです。オバカで恥ずかしいです。

田中求之 さんからのコメント
( Friday, November 06, 1998 00:09:28 )

ちょっと分かりにくいかも知れませんが、すでに実装済みです

MT Convert W code myData from MacRoman to HTML with untouch eight bits

で、日本語を含む myData の、1バイト文字だけを HTML の記述法に変換します。
すでに、この会議室の CGI や EX II で利用してます。


モリヤ さんからのコメント
( Friday, November 06, 1998 01:08:12 )

う,そうだったのか。全然わからなかったです。恥ずかしいことに‥‥。
スミマセンでした。