1998年2月23日月曜日

[Code] AppleScript/MacOS8

[Code] AppleScript/MacOS8
とりあえず記録をとってみる
■何故AppleScriptか
前々から、ちゃんとAppleScriptを学習しておこうと思っていたのですが、何となく後回しにしてました。
今回は「鳶嶋工房」も矢鱈と巨大化して、ある程度の自動化は必須と言う状況になったので、AppleScriptを使って、自動化を推進してみようと言う訳です。
ついでに、Finderの処理もガンガン自動化できれば、もっと素晴らしい。
■AppleScriptの現状
これからもサポートが続けられることがアナウンスされて、意気軒昴なAppleScript。の筈だけど、登場してから今まで、もうひとつ盛り上がりに欠けるのがちょっと困ったものです。
使い方はというと、主にDTP関連とデータベース関連の使われ方をしているようです。
イマイチ面白みに欠けるなぁ。「たつ工房」さんのミュールがちょっと面白い使い方ですかね。
各社のアプリケーションの対応具合が今一つなこともあって、ホビーユースでは殆ど「そんなもの知らない」状態って感じです。
それに、バージョンによってかなり動作に違いが見られ、安定感に多少欠けるところもまずいですね。
いやー、AppleScriptって結構ヤバげな感じかも。
ワターシ、ニホンゴ、ツカイマセーン
AppleScriptは、英語だけで無く日本語でも記述可能になっています。おおっ素晴らしいじゃありませんか、「ぴゅうた」もびっくりだよ。
でも、私は有無を言わさず英語表記を取ります。
これから日本語がサポートされなくなるとのアナウンスがAppleからあったのが、もっとも大きな理由ですが、英語の方が何かとプログラムを記述する時は便利なのです。
日本語を使うとIMにスクリプトを登録して、楽に記述できるような気もしますが、アルファベットの方は変換する必要が無いので、結局タイプが速くできます。
言語としてでは無くコマンドとして憶えにャいかんので、そのあたりの労力は一緒な上、日本語は自分の母国語である分、語彙力がそれなりにあり、間違って覚えやすいし、プログラムとして読んだら普通でも言葉として読むと日本語滅茶苦茶、と、けっこうロクなことはありません。
アプリケーションの対応は必ず英語から、そして極め付けに、HyperCard 2.2 Liteでは英語しか動かないときたもんだ。
ここまで不利な条件が揃っていて、なお日本語を使うという理由はありません。
■参考書は?
で、参考書ですが、相当前に手に入れておいた
「AppleScript入門」著:掌田津耶乃 技術表論社 2900円
を使います。掌田津耶乃さんはドラマ仕立てにすると入門者にいいと考えている節があり、そういう著作が目立つのですが、個人的には「よけーなおせわ」と思います。
この本も少し語り手にキャラクター(個性)があって、物語り仕立てになりかけてます。
ちなみに
「AppleScriptでゼンマイびゅんびゅん」著:掌田つやの アスキー出版局 1359円+(税)
も持ってまして、こちらは日本語でスクリプトが記述されていて、ちょっとナンですが、サンプル集として、副読本にしておくことにします。著者が同じですが、全然言ってることが違うので、別人が書いていると思ってました(笑)
この2冊とも、結構古いのでWeb上の情報をメインにやっていくことになると思います。ついでに、新刊にあったんで、ふらふらっと
「AppleScript図鑑」著:KURUMI 秀和システム 2400円+(税)
を購入してみました。
AppleScriptにターゲットを絞った、オンラインウェア集といった趣の本です。うーん、失敗したかも。結構中身のスクリプトが覗けないヤツが多い。しかも、作者に知り合い多し。もう少し早く始めていれば、自分もこの本に掲載されて、タダで貰えたかもしれない。ちっ
■気を取り直して始めよう
開発や実行に必要な環境はOSに付いてくるので、インストールを忘れずにやっときます。
AppleScriptはScript Editor(スクリプト編集プログラム)を使って編集するそうで、立ち上げてみると、物凄い素っ気無いインターフェイスで「これは簡単・楽勝」という雰囲気とともに「こんなんで大丈夫か?」という雰囲気もバリバリ伝わってきます(笑)
←これが、そのScript Editor
ちなみに、日本語OSでは「スクリプト編集プログラム」とファイル名が付いているんですが、イマイチ、ピンとこないので、今後Script Editorの名称を使います。
AppleScriptはマクロ言語のノリで、操作を記録してプログラム化してくれるので、早速それを利用してレッツスクリプト。
先ず最初は、ゴミ箱をすっからかんにするスクリプトでも。
えーと、記録ボタンをポチットな、んで「RAM ディスク」にある「dust」ファイルを「ゴミ箱」にドラッグ&ドロップ、ついでにウィンドウも閉じる、メニューから「ゴミ箱を空に...」を選んで実行、と。おおっ、記録されてる。
tell application "Finder"
activate
select disk "RAM ディスク"
open selection
select file "dust" of disk "RAM ディスク"
delete selection
close container window of disk "RAM ディスク"
empty trash
end tell
あらまぁ、簡単。
ついで、アプリケーション形式で保存してみる。
そんでもって、「RAM ディスク」に「dust」ファイルを作って、保存したAppleScriptアプレットをダブルクリック。すると見事にさっき記録した動きをして終了。
各々命令の意味はイマイチ不明だけど、ともかく動いた。今日はここまで。
[07.09.98]-[07.19.98]
    
