題名:Java Diary-11章

五郎の入り口に戻る

日付:1999/8/30

目次に戻る


SETI@Support-part5(Ver0.35,0.36)

さてみかけはあまりかわっていないが、中身は大幅に改造してしまったVer0.3をリリースしたのは8月の9日になった。翌日メーリングリストに「0.3 Release」と投稿してまたもや身構えたがとりあえず「全然うごきません」というメールも無いようだ。

それから私はちょっとのんびりこのプログラムに取り組むことにした。とりあえず大幅な改造も終わったし、しっかりとバグつぶしに励むか、というところである。

会社のマシンはWindows-NTだから複数のクライアントを立ち上げることが可能である。せっかく自分でその機能を追加したのだから使ってみるかとおもって意味もなく2つ同時に計算させていた。こうすると場合によっては結構接近した位置にふたつのデータが表示され、しかもその色合いが変わっていたりすると結構面白い表示になったりするのである。よくよく考えれば、複数のプログラムの間で切り替えの時間がそれだけ余分に発生するわけだからこれは解析の効率を落としていることになるのだが、まあ気にしない気にしない。

そうしてあれこれやっている間に、最初からつけようと思ってのばしのばしにしてきた機能がいくつか気になってきた。一つはSky Map上でクリックし、その近くにあるデータを選択する機能である。最初はあまりこの機能は必要ないかと思っていたのだが、二つ表示されている解析中のデータをあっちを見たり、こっちを見たりしようとすると、データの一覧から選ぶよりはどうしても目の前にあるSkyMapをクリックしたくなる。これは自然な欲求というやつであろうか。

もう一つはデータのテキストファイルえの書き出し機能である。ずいぶんと参考にさせてもらったI4WU というツールにはこの機能がついている。まあそんなにたくさんデータがあるわけじゃなし、いいか、と思ってさぼってきたのだが、解析が進むにつれてどうしてもデータを一覧表で見たい欲求にかられてきた。とはいっても一覧表の表示は結構難しそうだ。それにきっと並べ替えたり、平均をとったりとかいろいろ要求もうまれてくるに違いない。となれば最初からそうした高度な機能は表計算ソフトにまかせて、それで読み込めるデータを吐き出すことに専念しよう。

そう考えるとしょこしょこプログラムをいじりはじめた。最初Sky Map ONlyモードでも選択したデータの詳細を表示できるようにしよう、と色々考えていた。ポップアップで表示しようか、Sky Map上に書いてみようか、、等々。そのうちふと気がついた。詳細データがみたければちゃんとデフォルトの表示画面があるじゃないか。となればこんな機能をつけてしまうとなんのためにSky MapOnlyの表示をつけたのかわからなくなってしまう。ここは一発すぱっとあきらめてしまおう、と割り切った。

となると他の機能はわりと簡単に実現できた。ほお。これは快調ではないか、と思ってそろそろアップするべえか、と思うとその日に必ずバグを発見するのはいつもの通りである。今回も公開間際にずいぶんとバグを発見した。その中でも最大級の「機能には全く支障がないが、とても恥ずかしいバグ」はメニューの中のミススペルである。

今の部署ではほとんどすることがないから、日長インターネットであれこれ見ている。そのうち英語の勉強と米国事情の調査と称してCNNのサイトなどを見ている。ほれほれと見ていると、Hubbble宇宙望遠鏡が、ブラックホールに関する何か興味深い観測結果を得た、という記事に目がいった。

このHubble望遠鏡からの写真というのはいつも私などの想像を超えたアゴがはずれるようなものである。このときも「ほうほう」と思って記事を読み出した。特にVer0.3でブラックホールをちょっとイメージしたグラフィックスを追加した身としてはこの話題に無関心では居られない。

そのうちなんとも奇妙な感じに襲われ始めた。何だ?と思ってよくよく記事を見れば、"Black Hole"と書いてある。ちょっとまて。私はVer0.3で新しく追加したグラフィックスに"Whole"という名称をつけていたではないか。。。あーっ。Wholeってのは全体の意味だ。穴のほうは"Hole"だ。

瞬間私は戦慄した。あれからSETI@Supportのページが見られた回数は1000回にも達そうとしている。そのうち何人がVer0.3をダウンロードしてくれたか知らないが、私はごていねいに自分の名前とメールアドレスとそして恥ずかしいミススペルがついたプログラムを大量に世の中に配布してしまっているのだ。

即刻改訂版をアップロードしたい願望に駆られたが、また例によって例のごとくそれは明日の夜まで不可能なのである。帰ってMacintoshの上でプログラムをなおして、ディスクに落として明日会社のWindowsマシン上でちょっといじって。。

