五郎の入り口に戻る日付:2002/11/6目次に戻るGMail-Part5(Ver0.1,0.2)2002/03/01あれこれ前フリばかり書いていましたが大坪でございます。それとは何の関係もないのですが、OME_GMailなるプログラムをサイトで公開しましたのでお知らせします。URLはhttp://www.vt.sakura.ne.jp/~grgr56/GMail/gmdownload.htmlであります。足りないところやら試験がちゃんとできていないところ、それは山のようにあるのですがいつまでも一人でいじりまわしていてもしょうがない、と思い「えいや」と公開するのです。このMLの中だけでの公開にしようと思っています。ご意見、ご感想、バグレポート、改善意見その他もろもろお待ちしております。大坪五郎@わおーん---自分一人でプログラムをいじくっていると、そのうち「ええい、公開してしまえ」という気になるものだ。3月1日ということでキリがいいとも思ったのだろうし、当時最高潮に達していた仕事のストレスもなにがしかの後押しになっていたのかもしれない。公開して直後にバグレポートが来た。ウィンドウが真っ白になってその後何も起こらないというのだ。あれこれやりだすと原因はすぐに判明した。メール題名一覧の下には本文を表示するエリアがある。その分割はユーザーが自由に設定できるようにしているが、一度設定した大きさはプログラムの終了時に記憶しておくようにしていた。最初に起動したときはどのような値にしておけばいいでしょう?私はこの事をすっかり忘れていた。して最初に誰も大きさを設定してない状態で立ち上げると題名一覧が高さ0になってしまうというわけだ。この「まっさらな状態で立ち上げるテスト」の必要性はSETI@SUpportの時に何度も感じたにもかかわらず面倒だし、という理由でほっぽらかしておいたのが敗因であった。試験するときには関連する設定ファイルを全部移動させて、テストが終わったら戻さなくちゃならないんだもん。考えているうちに気がつく。Xなのだからテスト用のアカウントを作れば、わざわざいま使っている設定を移動とかさせなくても”まっさらな状態”の試験ができるではないか。自分の愚かさを呪いながらVer0.11をアップロードする。その直後またもやバグレポートがくる。今度は虹色アイコンが回り続け立ち上がらないという。メールを読んだ私はあれこれやましいところについて考えを巡らす。不幸にして「やましい点」はあまりにもたくさんあるものだからどれが問題だかわからない。やっかいなことにそのトラブルは自分のところで再現しないから原因は推測するしかない。最初に考えたのは”メールを入れるフォルダに日本語が使われていると問題があるのではないか”という事。これならすぐ試験できる、と思ってやってみるとそれが原因ではない。そのうちMLに別の人が「時間がかかったけど起動しました」というメールを投稿した。自分の環境以外では絶対に起動しないわけではないとしって一安心である。なると原因はなんなのだ。思ってコードをあれこれ観ていると自分がものすごく馬鹿な事をやっていることに気がついた。フォルダ一覧を表示する部分のコードで「全ての」メールについてNSFileWrapperというオブジェクトが生成されるようになっていたのである。意図的にやるのなら、それも一つの方法かもしれないが、私はそのことに気がついていなかった。生成したNSFileWrapperは再度参照されることもなく、また必要な時には作り直される。して実行時間とメモリは不必要に消費されていたのだった。私が読み書きしているメールの量は少なかったから「まあ遅いけどこんなものか」ですんでいたのだが、すでに大量のメールを受信していた人の環境では「ずっとNSFileWrapper作ってるっすー」という状態になって立ち上がらなかったのだ。自分の愚かさを恨みながらあれこれ改良を加えるというよりは、本来最初にやっておくべきだった”ちゃんと考えて作る”というのを今更のごとくやり始める。すると直さなくてはならないところが山のようにあることに気がつく。次のバージョンVer0.2の公開は4/13になった。Expoがあり、OMEのブースで私はGMailを見せたりあれこれしていた。それまでにもメールの数が増えてくると動作が遅くなるのには気がついていた。メールが多いからいけないんだ。これはフォルダ内のメール数が一定数を超えたら自動的にバックアップフォルダを作る機能でも作ろうか、とあれこれ考えていた。OMEの説明をしながら改めて自分で使ってみるとどう考えても無茶苦茶に遅い。それはGMailに対し世界で一番寛容なユーザーである私ですらいらいらするほどに。それまでにNSFileWrapperを山のように作るような馬鹿なことは止めていたにもかかわらずである。フォルダを選ぶと「瞬時に」題名一覧が表示されるのである。コードを観てもそhれほど変わったことをやっているようにも思えない。14/03/27あらためてGMailをなんとかしなくちゃ、と思い、休み中にフォルダ内容一覧表示の時間を計ってみました。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というメーラが発表されていることを知った。それを観た私はふっとんだ。なんとこのメーラーは題名一覧、本文、フォルダ一覧などなどを全て自由に配置することができるという。この機能があればやれフォルダ一覧を引き出しに表示するかどうかなどと悩まなくてすむではないか。おまけに題名一覧が一行おきに色つきになっており大変見やすい。感動はしたものの、今更自分のメーラーを捨てるのもなんだし、画面を自由に配置できるようにするのも面倒である。いうわけで題名一覧に一行おきに色をつけることだけまねすることにした。思ってもどうやったらいいか分からない。ドキュメントを読み「こうやればいいか」と思いコードを書いても変な表示にしかならない。Xのメーリングリストというのは偉大で問題に突き当たった時には大抵回答が書いてある。あれこれ検索したらこの”一行おきに色をつける”やり方もちゃんと書いてあった。その機能が動くようになるとなんだかご機嫌である。実用上の意味云々よりも、なんだかかっこいいプログラムを使っているような気分になる。気分だけではいかんともしがたい問題もたくさん残っているのであった。