題名:Java Diary-20章

五郎の入り口に戻る

日付:2000/1/3

目次に戻る


SETI@Support-part13(Ver0.6-0.63)

さて、私がSETI@Supportの機能追加よりも、別のプログラムなどにめらめらと執念を燃やしている間に、SETI@homeプロジェクトのほうではちょっとした動きがあった。

参加している人にぱらぱらとNews Letterが送られてきたのである。今や参加者は100万人を越えているから、一度に配布するわけにはいかないようだ。先に届いた人からの話によると、どうやらSETI@home client Ver2.0がリリースされるらしい。

なるほど。もう最初のバージョンがリリースされてからだいぶ日が経っているからそろそろバージョンアップがあるのはありがたいことだ。ほどなくして某Internetのサイトにこの新しいクライアントに関する情報が掲載された。それを読んだ私はちょっと

「ぎょっ」

とした。

その記事の中には「今までデータファイルはただのテキストファイルだったので結果の改竄が可能だった。しかし新しいクライアントソフトは、データやプログラムの改竄を発見できるようにする機能が含まれる。」

とかなんとかかかれていたからである。

世の中にあまた出回っているSETI@homeの支援ソフトはすべからくこの「データファイルがただのテキスト」であり、簡単に読み出せることによって成り立っているのだ。ところが「今まではただのテキストファイルだった」と書いてある、ということは、「これからはただのテキストファイルではなくなる」と示唆しているようにもとれる。

もし改竄を防ぐためにファイルをすべて暗号化されなどしたらこちらはなんとも手が出せなくなる、、などと私はしばらくもんもんと考えていた。しかしな。。もしそんなことをしたら、SETI@homeプロジェクトが最近リリースした星図のなかにデータの位置を表示する"Distant Sun"なるプログラムのSETI@home用スペシャルバージョンも使えなくなるではないか。そんなDrasticな変更はするまい、、とかなんとか。

そのうちだんだんとVer2クライアントに関する情報が流れてきた。本家のサイトにまだクライアントがアップされないうちから、「Ver2クライアントの使用方法」などは掲載されていたのである。

そうした情報を、またMLでは上手にまとめてポストしてくれる人がいるのはありがたい限りだ。さて、それらを眺めてみると、どうやらファイル名の拡張子が.txtから.sahに変更されているが、構成そのものに大きな変化はないようである。私は少しほっとした。

そのうち本家のサイトではなく、ftpサイトのほうにVer2クライアントがアップされたという情報が流れた。そしてこれまたありがたいことにまだUNIX版しかリリースされていなかったそのクライアントをテストしてくれた人がいたのである。その人のポストによると

「result_header も state user-infoも人間が読めます(^^)。項目が増えているけど、これまでの枠組と変わっていません。」

とのことである。

さて、この時点で私が試験できるMacintosh版やWindows版のクライアントがいつリリースされるか見当もつかなかったが、とにかく今ある情報だけで対応版をだしてみよう、という気になった。早めにだしておけば、仮に新しいクライアントに乗り換えた人がいてもそのデータのログを失わずに済むではないか。

さて、プログラムをしょこしょこいじっている間にもう一つの支援プログラムI4WUのVer2対応(かもしれない)バージョンがリリースされた。私が0.6 Alphaと称したVer2クライアント対応版はその翌日のリリースとなった。なんといっても試験もしていなければ、相手がどのように変更されたかもわからないでやっているのだから、本当はPre-Alphaとしたかったところだ。

さて、結果やいかに、と思っていると翌日には「UNIX上でSETI@Support Ver0.6 Alphaは動いています」とMLにポストがあった。私としてはほっと一息である。公開してから半年まありでこのプログラムもお蔵入りになるかと思っていたがまだちょっとの間はその命脈を保ちそうだ。

それから数日後Macintosh版のクライアントリリースとともに、自分でもその試験ができるようになったのである。試してみると結構ご機嫌に動く。それとともに噂では聞いていたが、Ver2で改良されたグラフィックスにもようやくお目にかかることが出来た。