次の日私は外付けフロッピドライブと、モデムのケーブルを一緒に会社に持ってきた。家に帰ってからなどという悠長な事を言わずに、なおしたらその場でフロッピでWindowsマシンとデータをやりとりし、そして即刻アップロードしてやろう、と考えたからである。そして私はこの日にもきっと新たなバグを自分が発見するであろう事を知っていた。今日は8月20日の金曜日。この日を延ばせばアップできるのは週明けになる。となればその場でなおして、アップするしか手はないわけだ。

さて、そんな意欲にめらめらともえながらの通勤電車の中。私はふと「考えてみればまっさらの状態で立ち上げると、何が起こるか最近試験してないじゃないか」と思った。そしてテンポラリに空のディレクトリを作ってそこで起動をかけた。

ここでちゃんとデータを選べば立ち上がることは知っている。しかし選ばない場合何がおこるか?私は現れたダイアログから「キャンセル」ボタンを押した。その瞬間プログラムはお亡くなりになった。"Null Pointer"がどうのこうの、というメッセージを残したまま。

もちろんこの場合の期待される挙動というのは、プログラムは立ち上がるがデータは何も表示されない、というものだったのであるが。私はしばし呆然とした。これはこの前のリリースでなおしたはずの機能だったのだが。。。

これでこそ今日フロッピドライブを持ってきた価値があるというものだ。と自分に強がりを言って電車を降りた。

 

さて会社に着くとさっそくプログラムを見つめる。バグは簡単にわかった。しかしたった一行でもこけていれば動かないのが(あるいは「動いているふりをするが実はただしくない」のが)プログラムというものである。ぶつぶついいながら直すとちゃんと動くようになった。さっそくWindows上でjarファイルを作ると、またもやアップ用のファイルを作り直す。よし、これで帰りにはアップしてやるぞ。

それが片づくと私は一応仕事らしき物を始めた。コンピュータの上では今作ったばかりのVer0.35がご機嫌に動いている。このとき私は3っつクライアントを同時に動かしていた。何故かといえば、数が多いほうが、おもしろい絵柄が見られる可能性が高いからである。基本的に電源を切らずに終日動かしているから、どんなに進んだかな?と思ってみれば一晩たったにも関わらず昨日からほとんど進んでいない。グラフィックスはまだ青と緑色のままである。(解析が進めば黄色から赤にかわるはずなのだが)これはなんということだ?

昨日から何時間経過したかを考え、それを3でわってみた。表示されているCPU Timeと比べるとどうにもこうにもCPU Timeは少ない。まあほかにもあれこれ走っていることでもあるし、実際に経過した時間の1/3とはいわないから(33%)1/5くらいは動いてくれないかな、と思ってはいたのだが、どうも1/10くらいしか動いていないようだ。

私はがっかりした。そして何の根拠もなく「これはきっと3っつもクライアントを動かしたからタスク切り替えのオーバーヘッドが大きくなったためだ」と思いこんだ。そして一つのクライアントを停止したのである。

さてそれから数時間は平和に暮らした。基本的にやることは何もないから、あれやこれやとインターネットを巡っているだけなのであるが。仕事に関連した情報をあさることに疲れると、ちょっと別の事をやってみたくなる。そんな時には私のサイトに飛んでくる元のサイトを訪ねるのも楽しみの一つである。SETI@homeに関連したサイトはいくつか存在しており、そのなかの掲示板や日記で時々私のツールが「これはおすすめ」という言葉とともに紹介されていたりする。ありがたやありがたや。

さて、そうこうしている間に、ひょんなことから私はWindows-NTには「タスクマネージャー」なるプログラムがあることを発見した。それまで「なんとかプログラムのプライオリティを変更するツールはないものか」とあれこれ捜していたのだが、まさかタスクバーを右クリックするとメニューにでてくるとは知らなかった。これを使えばどの程度SETI@SupportがCPU Powerを食っているかわかるではないか。私は何の気なしにそのプログラムをいじりだした。そして各プロセスが使っているCPUの割合(とおぼしき数値)を眺めだした。

SETI@homeのクライアントはsetiaという名前で立ち上がっている。。なるほど20%ね。二つとも20%、ということは後の半分は他のプログラムが使っているわけだ。そのうち各項目でタスクをソート出来ることに気がついた。CPUの欄をクリックしてみると、CPUを食っているプロセス順にプロセスが並ぶわけである。

ぽんとクリックすると一番上に来たのはなんとjavawと表示されるJava プログラム、つまりSETI@Supportである。その数字を見た私は凍り付いた。なんと多少の変動はあるものの常に50を越えているのである。つまりこのプログラムは単に結果を表示するだけのものでありながら、本家のプログラムよりもたくさんCPUを使っているのではないか。

