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

スクリプトオブジェクトの処理について

発言者:野本夏俊
( Date Friday, February 20, 1998 17:56:10 )


スクリプトオブジェクトを自動生成するスクリプトを作っているのですが,
ちょっと困ったことが起きたので,教えてください。
実験用に以下のような内容のアプレットを作りました。

script DataForm---------------------元になるスクリプトオブジェクトの定義
  property Finfo : 0
end script

set FP to {}
repeat with i from 1 to 4
  set Finfo of DataForm to i----------------------------属性の書き換え
  set F to (choose file with prompt "Choose File")--------ストア先を選択
  try
    store script DataForm in F replacing yes-------ファイルにストアする
  on error
    my MakeRes(F)-------------ストア先にリソースフォークがなければ作る
    store script DataForm in F replacing yes---------------再度ストア
  end try
  set end of FP to F
end repeat

repeat with F in FP---------------------ストアしたファイルを順番に呼び出す
  set theScrObj to (load script F)----------スクリプトオブジェクトのロード
  display dialog Finfo of theScrObj-------------------------属性の表示
end repeat

on MakeRes(F)-----------------------------------リソースフォークの作成
  tell application "Finder"
    set Ficon to icon of F
    set icon of F to Ficon
    set icon of F to {}
  end tell
end MakeRes

問題点は2つあります。
1. このアプレットを起動すると,処理自体は正常に行われますが,アプレットが自動終了するときに
  『ディスクに誤りが起きましたので、“アプレットの名前”という
   スクリプトの変更を保存できません。  -38』
  というダイアログが出ます。これはなぜなんでしょう?

2. このスクリプトが『Now スーパーブーメラン』とコンフリクトを起こします。
  スクリプトオブジェクトをストアするためにファイル選択ダイアログを呼び出していますが、
  2回目の選択のときに『Now スーパーブーメラン』が効かなくなり、ファイルを選択しても、
  キャンセルしてもダイアログが閉じた直後にクラッシュします。
  (先ほど処理が正常に終わるといいましたが、それは『Now スーパーブーメラン』を
   OFFにした状態では、ということです。)
  Norton CrushGuard によると「Unknown floating point instruction」ということです。
  ちなみに、ループにせずに1回だけ処理するようなアプレットは何度起動させてもクラッシュは
  しません。(それでも『ディスクに誤り....』は表示されますが)

  まぁ、Now Utilitiesはトラブルが多いということになっていますから、はずせばいいこと
  なんですが、問題なのはリソースを書き込むことはいろんなアプリケーションでごく普通に
  行われていて、トラブルを起こしたこともないのに、
  なぜこのスクリプトに限ってクラッシュしてしまうのか?
  つまり、
  storeコマンドは普通のリソース処理と違うことをやっているのではないか?ということです。
  だとすれば、『Now スーパーブーメラン』に限らず、ほかでもトラブルを起こす可能性がある
  ともいえると思います。
  そこで、storeコマンドが他とどう違うのか、また、こうすればトラブルを回避できる、などの
  情報のお持ちの方は、どうか教えてください。

ただ単にこのスクリプトがおかしいのかもしれませんけど......

(リソースフォークを作る(?)ためにカスタムアイコンを付けるという苦しいことを
やっていますがこれも何かいい方法があれば教えていただきたいです。)

野本夏俊 さんからのコメント
( Friday, February 20, 1998 18:33:40 )

書き忘れていましたが、ぼくの環境は
本体:UMAX Pulsar 2250  288MB RAM  2GB HDD*2
OS  :7.6.1
AppleScript : J3-1.1

ユーティリティーなど:
Norton Utilities 3.5.1,  Now Utilities 6.5.1,  HardDisk Toolkit 2.0.6J,  SpeedDoubler 2.0.3J
ATM4.0.2J といったところです。ほかにもちょっと入っていますが主なものはこんなもんです。

この環境に問題があるのかも.......

SHUICHI.T さんからのコメント
( Saturday, February 21, 1998 20:16:11 )

>野本夏俊さん

私の環境では特に問題は発生しませんでした。

自分の環境 (1998年2月21日現在):
OS:Mac OS J1-8.1
AppleScript:J1-1.1.2
HD:約700 MB (Mac OS 拡張フォーマット)
RAM:32 MB (+RAM Doubler 2.01)
(Norton Utilities や Now Utilities は入れていない。
また、ATM 4.02 は入っている)

多分 AppleScript J1-1.1 と他のソフトウェアのどちらかに問題があるか、
ソフトウェア同士が衝突していると思います。

