題名:Java Diary-9章

五郎の入り口に戻る

日付:1998/8/3

目次に戻る


SETI@Support-part3(Ver0.2)

Date: Sat, 17 Jul 1999 03:54:42 +0900

From: 大坪 五郎 <PFA01521@nifty.ne.jp>

時々発言してみている大坪ともうします。

私が把握しているだけで、今まで3っつほどSETI@Homeの解析結果を表示するプログラムが発表されていますが、私も一発作ってみました。

Java Applicationですので、JDK1.1以降のJava実行環境が必要です。 Macintosh ではMRJ2.0以降がインストールされた状態で動作します。。Windows/OtherPlatForm でもJDK1.1で動くとは思うのですが、環境の都合で、Windows-NT+Java2(JDK1.2)でしか試験していません。

機能としては、今までにみなさんがつくられたツール3つを足して5で割ったようなしろものです。解析しているデータの位置を地図上に表示する機能、新しいデータを受け取った場合に、順次それまでに解析したデータを追加して記録していく機能、グラフィックス表示がうっとうしい場合にテキスト表示だけにする機能などなど。。URLは

http://member.nifty.ne.jp/GOtsubo/contents/SETISupport/download.html 

です。

よろしかったらご利用してみてください。まだバグが山ほどあるかと思いますが。「それでも気にしないぞ」という人が私は大好きです。せめてみなさまの解析のじゃまをしないようにと祈ってはいますが。。 

バグレポート、改善意見などもなるべく対応したいと思っておりますのでよろしく。 

またダウンロードページで、プログラムの参考にさせていただいた藤原さん、 BOMBO/久保田さん、荒川@Club-HUAAさんのページに謝辞とともにリンクさせていただいています。何か問題ありましたら、ご連絡ください。

大坪五郎@わおーん

(引用ここまで) 

これがSETI@Supportを初めて世の中に発表したメーリングリストへの投稿である。日時が妙(午前3時である)なのに気がついただろうか?正直いってこの投稿をポストするのにはとても度胸が必要だったのである。それまで自分の環境で何度も試験してはいたものの、はたしてこれを世の中に放つ、などということが許されるものだろうか?

上記のメールは実は数日前に書いていた物である。しかしどうも頭がしゃっきりしている間は投稿することができない。夜中に「ああ。なんて暑いんだ」と起き出したときに、寝ぼけた勢いで「えーい、出してしまえ」とばかりに投稿したのであるが。

翌日私は午前中から何度もメールをチェックしていた。

「なんだ。こんな間抜けなプログラムについて、いちいち投稿なんてするんじゃねえ」 とか

「動きませーん。それどころかシステムがクラッシュしました」 とか

「ハードディスクが消去されました。損害賠償を請求させていただきます」 とか

とにかく怒りのメールが殺到するのではないか、という脅迫観念にとらわれていたのである。それは確かに原理的にハードディスクを消去したりすることはないはずだ。しかしそれはあくまでもはずであって、見も知らぬ環境で果たして自分が作ったプログラムが本当に意図したとおりに動いてくれるものであろうか?いつも商用アプリケーションを起動しようとすると「使用許諾なんとか書」を承諾しろ、という手続きを踏まなくてはならない。いいことか悪いことかは別としてそれらをまともに読んだことはない。しかし自分がこうしてプログラムを世に放つ立場になると確かにありとあらゆる制限事項を書いておきたい衝動に駆られる。「俺は何もしらないんだー。何か起こっても俺に文句を言わないでくれー」と。

 

さて幸か不幸か最初の二日はなんの反響もなく過ごした。しかしその間参照数はかなりの数にたっしていたのである。それまで「大坪家の書庫」でヒット数ダントツNo1といえば「暗号について」と相場が決まっていた。平日は会社及び学校からのヒット数が殺到する。しかし土日は一休みだ。そしてこの週末、一休みにはいった「暗号について」を抜いてヒット数のNo1はSETI@Support Downloadページだったのである。

