題名:Java Diary-24章

五郎の入り口に戻る

日付:2000/6/2

目次に戻る


GSIS Ver0.2 & SETI@Support Ver0.74

「屋根裏部屋は照り返しがきつい今日この頃ですが皆様いかがお過ごしでしょうか。

先ほどGoro's SISことGSISをアップロードしました。」

という訳のわからない前書きとともにGSISをアップロードしたのは5月15日のこととなった。このプログラムの名前はすでにメーリングリストで

「SETI Intercept System の略です。

SIS Is not SUM. でも可です。」

と提案され、皆の賛同が得られていたのである。では何故その名称を素直につかわずに頭にGの字をつけたか?前の章で書いた「自らApplescriptのReference Book」をまとめた人がきっともっとまともなSISを発表するだろう、と思っていたからである。従って私が"SIS"の名前を使ってしまうことはどう考えてもはばかられ、亜流の「亜」をつけるようなつもりでGの一文字をつけたのである。

実を言えばこのGSISの発表すらかなり悩んだものだった。下手に発表してその一週間後にはるかにまともなKSIS(Kはその人の頭文字だが)が発表されたらどうしよう?私もきっとそれに乗り換えるであろうが、挑戦者意識をもって私のプログラムを使ってくれた人はきっと移行に苦労するに違いない。となれば、おとなしく決定版がでるまで待つべきではなかろうか。

しかしながらその「決定版」はいつ発表されるともしれず、その人はかなり忙しい状況にあるようだった。もし数週間から一月の命のプログラムだったとしても、それに対していろいろ意見をもらうことで議論が起これば、よりより「決定版」が生まれるためにお役にたてるかもしれない。 

もんもんと悩んだあげくに、例によって例のごとく

「まあたぶんこのプログラムを世の中に送ったところで、人が死ぬわけでもないだろうし」

ということでアップしたのである。

さて、発表するとさっそくあれこれの改善意見がもらえた。まずこのプログラムはAkua Sweetなるプログラムをインストールしていないと動かないのだが、それがインストールされているかどうかのチェックを怠っていた。泡をくって追加である。

さらに間抜けの上塗りをするようだが、インストールされていた場合のバージョンチェックは行っていたのだが、ダウンロードページからリンクしていたAkua Sweetsはバージョンが古い物で、まともにそこからダウンロードするとこのバージョンチェックにひっかかってしまうのであった。これまた泡食って修正である。

ここまでは世間様に大変ご迷惑はかけているがまあ私自身はこれくらいの間抜けさにはなれっこである。しかしそのうちもっと根元的な問題が提起された。

MacintoshのOS Ver9が発表されたのは確か去年のことだったと思う。それまで結構律儀に新しいOSが発表されるたびにバージョンアップしてきた私だが今回はそれを見送っていた。まず最初に発表されたバージョンにはなかなかにバグが存在していたし(かの有名なDHCP問題である。もっともこの問題は私には何の関係もないのだが)新しく追加された機能はあまり魅力的にうつらなかったからである。

「改めて益無きことは改めぬをよしとするなり」

とかなんとか徒然草の兼好法師も言っている。しかし私がOS8.6にとどまっていようがいまいが世間様の大多数のマシンはOS9に向かっていたのである。

さて、この「あまり魅力的でない新機能」の中に、「複数ユーザーのサポート」があった。私自身この機能には全く必要性を感じていないが(私以外の誰がこのマシンを使おうというのだろう)この機能追加によって様々なアプリケーションが被った変更なるものは大きかった。それまでアプリケーションの初期設定などはその名も「初期設定」というフォルダの中にしまうことになっていた。ところがこの「アプリケーションごとの初期設定」はユーザーごとに違うのである。これまでは一人のユーザだけ考えればよかったのだが、これからは複数のユーザーが使用した場合にも設定をちゃんと保存しなければならなくなった。