MLでは「摩天楼」と称されるそのグラフは、結構愉快だ。時々あれこれの摩天楼とカーブが表示される。今まで"Doing Curv-fitting"と称されていた作業がこれなのだろう。そして画面表示からPeak Powerが消え、Gaussianだけの表示になっているのにも気がついた。これまでに何度もSETI@homeのサイトでは

「我々が捜しているのはGaussianであり、Peakではない」

と言っていたが、それがより鮮明になった感じである。

さて、解析の進行とともにあれこれ試験をすることができた。するとどうやらちゃんと動いている感じである。私としてはこれまた一安心。さて、いきなり0.6 Alphaからただの0.6に昇格させてみようか、、と思っているときに妙な考えにとりつかれた。

解析結果というのはstate.sah(Ver1.xではstate.txtだったが)に書き込まれている。中身をみると、Ver2からはいくつか項目が追加されているようだ。例によってSETI@home側からは何も発表がないので、推測するしかないのだが、0から63まで番号がついたデータがある。ひょっとするとこれはあの摩天楼を表しているのではないか?

そう思った私はまずそのデータを表計算ソフトにうつして、階段グラフをかかせる、ということを試みた。面倒だから64個のデータ全部などは入力できない。さて、4−5個データを入力して書かせてみると、どうも摩天楼とあっているようであり、あってないようであり、結局のところはよくわからない。こういうファイルから64個数値を抜き出して、グラフに書くなんてのは基本的には人間がやるべき作業ではなく、コンピュータの仕事だ。そう思うと私はしょこしょことプログラムをいじり始めた。

最初は「摩天楼グラフを書かせるにしてもどこに表示したものやら」とかあれこれ考えていた。しかしまあ「とりあえず書かせてみないと」と思いSkymap中に適当に表示することとした。さて、プログラムができあがり書かせてみると予想は大当たりである。確かにこれは摩天楼のデータなのだ。そう解るとちょっと元気になりもうちょっとまともな表示位置がないか、と思ってみる。しかしどうやらここらへんに表示しておくのが一番便利そうだ、と思い結局最初のおもいつきのままにしてある。

それとともに細かいところを治した。User Infoの中に"Total CPU Time"という項目がある。これは最初それこそ10時間とかから始まるのだが、解析の進行とともにどんどん値が大きくなっていく。そしてたとえば240時間ともなれば「ああ。まる10日分も解析についやしているのだな」と思うが1000時間を超えると実感がなくなり、次の目標は「年」になる。

実際SETI@homeのページの方ではYear単位で表示もされている。しかし私は手をぬいてずっとHour表示までしかつけていなかったのである。細かいことだが気になっていたからこの際に機能を追加してしまおう。

しょこしょこっとその機能を追加した私はVer0.61をリリースした。そしてご機嫌になったのだが、事態は(例によって例のごとく)そう簡単には進まなかった。

これを書いている時点ではすでにどれが一番最初に起こったのか思い出すことができない。しかし時を前後して私はいくつかの」メール、それにSETI@Supportについて書いているWeb Site、掲示板から共通してメッセージをうけとることになった。

まずメールで「解凍がうまくいっていないようです。それでも一応SETISupport.runはできているようなので、ダブルクリックするとエラーメッセージがでて立ち上がりません」というものだ。

本当のことをいえば、こうしたメールは以前に2度ほどうけとったことがあったのだ。そしてその度に私は「それはきっとSETISupport.runを再度解凍しようとしているからだと思います。それは不要です」と(今から考えれば)木で鼻をくくったような返答を返していたのである。

SETISuppoort.runというのはmacintosh上のアプリケーションのような顔をしているが、その実態はJavaのjarとよばれる圧縮ファイルにちょっとたちあげようのコードを付加したものであり、さらにはJavaのjarとはWindowsの世界で普及している圧縮ファイル形式のZIPである。したがって無理やり解凍しようと思えばできてしまうところに味噌がある。