AppleScript/Diary
http://member.nifty.ne.jp/ton_b/AppleScript/Diary/001.html
    
    
    

    
    
    

[07.25.98]
[07.28.98]-[08.10.98]
■いきなり限界にぶちあたる
HyperTalkみたいでちょと違う
とりあえず「AppleScript入門」を通読してしまったんだけど、意外に内容は薄かった、今一つやりたいこととズレてるってこともあるとは思うんだけど。
それで一応判ったことを整理すると。
AppleScriptはHyperCardで使われる言語のHyperTalkをベースにした体系を持っている。
しかし、細かいところで結構違う、どうしてAppleScriptをHyperTalkそのものにしなかったのだろうか??将来的には完全に融合して欲しいものだ。
その時、間違えてもマイクロソフトのVisualBasicとVBAのような、ごちゃごちゃして一貫性が無いモノにならないように気をつけて欲しい。
それはともかく、一応注意しておくこととしては、HyperTalkと違ってAppleScriptは変数に型がある
リストという特殊な型が用意されている
putがなく、価の設定は全てset
という所に気をつけていればいいようだ。
on open theList
tell application "Finder"
set iconData to icon of (path to current application)
repeat with curItem in theList
set icon of curItem to iconData
end repeat
end tell
end open
■リファレンスが欲しい
言語習得するときには、リファレンスが必要だ。でも、AppleScriptの場合はScript Editorの「用語説明を開く...」でリファレンスが欲しいアプリケーションを選択すればOK。
どの環境でも必ずあるアプリケーションのFinder(システムフォルダにある)を選択すると、でるわでるわゾロゾロぞろぞろ、しかも英語で。
Finderを操作するだけでこんなにあるんかい。詳しい説明や例文などは全くなし。英語で詳しい説明を書かれても判らないけど、これじゃなんにも判らない。
結局、一つ一つ試していくことになるのかねぇ。
インターネット接続を自動化したい
私の場合、インターネット接続する時には
コントロールパネルのPPPを起動
PPPを隠す
ブラウザを起動
といったことを必ずやっている。
「用語説明を開く...」でコントロールパネルを覗くと、PPPはスクリプティングに対応していないのでウィンドウに表示されない。
コントロールパネルぐらい完全にAppleScriptに対応してくれよぅ。Appleさんよぉ。
SimpleTextも対応して無いし、AppleScriptが流行らない訳が分ってきた気がする。
上記の操作を記録してみると...。おおう、「PPPを隠す」が記録されて無い。
あー、ヤバ。今後も「何をやっても引っ掛かる」状態が続きそうな気がする。
この自動化ができるようになるのは、そうとう先になりそう。
■物凄ぉく不安
どうも、サンプルを打ち込んだらちゃんと動くけど、自分で何か作ってみようと思うと、途端に失敗する。
これは、私の技術不足というより、Appleの技術不足っぽい。要するに、参考書のスクリプトは、慎重に問題が起こらない部分を選んで作られている、ってことだ。
イライラするので、今後は参考書メインで進んでいって、Finderの操作を一通りマスターしたところで自己流のスクリプトを書く事にしよう。
[07.19.98]
■私はどこ?
アイコン作家の端くれとしては
アイコン作品を提供する時に困るのが、使用者がコピー&ペーストというエレガントで無い方法を取らなければいけないところだ。
これをドラッグ&ドロップでできるようにしたら、とってもエレガントだ。
仕様としては「アイコンが張り付けてあるファイルに、アイコンを張り付けたいファイルをドロップするとOK」って感じにしたい。
■自分で自分が判りません
あうー、アプレット自身のプロパティを取り出すのはどうしたらいいのだ??
HyperCardとかVBみたいにmeとか使えんのか?meはあっても別の使い方みたいだ。
散々悩むが良く判らない、本を丁寧に読み直してみる。
「AppleScriptでゼンマイびゅんびゅん(以下ASゼンマイ)」P175-177に、解決法が載っているのを発見。
動作中のプロセス(アプリケーション)の中で一番手前のものを動作直後に調べれば、それがつまりは実行中のアプレット自身である、ということらしい。
on getMe()
end getMe
これ以上短くする方法も特に無いようなので、掌田さんの作ったもの殆どそのままで、変数名をアルファベットにして、これをサブルーチン(関数)化しただけ。
これで一応、自分自身が何ものであるかをチェックすることが出来た。
■さらに私はどこ?
上記の関数を使って、いろいろ作ってみたのだが、実はもっと簡単な方法があった。
NIFTYのフォーラムFMACHYPで「path to current application」で自分の位置が判るとの情報を発見、早速試す。
問題なく動いた。ASゼンマイはかなり前の本だから、おそらくこの方法は新しいAppleScriptのバージョンで加わったものなのだろう。
やはりリファレンス本が一つ欲しくなってきた、パッケージ版のAppleScriptを買ってしまうのもいいかもしれないが、まだ日本語表現形式でしか解説が付いて無い気もするし、だいたい何処で買えるんだ??
今度のMacOS8.5でまた大きく変更されるらしいし、微妙な時期だ。うなる程の金があれば手当りしだい買ってもいいのだが。
本屋で立ち読みして内容を確認しようにも、そもそも本が無いのでできない。田舎はなにかと辛い(つーか、佐賀の本屋はバカ本屋ばかりでコンピュータに限らずラインナップが寂しい。佐賀の教育レベルが知れると言うものだ)
ドロップしてアイコン
早速スクリプトを組上げてみる。
自分の位置さえ判れば、スクリプトは全く簡単であるので、問題なく完成。
on open theList
end open
ドロップレットとして保存。適当なアイコンを張り付けた後、これまた適当なファイルをドラッグ&ドロップ。
おおっ、見事に動いたけど、ちと遅い。しかも結構な大きさ4Kbytes程になった。ひとつならば大して問題ないが、アイコンは大抵20個とか100個とか大量に作るものなので、塵もつもれば山、結構バカにならない。
ただこの大きさは、AppleScriptとしては最低ラインの大きさなので、仕方ないと言えばしかたないが、一個だけ圧縮してみたら2,951bytesとでた、3Kbytesとして20個だと20×3=60Kbytes、どうにか許容範囲内かな。
収録アイコン全部につけずに、変更する頻度の高そうなアイコンにのみ使うと言う方法なら、まったく問題無い感じですね。
■調子に乗る私
クリーナーも作っときましょう
前回、アイコンを張り付けるスクリプトを作った訳だけど、アイコンを張り付けるだけじゃ無くて、元に戻す事もできるようにしておくのが親切と言うものだ。
そこで、アイコンを標準のものに戻すスクリプトを作ってみた。
on open itemList
tell application "Finder"
repeat with curItem in itemList
set icon of curItem to {}
end repeat
end tell
end open
これもドロップレットにする。実行...そしてエラー。何で?どーして???
あちこちで質問してみると、どうもMacOS7.xでは動くらしいが、MacOS8.1では動かないということであるらしい。
Macの偉い人(古いなぁこの表現も、ちなみにウゴウゴルーガではシュール君が好きだな)田中求之さんから、氏の作ったOSAX(スクリプティング機能追加ファイル)Zap Custom Iconを使うといい、と直々の言葉を承る(おーげさ)
早速導入、スクリプトまで書いてもらったので、それを公開。
on open(f)
  MT Zap Custom Icon f