なお、エラー -38 は、
“...というファイルは開かれていません。”
というエラーです。

→  SHUICHI.TによるAppleScript理論 (注意:参考ページではなく、自分のページです)

SHUICHI.T さんからのコメント
( Saturday, February 21, 1998 21:11:49 )

↑
...と思ったら問題がありました(汗)。

リソースフォークのないファイルの場合、
MakeRes ハンドラの
set icon of F to {}
の部分で

データを指定された型に変換できない

というエラーが発生しました。しかしこのファイルに対してもう一度スクリプトを
実行すると今度は正常に動きます (リソースが出来ているため)。
う〜ん、謎ですね。

とりあえずこの部分をエラーハンドラで囲めば解決すると思います。
(ただし、アイコンの情報はファイルに残る)

田中求之 さんからのコメント
( Sunday, February 22, 1998 19:04:17 )

なぜリソースフォークを作る必要があるのでしょうか? リソースを作らなくても
store script コマンドで、スクリプト・オブジェクトは保存されますが?

野本さんのスクリプトを少し書き換えた、以下のようなスクリプトで、何のエラーも
起きません(ただし、Super Boomerang との相性については分かりません)

set FP to {}
repeat with x from 1 to 4
  set xFile to choose file of type {"osas"}
  set xobj to makeObj(x)
  store script xobj in xFile replacing yes
  set end of FP to xFile
end repeat

repeat with F in FP ---------------------ストアしたファイルを順番に呼び出す
  set theScrObj to (load script F) ----------スクリプトオブジェクトのロード
  display dialog Finfo of theScrObj -------------------------属性の表示
end repeat


on makeObj(myInfo)
  
  script DataForm
    property Finfo : 0
    on setInfo(myInfo)
      set Finfo to myInfo
    end setInfo
  end script
  
  set myObj to DataForm
  tell myObj to setInfo(myInfo)
  return myObj
  
end makeObj

野本夏俊 さんからのコメント
( Monday, February 23, 1998 12:38:07 )

田中さん、SHUICHI.T さんご協力ありがとうございました。

まずSHUICHI.T さん>データを指定された型に変換できない
         >というエラーが発生しました。
これに関しては、逆にぼくの環境ではエラーが起きたことがありません。
う〜ん謎が1つ増えてしまった。

田中さん>なぜリソースフォークを作る必要があるのでしょうか?
これに関しては状況が特殊なのですが、まず、今実際に挑戦しているのが
「FaceSpanを使ってSimpleTextとそっくりなアプリケーションを作って見る」
というものでして、ほぼうまくいっているのですが、保存のさいにテキストボックスの
内容をスタイル付きでファイルに保存したいと思って始めました。
開くファイルは当然[osas]ではない(一応何でも開けるようにする予定)のでリソース
フォークがないこともあります。で、保存するときには文字情報はデータフォークに書き出して
スタイル付きの内容はスクリプトの属性としてリソースに書き出してしまおう、という
方針にしました。(Nisus Writer や SimpleTextと似た方法ですね。)
で、保存のときにクリエータを“txtt”(←ここも似せて見ました)にして、今度開くときには
txttの場合はデータは無視して、ロードした内容をそのまま使おうということにしました。

実験した結果、store, loadはリソースフォークさえあれば、ファイルタイプがosasである
必要はないことがわかったのですが、リソースフォークのないファイルにstoreしようとすると
エラーになるので、カスタムアイコンを付けることで、無理やりリソースフォークを
作ってしまったわけです。
もしかして、この辺に無理があったのかもしれませんね。

田中さんに書いていただいたスクリプトも、ぼくの環境ではまったく同じエラーに
なってしまいましたので、結局はぼくの環境に問題がありそうです。
Norton UtilitiesとNow Utilitiesが対応したらOSを8.1にしてHFS+もつかって見よう
と思っているのでそのときに一度ハードディスクのフォーマットからやり直して
もう一度実験して見ます。

ご協力本当にありがとうございました。

しかし、質問のし方が悪かったのだと思いますが、この質問の真意はちょっと違うところにあります。
つまり、storeだけがスーパーブーメランとぶつかるということは、storeは通常の
アプリケーションがリソースを保存するのとは違うプロセスを経ているせいだと推測できます。
この違いをMacの内部処理に詳しい方なら説明していただけるかもしれない、と思った次第です。
回避方法もあるとすれば、そういう方向からしかアプローチしようがないかもしれないと思いました。
この質問を狩野さんのサイトではなくここでしたのも、ここならToolBoxを使っている方も
多いようだとの理由によるものです。
どなたか、その辺のこと、教えてくださいませんか?