よのなかたいていのファイルは圧縮された形でサーバー上においてある。通信料金をセーブするためには当然のことだ。ところが私が作っているファイルは既に圧縮された形式でから、もう一度圧縮をかけたところで何も起こらない。それどころか場合によってはかえってファイルが大きくなってしまう。したがって(ことさらな)圧縮なしでおいているのだが、世の中には律義にそれらを解凍する「人」もいるのかな、、などと考えていたのである。

 

英文でもらった一通にはそうした返答をした。次に日本語でもらった同様のないように同じ答えを書いた後、私はSETI@SupportのダウンロードページがいくつかのWebSiteから参照されていることに気がついた。

 

こうした新しいページから参照されている、というのは結構どきどきする経験である。この先に書いてあるのは賞賛か罵倒か。そう思ってページを開いてみる。

すると書いてあることは、メールでもらったトラブルと同じような症状だ。いわく解凍途中でエラーが出てとまり、かつ無理矢理たちあげようとするとこれまたエラーがでて立ち上がらない。私はとてもいやな気分に教われはじめた。

 

幸い先ほど書きかけた「解凍のしすぎじゃないでしょうか」メールはまだ送信していない。私は自分の環境でダウンロード+実行を試みた。問題なく実行される。これはGood News, Bad Newsというやつだ。Good newsは「間違ったファイルをアップロードしてしまった」という一番単純な(しかしよく起こる)ミスではない、ということだ。Bad newsは問題が私の環境で再現しない、ということである。再現する問題であれば、追求も可能だし、対策をうって結果がうまくいったかどうかの確認も可能だ。ところが再現してくれないことにはそれらはとても難しくなってしまう。

さて、私はちょっと複雑な気持とともに、先ほどのメールを「少々お待ちください」と書き直して送信した。それからあれやこれやと妙なことをやりはじめたのである。

まずアップロードしてあるのと同じSETISupport.runを自分で無理矢理解凍してみる。すると確かにいわれたような症状が起こることが確認できた。解凍は途中でとまり、SETISupport.runはできているが、それをクリックしても立ち上がらない。なるほど。しかしこうした「無理矢理解凍」でないことだけはわかっている。

次に今使っているCod Warrierではなく、以前つかっていたVisual Cafeを再度ひっぱりだし、できたアプリケーションを無理矢理解凍してみた。すると解凍自体はうまく終了してしまう。おまけにその結果できたSETISupport.runをダブルクリックするとちゃんとアプリケーションは立ち上がるのだ。しかし実際に実行されているのはまとまった一つのファイルではなくて、それが分解された多数のファイルの集まりだが。

次にやったことは、自分が実際にサーバーにアップロードしているファイル、つまりbin-hex形式とMac BinaryでデコードされたファイルをStuff-it expanderというプログラムをつかって解凍してみることだった。最初にサーバーにプログラムを置くときに気がついたことだが、mac用のファイルをそのままサーバーにおいてもちゃんと動作はしてくれない。かならずbin-hex形式とかMac Binaryとかいう形式に変換する必要がある。このサーバーにおかれた変換後のファイルをダウンロードするさいには、ありがたいことにInternet Explorerは自分でもとのファイル形式に逆変換を行なってくれるのである。

さて、この問題につきあたるまで私は「ああ。なんだかわからないけどInternetExplorerがうまくやってくれているわけね」くらいにしか思っていなかった。そしてなんとなくStuff-it expanderがそれをやってくれているのであれば、ちょっと試験してみるべえかと思ったのである。