end open
めちゃめちゃ簡単。ただしフォルダのアイコンには対応していないそうで、残念。
田中さんのようなフリーウェア作家の手に頼らなくてもいいように、早くバグ直せよApple。
■変更不可←→変更可
さて、ReadMeファイルには良く「SimpleText変更不可書類」が使ってあるが、あれはあまりいいもんじゃ無い、必要な情報だけ取り出そうと思っても、範囲指定やCopyができないのだ。
(そういう事もあって、私のソフトはReadMeも必ず普通の変更可能なSimpleText書類を使っている)
変更可能なテキストにはResEditを使って変更できるのだが、ちょいと面倒なのでAppleScriptで自動化することにした。
井上圭司さんが作ってたような気がするけど、自分で作るのが勉強になってよろしい。
ファイルタイプがttro(ReadMeなんかで使われる変更不能テキスト)だったらTEXT(テキスト書類)に、TEXTだったらttroにするスクリプト。
on open theList
tell application "Finder"
repeat with curItem in theList
if file type of curItem = "ttro" then
set file type of curItem to "TEXT"
else if file type of curItem = "TEXT" then
set file type of curItem to "ttro"
end if
end repeat
end tell
end open
これもドロップレットです。
問題なく動作、だんだんAppleScriptのツボが判ってきた。
■遂にフリーウェア制作
井上さんのWebページに、ダイアログに表示されるアイコンを変える方法を紹介してあったので、これを利用して簡単なアプリケーションを作る事にした。
その名も「たんたんタロットAS」。おみくじのようにワンオラクルをやるスクリプトで、単純なものだけど、文字データがそれなりにあるし、リソースを使用するので、要点だけ解説。
「random number N」(Nは整数)で乱数を発生させる事ができる、AppleScript入門によると1~Nまでの乱数とあるが、実は0~Nまでの乱数のようだ(ミスなのか、仕様変更になったのかは不明)
これを使って、0~1の乱数でカードの正逆を、0~21の乱数でカードの種類を決めるわけだ。ちなみにHyperCard版の「たんたんタロット」はずっと複雑な方法を用いて、よりリアルにシャッフルしている。
それからダイアログのアイコンを変更する方法は「display dialog 表示する言葉 with icon アイコンのID」で、アイコンはリソースとしてResEditでアプレットに組み込む。
ダイアログのアイコンは、ファイル(フォルダ)に使うicl8などの形式ではなくcicnやICON形式なので、結構変換が面倒、そろそろResEditもバージョンアップして欲しいものだ。もっと多くのリソースをAppleScriptが扱えるようになると言う手もある。
この二つの部分さえクリアすれば、アイコンは既にあるし、後は大した事は無い。スムーズに完成。
詳しくはLibraryから「たんたんタロットAS」をダウンロードして、リストと注釈を見て下さい。
今日はここまで。
        
