題名:Java Diary-7章

五郎の入り口に戻る

日付:1998/7/2

目次に戻る


SETI@Support

5月の末のある日、わたしはあちこちのWebページをのぞいていた。

毎朝の巡回ルートというのはだいたい決まってくる。Macintosh系の情報サイトを2つ三つ。それが終わると朝日新聞のチェック、それにいつも回っている掲示板である。情報系のサイトは「ふーん」と思ってちらちらとみるだけなのだが、この日はちょっとちがっていた。

 

Macintoshだけに関係する話題ではないのだが、U.C.Berkeleyで実施している宇宙からの人工的な電波の探索-つまり地球外の知的生命体の探索-、SETI@Homeというプロジェクトの内容が紹介されていたのである。その記事によると、宇宙からの電波の解析には膨大な量の計算が必要となる。それをたとえば超高速のスーパーコンピュータを使っておこなおうというのではなく、クライアントソフトを配付することにより、インターネットに接続可能な世界中のコンピュータ(パソコンもあれば、かなり大型のマシンもありだ)でおこなおう、というものらしい。クライアントソフトも結構工夫がしてあって、早い話一旦ダウンロードして最初の情報(名前だのメールアドレスだのだ)を設定したあとは、ほとんど手間いらずのようだ。受け取ったデータの解析が終われば勝手に結果を送信し、次のデータを受け取る。

この記事を何度も読み返した私は考えた。第一に宇宙からの電波を解析し、地球外知的生命体の探索というのはまあ異常に成功率は低いだろがちょっと夢の有る話だ。そして私が愛するJodie Foster主演の"Contact"に感動した身としては、この話題に無関心ではいられない。

第2に以前から「オフィスのコンピュータは朝から晩まで電源がはいっているが、実際にCPUを使っている時間というのはたいしてないじゃないか」と思っていたのである。おまけに私が個人で使っているPowerBook2400はせっかくG3化したにもかかわらずその力をちゃんと使っているとは言い難い。こうした純粋な計算であればその威力を発揮できまた空いている計算時間も有効に使え、おまけにひょっとしたらおもしろい信号をキャッチできるかもしれないではないか。

 

しかしながら私の心にはちょっとひっかかるものがあった。このプロジェクト自体は本当に信用できるのだろうか、ということではない。実際これを疑いだしたらきりがない。得体の知れないクライアントソフトをダウンロードして自分のコンピュータで実行する、というのは常に危険と隣り合わせだ。相手は明白なダメージを与える攻撃的なプログラムかもしれないし、あるいはだいたいの場合まじめに動いているような気がするが実は個人情報をどっかの名もしれないサーバーに送り届ける役目をもっているかもしれないのである。

しかし、そんなことをいったらネット上に存在しているフリーウェアやシェアウエアなど怖くて使えない、ということではないか。日頃「おお。これはおもしろそうだ」と思ったものをダウンロードしてあれやこれやと使っている私が、このプログラムだけを特に疑う理由があるだろうか?いやない。

私の心にひっかかったのはそのことではない。この研究を実施している大学そのものにあった。このURLはBerkeleyとなっているが、かの地の近くに行くと、看板にはU.C.Bと書いてある。私が知っている限りこの大学の正式名称はUniversity of California at Berkeleyであるが、Footballの世界ではCalifornia,略称C○Lと呼ばれている。(真ん中の文字"A"は伏せ字)そしてこのC○LこそはStanfordの不倶戴天の敵なのだ。天に二つの太陽なく、両雄は並び立たず、そして常に天にあるべきはStanfordであり、C○Lではない。かくのごとき理(ことわり)を有するこの世の中において、私がBerkeleyの研究プロジェクトに協力する(というのもちょっとおこがましい気がするが)などということが果たして正しいことであろうか?

しかしここで研究を行っている大学にこだわってはいられない。私は長年にわたるC○Lとの葛藤を乗り越え「C○Lを憎んで、ファンを憎まず」という悟りを得たのだ。そう。「C○Lを憎んで、研究を憎まず」ここは一発広い心で私も参加してみようではないか。アクセスのたびに表示される"berkeley.edu"というドメイン名はまあ気にしないことにしよう。

さて、割り切りをした私はさっそくSETI@homeのHPにアクセスして、クライアントソフトをダウンロードした。ろくに説明もよまず(元々あった紹介文書に結構立ち上げ方が細かく書いてあったから、それに従っただけなのだが)適当に立ち上げると、さっそくBerkeleyに接続に行く。そしてやれニックネームを入れろだの、電子メールのアドレスを入れろだの言ってくるので「はいはい。」と入力していると、そのうち

"receiving data.."といってなにやら数字が表示されはじめた。

その数字が340だか350を超えたところでデータのダウンロードは終わったらしい。なにやら画面に3次元のグラフのようなものが表示されはじめた。なるほどこれで解析が実行されているわけだ。