まず私がしたことはあまりのショックのあまり2分ほど凍り付くことであった。次には取り乱して妙な事を始めた。このタスクマネージャーなるプログラムを使うと各タスクのプライオリティが変更できることがわかっていた。というわけでSETI@Supportの優先度を「低」にしてみたのである。するとその瞬間、SETI@Supportは全く反応しなくなった。ウィンドウを動かすのもおっくうなほどである。確かにこれは優先度が低い。しかしあまりといえばあまりにやりすぎだ。これでは使い物にならないではないか。

そこからSETI@homeの優先度を上げてみたり下げてみたりあれこれやってみた。しかしこれは基本的にすべて無駄なことである。何故かと言えば、まさか説明文書に「SETI@SupportがCPU Powerを食い過ぎるのは気になる人はタスクマネージャーを使ってプライオリティを下げてください」などとは書けないからだ。そんな傲慢な注意書きが書けるとすればそれはN○○のような独占企業であろう。彼らはどんなことであっても「精一杯努力した結果です」とかなんとか言って平然と言いのけることができるが、私にはとてもそんな神経はもてない。

何故これほど明白な事実に気がつかなかったか?今までメインに解析を行っていたのは自分で所有しているMacintoshであった。解析の間試験もかねてSETI@Supportも立ち上げっぱなしにしている。しかしMacintosh OSの宿命として、マルチタスキングは可能であるがそれほどちゃんと行われてはいない。一番前にきたアプリケーションがCPUをかなりの部分つかう。ところがWindows-NTではこれがきちんと前にあろうが後ろにあろうが均等に配分されてしまうわけだ。元々こうした機能は大変望ましい物である。この機能がMacintoshに装備されると聞いてからもうどのくらいたったのだろう。そしてMacintoshではこの機能がないがために、私は「SETI@Supportは解析のじゃまをほとんどしないわけね」とご機嫌になっていたのである。少なくとも今までは。

ふと我に返った私は、いろいろプログラムを変更しだした。まずメニューを追加してアニメーションの時間をHigh/Lowで切り替えられるようにした。これは簡単である。ものの5分もかからない。しかし本当の解決策は別の所にある。こんな「文句があったら、メニューから"Low"を選んでください」なんてのはN○○よりは多少ましかもしれないが、「亜N○○」のようなものだ。本来であれば、使わなくなってからしばらくたってから自動的にスピードを落とすような機能を付けるべきだ。しかしながらそうした機能をつけるとなると、どう考えてもリリースは週明けになりそうである。一定時間で起動するタイマーを追加し、どれくらいの時間が適当なのかあれこれ試してみて、、おまけにちゃんとスピードが落ちてくれるか。逆に何か操作が加わればちゃんと元のスピードに戻ってくれるか、などとあれこれ試験する必要がでてくるからだ。

私はしばらく考えた。このままとりあえずリリースするか、週明けまで待つかだ。「解決になっていない」解決策でお茶を濁すというのはあまり気持ちのいいものではない。しかしまあ"Whole"の恥ずかしいミススペルは見逃すとしても、起動時にぽけっとおなくなりになるバグは早めに修正すべきだ。最近のアクセス傾向を見ていると、日に20回くらいはダウンロードページへのアクセスがある。そのうち何人が本当にダウンロードしているかわからないが、仮に10人としても週末にダウンロードするであろう20人の人にバグがあるとわかっているプログラムを配布するのは大変気が引ける。

そうした考えにいたった私は、とにかく今のままでVer0.35としてアップし、その後泡食って自動的にスピードを調節する機能をつけたバージョンをリリースすることとした。

さて一息つくと自動調節機能のインプリメントである。これは確かにちょっと時間がかかった。理屈から行けば話は簡単なのであるが、実際にどの程度の長さでスピードを落とすか、どうした操作をトリガーにしてスピードをもどすかは結構試行錯誤が続いた。この機能をつけくわえたバージョンをリリースできたのは8月の24日、火曜日となった。

 

さて、ようやくVer0.36がリリースできてこちらはほっと一息である。自分で使っている限り、今回追加した機能はなかなか便利だ。特にデータ書き出し機能は、これはもっと早くつけるべきだったと思うほど便利である。もうすでに私が会社で解析したデータは30を越えているのだ。これらを一覧にしてみようと思えば、表形式で見るのが一番だ。なるほど、解析時間はG3@240MHzからG3@320MHzにしてこんなに短くなったわけね、とかあれこれ表を並べ替えたり、ソートしたりして喜んでいた。

そのうち次のバージョンに向けていろいろな考えがわいてきた。

 

次の章

 


注釈