AppleScript/Diary
http://member.nifty.ne.jp/ton_b/AppleScript/Diary/001.html
http://member.nifty.ne.jp/ton_b/AppleScript/Diary/002.html
http://member.nifty.ne.jp/ton_b/AppleScript/Diary/004.html
    
    
    
    
    
    
    
    
[08.02.98]-[99.5.23]
[08.10.98]-[09.14.98]
■HCでドロップレットを生成
同じ事やってるような...
今までやってきて気が付いたけど、ドロップレットを作る時の手順は、殆ど全く同じでちょっと中身が違うだけだ。
on open theList
tell application "Finder"
repeat with curItem in theList
XXXX
end repeat
end tell
end open
要するにXXXXの部分が違うだけなのだ。いちいちスクリプトをその度書くのも阿呆らしい気がしてきた。
ここはHyperCardのインターフェイスを利用して、ドロップレットを自動で作ってくれるスタックを作ると非常に便利だ。
ここで、ドロップレットをその都度作るより、スタックを作る労力の方が上なんじゃ無いかとか言ってはいけない。
人間楽する努力を怠ってはいけない。より効率的な方法を模索してこそ進歩があると言うものだ。
■ファイルを書き出す
HyperCardでAppleScriptを生成するには、テキストで作ったものを書き出せばいい。
AppleScriptは遅い遅いと言われるHyperTalkよりもさらに遅いという素敵な代物なので、メインの部分はHyperTalkでやって、最終的な書き出しの部分だけをAppleScriptでやらせる事にする。
実際は書き出しもHyperTalkでやれるのだがHyperTalkでは書き出したファイルのクリエーターの変更ができないので、プログラムの流れ上、書き出しからAppleScriptにやらせる。
書き出しはハッキリ言ってどうやっていいのか判らないので、「AppleScript図鑑」に収録してあるものを色々見て参考にしてみた。
だいたい、以下のようなスクリプトでいいらしい。
set fName to new file
open for access fName with write permission
write "書き込みするデータ" to fName
close access fName
「tell application "Finder"」はいらないのか、ふーむ、確かに動く。
早速同じスクリプトをスタックに装備、動かしてみる。...エラー。
なんでやねん。訳判らん。試行錯誤の末「tell application "Finder"」をしておくと何故か動くという事を発見。
良く判らん、スタックの上では既にカードオブジェクトの上にのっかっている状態なので、一度落としてやる必要があるのか??っていうかバグでしょ、コレ。
※バグかと思っていたけど、HyperTalkの持っているwrite命令とOSAXのwrite命令がぶつかって(コンフリクト)いることがわかった。だから一度Finder等のwriteコマンドを持たないアプリケーションを経由してメッセージをOSAXに送ってやる必要があるわけだ。
■やはり基本は大切かも
書き出す方法がわかったら、ほとんどできたも同然、ちゃっちゃっと仕上げる(と言っても、何だかんだで10時間くらいかかっている気がする)
これもLibraryの方に置いたので、詳しくはそちらを見て貰う事にして、細かいところは割愛。
イマイチAppleScriptの体系的な部分が理解できないので、「AppleScriptミニミニリファレンス」を手に入れる事にした。
最初からリファレンスブックを買うべきだった。私は基本的にリファレンスブックだけでプログラムを習得するタイプだから、必須アイテムだったのだ。
英語表現形式のマニュアルが付いているなら、パッケージ版のAppleScriptを買っても良いかもしれないが、パッケージ版は日本語表現形式で解説してあるらしいから、金を溝に捨てちゃうことになりかねない。
■リストを書き出してみる
オフィシャルの資料発見
MacOS8のCD-ROMの特別付録に「HyperCard AppleScript Reference」ってスタックが入っていることに気が付いた。
うーむ、結構細かく書いてあるじゃないの。こりゃ便利。
一通り読んでおく事にしよう。 ついでに「AppleScript の使い方 1」「AppleScript の使い方 2」(システムに付いてくるテキスト)に目を通してみたが、大した事は書いて無い。要するにバージョンアップ情報とScriptEditor(スクリプティング対応エディタ)の使い方だ、勿論大事な情報では有るが。
■ファイルリスト
今後のスクリプティングに色々と応用が効く事が予想されるので、フォルダの中身をリストしてみることにする。
適当に作ってみた。
on open theList
tell application "Finder"
repeat with curItem in theList
if folder (curItem as string) exists then
set itemListText to ~
my writeFolderList(every item of folder (curItem as string))
set fName to new file
open for access fName with write permission
write itemListText to fName
close access fName
end if
end repeat
end tell
end open
on writeFolderList(theList)
set itemListText to ""
tell application "Finder"
repeat with curItem in theList
if folder (curItem as string) exists then
set itemListText to itemListText & (name of curItem) & ":" & return & ~
my writeFolderList(every item of folder (curItem as string)) & return
else
set itemListText to itemListText & (name of curItem) & return
end if
end repeat
end tell
return itemListText
end writeFolderList
(~は行が続いている事を示す。そのままだと半角ツに化けるので変更)
これもドロップレットにする。相変わらず遅いが、問題なく動作。
順調で盛り上がりにかけるが、順調なのは良い事だ。
このままでも十分実用になると思うのだが、さらにきちんとソートして表示したり、階層をタブで表現したりすると便利かもしれない。
ただ、そこまでやる気は私には無い(笑)
■今後の展望
これまで、手探り状態で進めてきたのだが、基本が判らないのは大いに不安だ。
未だにファイルの指定方法すら判らなくて、カンでやってる状態。他にも判らない事だらけで、人に質問してみる以前の段階。
とりあえず、「HyperCard AppleScript Reference」に一通り目を通してから次のスクリプトを作る事にする。
それはそうと、内容もそれなり増えてきたので、そろそろAppleScript 日本語ホームページからリンクしてもらおうかな。
        