田中求之 さんからのコメント
( Monday, February 23, 1998 18:51:06 )

SimpleText と同じような動作をさせたいのであれば、スタイル情報を 'styl' リソース
として保存するという方法をとることはできますよ。

Programmer Tool という osax を使えば、FaceSpan のフィールドの contents
(通常は 'STXT'という型になります)から text と styl への分離が可能になり
ます。これを、リソース書き込みのための osax (GTQ Script Lib にコマンドが
あったように思います)を使ってリソースとしてファイルに貼り付けるようにすれば、
SimpleText 互換になるはずです(読み込みの時も同様にテキストと styl リソース
の情報から cast で STXT にすることは可能です)

AppleScript における Styled Text の処理方法に関しては、以下の AppleScript
Snippets というページに、基本的な処理方法が紹介されてます。


>つまり、storeだけがスーパーブーメランとぶつかるということは、storeは通常の
>アプリケーションがリソースを保存するのとは違うプロセスを経ているせいだと推測できます。
>この違いをMacの内部処理に詳しい方なら説明していただけるかもしれない、と思った次第です。

Appleは、この辺に関する情報は公開していないと思います。ちょっと分かりませんね。

→  WIK - AppleScript Snippets

田中求之 さんからのコメント
( Monday, February 23, 1998 19:54:27 )

コメントした後、本当にできるか気になったので試してみましたが、FaceSpan から
ちゃんと SimpleText で開けるファイルが作れました。

Programmer Tool osax と add resource osax (GTQ Scripting Lib) を
使ってます

スクリプトは以下のようなもので動きました(ボタンに入れたものです)

on hilited theObj
  set myData to contents of textbox "txtName1"
  set myStyl to ヌclass kstyネ of (cast myData to "styl")
  set myRes to {resource name:"", resource id:128, attributes:0, resource type:"styl", resource data:myStyl}
  
  set myText to text of textbox "txtName1"
  
  set myNewFile to new file
  set myRef to open for access myNewFile with write permission
  write myText to myRef
  close access myref
  
  add resource myRes to myNewFile id 128 with replacing allowed
  
end hilited

野本夏俊 さんからのコメント
( Monday, February 23, 1998 23:41:32 )

>SimpleText 互換になるはずです
そんな方法があったんですね。早速近いうちにテストして見ます。

>Appleは、この辺に関する情報は公開していないと思います。ちょっと分かりませんね。
そうでしたか。残念です。

とりあえずosaxはあまり使いたくはなかった(純正環境でも動作可能なものを目指していたので)
のですが、Programmer Tool osax と add resource osaxを試して見て、エラーが起きないようなら、
こちらを本命にしたほうがいいかもしれませんね。

書き出しに関しては田中さんのスクリプトを参考にさせていただくとして、読み込みをどうするかも考えなければ
なりませんから、なにしろProgrammer Tool osaxを入手しなければ。
でき上がったら自分のホームページで公開する予定ですので、そのときにはぜひ使って見てください。
(と入ってもホームページはまだ存在してないんですけど.....)

あと、今のところテキストボックスの内容をプリントする方法が見当が付かないんですが、実現可能なosaxなどはありませんか?
(FaceSpanでは無理ですよね?最近のバージョンでは可能?)

田中求之 さんからのコメント
( Tuesday, February 24, 1998 00:46:36 )

>読み込みをどうするか

以下のスクリプトで、 SimpleText のファイルをスタイルごと読み込めます。

on hilited theObj
  set myF to choose file of type {"TEXT"}
  
  set myRef to open for access myF
  set myData to read myRef
  close access myRef
  
  try
    set myRes to extract resource from myF of type "styl" id 128
    set myStyl to resource data of myRes
    set k_styl to cast myStyl to "styl"
    set s to {class:scrap styles, ヌclass ktxtネ:myData, ヌclass kstyネ:k_styl}
    set myData to cast s to "STXT"
  on error
    
  end try
  
  set contents of textbox "txtName1" to myData
end hilited

なお、 Programmer Tool は Info-mac にも登録されていますが、以下の URL
からも入手可能です。

→  Programmer Tool

野本夏俊 さんからのコメント
( Tuesday, February 24, 1998 10:05:20 )

今日になってからやって見ようと思ったら何とすでに答えが....
いや、もう何から何までありがとうございます。

田中求之 さんからのコメント
( Wednesday, February 25, 1998 23:31:23 )

