題名:Java Diary-23章

五郎の入り口に戻る

日付:2000/5/4

目次に戻る


Apple Script

さて、SETI@SupportのVer0.7シリーズだの、Fleet Commanderだのを作っている時、私は同時並行的に別の妄想にもとりつかれていたのだ。

「あまりに楽しみの少ない人生を改善しよう」

という意図の基、何故かわからないがSETI@homeの解析能力を改善することに血道をあげだしたのである。ここで「解析能力の改善」というのはつまるところSETI@home解析専用マシンの購入なのだが、それについては別の文章で書くことにする。ここで書きたいのは、その専用マシン(Power Mac7500+G3@466MHzだが)を効率的に使うため、私が制作しなければならなかったプログラムについてである。

 

私は基本的にPower Bookで細切れにSETI@home を実行させている。つまり他の作業に使っていないとき(大半は寝ている間だが)だけに実行させているわけだ。であるからして基本的にはあまり解析数やら効率にはこだわっていない。私がMacintoshの上で何かしていれば1ユニット解析するのに時間がかかるし、ほったらかしておけば解析は進む。それだけの話だ。

しかしながら、かくのごとく悟りを得たような態度をしていても時々

「ああ。無駄時間を作ってしまった」

とほぞをかむことがある。具体的にいえば「推定解析必要時間:あと1時間」となっているときに安らかな眠りにつくような場合だ。目覚めて確認すれば確かに解析は終了している。しかし実のところ彼(もしくは彼女)は私が惰眠をむさぼっていた8時間から解析に必要な1時間を除いた7時間の間ただ

「解析おわったぞー」

と叫びつづけていただけなのである。つまりそれは無駄時間であったわけだ。

さて、こうした問題に対処するために(本当は本家のサーバーがダウンしている場合でも解析を続行するため、という説もあるが)便利なユーティリティを開発してくれた人は世界中に数人存在している。Windows上で動くクライアント用にはいくつか

 「Work Unitをまとめてダウンロードしておいて、それがある限りはとっかえひっかえ解析を実行する」

プログラムが発表されている。実際これはほっとらかしにしておいてその間延々と解析を実行させ、たまにサーバーにつないでデータを送受信する、という使い方をする場合には大変便利なものだ。私もLibrettoではこうしたユーティリティを使っている。

 

さて、私のメインのマシンは常にMacである。そしてMacでSETIを行なう場合と、Windowsその他で行なう場合には一点大きな違いがある。MacにはGUIつきのクライアントしかないのに、Windowsその他にはConsole versionと称しテキスト入力だけで実行できるバージョンが存在している、ということだ。つまるところMacにはコンソールなるものが存在しないので、ほとんどすべてのプログラムはなんらかのGUIを持っている必要がある。

思えば今をさること16年前、初めてMacをみたときに

「コンソールをまったく廃止するとはなんとすばらしい思い切りか」

と感心したものだ。そしてその感嘆の気持は今にいたるもかわってはいない。しかしながら、その後SETIに関して発表されたさまざまなツールを見たときにこれがMac上でSETI@home を実行するにあたっての一つのあしかせとなっていることはみとめざるを得ないのである。

 

この「あしかせ」とは何か?前述したような

 「ワークユニットをまとめてダウンロードして、とっかえひっかえ解析」 

をやろうと思うと一連の処理を自動化して実行しなければならない。コマンドラインのプログラムであれば、それが比較的容易にできる。要するにコマンドを連続して打ち込んでいけばいいのだし、その制御のための仕組みもちゃんと整備されている。

ところがGUIというのは人間にとっては楽なものだが、こうした一連の処理を自動でやらせようと思うとなかなかに大変である。人間がこのボタンをクリック、ここでキー入力としているものをどうやって記録すればよかろう。

 

同じ問題に直面した人間はきっとたくさんいるのだろう。いにしえにはMacro Makerなるプログラムが存在していたし、最近ではAppleScriptという仕組みが用意されており、これで「一応」処理の自動化はできることになっている。そしてこのAppleScriptを使い、Mac上で

「処理の自動化をしてSETI@homeのデータをためこみとっかえひっかえ」 

するユーティリティも私が知る限り世界に1種類だけ存在している。Made in GermanyのApplescriptプログラムSETI Unit Manager,通称SUMである。

 

さて、自分が惰眠をむさぼっている間の無駄時間に悩まされていた私はついにある日

「このユーティリティを使ってみよう」

と決心した。しかしReadmeを読むうちに一個所気になる個所につきあたったのである。いわく

「このプログラムを使う場合には計算時間の2%をうちのチームに寄付してほしい。つまりは50回に1回はうちのチームのアカウントで解析データを送信するからよろしく」

と書いてあるのである。

 