AppleScript/Diary
http://member.nifty.ne.jp/ton_b/AppleScript/Diary/001.html
http://member.nifty.ne.jp/ton_b/AppleScript/Diary/002.html
    
    
    
    
    
    
    
[09.01.98]
[09.14.98]
■リファレンスを買った
ついにリファレンスを手に入れる
書店に注文していた本が一月近くかかって、やっと届いた。
「AppleScriptミニミニリファレンス」著:こばやしゆたか ソフトバンク 1,784円(税別)
この本は1995年の本なのだが初版本が届きやがった。ヤバいぞAppleScript、どうにかしろよJobs(ってもJobsのおっさんはあまりプログラム好きとは思えんからなぁ)
兎も角、明日のAppleScriptの大ブレイクを信じて学習に勤しむ事にしよう。
ただ、MacOS8.0-8.1でかなりAppleScriptに変更があったようだから、そこらへん注意して読んでいかないといけないな。
■読んでみる
例によって、リファレンスをざっと通読する。
他の人のやり方は知らないが、私の場合リファレンスは一度頭から通読するのが常だ。
もちろんハッキリと頭の中に残るものでは無いが、確実に雰囲気はつかめる。
ただし挑む相手が膨大になってくると通用しない。私がC言語などのToolBoxを使用する言語に手を出すのを躊躇う理由でもある。
ま、そこはそれ、別の方法を取ればいいだけだけどね。って話がそれた。
MacOS8.0のCD-ROMについてきたスタック「HyperCard AppleScript Reference」(HyperCardの製品版にも付いてるらしい)と合わせて、かなり理解が進むはず。
ちなみに「HyperCard AppleScript Reference」は日本語形式の解説なので判りにくい。早く英語記述方式に対応したものを出して欲しいものだ。この際自分で作るか。
しかし、そうなると「HyperCard_Help」と合わせて、HyperCard関連のヘルプを矢鱈と作る、とても親切な人というレッテルが張られそうで、クールでヒールな私のイメージが良くなっちゃうなぁ(笑)
■読み終わって
さて、読み終わってみての感想とか、気付いた事を列挙しておこう。
型変換がかなり変で、一定の法則がないようだ。
かなり用語解説と実際の機能にちがいがあり、混乱が甚だしい。
予想通りバグもふんだんに盛り込まれているようだ。
ほとんどのコマンドは見た事があった、ってことは既にかなりの部分の理解はできていたってことだな。
ともかく、言語の鳥瞰ができて安心感をもてた。
本は非常に出来が良く、AppleScriptを習得するには必携と言えるだろう。
このリファレンスブックをベースに、いろいろとへんなスクリプトを組んでいこうと思う。
■復習の鬼
フォロー大特集
リファレンスを手に入れて、AppleScriptが大体わかったところで、以前に直面した問題を再度検証してみる事にした。
やはりリファレンスが手許にあると見通しが明るい。
AppleがAppleScriptを普及させたいと本気で思っているのならば、MacOSにリファレンスを付属させるべきだ(ついでにHyperCardとQuickTimeもよろしく)
それから、Appleのサイトでのフォローもしっかりして欲しい。AppleScript 日本語ホームページは現在、お寒い限りの更新状況だ。
それから、各出版社と協力して、1000円程度(2000円以下なら許す)のリファレンス本を、バージョン毎に発行できるような体制を作ってほしい。
■PPP制御
以前PPPの制御にチャレンジしたのだけど、見事に失敗した。そこで今度はコントロールパネルを通さずにPPPの接続・解除を行うことにした。
システムフォルダの「スクリプティング機能追加」に「PPP 命令」という機能追加ファイル(osax)を発見したからだ。
早速、用語解説を見て、PPP解除のスクリプトを作ってみた。
-- 接続秒数をチェック
set cnctTime to (seconds connected of (PPP status)) as string