さて、そうはいっても設定にはユーザーごとに固有なものとユーザー間で共通なものがある。そしてユーザー間で共通なものは「初期設定」フォルダではなく、「アプリケーションサポートフォルダ」なる新しく作られたフォルダにはいることになった。

さて、SETI@homeの側もこの変化にどう対応しようか悩んだと思う。実はVer2.0が発表されてから2度変更があり、最終的にOS8では初期設定フォルダにおさめられていた"SETI@home Data"フォルダ、つまるところは解析しているデータが収められたフォルダはOS9で「アプリケーションサポートフォルダ」に移されたのである。私はこうした動きを「対岸の火事」のように眺めていた。どうせ私はOS9に移行する予定はないし、SETI@Supportでは手動でデータのある場所を指定するようにしているから、関係はない。

ところがその「対岸の火事」は今や自分の足の下で燃え始めたのである。GSISはSETI@homeのデータが初期設定フォルダにあることを前提として作られているのだ。従ってOS9にそのままでは対応していない。

確かにGSISのダウンロードページには

「OS9を使っている人はSETI@home Dataフォルダのエリアスを初期設定フォルダの中にいれてください」

とかいていたが、よくよく考えれば今やOS9を使っている人のほうが多いのではないだろうか。仮にこの「注意書き」に固執したところでこの方法で本当に動くかどうか私は検証することができないのである。世間様にツールを発表するのであれば、最低限検証くらいはちゃんとするべきではなかろうか。

 

私はもんもんと考えた末に思い切った。会社帰りにOS9を買うとPower Macにインストールしたのである。(メインマシンのPB2400はOS8のままだ)

 

さて、それと同時に「理論的には」OS9に対応できる方法はインプリメントしていた。(しかし例によってそれがOS9で動くことは確認できなかったのだが)さて、首尾はいかにと思って動かしてみると、やはりいくつか問題がある。それらをフィックスするとなんとか動いているようだ。これでこそ多少なりとも後ろ暗いところは減る(なくなるではない)というものだ。

さて、Apple Scriptがちゃんと動くようになったので、私は「では」とばかりにSETI@Supportを立ち上げようとした。アイコンをダブルクリックしてしばらくまつ。なんといってもJava Applicationは立ち上がりに時間がかかる。しかしその時間をじっとまっている辛抱は報われなかった。本来であれば見慣れたSETI@Supportの星図が表示されるはずである。しかし表示されたのは

「Java Applicationを起動できません。MRJがちゃんとインストールされなかった可能性があります」

というエラーメッセージだったのである。

 

私はまずしばし呆然とした。次に何度かダブルクリックを繰り返した。すると最初と多少変化が生じた。エラーメッセージが表示されるまでの時間が短くなったのである。まるで

「うるさい。できねえって言ってるだろ」

と言われているかのように。

それから私はあれこれとインストール、アンインストールを繰り返し悪戦苦闘を繰り広げた。しまいにはMRJを古いバージョンにしてみたり、とあれこれやったががんとしてSETI@Supportは立ち上がってくれないのである。ではこれはSETI@Support特有の問題かと思えば、MRJに付属してきたツールはすべて同じエラーメッセージを表示して黙り込んでしまう。これはいったいいかなることか。

さて、それまでの結果をみるとPowerMac7500+G3@466MHzはだいたい7時間半くらいで解析を終えてくれる。ということはこのまま走らせれば一日に3個強の解析ができるが、その結果は残らない、ということなのである。

 

私はPowerMac 7500上でデータロギングできないことを知って解析を止めた。そしてその時ある問いに自分なりの答えがでたことを知ったのである。

SISの話題が一段落したところで以下のような内容をメーリングリストに投稿した人がいた。

「はたして、S@Hは大成功なのでしょうか?

括弧表記に有るように流行しただけのような...

それもランキングゲームとして...」