さて結果は興味深かった。まず進捗を示すバーが表示され、Stuff-it expandreがbin-hexをデコードしていることが見て取れた。ところが解凍はそこで終わらず、また新たに進捗を示すバーが表示され、解凍が始まったのである(もちろん自動でだ)そして起こったことは解凍が途中でとまり、できたファイルをクリックしても。。(以下同文)という事態であったのだ。つまり勤勉なStuff-it expanderは拡張子(ファイル名の.sitとかいう文字だが)だけをみて解凍を行なっているのではないらしい。とにかく彼(または彼女)にとって解凍ができそうなものは、最後まで解凍しないと気が済まないようなのである。

私は一瞬「ほう」と思った。つまりダウンロード時の解凍をStuff-it expanderで行なっていれば必ず問題がおこるのだ。となればなぜいままでこのことに気がつかなかった?と思いあれこれひっくりかえして判明したことは以下の通りである。

つまりInternet ExplorerではどうやらMac-Binary,およびBin-hexのデコードはStuff itを呼び出してはいないらしい、ということである。さて、ブラウザの一方の雄(最近だいぶ斜陽だが)のNetscapeを見てみるとこちらはStuff it expanderを呼び出しているようだ。ということは。。。

と思い今度はNetscapeを使ってダウンロードを試みた。結果はどんぴしゃりである。まさしく今迄何度かメールでもらった症状が発生しているではないか。「解凍のしすぎではないですか?」などという妙な回答がまとはずれであったことは明白だ。

その後数秒間私は(例によって)鬱状態に陥った。何をいっているんだおれは、というところである。しかし最近だいぶこうした鬱にも耐性ができてきた。落ち込んでいる暇があれば対策を考えなくてはならない。再現さえできれば、、、とは過去数時間私が何度も考えたことだ。さて再現はできたぞ。

ところがそこからしばらく頭をひねったのだが対策は簡単には思い浮かばなかった。あれこれ設定をいじってみたが、勤勉にして親愛なるStuff-it expanderは「あくなき解凍」を止めようとしない。これはどうしたものであろうか。

あれやこれやとやったあげくに、私は大変妙な解決策を思い付いた。

ようするに彼は一旦解凍した結果が、また圧縮ファイル(jar=ZIPファイル)に見えるから、解凍を続けようとするわけだ。となれば、一旦解凍した先に、余分なものをつけてやったらどうであろう。

そう思うとさっそく実験だ。適当な空のテキストファイルをSETISupport.runと一緒に圧縮して、Mac Binary化、そして圧縮をかける。これを逆に解凍すると。。。

まずMac Binaryからふつうの圧縮ファイルになる。そしてその圧縮ファイルは解凍されるが、そこで処理はとまる。SETISupport.runを分解するなどということはおこらない。あまり洗練された方法とは言えないが、私は解決策が見つかったことにとてもうれしくなった。

さて、原因がわかった時点で、何人かの人に「こうした原因らしいです」というメールをおくっていた。するとのそのうちの一人から

「ブラウザをNetscapeからiCabにかえたらうまく動きました」

というメールが届いた。なるほど。これで問題は解決だ。やはり問題はブラウザにあったのだ。

私はご機嫌になると、新しくつくったファイルをアップロードし、それまで「立ち上がりません」と言ってきた人たちに「お騒がせしました。新しいファイルをおためしください」とメールをうった。さらにはMLにも「今まで何かとご迷惑をおかけしましたが。。」というわびの言葉とともに投稿をした。これでバグも収束し、私はSETI@home Client Ver2から追加されたデータ項目の表示などに頭を回せるはずだった。

 

そうした私の甘い予想は3通のメールによってうち砕かれた。問題をレポートしてくれた人のうち、問題が解決したのは一人だけであり、後の3人は

「症状が今までとかわりません」

と教えてくれたのである。つまり確かに一つの問題が存在し、それを私がフィックスしたことは確かなのだが、問題はまだ別にも存在していたのだ。一難さってまた一難。まるで下手な映画の筋書きのようだ。

 