try
PPP disconnect
on error errMsg number errNo
if errNo = -7108 then
-- PPPがオープンされていない場合のメッセージ
display dialog "PPPは接続されていません" buttons {"OK"} default button 1
else
error errMsg
end if
return
end try
-- 接続秒数を表示
display dialog (cnctTime & "秒接続していました") buttons {"OK"} default button 1
起動するとPPPを解除し、接続時間(秒数)を表示する。
ついでなので、接続していない場合はその旨を表示するようにした。
なんだか、拍子抜けする程簡単にできた。
        
AppleScript/Diary
http://member.nifty.ne.jp/ton_b/AppleScript/Diary/001.html
http://member.nifty.ne.jp/ton_b/AppleScript/Diary/002.html
    
    
    
    
 
    
    
    
    
    
[10.19.98]
■ファイルのリスト化
以前フォルダ内のファイルをリストしてみたが、とんでもなく遅かったので、改良を加えてみようかと思う。
list folderというフォルダの内容を返す(追加機能)コマンドを発見したので、自前で用意していたのに比べ、相当にスピーディーになるはずだ。
なにせ前に作ったものは、ファイルの参照リストをもとに、名前を再度取り出したり、フォルダであるかどうかの判定を行ったりしていたのだから、相当面倒な作りだったのだ。
on open theList
tell application "Finder"
repeat with curItem in theList
if folder (curItem as string) exists then
set itemListText to ~
my writeFolderList(list folder alias (curItem as string))
set fName to new file
open for access fName with write permission
write itemListText to fName
close access fName
end if
end repeat
end tell
end open

