題名:Java Diary-33章

五郎の入り口に戻る

日付:2002/11/6

目次に戻る


GMail-Part5(Ver0.1,0.2)

2002/03/01
あれこれ前フリばかり書いていましたが
大坪でございます。

3月になりましたね。それとは何の関係もないのですが、OME_GMailなるプログラムをサイトで公開しましたのでお知らせします。URLは

http://www.vt.sakura.ne.jp/~grgr56/GMail/gmdownload.html

であります。
まだ足りないところやら試験がちゃんとできていないところ、それは山のようにあるのですがいつまでも一人でいじりまわしていてもしょうがない、と思い「えいや」と公開するのです。

しばらくはこのMLの中だけでの公開にしようと思っています。ご意見、ご感想、バグレポート、改善意見その他もろもろお待ちしております。ではでは。

大坪五郎@わおーん

---

自分一人でプログラムをいじくっていると、そのうち「ええい、公開してしまえ」という気になるものだ。3月1日ということでキリがいいとも思ったのだろうし、当時最高潮に達していた仕事のストレスもなにがしかの後押しになっていたのかもしれない。

公開して直後にバグレポートが来た。いきなりウィンドウが真っ白になってその後何も起こらないというのだ。私は泡を食った。あれこれやりだすと原因はすぐに判明した。メール題名一覧の下には本文を表示するエリアがある。その分割はユーザーが自由に設定できるようにしているが、一度設定した大きさはプログラムの終了時に記憶しておくようにしていた。さて、問題です。一番最初に起動したときはどのような値にしておけばいいでしょう?私はこの事をすっかり忘れていた。かくして最初に誰も大きさを設定してない状態で立ち上げると題名一覧が高さ0になってしまうというわけだ。

この「まっさらな状態で立ち上げるテスト」の必要性はSETI@SUpportの時に何度も感じたにもかかわらず面倒だし、という理由でほっぽらかしておいたのが敗因であった。だって試験するときには関連する設定ファイルを全部移動させて、テストが終わったら戻さなくちゃならないんだもん。などと考えているうちに気がつく。Mac OS Xなのだからテスト用のアカウントを作れば、わざわざいま使っている設定を移動とかさせなくても”まっさらな状態”の試験ができるではないか。

自分の愚かさを呪いながらVer0.11をアップロードする。しかしその直後またもやバグレポートがくる。今度は虹色アイコンが回り続け立ち上がらないという。メールを読んだ私はあれこれやましいところについて考えを巡らす。そして不幸にして「やましい点」はあまりにもたくさんあるものだからどれが問題だかわからない。さらにやっかいなことにそのトラブルは自分のところで再現しないから原因は推測するしかない。

最初に考えたのは”メールを入れるフォルダに日本語が使われていると問題があるのではないか”という事。これならすぐ試験できる、と思ってやってみるとそれが原因ではない。そのうちMLに別の人が

「時間がかかったけど起動しました」

というメールを投稿した。自分の環境以外では絶対に起動しないわけではないとしって一安心である。しかしとなると原因はなんなのだ。そう思ってコードをあれこれ観ていると自分がものすごく馬鹿な事をやっていることに気がついた。

フォルダ一覧を表示する部分のコードで「全ての」メールについてNSFileWrapperというオブジェクトが生成されるようになっていたのである。意図的にやるのなら、それも一つの方法かもしれないが、私はそのことに気がついていなかった。だからせっかく生成したNSFileWrapperは再度参照されることもなく、また必要な時には作り直される。かくして実行時間とメモリは不必要に消費されていたのだった。私が読み書きしているメールの量は少なかったから「まあ遅いけどこんなものか」ですんでいたのだが、すでに大量のメールを受信していた人の環境では

「ずっとNSFileWrapper作ってるっすー」

という状態になって立ち上がらなかったのだ。

自分の愚かさを恨みながらあれこれ改良を加えるというよりは、本来最初にやっておくべきだった”ちゃんと考えて作る”というのを今更のごとくやり始める。すると直さなくてはならないところが山のようにあることに気がつく。

次のバージョンVer0.2の公開は4/13になった。その間にMac World Expoがあり、OMEのブースで私はGMailを見せたりあれこれしていた。するともう一つのブラウザOME_BroweserXCoS との速度差が気になる。

それまでにもメールの数が増えてくると動作が遅くなるのには気がついていた。そうか、メールが多いからいけないんだ。これはフォルダ内のメール数が一定数を超えたら自動的にバックアップフォルダを作る機能でも作ろうか、とあれこれ考えていた。しかしOMEの説明をしながら改めて自分で使ってみるとどう考えても無茶苦茶に遅い。それはGMailに対し世界で一番寛容なユーザーである私ですらいらいらするほどに。それまでにNSFileWrapperを山のように作るような馬鹿なことは止めていたにもかかわらずである。ところがOME_BroweserXCoS ではフォルダを選ぶと「瞬時に」題名一覧が表示されるのである。コードを観てもそhれほど変わったことをやっているようにも思えない。かくしてExpoの後私はこう書いた