私は自分の軽率さを呪いながら、MLに再度「訂正」の投稿をした。考えてみれば、他の3人から「なおりました」というメールをうけとってからMLに投稿すべきではなかったか。しかし覆水盆にかえらず、出してしまった投稿はもとにはもどらない。そして私はしばらくうめいた後にまたあれこれの解決方法を考え出した。

しかしながら今度はそう簡単には進まなかった。何故かといえばどうやっても自分の環境で再現しないからだ。伝えられた症状からさっするにMacintoshユーザーが伝統的に軽視する

「Classpath」

というものの設定がうまくいっていないようだ。私はこのClass Pathなる言葉をきくたびにいつも虫ずが走る。Macintoshを使っている限り滅多にこの言葉を意識することはないのだが、Javaとなるとそうはいかない。しかし具体的にどこがおかしいのかわからない。

問題はおそらく最終的にアプリケーションをつくりあげるところにあるのではなかろうか、と思い出した。少なくともWindowsバージョンは動いている、ということはコーディングのミスである可能性は少なそうだ(ない、と思うと痛い目にあうのがこの世の常だが)

それから私がとった行動はこれまた場当たり的なものであった。今使っているCode Warrier以外のアプリケーション作成環境、すなわち古き懐かしきVisual Cafeと、今度は最新鋭すぎて新しいMRJを使わないと立ち上げることができないApplication Builderとかいうツールをつくってアプリケーションを作成したのである。

不思議なことにこの二つのツールをつかって作ったアプリケーションの大きさは2倍近く違うのだが、圧縮をかけると全く同じ大きさになる。私はとりあえずできたデータをアップロードすると、問題をレポートしてくれた人たちに

「すいませんが、試していただけませんでしょうか?」

とメールをうった。MLに投稿するのはこの後にしよう、とそれくらいの知恵はついてきたのである。

さて、最初の人からは「両方とも立ち上がりました」とうれしい知らせがとどいた。なるほど。これはいけるか、と思ったが、今度は別の人から「MRJ2.2が必要だ、と言われました。」と知らせが届いた。なるほどあの最新鋭ツールはそこまで要求するのか。

結局一番確実なVisual Cafeに戻ることになった。再度(これで何度目だろう)アプリケーションをアップするとMLに「大変お騒がせいたしました」というお知らせを投稿する。これでなんとか静まってくれないかと祈りながら。

 

時を前後して最初に問題をしらせてくれた人全員から「ちゃんと動作するようになりました」と知らせが届いた。私は今度こそ「ああ。これで一安心」と息をつけるはずだった。

 

ところがまたしてもその甘い夢はうち砕かれたのである。MLに「動きません」と投稿してくれた人がいた。私が「対策をした」と思いこんでいた、そのバージョンでだ。

 

問題は依然として私の環境では再現しない。しかし厳然と存在はしている。私はひらきなおって、考え得るすべての方法で作ったアプリケーションをアップし「問題がある人は、このページの3種類のアプリケーションをトライしてみてください」と投稿した。

数日後「全部動きました」というありがたいメールが一通だけ届いた。その人が教えてくれた環境を観ると、私とは全部異なっている。ということは、それらの環境(たとえばOSのバージョン)が異なるために私のところで再現しない、ということではなさそうだ。その後「うごかねえぞ」というメールはこなかったから、私はとりあえず「これで問題は(なんとなく)解決したことにしよう」と心に決めたのである。

 

さて、勝手に一息つくと今度は細かい改良点が目に付きだした。あまり日をおかずに0.62,0.63をリリースすることになる。修正点はほんのわずかだが、少しでもまともなものを使ってもらいたいものだ。それとともに私は次のMajor Version Up, 0.65 and 0.7に関してあれこれ考え始めたのである。やりたいことはほぼ明確になっているのだが、それを実現する方法は今ひとつわからない。しかし

「これはできないことなんだ」

と開き直ることも出来ない状況にあった。世の中にはそれを実現している人(ツール)がもう存在していたのである。

 次の章


注釈