初めてReactionが帰ってきたのは日曜日である。私も参考にさせていただいたWindows Versionの状況解析プログラムの作者の方から「当方でも動きました」という投稿がなされたのである。これで一安心。一応人様の環境でもそれなりに動いているようだ。ここまでの道のりも、そしてそこからの道のりも(例によって)平坦ではなかったのだが。

 

何度か試行錯誤を繰り返したあげく、ようやくホームページからのダウンロードに成功したのは7月12日だった。それまでにいくつかの変更を行っていた。最初は最初から或程度設定ファイルを含めて、圧縮したファイルをダウンロードするようにしてもらおう、と思っていたのだがこれがどうにも調子が悪い。だいたいファイルを解凍するプログラムは大抵の場合フリーだが、圧縮のほうはお金を払わなくてはならないのである。「これからばりばりプログラムを発表するぞ」とでもいうのであればそれを買っても良いのだろうが、どうもそういったことにはなりそうにない。

それに何度か圧縮した後に対してファイルサイズが小さくなっていないことに気がついた。よくよく考えてみれば元のアプリケーション自体はjarファイルとなっている。このjarファイルというのはすでにそれ自体圧縮されたファイルなのだ。となるとなんのためにわざわざ圧縮しているのかわからなくなってくる。

そのうちふと気がついた。プログラムをちょっと変更すればこれらの設定ファイルは(少なくとも最初から)含める必要がなくなるのではないか?そう考えてやってみるとなんとかなりそうである。最後まで付属させようかと思ったのは過去に解析したデータを記録しているss_past_data.txtというファイルである。それまでに解析したデータを表示させてみたい人もいるかもしれない、そのためにはサンプルが必要だろうと思ったのである。しかしこれも「ホームページ上で見えるようにすればいいや」と割り切ることにした。どちらにしてもこのプログラムはホームページからしかダウンロードできないのだ。

さて、こうして準備ができると「いよいよ発表だー」と思うのだが、これが一筋縄ではいかない。前述した脅迫観念の他にも何故かあれこれやのバグに気がつく。それまでダウンロードページにはどおからもリンクを張っていなかった。結果として誰も(私をのぞいては)アクセスはなかったわけだ。初めて表紙からリンクしたのは7/14である。それから数件のアクセスがあったが、推測するにいつも当HPを訪問してくれるかたが「今月の新作」に見慣れない名前が載っているので「なんだべと思って訪問してくれたものではないか。

さてそのころプログラム名は「SETI@Support Pre Alpha Ver0.1」となっていた。バージョン番号も0.1という小さな番号としただけでは足らずに、Pre-Alphaなどという言葉までつけている。そして説明書きの最初数行はひたすら自分のプログラムに対する言い訳に終始していたのである。

さて、そうしている間にも自分であれやこれや使っている間にわらわらとしたバグに気がつく。機能が落ち着いたらSETI@homeのメーリングリストにはなばなしく投稿しよう、と思っていたのだが、なかなかその日は訪れない。おまけに一つバグを発見するとまずMacintosh上で修正をする。そして翌朝そのデータを会社のWindowsマシンに移し、Windows上でもちゃんと動いていることを確認する。だからどうしたってホームページに反映するまでには丸一日かかる。よしこれで明日こそ、と思ってご機嫌に動かしていると「おわっ」というバグに気がつく。その瞬間公開は一日延びる。

さてかような状況であるから、土日に公開することはあり得ない。会社のマシンが使えないとMacintosh以外のバージョンが作成・確認できないからだ。その週の金曜日、とりあえず目についたバグはつぶした(つもりだった)そうした思いこみと寝ぼけの神様の加護によってとうとう世の中にプログラムを発表することにした。

