題名:Java Diary-14章

五郎の入り口に戻る

日付:1999/9/25

目次に戻る


SETI@Support-part8(Ver0.43)

実は0.41をリリースする前から、次のバージョンで何をするかはだいたい決めていたし、コーディングにも少しとりかかっていたのである。

0.4でデータのテーブル表示を導入した。これであれこれの方法でデータを並べ替えて眺めることができるわけだ。そんなことをしていていくつか発見したことがある。

SETI@homeに書いてある内容によれば、彼らにとって興味があるのは、強いピークの電波ではない。アンテナの方向は刻一刻変わっていくので、一定方向から来ている電波は、だんだんと大きくなり、そしてピークに達した後は小さくなっていく。

この「大きくなり小さくなる」形に合った信号こそが彼らの捜している物だ。SETI@Supportではこの観点から評価したGaussian Scoreなる数値を表示することができる。そして新しくできたData Tableでは、この値を大きい物から順に並べるなんてこともできるわけだ。

さて、話変わって、私のホームページにはだいたアクセス解析のしかけがつけてある。従って「このページにくるのにどっから飛んできたか」というのがだいたいわかるようになっている。そのリンクを逆にたどっていくと、時々SETI@homeの話題を扱っている掲示板にでくわす。そして大抵の場合そこではSETI@Supportのことが話題に上っているから(そうでなければ、そこから私のページに飛びはしないだろう)それを見るのはとても楽しみであり、逆に「こんなカスなプログラム」という罵倒が書かれているのではないかと怖さ半分である。

実は0.4をリリースする前にある掲示板でSETI@Supportが紹介されて、その後「バグあり、注意」というコメントがついていたのである。私は驚愕した。そして「バグがあれば是非教えてほしい。。」というメールをその人に書きあげ、そして送信しようとしたまさにその瞬間、Internet Explorerとの組み合わせで発生する山のようなバグに気がついたのである。こりゃ「バグあり、注意」と書くわけだ。その日の夕方には私は自分のダウンロードページに同じフレーズを書き足していたのである。

さて、そうした掲示板の一つに(私のプログラムに関する話題ではないが)こんな話題があった。

「Gaussian Scoreが高いデータは、銀河の方から来ているような気がする」

なるほど。。。では私のデータではどうだろうか?などと思ったときに、Ver0.41に欠けている機能に気がついたのである。すなわち、Ver0.41ではGaussian Scoreの大きな順にデータを並べることはできる。しかしそのデータがSkyMap上でどこに存在しているかはわからない。逆のしかりである。銀河の上にあるデータの値がなんであるか?それがデータをある順番(たとえばGaussian Scoreの大きい順)に並べた時に何番目にあるかはわからない。つまりSkyMapの画面とData Tableの間でデータは共有しているのであるが、今ひとつ連結がゆるいのだ。

ではここで一発、表の上でデータをクリックしたら、そのデータがSkyMap上で選ばれる、逆にSkyMap上でデータを選べばそれがData Table上で選ばれるようにしてみようではないか。当初の理屈から言えばこれは簡単なはずであった。所詮二つの画面は同じプログラムだから根っこは共有しているし、それぞれの間の通信も簡単だ。ところがこれは例によって例のごとくそう簡単にはいかなかったのである。

 

プログラム自体は簡単に(とりあえず)書き上がった。しかしまずつきあたったのは「Data Table上でデータが選択されていることをどうやって示そう?」という問題である。たとえば行の色を変えれば確かに選ばれている、と考えることができる。ところがこれは使えない。解析が進行中のデータを示すために行に色を付けるのはもうやってしまっているのだ。では行の先頭に特殊な記号をつけるのはどうだろう?ところがこれももう使ってしまっている。

