日付:1998/5/11
DocBrower-Part2さて。前の章を書き上げて私はご機嫌であった。とりあえず目標は何となく見えてきたし、これでめでたくデバッグと機能強化に取り組めるという物だ。
今のところインターネットをあさったかぎりでは、こういう風にドキュメントのRead Onlyに特化したアプレットはみたことがない。いままでテキストの固まりで自分でも読む気がおきなかった。これからは自分が作ったプログラムででっかい文字で、行間をきっちりあけて読むことができるわけだ。これで文章の推敲も進むという物で。。。
外は明るい春の日差しでいっぱいだった。私はふらふらと散歩にでかけた。
本屋でぼーっと本を立ち読みしていた。そしてJava Worldという雑誌を手に取った。何か役にたつことが書いてないかな、、あるいは「そんなプログラムはとっくの昔にできているよーん。」という恐ろしい記事がのっていないか。。。
ぱらぱらとめくっていた私はあるページで凍り付いた。
それはKFCというJavaのクラスライブラリの記事だった。私が今回Doc Browserで苦労したことがすべてクリアされていた。HTML文書を読み込んで、解析するパーサー、行間だけではなくスタイルやイメージ表示も可能としているTextArea。。。読んでいて私は「くらくら」とするのを押さえることができなかった。しかもそれは「週末の余暇を利用して作った」と書いてあるのだ。私は休み休みとはいえ、定職もない身分だというのに。。。
オブジェクト指向言語を学ぶ、ということは、「使用可能なクラスライブラリに何があるか?」を調べることから始めるべきだ、とは何かの本に書いてあった言葉だ。私の頭の中にはその言葉が何度もぐるぐると回っていた。おまけにその記事にはいくつかMicrosoft, Sun, Netscapeがだしているクラスライブラリも同じような機能を持っている、とかかれていた。。
私はふらふらと外に出た。
なんということだ。ここまで作ってきて、ついに動くようになった、と思った瞬間にお払い箱か。。There is nothing new under the sunというものの。。。今までの苦労はなんだったんだ。。おまけに会社が開発したクラスライブラリに負けるのはともかく週末プログラマがあんなにちゃんとしたクラスライブラリを作るとは。。
とりあえずアパートに戻った。ちゃんとしたクラスライブラリが使える時は、そちらを使え、というのはプログラム書法にも書いてあったし、私の信念でもある。とりあえず使ってみようじゃないか。
例によってインターネットのあちこちをさまよったあげく、、、とうとうそのページにたどりついた。ダウンロードしてプログラムを眺めている間に、奇妙な感じがわきあがってきた。
確かにこのクラスライブラリの機能は大した物だ。しかし私がやろうとしてることに対してはかなりOver specだ。。。普通のアプリケーションならばそれでも問題ないが、Appletは使用する度にダウンロードされるものだから、大きさは小さければ小さい程良い。そこにこのようなヘビー級の機能を持ったライブラリを使うというのはいかがなものか。
そうだ。私のプログラムは機能と信頼性において比較にならないほど劣っているが、とりあえず必要十分な機能はもっているし。おまけに小さいではないか。
こうした「ゆがんだ慰め」を見いだした私は性懲りもなく自分のプログラムにしがみつくことにした。
ネットワーク上で試験を行うために、ホームページにもDocBrowerを試験できるページを追加して試験を始めた。そのうち妙なことに気がついた。
以前作ったLinkBrowerが動かないのである。「クラスlinkBrowerがみつかりません」とかでてくる。おかしい。前にテストしたときは動いたはずだが。
そこから起こったことは記述するのも面倒な話である。すったもんだの試験のあげく、妙なことに気がついた。
Javaは最初に公開されたときは、クラスごとにXX.classファイルが作成されて、それを全部配布する必要があった。ところが最近のバージョンではjarファイルと言う機能が追加されて、ひとかたまりとして、(おまけに圧縮までして)ファイルを配布できるようになっている。
HTMLの側にもそれを指定できるタグが追加された。めでたしめでたし、と思った私はすべてのプログラムをjar形式でアップロードしていたのである。ところが、起こっていたことは、ブラウザが最初にロードするjar形式のファイルはちゃんと読み込むが、次に別のjarを読み込まなくてはいけないところで、彼は何も考えずに「クラスXXが見つかりません」とふざけたメッセージを返してくる、という事実だった。
いや。私はこれが「ふざけたメッセージ」というだけの知識を持っていない。だいたいjarファイルが本来どういうものかもしらないじゃないか?そこでVisual Cafeのマニュアルをめくってみたのだが。。。例によってこの本は肝心なことをあるいは載せているのかもしれない。しかし見つけることは絶対にできないのである。解決方法を別の本でみつけるまでは。
それからありとあらゆる組み合わせを試験した結果。。。結局classファイルごとにアップロードする、という昔ながらのやり方でしか正常な作動はできない、という結論に達した。ネットワーク上で動作させてみると、jarを使ったときと比較して起動時間がやたらと長くかかる。(クラスXXをロードしています、というメッセージが表示されて怠けているのではないことはわかるのだが)しかし背に腹は代えられない。とりあえず動いてもらわないことには私のホームページを訪れ、かつこのプログラムを試してみよう、という奇特な人に対して申し訳がたたないではないか(そんな人がいるかどうかは別問題として)
さてさて。。とりあえず動くし。と思って試験をしているうちにまた妙なことに気がついた。
今回のDocBrowerの最初の画面では、いろいろな題名がグニョグニョ動く。ところがそれがAppleのMRJとMicrosoft Java VMで明らかに動きがことなるのである。しかもMicrosft Java VMはあきらかに私が意図した物と違う動きをしていた。
もう環境の違いによるトラブルにはかかわらないことにしよう。とりあえず使えることだし、と思ってテストを続けていたが、もっと奇妙なことに気がついた。実家にあるコンピュータはApple Perfromer 6410である。この機械にもPB2400で使用しているのと同じバージョンのInternet Explorerをインストールしてある。ところがこの機械上ではまた別の動作をするのである。(同じMicrosoft Java VMを使用しているはずなのだが)
しかし「とりあえず使用に支障がない」(少なくとも作成者にとっては)ということで、その問題は「おもしろいねえ」といって無視することとした。
それからしばらくの間機能強化にあけくれることになる。そして同時にコンテンツのデバッグ(推敲)も結構進んだ。イメージの表示機能をつけたり(これもすごい手抜きであるが)
デバッグを繰り返し、ナビゲーション画面を見ているといろいろなことに気がついた。何だこの情けない文章の山は、とかetc..である。また自分で作ったナビゲーション画面が結構気にっていることにも気がついた。
そしてその画面は久々にいろいろな想像をかき立ててくれた。ずっと前から考えていたことであるが、同じ情報を別の角度から見ると全然違った配列に見える。物事はとらえる角度で異なった表情を見せる、というのは世の中で経験することだ。データベースの検索もそういったものかもしれない。そこをなんとなく視覚的に表現することはできないか?
何を書いているかわかんないでしょ?自分でもこの言葉が何を意味しているかわからなかったが、ナビゲーション画面を見ているうちにそれが表現できる気がしてきたのである。
さてこの言葉の「説明」となる画面が完成する日がくるかどうか。。それはもうちょと先にならないとわからない。
さて上記の文章を書いてからおよそ2ヶ月が過ぎた。今日は5月の11日だ。ついこないだまで夏を思わせる暑さだったが、今日は冷たい雨が降っている。この間およそ一ヶ月以上に渡ってDoc browserの製作は停止していた。何がこれを妨げたと言って、三国志のゲームほど私の時間を奪った物はない。
とはいっても三国志のゲームが動き始めるまでに多少プログラムの作成を進めてはいたのである。一番大きな改良点は、今までは個々の項目だけが表示していたのを、それぞれの項目が所属するカテゴリーと同時に示すようにした点である。
と書いてみると簡単そうだが、これにも結構時間がかかった。プログラムをとりあえず作って、コンパイルが通る程度のデバッグをしてみると、これまた愉快な画面が表示される(当然のことながら私が意図した画面でもなければ、許容できるようなしろものでもない)最初は小さかった長方形がだんだん大きくなっていって、しまいには画面をうめつくす。2-3度はおもしろくみていたが、かなりのデバッグが必要なことは明白だった。
3月にはえらく高尚な表示方法を考えていたのだが、その後よくよく「実際どんな画面がほしいのか」ということを考えてみると、実はそんなに難しいことをしなくても必要な情報は表示できるし、かつナビゲーションに支障もないことがわかった。
頭の中にあって、形がはっきりしていないアイディアは時としてとてもすばらしく輝いて見える。しかしそれを形にして輝きが失われるとすれば、おそらくそれは最初から輝いていなかったのだ。などと妙な事を考えながら、プログラム作成は着々と進んでいった。
そのうち私は(後から考えれば)前のバージョンのソートをする部分を作ったときと同じ問題に突き当たることになる。
前のバージョンでは、各ノードは上下に動くだけだった。そのソートのアニメーションを作るのだけでも一筋縄でいかなかったことは前述した。今度の画面はノードが2次元平面上で自由に動くようにしたかった。
とりあえず事前にアルゴリズムを考え、コーディングすると、、、これが見事に動かないのである。なんとなく言われたとおり彼が動こうとしているのは理解できる。(所詮彼は基本的に私が書いたプログラムに沿って動くしかないのだ)しかしそこからちゃんと動くようにするまでの間に私はほとんどめげてしまった。
ノードは重ならないように厳重な位置のチェックを行っているはずなのに、何故か複数のノードがきっちり上下に重なってくれる。おまけに表示するノードの数が増えると、彼はいつまでも「ぐにょぐにょ」動いて、いつまでたってもそれが収束する気配をみせない。
当時はちょうど就職活動があるあつかましい会社のおかげで谷間に入っている時期だったこともあり、、世の中は(意図的にオーバーな表現を使えば)ノードの動き以上の問題に満ちているように思えた。そして私は愚かなことに、その問題に正面からタックルするかわりに三国志のゲームに熱中しだしたのである。
ようやくそのゲームの呪縛からときはなされたのは5月の頭であった。このゲームをやっていると確かに劉備がいかに割の合わない立場にあったかがわかる。何度もゲームをやりなおしたあげく、全国統一に成功したのである。
さて一度成功してしまうと、二度とやる気がおこらなくなった。(たぶんこれは幸いなことなのだろう)そしてそれまでほったらかしておいたコンテンツの作成のとりかかった。そしておよそ一ヶ月以上ぶりにVisual Cafeを立ち上げてプログラムの改良にとりかかる気にもなったのである。
まず環境の整備から始めた。今まで何度と無くMRJ2.0がpreview-releaseであることによる(と私が主張している)問題に悩まされたことは前述した。そのMRJ2.0はようやくリリースされた。
しかしどういうわけか知らないが、雑誌に添付されているCD-ROMになかなか登録されない。正式版のMacOS8.1にははいっているらしいのだが、これは金をださないと入手できない。
インターネットからは無料でダウンロードできるのだが、なんといっても大きさが8MB(?)以上ある。うーん。これだけのものを落とそうと思うと、、、インターネットが月$20でつなぎ放題だった(含む電話料金)アメリカの事をこのときくらいは懐かしく思い出してみよう。
しかし北東の空(アメリカがあると思われる方向)を眺めていくら涙したところで、手元にMRJ2.0が届くわけではない。極めて暇なある日、私はとうとう意を決してダウンロードにチャレンジした。
大きなファイルをダウンロードすると必ず途中でエラーが起こる、というのはマーフィーの法則にありそうな話だ。しかし今回マーフィーは休暇を取っていたらしい。何故かダウンロードがすんなり終わった。
どきどきしながらインストールをして、(例によってMacintoshのインストールはクリック何度かですんでしまう)どきどきしながら、前のプログラムを動かそうとすると。。。なにやらメッセージが表示されている。その文面は
_exceptionOccurred: java.lang.InternalError (Converter malfunction (MacTEC) -- please send a bug report to java-io@java.sun.com)
java.lang.InternalError: Converter malfunction (MacTEC) -- please send a bug report to java-io@java.sun.com
ご丁寧に2度も繰り返して「バグレポートを送ってください」ときたもんだ。
再び私はコンピュータの前で硬直することになった。バグレポートを送るのが親切というものかもしれないが、それが目の前の問題に対してなんになるというのであろう?仮にSunが悔い改めてバグフィックスを行ったところで、それがMRJに反映されるのはいつのことかわからないはないか。
例によって一晩寝てみたり、リセットをしたりしてみたが(あたりまえのことだが)情勢は変わらない。しょうがない、とあっさりMRJをあきらめ、Internet ExplorerのMicrosoftのJavaVMにたよることとした。
実はこの方法をとるとデバッガが使えないのである。しかし最近バグは大分収斂してきたし(少なくとも私はそう思おうと心に決めていたし)まあなんとかなるであろう、と勝手に決め込んでプログラム製作を続けた。
ほとんど忘れかかった記憶をとりもどしながらプログラムを眺め、、、改良を加えていったが依然としてノードはちゃんと収束してくれない。あいかわらずいつまでたっても景気良く動いているだけである。えーいとほっぽりだして、天井を眺めているうちに別のはるかに単純なアルゴリズムに思い当たった。
やはりKeep it Simple , stupidという原理は尊重しなくてはならない。このアルゴリズムも最初けったいな動作をして、私を絶望の淵においやったが、ちょっと改良を加えたら見事に動作した。結局表示された画面は最初私が頭の中に描いていたほどエレガントでもユニークでもないが、十分に動作するものだった。そして今度のプログラムは(これも前に書いたことの繰り返しだが、事実だからしょうがない)前のプログラムの1/3の長さであり、ちゃんと自分が何をやっているか理解できるのである。
さてなんとか動くようになったが、、、これからがまた長い長い道のりである。今度は人様に見てもらえるようにあちこちをちゃんとしなくてはならない。まず表示の色がめちゃくちゃだからそれをなんとかして、次に表示の端が、、という具合である。
しかし一度動き出せば今度こそこのプログラムが日の目を見る日が来るだろう。それがいつになるかは例によって全く断言できないが。(1998/5/11)
注釈
There is nothing new under the sun:(トピック一覧)いま辞書を引いていて気がついたが、このことわざはなんと聖書からの引用である。ありがたや、ありがたや。
さらにいま気がついたが、sun(太陽)はSun(コンピュータ会社)と同じ綴りである。きっとSun(コンピュータ会社のほう)の内部で「うちの会社新しいことやんねえからなあ。」と言ってこのことわざを引用することが一度や二度はあったに違いない。ちなみに私はSunが新しいことをやらない、とは思っていない。しかしどの会社にも内部からみれば「保守的、官僚的」という不満はあるものだろう。本文に戻る