さて前述したように覚悟していた「罵倒のメールの嵐」は幸いなことにこなかった。それどころか「なかなかいいですね」というReplyもちらほら聞こえてくる状況である。これで私はいきなり気が大きくなった。なんとおそるおそる世の中に公開した私のプログラムはそこそこ人様のお役にたっているようではないか。私のHPにはアクセス解析のコードをつけてある。参照してくれた人がどこから飛んできたかだいたいわかるのだが、いくつかの掲示板や日記からSETI@Supportが参照されていることがわかった。いずれも文を読むまでどきどきものだが、今のところあまり過激なコメントはないようだ。私の以前に解析状況表示ツールを発表していた人は、その人が作ったツールが吐き出したデータを私のプログラムの入力ファイルにコンバートするツールを発表していた。こちらとしてはうれしいやら、恥ずかしいやら、そんなことをして私のプログラムはちゃんと動いてくれるかしらん、と心配になるやら大騒ぎである。

こんな心配やら、驚きやらを繰り返しているうちに、自分の子供を世の中に送り出す親の気持ちってのはちょっとこんなものかもしれない、と思い始めた。「大丈夫だろうか。人様に迷惑をかけないだろうか」という心配と「しっかりと世のため人のため役だってください」という気持ちの混合である。戦前ならいざ知らず、昨今では後者のほうは少ないかもしれない。しかしきっと多くの親の気持ちのどこかにはそうした感情がやどっているのではないか。

そうしたある日、「我が家のSETI@home状況」と称して、自分の解析状況を表示しているページにであった。その状況表示に使われているのが、まさしくSETI@Supportである。Windowsの環境で動かしているのか画面ウィンドウなんかはちょっと違うが中身はまさしくそうだ。「なかなかいいですね」と文字ではコメントをもらってわかってはいたのだが、実際に動いている画面を見ると、「ああ。人様のところでも本当に動いているのだな」とちょっとほっとしたり、不思議な気持ちになった。

 

 

さて、メーリングリストに「こんなツールもあります」と投稿してくれた人が居た。一つはJava Applicationで、もう一つはWindows専用、いずれも英語のサイトである。さっそくダウンロードして試してみた。Java Applicationのほうはうまく動かなかった。不思議なプログラムで「100% Pure Java」であることをうたいながら、インストールにWindowsのインストールプログラムが立ち上がるのである。これではどうやたってWindows以外の人は使えないではないか。

さてもう一つのほうは見事に作動した。ほとんど使用説明書はないのだがちょこちょこやってみるとそこそこ使える。最初不思議に思ったのが、複数のユーザー(クライアント)を登録できるようになっていることだ。なんじゃこりゃ?と思ったがそのうち何に使うか理解できた。

 ここで話をちょっと私の解析生活のほうに戻す。Privteで使っているMacintoshと会社で使っているWindows両方で解析を行っていた私だが、Windowsの方には少し問題があった。解析が終わり、結果を送信する。新しいユニットを受け取って解析を始めると必ず"bad file header"とかなんとか言ってプログラムがストップするのである。朝出勤するとだいたいこの状態になっているから、「しょうがないな」と思って自分でwork_unit.txtを編集して解析を再開する。だいたい1ユニットあたり11時間必要だから私が会社にいる間は解析が終わらない。(このころ私はほとんど何も仕事をしていなかったのだ。「仕事がなければ帰ります」は私の変わらない信条である)推定夜の10時頃には解析は終わっているのだがそこでエラーでとまる。翌朝8時半までAbout10時間は解析はストップしたままだ。

ある日この10時間がもったいない事に気がついた。どうすればいい?ふと気がついた。Macintoshでは設定・データファイルはシステム中のある決まったディレクトリに作られる。しかしこのText only解析バージョンはそれぞれ独立したフォルダの中にデータが保存されるから、原理的に複数動きそうではないか。。。などと思ってあれこれ見てみれば複数CPUを搭載したマシン環境では複数クライアントを立ち上げるのが普通のようである。なるほど。複数クライアントの表示がサポートされているわけだ。

 