さて、前述の記事には「iMacで画面の表示ありで約22時間ほどで解析が終了する」と書いてあった。ただしこの22時間というのはCPU Timeのことである。平たく言えば、コンピュータに電源が入っている時間ではなくて、コンピュータに電源が入っている時間のうち、SETI@Homeの解析にCPUが使用された時間である。

そう思って解析の進み方を見ていると、どう見てものろい。確かにCPU Timeは増えていくのだが、感じとしては実時間が10秒進む間にCPU Timeが1秒進むような感じだ。こんなものかと思ってしばらくほおっておいたが、そのうち「何か妙なプログラムがバックグラウンドで走っているのではないか」とか「機能拡張と衝突を起こしているのではないか」とか疑心暗鬼に陥ってあれこれやりはじめた。ところが必要最低限の機能拡張だけにしようが、他のアプリケーションをすべて終了してSETI@Homeだけにしようが、CPU Timeの進み方は依然としてカタツムリであるとか牛であるととか亀であるとかとにかくそいういうたぐいの動物を持ってたとえたくなるほどのスピードなのである。解析が0.2%ほど進んだところで終了予定時間を計算したが、どう考えても2週間くらいはかかりそうだ。これはいかなることか。

記事には「画面をブランクにする表示にすると早くなる」と書いてあった。そのせいかもしれない、と思ってブランクにしてはみた。画面は確かに真っ黒になり、そして当然の事ながら進み具合も見られなくなる。しばらーく待ってみてから画面を復活させてみたが、別に劇的に進んでもいないようだ。とはいっても動かす時間が短いせいかもしれない、ということでその日は布団をかぶって寝てしまった。静かな部屋にハードディスクの音はやけに響くな、、と思っている間に私は安らかな眠りについた。

翌朝半分目覚めてみれば、ハードディスクの作動音だけが響いている。本来目覚めるべき時間はまだ1時間ばかり彼方だが、プログラムがどれだけ進んだかが気になる。わくわくしながら画面を見れば、まだ進んだ量は2%くらいだ。これでは解析終了までに何百時間も必要となってしまうではないか。

それから数日の間はこの「解析が進まない」というフラストレーションとともに過ごした。そのうち加入したばかりのSETI@homeのメーリングリストで質問をしてみようか、という考えが芽生えた。ひょっとしたら同じ悩みを抱えている人がいるかもしれないではないか。

と考えてひょろひょろと書いてポストしてみた。その後に猛烈な不安に襲われた。メーリングリストに質問をポストするときは、その前にFAQをチェックするというのは鉄則である。一応ちらちらと見たのだが、最新のやつを丹念に読んだわけではないのだ。もし

"Read the f○cking FAQ"

などという返事が返ってきたら、小心者の私はその瞬間に恥じ入ってメーリングリストから逃げ出してしまうかもしれない。

 

さてそんな私の不安をよそに、どうもこの問題は既存のFAQには載っていなかったようだし、私だけの事象でもなかったようだ。PB2400にG3 Upgradeカードを載せていると同じ問題が発生するようである。最初はドライバーを最新にしたり、OSを8.6にアップグレードしたり、やってみたが結局解決策は

「解析がとまったように見えたら、マウスを動かしたり、クリックしたりしてたたき起こす」ということであった。確かにこれをやると前よりは解析は進む。しかし異常に面倒だ。まるでなんのために解析をやっているのかわからないような状況である。

さてそんなこんなで最初の1ユニットを終えるのにほぼ10日かかった。CPU時間は約70時間である。HPの統計値などみていると、Macintoshはだいたい23時間で1ユニット終えているのにこれはいかなることか。。。などと先に暗い物を感じていたときに、例のメーリングリストでこの問題の解決策がポストされた。なんと全く関係ないように思えるIomega Driverとかいう機能拡張を「入れる」とスムーズに解析が進むというのである。これは盲点だった。とにかく余計な物をはずす、というのがそれまでの常識だったのであるが。やはりこうしたメーリングリストの力、というのは偉大な物がある。

さて、この解決策によって、私の解析は順調に進むようになった。調子にのってずいずいと解析を進めながら、例のメーリングリストを読んでいると、あれやこれやのサポートツールを発表している人がいることに気がついた。ある人はJavaのAppletで、見ている方角のデータを入力するとその位置を地図上に表示してくれるものを発表していた。これはすごい、と思ってやってみたが、そのうち解析プログラムの画面上に表示されているデータを読みとって、さらにAppletに入力する、というのは結構面倒な作業であることに気がついた。とはいってもAppletはローカルのディスクにはアクセスできないからしょうがないのだが。