それからはあれやこれやの試行錯誤の連続だった。最初は列の表示を反転させてみた。しかしこれは実にややこしく(たぶん私のプログラムの作り方がもともと問題があったためだろうが)できあがった結果はまだらの行だった。それから下線を引いてみたり、周りを黒枠で囲ってみたり、あれこれやってできあがったのがVer0.43の表示方法である。行の左と下に黒い線が引いてある。なんとも中途半端な囲い方だが、全体を囲むとなんとなく行全体に黒枠がつき、どことなく陰鬱な雰囲気を与えるし、下線だけだとその線の上の行が選ばれているか下の行が選ばれているかわからないのである。

どうにも自分でも変な気がするが、とりあえずこれ以上にまともな表示方法が思いつかない。よし、とりあえずはこれで行こう、と思いきりをつけたのだが、どうにも避けがたい問題にまたもやつきあたっったのである。

 

Ver0.4,0.41でData Tableをつけたさい、あれこれの試行錯誤の末にScrollBarをあきらめて画面上をクリックする方法でスクロールする事にしたことは前述した(Part6を参照のこと)私がその優秀性に目覚めたScrollBarはどうやっても言うことを聞いてくれないどころか、しまいにはお亡くなりになってしまった。逆にデータをクリックして選択する、なんていう構想はなかったから、Data Table上はScrollのために自由に使えるはずだったのだ。

ところがこの0.43で導入しようとした「Data Tableをクリックしてデータを選択する」という構想のおかげで、この前提はがたがた崩れ始めたのである。ぽんぽんと快調にData Tableをクリックしてデータを選択しようとすると、いつのまにかScroll用の矢印が現れいきなり表はスクロールしてしまう。

最初は矢印を小さくし、Scrollがおこる範囲を狭くすることで乗り切ろうと思ったのだが、どうもそうはいかないようだ。データの選択に夢中になるとどうしたって現れた矢印をクリックしてしまい、表はあさっての方向に行ってしまうのである。

しばらくあれこれ試したあげくに私は悟りを得た。やはりこの方法はうまくいかないようだ。となればまたScrollBar構想に戻るしかない。

 

ぶつぶつと自分の判断のおろかしさを呪いながらも再びScroll Barにチャンレンジしだした。今度は慎重にJava Mailing Listの内容もチェックしてトライである。見るとどうにもこうにも(少なくともJDKの早いバージョンまでは)Scrollbarというのはやっかいなシロモノであったようである。プラットフォームによって動作が微妙に異なるらしいのだ。しかし少なくともそこから読みとれた範囲では、慎重に使用すれば、なんとかならないこともなさそうである。私は再度サンプルプログラムを作り、少しずつ少しずつ機能を加えていった。よし、ここまではうまく動いた。次はこの機能を追加して、、、クリックするといきなりコンソールが現れ文字が流れた。エラーの発生である。

このエラーたるや私にはどうしても内容が理解できないものであった。おそらく今までに経験した多くの「わけのわからないエラー」と同じく、このエラーにも正当な理由はあるに違いない。そしていつの日か私も「なるほどの。あのエラーはこうした意味であったか」と悟りを得るときがくるかもしれないが、とにかく今は何を言っているかわからない。それからあれやこれや試してみたが依然としてエラーは消えてくれない。

どうしてもScrolBarは使えないようだ。しかし表の上の矢印をクリックすることでスクロールする構想に戻ることもできない。となればどんな選択肢があるか。

まずやったことは、他にScrollbarを提供しているフリーのクラスライブラリがないかどうかチェックすることである。最近はSwingnなる100%Javaで書かれたクラスライブラリが標準で付属しているから、普通の人はこちらを使うようだ。しかし私はその動作速度ののろさにがっかりしていたから、到底使う気にはなれなかった。プログラムを人間が使うときの「使いやすさ」とは、設計もさることながら、動作速度にも大きく依存する。

となれば他のライブラリを捜すしかない。あれこれさがしてみたが、どうにも良い物はないようだ。あったとしてもとんでもない値段がついていたりする。ソースがほしければ一式$800とか書いてある。

 

しばらくインターネットをあさったあげく私は決心した。(そしてこれは自分が常日頃”もっとも馬鹿な行動の一つ”としているものなのだが)自分でScrollbarを作ろうと。