私が使っているのは単一CPUだが、複数クライアントを立ち上げれば解析所要時間は22時間以上にはなり、「解析ストップによる無駄時間」は少なくなりそうではないか。朝8時半に解析スタート、翌朝の6時頃終了。8時半にまたスタートという筋書きである。さてこの着想にご機嫌になった私はさっそく「複数クライアント立ち上げ」を試みた。どうやらちゃんと動いているようである。そして自作のSETI@Supportをそれぞれのクライアント用に立ち上げてみた。その瞬間解析が亀のようなスピードに落ちたのを発見した。

何だこれは?確かにCPUパワーは必要だがこのスピードの落方は異常だ。。。などと考えてあれこれ調べると、SETI@Supportは実は異常な量のメモリを消費していることに気がついた。

 

解析クライアント自体結構メモリを食うことで有名である。そしてその結果をただ表示するだけの私のプログラムはそれに勝るとも劣らない量のメモリを食っていたのである。それがために、解析クライアントと同数私のプログラムを景気良く立ち上げると、たちまち物理メモリを食い尽くし、仮想メモリを使用に行く。それがための解析速度の低下であった。このことに気がついた時私は瞬間的にくらくら、とした。なんということだ。

しばらくの間私の自分が作ったプログラムが達成する機能と、メモリ消費量の比率に思いをはせた。私はまだメモリがとても効果だった頃にパソコンを使い始めた人間である。PC-8001のメモリを数10kByte増設するのに数万円を投資したこと。Macintosh IIに8MBのメモリをフル装備し「ああ。なんて広大なメモリ空間なんだ。これを使い切ることが出来るのであろうか」と思ったこと、Macintoshのメモリが1MBだいたい1万円と思っていた頃に4MBで$130のメモリを見つけ、「えーい」とばかりに4枚購入したこと、などが頭に浮かんでは消えていった。そうした「RAMの1MBは福沢くん一枚」という概念が頭にしみついている私にとって自分が作ったプログラムのメモリ消費量は大変ショッキングなものだった。

しばらく呆然としたが、そのうち解決策に思いついた。他の解析結果表示プログラムを使えばいいのである。Windows専用アプリであればRAMの使用量は数分の1である。一つは二つ立ち上げても仮想メモリを使いだしたりはしない。かくして私のコンピュータの画面は大変にぎやかなものとなった。テキストが流れる解析中のコンソールが三つ。それに解析表示プログラムが三つもたちあがってそれぞれに表示を行っている。

さてこの方法によって解析は順調に進み始めた。それとともに他解析結果表示プログラムを使うにつけ、自分のプログラムに欠けている物があれこれ見え始めたのである。特に新しく使い始めたSETIViewというプログラムは私のイマジネーションを刺激した。このプログラムはちょっと変わったインタフェースを持っているが、私のプログラムにない複数クライアントの表示、それにUser Informationの表示機能を備えていたのである。

うーむ。私のプログラムは元がMacintoshでの環境で育っているから単一のクライアント使用しか想定していない。(Macintoshには現在複数CPUのマシンはないのだ)ところがJavaで作ったこのプログラムはもっと広い用途にも使ってほしいものだ。となれば複数クライアント実行に対応させたいが、それをやろうとするとかなりのプログラムの書き換えになる。「クライアントとは一つだもんね」と勝手に前提を置いて手を抜いている部分が多々あったからだ。

どうしたものやら、、などと思っていたある日、従来のプログラムの画面をまじまじと眺めてあっと叫んだ。解析が終わったデータの位置をSkyMap上で表示するシンボルは黄色で点滅するようにしてある、というか少なくともそのつもりだった。ところが今動いているプログラムをいくら見ても点滅していないではないか。

泡食ってリストをみれば、なんの気なしに変更した行の順序が見事にバグを産んでいる。なんてことだ。すぐにでも改訂版をアップしたかったが前述したようにそれには丸一日を要する。「Ver0.21リリース」というお詫びの投稿とともに改訂版をアップしたのは7月21日の水曜日となった。

 