思い立った時(その気になっているとき)にスクリプトを書いておく、というのが
癖なんです (^_^;;  そうやって書き散らしたスクリプトが、いずれは役に立つ
時もある、 …と信じてますが、さて (^_^;;

野本夏俊 さんからのコメント
( Saturday, February 28, 1998 20:23:34 )

ちょっと遅くなりましたができました。
すごい!完璧です。
読み込みルーチンのなかの
>set myRes to extract resource from myF of type "styl" id 128
   と
>set s to {class:scrap styles, ヌclass ktxtネ:myData, ヌclass kstyネ:k_styl}
がコンパイルされないのでかなり焦りましたが、

前者はGTQの「Extract Resource」を入れて解決。(こちらはさすがにすぐわかりました。)
後者のほうは田中さんに教えていただいた、WIK - AppleScript Snippetsで調べて、

set s to {class:ヌclass stylネ, ヌclass ktxtネ:myData, ヌclass kstyネ:k_styl}

とすることで解決できました。(同じ様なことをやろうとする人っているもんですね)
このルーチンを使うとスーパーブーメランとのコンフリクトも起きません。
やはりこっちが本命ですね。公開できるようになったらまたご報告します。

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

野本夏俊 さんからのコメント
( Tuesday, March 17, 1998 12:19:50 )

一応ホームページを作って公開を始めました。
現在のところ,きわめてシンプルな内容(?)なんですが,自作ソフトがダウンできる(というかそれしかできない...)ので,使って見てください。
ダウンロードをクリックするとなぜか中味を表示してしまうので,option+クリックで保存してください。
何でこうなるのか教えてください〜〜....


→  野本夏俊(工夫がなくて.....)

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

>ダウンロードをクリックするとなぜか中味を表示してしまうので

サーバーに Binhex の情報が登録されていないためだと思われます。
サーバー管理者に連絡してみてください。


野本夏俊 さんからのコメント
( Tuesday, March 17, 1998 16:45:43 )

さきほどは改行をいれるのを忘れてしまい失礼しました。
さっそくプロバイダに問い合わせたところ,TelNetで
ログインして,自分で設定しなさい。といわれました。
サーバーソフトにはAPACHEを使っているので,サイトにいって
勉強しなさいとの冷たい対応でした....

何か,簡単に解決する方法はないものでしょうか?
サイトもいっては見ましたが,何しろ全部英語ですから...
読むだけで,挫折しそうです。MacでTelNetを使うのは,
改行コードなどの問題で,難しいかもね〜とかいわれましたが,
そんなに難しいもんですか?

すごく難しいようなら,あきらめます。

田中求之 さんからのコメント
( Tuesday, March 17, 1998 17:46:15 )

Telnet で自分のホームディレクトリーにログインして、

.htaccess

という名前のファイルを作り、この中に

AddType application/mac-binhex40 .hqx

と書いておけばよいはずです(改行が必要です)。この程度であれば、cat コマンドで
やってしまうのが楽でしょうね。

Apache もこれでいけますよね?>詳しい方



野本夏俊 さんからのコメント
( Tuesday, March 17, 1998 19:06:04 )

touch .htaccess

で,ファイルを作ることはできたんですが,
この後どうしたらいいんでしょうか?

catコマンドって?

よしもと さんからのコメント
( Tuesday, March 17, 1998 19:14:49 )

Apacheのmime.typesには

application/mac-binhex40        hqx

とあるんで、「.」はいらないかな。(あっても大丈夫だと思いますが)
でも、サーバーがApacheなら、管理者がmime.typesをデフォルトの状態
で使っている限りは問題ないはずです。

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

>catコマンドって?

UNIX のコマンドですが…

UNIX のコマンドが全く分からないのであれば、Mac でファイルを作っておいて
それをアップロードするという方法もあります。ただし、改行コードの違いには
気をつける必要があるのと、ファイルのパーミションを変更する必要があるかも
知れません。

野本夏俊 さんからのコメント
( Tuesday, March 17, 1998 20:20:54 )

application/mac-binhex40        hqx

と書き込んだ,“.htaccess”ファイルをとりあえず,Fetchでホームディレクトリに置いて見たら,
今度は,アクセスができなくなってしまいました。以下の文章が表示されます。
どーしたらいいんでしょう???

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to
complete your request.

Please contact the server administrator, homepage@linkclub.or.jp and inform them
of the time the error occurred, and anything you might have done that may have
caused the error.


よしもと さんからのコメント
( Tuesday, March 17, 1998 20:35:34 )

えっと、まずは田中さんが説明したよう、
頭に「AddType」をつけて、「.hqx」としてみて下さい。

#Apache/1.2.4を使っていますね、www.linkclub.or.jpは

野本夏俊 さんからのコメント
( Tuesday, March 17, 1998 21:05:11 )

AddType application/mac-binhex40 .hqx

で試して見ました。とりあえず,アクセスできるようにはなりましたが,
クリックで中味を表示することは,改善されていません。

Telnet の cat コマンドで中味を確認したら,一応ちゃんとできて
いるように見えます。(自信なし)

Telnetのログは以下のようになっています。


LINKCLUB (crystal.linkclub.or.jp) (ttyp0)

login: pca
Password:
Last login: Tue Mar 17 20:41:19 from 210.128.223.244
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.  All rights reserved.

FreeBSD 2.2.5-RELEASE (CRYSTAL) #0: Mon Mar  9 18:57:10 JST 1998

Welcome to FreeBSD!

If the info distribution has been loaded on this machine, the FreeBSD
Handbook will be in file:/usr/share/doc/handbook and the FAQ in
file:/usr/share/doc/FAQ

Type /stand/sysinstall to re-enter the installation and configuration utility.

% cd public_html
% cat .htaccess
AddType application/mac-binhex40 .hqx
%

う〜んわからん.... ご面倒おかけします。

よしもと さんからのコメント
( Tuesday, March 17, 1998 21:23:53 )

田中さんも言っていますが、「.hqx」の後に改行がないでしょう。
改行を入れて下さい。

#うちではちゃんと動きますよ。

野本夏俊 さんからのコメント
( Tuesday, March 17, 1998 21:41:56 )

いえ,改行は入っています。
試しに2つ改行をいれたら以下のようになりました。


LINKCLUB (crystal.linkclub.or.jp) (ttyp2)

login: pca
Password:
Last login: Tue Mar 17 21:27:48 from 210.128.223.230
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.  All rights reserved.

FreeBSD 2.2.5-RELEASE (CRYSTAL) #0: Mon Mar  9 18:57:10 JST 1998

Welcome to FreeBSD!

If the info distribution has been loaded on this machine, the FreeBSD
Handbook will be in file:/usr/share/doc/handbook and the FAQ in
file:/usr/share/doc/FAQ

Type /stand/sysinstall to re-enter the installation and configuration utility.

% cd public_html
% cat .htaccess
AddType application/mac-binhex40 .hqx

%

もともとのファイルのアップロードのし方が悪い?
その場合でも保存したファイルはちゃんと開けるものなのでしょうか?
現状ではそうなっています。
とりあえず,明日また試して見ます。

よしもと さんからのコメント
( Tuesday, March 17, 1998 22:08:00 )

後考えられるのは、キャッシュが効いていることかな?
試しにURLの後ろに「?foo」と言った感じでqueryを送って見て下さい。

ex. htpp://www.xxxx.xx.jp/~xxxxx/xxxx.sit.hqx?foo

これでダメならよくわからんなぁ?

#linkclubはFreeBSDを使っているんだ (^^;

清 秀紀 さんからのコメント
( Wednesday, March 18, 1998 09:59:53 )

今試したら、ちゃんとStuffIt Expanderに渡りましたよ。

ところで、www.sakura.ne.jpも確かFreeBSD。
最近、ひそかに増えているような気がしますね ;)

野本夏俊 さんからのコメント
( Wednesday, March 18, 1998 10:17:54 )

できましたー
ダウンロードするファイルの名前を変えて,
リンクも張り直したら,できるようになりました。
キャッシュはクリヤしてあったんですが,どこかで
しつこく効いていたんでしょうね。

訪れたリンク先も元に戻しておくべきだったんでしょうか?
なにはともあれ,解決しました。

田中さん,よしもとさん,清さんありがとうございました。

稲垣@linkclub ユーザー さんからのコメント
( Wednesday, March 18, 1998 10:24:14 )

 私もリンククラブインターネットを使っているので、もしやと思ったら
私の所もダメでした。

 で、上記にある様にファイルを作成したら無事にダウンロード出来る様
になりました。
 最近サーバをアメリカのレンタルサーバから国内に移動した際に、何か
設定が変わったようです。

#アメリカの時は何もしなくても良かったのに・・・。しかも、OSも変わっ
#ている確か前はSunのだったのに。

 余談ですが、少しページをまとめました。


→  Mac でインターネットサーバ!!