また別の人がApple Scriptを使って解析中のデータを読みとって表示し、さらにその内容をクリップボードにコピーしてくれるものを発表していた。これも実際に使ってみると結構おもしろい。確かにちゃんと解析プログラムの画面に表示されている物と同じデータが表示される。しかし結局クリップボードにコピーされたデータは自分で集計する必要がある。面倒がり屋の私にはとてもこれはできそうにない相談だ。

さらに別の人がWindows Versionで解析結果をテキストだけで表示してくれるプログラムを発表していた。聞くところによると解析プログラムのメイン画面を開いておくと、動作が極端に遅くなると言う。Windowsの場合、アプリケーションを最小化してタスクバーのなかに入れておくことができる。従ってこのプログラムはメイン画面をひらかずに、解析状況を表示することを目的としていた。これまたなかなか面白いと思ったのだが、いかんせん私が使っているメインのコンピュータはMacintoshであり利用するわけにはいかないのである。

さてこうしたいくつかのサポートツールを眺めているうちに私は妙な考え方にとりつかれた。これらのツールの機能を一つにごちゃっとまとめたら結構使える物ができるのではないか?おまけに私が作るとすればそれはJavaで書くことになるが、うまくいけばJavaが動作する環境でわけへだてなく作動してくれるかもしれないではないか。

 

さてそう考えると止まらない。私は日長どんなプログラムを作った物やら、という考えにとりつかれていた。天空の星座を描いた地図のデータを手に入れのが難しいかと思ったが、これは本家本元のサイトにあることがわかった。まあ目的が目的だけに借用しても訴えられることはあるまい。となればあとは解析データを読み込んで、ごりごり表示するだけのことである。

こうした考えにとりつかれるとともに、当時の私には妙に時間も存在していた。7月1日から部署をかわることになっており、もともと仕事が無くて毎日本ばかり読んでいたのがさらに暇になってきたのである。しかしながらお客様の元で派遣で働いている身分としては何かしているようなフリをしなければならない。こういう状況ではコンピュータというのは誠に便利な道具である。それがなんであろうととりあえず画面に向かってキーをたたいていれば何かをしているようには見えるのである。そのころ私がメインにやっていたことは「ネットワークについて」というネットワーク技術の基礎に関する解説文書の執筆であったが、そこにJavaによるプログラム開発を追加したところで誰が気づくわけでもあるまい。

個人的にはMacintoshを使っている私だが、会社では必要に迫られてWindows-NTを使っている。そしてこのマシンにはJava2もインストールしてあった。ある日あまりに暇だった私はちょっくらJava2の勉強でもするべえと思って大変な苦労の末にSunのサイトからダウンロードしたのである。

さてこれでちょっくらつくってみんべ。。と思ってプログラムを書こうとしたが、まず最初の一歩で躓いた。私は今までにもあれやこれやのプログラミング言語を学んだが、悪いことにしばらく使わないと何もかも忘れてしまうのである。となるといきおいサンプルプログラムにたよろうとするのだが、付属しているサンプルはAppletか(今回私が作りたいと思っているのはアプリケーションだ)アプリケーションであってもとても立派なもので、解読に結構苦労しそうなものばかりだったのである。おまけに今までJavaであれやこれやとプログラムを作ってきて、自分の作ったそれらのプログラムを参考にしよう、と思ったところでそれらのMacintoshの上にしか存在していない。

うーむ。これは困った、ととりあえずその週はプログラム開発は忘れることにした。週末時間ができるとさっそくMacintoshに向かう。Visula Cafeを使うと一応自動的に最初の入り口まではプログラムを作ってくれる。この機能にまたまたたよるとしよう。作成されるプログラムはまああまり読みやすいとは言えないが、今の私にとってはとりあえず「何もしない画面を一つつくるプログラム」がほしいところなのである。そしてVisual Cafeはその目的はちゃんと達成してくれるのだ。

 

さてさて、と思ってしょこしょこと部品を配置していく。すると(あたりまえなのだが)なんだかコードができあがった。読んでいくとほぼ一年前に勉強した記憶がよみがえってくる。おお。そういえばBroderLayoutなんてものがあったなあ、、などと考えながらしょこしょこプログラムをいじってみる。この週は金曜日休暇をとった。せっかくの平日の休みだからなにか有意義に使えばいいと思うのだが、まあこうした個人の趣味プログラムを作るのも日曜大工の派生型のようなもので、時間の使い方としてそう無意味でもあるまい。

さて、いくつかの関門があると思っていたのだが、とりあえず動作するプログラムは結構順調にできあがった。画面上には天空の地図がかかれていてその上でデータを示す位置に点滅するシンボルが表示される。画面の左下にある一覧リストからデータを選択すると、そのデータが指し示している範囲が枠で表示される。おお。結構使えるではないか。しかし例によって例のごとく「何とか動く」から「そこそこ使える」までの道のりは遠かった。

 