さて、もんもんと「複数クライアント対応」の方法を考えていたがある日とうとう思い切った。ソースファイルを一式コピーするとその上でプログラムの大幅改修を始めたのである。何故元のソースを残したか?いくつ恥ずかしいバグが残っているかしれたもんではないではないか。バグがなければいいのだが、それが望めない以上、迅速に対応するのが義務というものだ。ところが大幅改造など始めてかつ元のファイルを消してしまえばそれすらも不可能ではないか。

さてまず最初にやったことは関連ファイルのプリントアウトである。しかしながら私はリストをプリントアウトしても、大抵の場合使わないのである。このときもそうだった。最初はちょろちょろとリストを見ながらなおして行くのだが、そのうち「えーい、画面でやったほうが早いわい」とばかりにリストを投げ出してしまうのである。

あれやこれやとなおしていくと思わぬ間抜けな点を発見したりして泡を食う。結局現在のファイルを読んで必要なアップデートを行うルーチンは全く新規書き直しになった。実はこのルーチンは過去に2回、あまりにも複雑怪奇なアルゴリズムを作り上げてしまい、最後には自分でも解読不能になってスクラップにした経緯がある。今度のプログラムはとりあえず自分で何をしているか把握できるが、ちゃんと動くかどうかはまた一から検証しなおしだ。

さて改修点はそれだけではない。前に書いたが「ダイアログ画面を作るのは面倒」という理由で前のバージョンではファイル指定のものをのぞいていっさいダイアログを作っていなかった私だが、今回はそういうわけにはいかない。データが入っているディレクトリをいちいち表示するのは面倒なので、省略した短い名前を付けられるようにする必要があるのだ。例によってBorderLayoutやなにやらを使ってダイアログを作るのは忍耐との戦いだ。何故か思った通りには表示されない。またもう一つの問題として今度のプログラムではもっともやっかいな「人間の入力」を避けてとおれないのである。

何故これが問題か?人間は何を入力するかわかった物ではないからである。私が設定した選択肢をメニューで選んでいてもらえる間はとりあえず安心だ。しかし自由入力となれば何がくるのだろう?私としては、できれば英数字だけにしてほしいのだが、ユーザーから見ればそんなことは知ったことではない。データの名前だから日本語で名前を付けたい人もいるだろうし、中には名前の間に空白を使いたい人だっているかもしれない。それどころか想像を絶するようなキャラクターを入力する人だっているかもしれないではないか。

かくの通りユーザーの入力チェックというのは実に面倒なことである。しかし避けることはできない。ぶつぶつ言いながらコードはだんだん肥大化していった。

またある時は妙な事に気を取られ始めた。Ver0.21までのプログラムは、解析中のデータが確認できないと立ち上がりもしないようになっている。ところが、このSETI@homeプロジェクトは2年で終了してしまうのである。「ひょっとすると」プロジェクトが終了した後も、自分が行った解析結果をSkyMapに表示させてみたい、という人がいるかもしれないではないか。しかしそうしたことを考えると今の仕様では問題がある。あれやこれやと考えた末に、解析中のデータなしでも立ち上がりはするようにした。自分でもこの仕様変更は結構効果に関して「?」があったのだが、まあ変えてみた。ところがその瞬間"Class cast exception"なるみたこともないエラーが表示されて泡をくったり、、、と例によって例のごとくデバッグの日々は結構長く続いた。

この原稿を書いている時点では、機能向上を凍結してデバッグのフェーズにはいっている。今は夏休みだから、会社のマシンが使えない。だから新しいバージョンの公開は8月10日頃になる予定であるが、またバグが発見されるたびに一日ずつ公開が遅れていくのはいつもの通りであるが。

次の章


注釈

4MBで$130のメモリ:私が1992年にQuadra700を購入したときのことである。詳細は「私のMacintosh」参照のこと。本文に戻る