それを見て私は自分がランキングであるとか他の人との解析数の差に全く興味をはらわなくなっていることに気がついた。このプロジェクトは各自が自由意志で参加するものだから、それぞれの理由で行えばよい。Jodie Foster への愛であろうが、ランキングゲームであろうが自由である。10人居れば10様の理由があろう。

私は興味深いデータを見つけたい、といつも思っている。そして。自分が解析した結果がどうであったのか。その中に面白いデータはあったのか。それを知りたいと思っている。だからこうしてデータをロギングしたり、表示したり、解析を便利にするツールを作っている。

従って結果が確認できなくなった時、解析を止めるのに躊躇は無かった。「SETI@homeはランキングゲームとして流行しただけ」と決めつけることが出来る人には私の行動は全く不可解だろう。私がデータのログをとれようがとれまいが解析数はカウントされ、ランキングに寄与するのだ。

 

さて、などと自分で自分の意図を知って感心している場合ではない。その後もあれやこれやとやってみたがとにかくがんとしてPowerMac 7500上ではJavaアプリケーションは動いてくれない。となればなんとか別の方法を考えなくてはならない。

さて、もんもんとしている私の脳裏に以前SETI@Supportに関してメールをもらい、「知らんぷり」していた内容がよみがえってきた。

「いつもSETI@Supportを立ち上げて居られない人のために、データのロギングだけをしてくれるもっと軽いツールができないでしょうか」

という問いかけである。それに対して私はそうしたツールの必要性は認めながらも

「SETI@Supportはクロスプラットフォーム製が売りである。しかし軽いツールとするとJavaで書くわけにはいかない。となるとそれぞれのプラットフォーム用に「軽いツール」を開発する必要がでてくる。これは面倒だ」

というわけで、その構想を「貴重なご意見ありがとうございました」と頭の隅に押し込めていたのである。

 

さて、時は流れて私はGSISなど作り出していた。そしてこの「貴重なご意見」はいつも頭のなかをちょろちょろ横切っていたのである。AppleScriptであれば、確かに軽いツールができそうではないか。そしてGSISではどちらにしてもSETI@homeのデータの有無などをチェックしているのだ。そして最近解析済みデータが900個に近づくにつれやたらとSETI@Supportの起動に時間がかかるようになってからはなおさらだ。

そして最後の一押しがこの「SETI@Supportは7500上で起動しない」である。私は自分が勝手にお蔵入りにしてきた構想に正面から向かい合わなくてはならないことに気がついた。GSISにデータロギング機能を追加しよう。この頑固に起動しないJavaとつきあっているよりはそちらのほうが見込みがありそうだ。

おう思い切ると私はあれこれやりはじめた。まずやったことは他の人が作ったApplescriptによるデータロギングツールをあけてみることである。GSISを作り始める時にもこのプログラムは参考にさせてもらったのだが、この数日に及ぶApplescriptとの格闘は決して無駄でなかったようだ。今やこのプログラムがもうちょっと良く理解できることがわかる。

 

そう思うとどの部分を使うことができて、どの部分を使うことができないかわかってくる。このデータロギング機能追加にはかなりの時間が必要だと思っていたが、データを読み出してきて追記するのは割と簡単にできそうだ。

この時電車は品川に着いた。PowerBook2400をたたんで会社にいかなければならない。そして後で解ったことだがこれは私にとって好運であった。

 

ここまではあまり何も考えずにとにかくファイルの中身を参照して、書き出すことばかり考えていた。しかしこの「データロギング」というのは結構面倒な処理で、SETI@Support開発の時から何度か完全に書き直し、かつ何度も私の血を凍らせるようなバグを出してしまった処理なのである。私は(幸いなことに)キーボードから離れ、視線を宙にさまよわせながらあれこれ構想を練った。