on writeFolderList(theList)
set itemListText to ""

repeat with curItem in theList
set itemListText to itemListText & curItem & return
end repeat
return itemListText
end writeFolderList
(~は行が続いている事を示す。そのままだと半角ツに化けるので変更。強調部分が今回書き換えたところ。)
フォルダを区別していない事もあるのだろうが、前のモノに比べたら、相当に速くなった。
型変換やファイルの指定方法が、今一つわかっていないので、このスクリプトは、さらに単純化・高速化できそうな気がする。
■アップローダー
最近のAppleScript
AppleScript 日本語ホームページは割と頻繁に更新されるようになったようで、メールでせっついた甲斐があったと言うものです。
代わりと言ってはなんですが、私のページの方が更新されてませんでした(笑)
10月16日に発売となったMacOS8.5では、前評判通り(もしくは以上に)にAppleScriptが強化されているようで、実に嬉しい限り。
いよいよAppleScriptがブレイクするかもしれない。
ただし、日本語表現形式が予定通り廃止されたので、日本では暫く混乱状態が続くと思われ、早期のリファレンスブック(他参考書)の登場が待たれる。
私の場合は、やっぱり英語形式でやってて良かった、って所。
■作業こそ自動化の価値あり
私はだいたい、AppleScriptでアップロードの自動化を推進しようと思って、AppleScriptの学習を始めたんだった。
しかし、他の事にばっかり手を出して、実際の話、作業自動化の役にたって無いのが現状だ。
ちょっと脱線しすぎた。そろそろ自分のためになる自動化手段を考えなければ。
■Fetchを使う
現在使用しているFTPソフトは「Fetch3.0.3」である、コイツはスクリプタブルでレコーダブルなイカしたやつだ。とりあえず、操作記録を取ってみよう。
...くそう、ハングアップとは憎いぜ、このやろう。再起動し、FetchとScriptEditorの使用メモリを増やして再度挑戦、こんどは成功。
ふむふむ、「open remote directory "ftp:なんちゃらかんちゃら"」でディレクトリを開いて、「put into transfer window "ウィンドウ名" item {alias "アップロードするファイル",....}」ってな感じでアップロードができるということみたいだ。
いまいちピンとこないし、やたらと繋いでテストを繰り返すのは、通信代が勿体無い。
用語説明を参考にしようか、と思ったけどサンプルスクリプトが用意されている事に気付く、「DropUpload」なんか良さそう。ふむふむ、なるほど、いちいちディレクトリを開いてやる必要はないようだ、いきなり「put into url "ftp://ログインID:パスワード@サーバ/ディレクトリ..." item "アップロードするファイル"」と書けばよろしいらしい。
早速に試してみたところ呆気無く成功。早く自動化を進めておけば、だいぶ楽ができたな、こりゃ。
スクリプトは以下の通り。timeoutは、接続やアップロードに手間どった時の対策。例によって、ドロップレットにしておいた。
でき上がってみると、ほとんどサンプルスクリプトそのまま(笑)
on open itemList
tell application "Fetch 3.0.3"
with timeout of 60000 seconds
put into url "ftp://ログインIDは秘密:パスワードも秘密@mftp1.nifty.ne.jp/homepage" item itemList
end timeout
end tell
end open
■一歩漸進
放り込んだファイルの位置からアップロードするディレクトリやサーバを判断して、振り分けるようにしたいところだが、ちょっと制作に時間がかかりそうなので、とりあえずディレクトリごとにアップロードする場所を書き変えたドロップレットを作って置いておく事にした。
MacOS8.5はAppleScriptのためのバージョンアップと言ってもいいものらしく、かなり期待できそうなので、MacOS8.5を導入した曉にはHTMLテキストの前処理(日付の書き変えとか)等も含めたものを作って行けたらと思っている。
        
AppleScript/Diary
http://member.nifty.ne.jp/ton_b/AppleScript/Diary/001.html
http://member.nifty.ne.jp/ton_b/AppleScript/Diary/002.html
http://member.nifty.ne.jp/ton_b/AppleScript/Diary/008.html
    
    
    
    
    
    
    
    

0 件のコメント:

コメントを投稿