---

平成 14/03/27
あらためてGMailをなんとかしなくちゃ、と思い、休み中にフォルダ内容一覧表示の時間を計ってみました。OME_BroweserXCoS の5−6倍時間がかかっている。。。
うーん。これは私がタコなせいか、あるいは。。。

ではでは。

大坪五郎@わおーん

---

"あるいは。。。”の後に私はこれはJavaをのせいではないか、と書こうとし、思いとどまった。(OME_BroweserXCoSはObjective-Cで書かれている)言語のせい、OSのせい、環境のせい、とにかく自分以外のせいだと安直に主張する奴がろくなプログラマであったためしがない。しかし他に原因が思いつかないのも確かである。

とはいっても今からObjective-Cで全部書き直すというのもとんでもない話だしなあ。などと考える私は再び時間の計測などやりだす。そもそもどこで時間がかかっているのだろう。ロジックを変更してまた時間を計る。時々

「をを。これで2割方早くなった」

とか思うのだが実はそれは計測誤差だったりする。あからさまに馬鹿な処理は削ったのだけど、まだまだ遅い。最後にメールの内容をまったく読まず、ファイルをオープンする処理だけ行っても、OME_BroweserXCoSでメールの内容を読んで表示した時よりも遅いことがわかった。これではなんともならんではないか。

そう考えて前掲のメールを書いたわけだが、OMEの主催者である新居さんからレスポンスがあった。なんとObejctive-Cではディスクの一部を仮想記憶のようにメモリとして割り当てる機能があるとのこと。これでは勝負にならないのも当たり前。となるとObjective-Cを使うしかない。全部ではなく一部だけObjective-Cにすることはできるだろうか。試行錯誤の末その方法を発見し、時間を計ってみると確かに早くなっている。

しかしそれは前のGMailを比べての話であって、依然としてOME_BroweserXCoSよりは遅いのである。ええい、とりあえず公開してしまえ、ということでVer0.2を公開した。今から観るとこのVer.2での変更点の多さに驚く。というより、よくここで新しく追加された機能無しでVer0.1を公開したもんだ。

しかし”前向き”な改善もいくつか盛り込まれている。GMailでは返信分を引き出しに表示し、本文と並べるようにしているから、横幅というのは大変貴重な資源である。そう思って普通のメーラーでは本文表示と題名一覧の横に表示しいてるフォルダ一覧を本文表示の上に配置していた。そしてこれは工夫の一つだもんね、と一人悦に入っていたのである。

ところがだんだんこの配置が鬱陶しく思えてくる。フォルダ一覧の長さが短いから、下の方のフォルダを観るためにはスクロールせねばならん。この頻度をなるべく減らすべく、”受信箱”と”送信箱”というボタンを付け、それぞれ押された方のフォルダだけが表示されるようにしていたが、これも一度にフォルダを全部表示するのに比べボタンを一回押す手間が余分にかかる。おまけに私はあまりフォルダをたくさん作らないが世の中にはもっとたくさんフォルダを作る人だっているかもしれないではないか。

そう思い、フォルダ一覧を本文横にでてくる引き出しに”も”表示できるようにした。つまりは切り替え式にしたのである。好きな人は引き出しに表示してください、というのが当初のもくろみだったがそのうち自分がいつも引き出しを使っていることに気がつく。つまりは当初私が”工夫だもんね”と思っていた配置は使いづらいということだ。

そうやって画面の配置にあれこれ悩んでいた頃、私はNameraというメーラが発表されていることを知った。それを観た私はふっとんだ。なんとこのメーラーは題名一覧、本文、フォルダ一覧などなどを全て自由に配置することができるという。この機能があればやれフォルダ一覧を引き出しに表示するかどうかなどと悩まなくてすむではないか。おまけに題名一覧が一行おきに色つきになっており大変見やすい。

感動はしたものの、今更自分のメーラーを捨てるのもなんだし、画面を自由に配置できるようにするのも面倒である。というわけで題名一覧に一行おきに色をつけることだけまねすることにした。そうは思ってもどうやったらいいか分からない。ドキュメントを読み「こうやればいいか」と思いコードを書いても変な表示にしかならない。

こういうときMac OS Xのメーリングリストというのは偉大で問題に突き当たった時には大抵回答が書いてある。あれこれ検索したらこの”一行おきに色をつける”やり方もちゃんと書いてあった。その機能が動くようになるとなんだかご機嫌である。実用上の意味云々よりも、なんだかかっこいいプログラムを使っているような気分になる。しかし気分だけではいかんともしがたい問題もたくさん残っているのであった。

前の章 | 次の章


注釈