最初私は「2%か。。。それくらいしょうがないかな」と思った。ところがその2%とはいっても解析時間にしてみれば10時間以上にわたっているのである。50回に一回とはいえ、それだけの時間をかけ汗水たらして解析した(別に私が汗水垂らすわけではなく、がんばっているのはMacintoshだが)結果を寄付するのはいやだ。

 

さて、このApplescriptというのは基本的には人間が(苦労すれば)解読できるプログラムである。次に私が考えたことは

「よし。ソースプログラムをみて、この妙な制限をはずしちゃうもんね」

であった。さっそくスクリプト編集エディタなるものをたちあげ、さあのぞこう、と思うと敵もさるもの。「実行専用形式」なるフォーマットで記録している。つまるところはソースファイルは覗けないしもちろん変更もできない、といった調子だ。

さて、とここで腕を組んで考える。改造ができず、かつ無駄時間をなくそうと思えば、自分でなんとかせざるを得ないようだ。以前失業していたときに自分の生活環境(もちろんパソコンにまつわるものに限られるのだが)の改善をめざして、いくつか小さなApple Scriptのプログラムを作ったことがある。このApple Scritpは

「人間の言語に近い形で記述できる」

ことを目指したらしく、確かにその記述はなんとなく英語っぽく聞こえる。しかしちゃんと使おうとおもうと。(これは単に私が使いこなせていないためだと思うのだが)どうにもぐにゃぐにゃしている感じがして、気持が悪い。直前に使った変数はitで参照できるのだが、これをFlexibileとみるか、あるいは「itとはいったいなんだ?」と思うかは人によるのかもしれない。そして私はどちらかと言えば後者のメンタリティをもっているようだ。しかし贅沢はいっていられない。

行なうことは理論的には簡単だ。いくつかのフォルダの中身をとっかえひっかえ交換する。適当な時期にクライアントプログラムを立ち上げ、適当なときに終了する。基本的にはその繰り返しである。頭の中にこうした簡単な設計図がかけると、次にやることは

「ここは重要そうだ」

という部分の検討、試験である。まず気になるのは前述した

「はたしてGUIのクライアントプログラムをちゃんと制御できるか」

である。さて、このAppleScriptの売りの一つに

「人間がやった行為を記録しておいて、プログラムを自動生成する」

というものがある。早い話し「録音ボタン」のようなものを押して、あれこれ操作。運がよければ「停止ボタン」を押したときにあれこれプログラムが書きあがる、というものだ。これがうまくいけば、頭を悩まさずに一連の操作をするプログラムができあがる。しかしこの「運がよければ」というのが問題で、この方法で操作を記録できるプログラムもあればそうでないものもある。そしてマーフィーの法則によれば、私が心から

「動作をApple Scriptで制御したい」

と思っているプログラムは大体

「そうでないもの」

に分類されてしまうのである。

 

どきどきしながらやってみた結果は予想通りだった。録音ボタンをおした後にあれこれやってみたのだが、停止ボタンを押しても何も起こらない。

「これがコンソールから操作できるプログラムであればこんな苦労はいらないものを」

などと天をあおいでみてもなんともなるものでもない。さていかがしたらいいだろうか。

 

一つだけヒントがあった。このプログラム-SUM-はなぜかはしらねど"Akua Sweets"なるものをシステムフォルダにインストールするよう求めている。このAkua Sweetsによって機能が拡張され、SETI@homeのコントロールが可能になっているのだろうか。

 

そう考えるとこのAkua Sweetsが何をしているのかをあれこれ調べてみる。するとどうやら通常の方法ではApple Scriptで制御できないプログラムを制御するしくみがあるようだ。そこから手探りであれをやり、ここで失敗し、などということを繰り返して、とうとうクライアントプログラムを起動・終了することは可能となった。

 

さて、次に必要なのは、フォルダの中身をとっかえひっかえ、という機能なのだが、ここまででApple Scriptを学ぶのに疲れていた私は、安易な方法に走った。とりあえずなじみの深いJavaで残りを書いてしまおう、としたのである。Javaであればファイルの一覧を作ったり、中身を移動したりはいままでさんざんやっているからなんとかなるだろう。逆にAppleScriptではあれやこれやのホームページなどを参照してやってみるのだが、どうも今ひとつよくわからない。適当に書いて動かすとなんだかエラーがでるのだが、そのエラーが何を言っているかすらよくわからない。ここは昔なじみのツールに頼ろう。

そう考えるとしょこしょことプログラムを作りはじめた。このプログラムは大きくわけて二つの機能を持たせる予定であった。まずBerkeleyのサーバーからまとめていくつものWork Unitをダウンロードすること。次にとっかえひっかえ実行することである。このうち最初の機能はなんどかの失敗の後になんとか動くようになった。そしてその時点で力尽きた私は二つ目の機能のコードは書いたがほおっておいた。つまりプログラムは半分だけ動くようになった(だましだましだが)時点でとまってしまったわけである。

 