ここしばらくScrollbarと格闘したおかげで、その動きについてだいぶ詳しくなった。そしてそれが偉大な発明品ではあるが、決して自作できない類のものではないと思うようになってきたのである。加うるに自作をすれば自分でソースを勝手に参照、変更できるわけだから、今直面しているような

「或程度スクロールするといきなりおなくなり」

などという現象からは逃れられる可能性が高い。少なくともそのことについてのろいの言葉をはく相手は明白になるわけだ(つまり自分だが)

そう考えると私はしょこしょことプログラムを書き始めた。そして前のバージョンで使った関数がほとんどそのまま使えることを発見した。やっていることが同じスクロールといえばそれまでであるが、改造の必要は思ったよりも小さかった。おまけに繰り返しになるが問題がおこればそれは自分のせいだし、プログラムのソースコードはちゃんと目の前に存在しているから、なんとか対処はできる。Open Sourceとはかくも便利なものか。

新しく作る部分の常として、「どうにか動く」から「人に見せても恥ずかしくない」までは結構道のりがあった。しかし今となってはこの長い「残りちょっと」にはなれっこである。そのうちなんとかまともに動くようになってくれた。こうなれば後は公開に一直線だ。

さて、こうした間にもいくつかこのプログラムに関してメールをもらった。3件ほどもらったのが「ファイルが壊れてるよ」というやつだった。ある米国からもらったメールは題名に"jar is corrupt"と簡明に記載されており、あとに彼がやった操作及びその結末(ファイルが壊れてるよんメッセージの表示)が示されていた。しかしながら私が「うげげげ。間違ったファイルをアップしてしまったかああ」と泡をくって自分でダウンロードするとちゃんとファイルは復元されてしまうのである。

そのほかにももう一通日本のかたからメールをもらった。彼が言うには、Netscape Communicatorではうまくダウンロードできないが、Internet Explorerではうまくいくという。私はこうした情報、及びJavaのメーリングリストをあさったあげく、「理由はわからないが、jarファイルは何故かちゃんとダウンロードできない場合がある」という結論に達した。

最初、jarというのはそれだけで圧縮されている形式であるから、わざわざさらに圧縮した形式のファイルなどは不要、と思っていたが、これだけトラブルがでるとそうもいかないようだ。Windowsの世界ではZIPなる圧縮形式がポピュラーなようである。ポピュラーということはきっとその形式で配布すればトラブルも少なかろう。そう思った私はZIP形式のファイルもダウンロードページ上に置くことにした。

そのほかにある人からこんなメールももらった。

「うちでは20個のクライアントを同時に実行していますが。。。」

うげげげげ。私はせいぜい3個くらいのクライアントを同時に実行するくらいがいいところだろうと思っていたのだが、世の中にはそれほど過酷な条件で使ってくれている人もいるのか。その人からはある条件でプログラムがクラッシュする、ということを教えてもらった。自分でやってみると確かにふっとぶ。なんという間抜けさ加減だ、と自分を呪いながらプログラムを直す。

さて、そうこうした改良点を盛り込んだVer0.43のリリースは9月30日になった。リリース当日になるとバグに気がつくのもいつものことである。今回最後に発見した問題は、Data Table上でのポップアップメニューの配列がJavaの環境によって異なる、というものだった。Javaのメニューには「何番目にメニュー項目を追加」という関数がある。ところがその動作はJava VMによってあれこれヴァラエティに富んでいるのである。うげげげげとなりながら、またメニュー項目を整理し、、、などとどたばたするのも毎度リリース日の出来事だ。

さて、これで一安心、と思った私には、今まで漠然と感じていながら目先のバグに隠れて気がつかなかった大きな問題というのが頭をもたげてきた。今回思いつきながらインプリメントを見送った機能はいくつかある。それを加えてまた0.45としてリリースしよう。問題はその後だ。次のメジャーバージョンアップとなるVer0.5に向けての追加機能を何にしよう?私は自分のImagination能力が枯渇してきたのを感じていた。

次の章


注釈