やっかいな理由はいくつかあるが、ログとして残すべきデータは二つのファイルにまたがって存在しており、かつ解析終了時にはそのうちの一つのファイルは消されてしまうことにも原因がある。周りからみてどのように見えたかわからないが(あるいは私は仕事の事について考えているように思った人もいたかもしれない)しばしの沈思黙考の末私はある結論に達した。

 

家に帰るとさっそくプログラミングである。とにかくこの機能がちゃんと動いてくれないことにはPowerMac7500は解析に使えないわけだ。私は自分の睡眠時間を何よりも大切にしているが、ごくまれにそれを多少けずってでも何かをしたいと思うことがある。そうは言っても削ったのはたかだか1時間だったかもしれない。しかしそれは私にとっては実に珍しいことだったのである。

何度かあれこれなおしたり、泡を食ったりする。確認の間が7時間以上空いてしまうのはいつものことながらまどろこっしい。しかし幸いにしてロギング機能は私が思ったより早く動くようになった。プログラムを参考にさせていただいた人に感謝感激である。思えばちょっとしたことであっても(いや、だからこそ)お手本があるのとないのとでは大違いである。

 

さて、しばらく動かしてみたが、(そして間違った二つのファイルの内容を記録してしまうのではないか、という恐怖感と戦いながら)なんとかログはうまくとれているようである。ログファイルのフォーマットはSETI@Supportとほとんど同等である。というかSETI@Supportでとったログデータを読みとるのが最初からの目標でもあったのだが。

ほほほほ、うまく動くわい、と一人悦に入りながらSETI@Supportを立ち上げた瞬間、私は今のままではこの構想はうまく動かないことを悟った。

細かくは書かないが、おこったことは概略こうである。今回の改良によってGSISはデータをログしていく機能を持った。ところがSETI@Supportのほうにもその機能はそなわっているのである。従ってGSISでログをとり、それをSETI@Supportで閲覧しようとすると、勤勉なSETI@Supportは

「おっとデータが変わってる。ログをとらなくちゃ」

とがんばってログをとってしまう。しかしこれではログの2重取りになってしまうのだ。

 

これを解決するためにいかなる方法があるだろうか。。あれこれ考えたが、SETI@Supportのログ取り機能をあまりいじるのは気が進まない。過去にうかつにこの部分をさわってへそを噛むような思いをしたことか。もんもんとしばらく悩んだ末に一つの結論にたっした。一番簡単でエレガントでない方法、つまりSETI@Supportのほうに手動でロギング機能をOffする機能をつけくわけたのである。

 それとともにいくつかのばしのばしになっていた機能を付け加えよう、としたところでやっかいな問題に遭遇した。あまりにやっかいすぎて何が起こっているのか正確にはわかっていないような問題だ。ここで腰をすえてじっくりとその問題に取り組む、という選択肢もあっただろう。しかしこのSETI@Supportの新機能(Ver0.74になるのだが)をリリースしないかぎり、GSIS Ver0.2(ロギング機能つきのものをそう呼ぶ予定だった)もリリースできない。

「ログをとれます。見方は自分で考えてください」

ではあまりに情けない。

結局当初の予定通り、SETI@Supprt Ver0.74は最小限の機能追加でリリースすることにした。ところが今度はMacintosh用のビルドの作り方をすっかり忘れてしまっている、ときている。そういえば0.732をリリースしてからもう一月にもなるのか。。以前

「Macintosh用が立ち上がりません」

とたくさんメールをもらったとき、Macintoshバージョンのビルドの方法は複雑怪奇なものとしている。なんとか記憶をたどってその方法を思い出すとリリースの準備だ。

 

こうしてGSIS Ver0.2とSETI@Support Ver0.74は世の中にでることとなった。GSISの英語ダウンロードページも作ろうと思っているがそれはまだだ。経験からして英語で送られてくるメールのほうがはるかにバラエティに富んでさまざまであることを知っているからだ。日本語でやりとりが出来る間になんとか完成度をあげて、英語版の公開にそなえたいものだが。

次の章 


注釈