これには理由がある。SETI@Support開発の時にも直面した問題だが、なんといっても試験をするのに時間がかかるからだ。一つのワークユニットを解析するのには計算時間で10数時間、24時間動かしているわけではないからだいたい2日くらいかかる。そしてプログラムの試験はそのタイミングでしか行なえない。何か問題があって、修正したとしてもその修正がただしいかどうか判明するまでにはまた二日間待たなくてはならない。

また私がこの時点で強い必要性にかられていたのは前半の機能だけだったのである。私が本来のMacに加えてLibrettoでも解析を行ない出したことは前述した。最初は一枚のモデムカードをmacに差込み、データの授受、次にLibrettoに差し込みデータの授受とやっていたのだが、そのうちこれはとても面倒なことだと思うようになった。(だいたいWindowsではカードをはずすときにゴミ箱に放り込むだけではだめで、一度「カードの使用を停止」してから手動ではずす必要があるのである)

そしてあれこれ悩んだ末、LibrettoにはEthenetのカードだけを差込み、MacとLANで接続、データの送受はMacでまとめて行なうことにしたのである。このためには前述した

「まとめていくつものWork Unitをダウンロード」

機能は必須であった。

さて、このJavaとAppleScript混合のシステムはなんとかだましだまし動いていた。私は自分だけが使うプログラムに関してはとても望みが低く、適当に動けばそれ以上望まないたちである。だからこのまま何もなければいつまでたってもこのプログラムは半完成のままほおっておかれたかもしれない。しかしそこにまた新たな

「一押し」

が加わったのである。

 

 

ある日SETI@homeのメーリングリストに「SUMについて」という題名でポストがなされた。内容は

「どうも2%よりもたくさんのユニットがSUMのアカウントに送信されている気がする」

というものである。ここから話しは発展してとうとう

「自前でApplescriptのユーティリティを開発しよう」

という話しになったのである。なるほど私のほかにもSUMの「2%寄付」が気になり、自分で作ろうとする人はいるわけだ。そしてそのやり取り(私も自分が何をしたか、は投稿したが)を見ている間に

「あの作りかけのやつをなんとかしてみるか」

という気分になったのである。

 

さて、となると今度こそApplescriptをまじめに勉強せねばならない。会社ではWebが自由に使える環境にあるから、なんとかインターネット上であさるだけでプログラムに必要な情報がえられないか、とやってみたがそれは(少なくとも私には)不可能だとさとった。これはやはりちゃんとしかるべき本を購入して勉強しなくてはだめなようだ。

 

会社帰りに本屋によってみる。ぱらぱらとめくって厚くて高いが中身がちゃんとしている本を選んで買った。帰宅途中ぱらぱらとめくってみるとなかなかよさそうである。丁寧な解説に、だいたいサンプルプログラムがついている。またひっかかりそうなところもちゃんとコラムになっている。これはあたりかもしれない、と思いふと表紙を見ると編集の代表者の名前に見覚えがある。MLで今回の「自前でプログラムを作ろうプロジェクト」についても発言していた人ではないか。なんと、私はこうしたApplescriptの本の著者として名前を載せる人相手にあれやこれやと発言していたのであるか。

しばし唖然としたが、とにかく本を参照してあれこれとプログラムをいじりはじめた。掲載されているサンプルプログラムを参考にしながら作り出すと思ったよりは順調に進んでいく。(もっとも鼻歌交じりと称するには支障があるほど大変ではあるのだが)やはり適当な参考書というのは貴重なものだ。最初書籍を購入したときは

「あまりに高いのではないか」

と思いもしたが、この進み方を考えればやすかったという気もする。

 

さて、話しはもとに戻る。私がSETI@home専用にマシンをセットアップすることを考えると、今回の

「ワークユニットをとっかえひっかえ解析」

機能は必須なのだ。24時間運転すれば一日に2−3個のユニットが計算できるが、そのために私がパソコンのそばにつきそっていてそのたびにバークレイのサーバーに接続することなどできない。となればこの自動化プログラムが動かなければせっかく購入する新しいmacintoshも宝のもちぐされとなってしまうわけだ。

さて、このプログラムはちょうど新しいマシンが到着するころに「なんとか動く」ようになった。今迄何度も実感したことだが、この「なんとか動く」から「まともに動く」までの道のりは果てしなく遠い。このプログラムに関して言えば個人で使えるレベルには到達するだろうが、世間様に公開できるようになるかどうかははてしなくあやしいものだが。

次の章


注釈