困難は大きくわけて3つあった。一つは避けようと思えば避けられたものだ。解析が終わったデータと解析中のデータでは天空地図に表示するシンボルを分けてあった。そして解析中のデータはその存在をちゃんと示すがごとく大きくなってはしぼむ同心円で表示していたのだが、これに対して

「色合いを外に行くほど暗くなるようにしよう」

とか

「解析が進むに従って表示の色を変えよう。」

とか

「解析の終了が近づいたら、粒子が飛び出るようにしよう」

とか妙に凝ることを考え出してしまったのだ。実はこのアニメーションにあまり凝る、というのは賢明なことではない。本来であれば、解析プログラムに全CPUパワーを使ってもらいたいところだ。ところがあまり複雑怪奇なアニメーションを表示するとそちらにCPUパワーをとられてしまうではないか。

などと頭でわかっているのだが、どうにもこり出すと「もういいや」と思うまでは止まらないのである。色調を設定するために複雑怪奇な式を編み出し、それがあまりにもわけがわからくなって、結局単純にテーブルから値をひっぱってくるだけにしたらうまく動いたり、、アニメーションも2種類から選択できるようにしよう、などと考え出したり。最近ようやくあまりアニメーションにこってもしょうがない、とは思うようになったが未だにこの理不尽な願望との戦いは続いている。

2つめは機能肥大化との戦いである。前述したとおり私が作ろうとしているのは、すでに発表されたプログラム3っつを足してかつ5で割ったようなプログラムだ。自分で独創的に考えた部分があるわけでもない。従ってまず「そのうち誰かが全く同じ機能をもち、もっとまともなプログラムを作り上げるのではないか」という脅迫観念に襲われることになった。

さてその私の脅迫観念をさらに刺激するように、最初にあげたJavaのAppletをのぞいては結構頻繁にアップデートがなされていたのである。メーリングリストに「改良しました」とかいう題名のポストがあるたびにこちらは「げげげ。すでに作られてしまったかぁ」と思う。内容を読んでみるとみなさんちゃんと基本線をはずさずに、つまり解析の足を引っ張るようなアニメーション表示などせずに機能を強化されているようだ。

「私のプログラムはグラフィックス表示機能がうりだもんね」と開き直れればいいのだが、それほどすばらしいグラフィックスができているわけでもないし、だいたいグラフィックスを表示すると動作が遅くなる、という理由で別のプログラムを開発しようとしているのに、それにグラフィックスをつけるのはいかがなものか、、などと考えるとそう割り切ることもできない。

となると妙な不安に襲われて「一応ちゃんと使えるだけの機能をつけなくちゃ」と考え出すのである。しかしながら機能を付ければつけるほど完成は遠のいていく。そしてその間に他の人はさらに機能アップを達成する、すると、、という具合にこの連鎖がいつ終わるのか見当がつかなくなってしまう。

そのうち面倒になってきたのもあって、だんだんと機能は収束に向かいだした。おまけに機能をつけたのに伴って、あれやこれやの設定画面を(本来であれば)作らなければならないのだが、それも何かと面倒だ。というわけで本来独立した設定画面を作るべきところをすべてメニューからの選択で間に合わせることにした。(この設定画面上での部品の配置というのは結構ややこしい問題なのである)もうそこまで凝るような気力というのは(幸いと言うべきか)どこかに飛んで消えてしまっていた。

 

さてここまであげた二つの問題はまあ私がちゃんと思い切れば回避出来るたぐいの話だからそんなに深刻ではない、といいきることもできる。ところが最後の一つは問題だ。つまり「ちゃんと動作することの試験」という奴である。

何故これが問題か?今回のプログラムには、一定期間ごとに自動的に解析データを見に行って、それでもってデータが新しくなっていれば、自動的に新しいデータに更新し解析済みのデータを追加するという機能を付加しようと思っていた。ところがこの「データが新しくなっていれば」というのがくせ者で、これは仮にすべての時間をデータ解析に費やしたとしてもおよそ26時間に一度しか発生しない事象なのである。おまけに普段はそれこそホームページ制作だのプログラム制作だのにMacintoshを使っているから実際は二日に一度くらいしか「データが新しくなる」ことはない。このプログラムのソースコードは公開されていないし、詳細な動作仕様も不明だから、ちゃんと動くかどうか、というのは試験をしながら試行錯誤で直すしかない。

そしてこの試行錯誤の道は予想通りというべきかなんであるかとにかく短くはなかったのである。

次の章へ


注釈

Contact:(参考文献一覧)ちなみに本家本元のHPからは、この映画の内容について論評したページもたどれる。本文に戻る

 

Stanfordの不倶戴天の敵:何故これほどまでにC○Lを嫌うかについては「五郎に関するFAQ」を参照ください。本文に戻る