題名:Java Diary-32章

五郎の入り口に戻る

日付:2002/11/6

目次に戻る


GMail-Part4

GMail開発中に記録していた「日々の作業」の続き。「日記シリーズ」(今命名)はたぶんここで打ち止め。2月9日〜10日はいきなり思い立ち、船で八丈島に行っていたのである。そんなとこまで行って何をやっているのやら。

ーーー

2/9

ホテルで一心にプログラミング。何をやっているのやら。 昨日の続きで実装をあれこれやる。とりあえずコンパイルエラーが消えて、やってみると昨日紙の上で考えた仕様はいまいちなことに気がつく。結局やってみないとわからないから、適当に進むというのも悪いことではないのかもしれない。

これで一通りできたことになる。とはいっても過去の経験からすればこの

「一通りできた」

から

「人様に公開できる」

までの道のりははてしなく長いはずだ。コメントつけて。馬鹿なコードや、いらなくなった処理を外して。 

[注釈]

八丈島まで行って一心不乱にプログラミングするのもどうかと思うが「あともうちょっと」と思っている時はそんなことは気にしない。そして「まだ先は長い」と自覚しているからと言って先が短くなるわけでもない。

2/10

帰りの船の中で暇になったので、コンセントをさがしキーで操作する事をあれこれ考える。

最初はNSTableViewのサブクラスをつくればいいと思ったが、見た目を全部プログラムで整える必要がある。(少なくとも今のところは)暇だからチャレンジしたのだが全くなにも表示されなくなり断念した。

暇なのでドキュメントを読んでいると、First Responderで処理されなかったイベントはSuperviewに渡されるとある。ということは上位に何かViewをはさめばいいのかもしれない、というわけで、かなり下の方にKeyevent処理用のCustomViewをつっこむこととした。こんな妙な物をつっこんですべての動作が鈍くならないか心配だが、とにかくキーイベントはとれるようになった。

そこで調子にのってGMailにつっこんでみたがキーイベント取りこぼしがひどい。5回に3回は失敗し、とてもフラストレーションがたまる。がっかりして、キーの検索をKeyMEthodのequalからStringにかえたら好調に動くようになった。

[注釈]

他のブラウザ(XCosや茄子というNifty用のもの)を使っていて便利だと思うのは、キーをぽんぽんたたくだけで次々とメッセージを読んだりスクロールができることだ。いちいちマウスなりトラックパッドに手をやる必要がない。

「一通りできた」という幻想に浸っている私はデバッグよりも新たな機能の実現に向けて走り出す。どうせ船に乗っている間は何もできないのだ。2等船室だから雑魚寝部屋。その中をコンセントのあるところを探してうろちょろする。

座り込むとさっそくキーをたたき始める。理論的にはキーが押された、という情報をとってそれに応じた処理をしてやればよい。簡単な話だが問題はこの「キーが押されたという情報をとって」というところにある。それはいったどこでとれるのだ。

ドキュメントをあれこれ見るとイベントが発生した画面部品からその画面部品を包含している別の部品に伝わっていく、と書いてある。なるほど。ではそうした情報(ここからイベントと書くが)が伝わってきたら処理をするような部品を既存部品のサブクラスとして定義してやろう、とそこまでは考えた。

しかしまだ先は長い。今回画面部品の配置だの構成だのは全てInterface Builderでやっているがこの上では自分が造ったサブクラスは配置できないのである。一見できそうに見えるところがもっと始末が悪い。実はこの

「できると思ってやってみたができなかった」

というのは今までに少なくとも3回はやっている。つまりそのたびに忘れるのだ。

さて、NSTableViewのサブクラスを造ろうとしたがうまくいかず、頭に来た私はイベントを処理するだけの部品を下の方につっこんだ。そこまできたイベントは全てそこを通るからそこで好きな処理を書いてやればよい。このときはうまくうごくわい、とご機嫌になったこの方法だがしばらくして

「何だ。このいっさい他の役にたっていない部品は」

と思うようになる。それから今に至るまでこのキーイベント処理は頭痛のタネになっている。

2/11

残りのキー設定画面を作る。ただし項目がすくないのでとてもまぬけ。変更用の画面を作る。最初シートでやったがうまくイベントがとれない。マウスはとれるがキーがとれない。そこからWindowに切り替えるが妙なエラーがでる。まさかと思ってメソッド名を変えたらなおった。こういうエラーって多いなあ。クラス名がまずいとかね。

夜にいきなり通信状況の表示パネルを外す。プログラムからも外す。必要になれば前のバージョンを観ればよかろう。

[注釈]

キーで操作できるようにしたからにはその設定を変更できる画面を造らねばならぬ、とあれこれやっている。「妙なエラー」がでてどうにもならんと思ったが、関数名がシステムのお気に召さなかったようだ。ドキュメントをきちんと読めばどっかに書いてあるのかもしれないが、こういうトラブルには何年かに一度出くわす気がする。遠い昔初めてCでプログラムを書いていた頃、write()という関数を自分で造って妙な事になったこともあった。

それまでメールの送信、受信をしているときは、床屋のマークのような表示をつけていたし、それには結構労力を注いでいたのだがここに至ってはずすことにした。この表示が出ている間一切操作ができないもの困りものだから。貧乏性なものだから一度造ったものはなかなかはずせなく、画面からははずしてもプログラムだけは残しておいたりするのだが、そうしておいて再度使ったことがないのも事実である。

2/12

朝キー懸案であった「アドレスを追加しようと思ったらもうあるよ」の処理を追加しようとする。Alert Sheetはすぐだせるのだけど、表示を更新する処理をちゃんと考え直さなくちゃならないことに気がつきちょっと考えて取り組むことにする。

帰って表示の整理を行う。それに疲れて夜にいきなりHTML表示を試みるがうまくいかない。

[注釈]

プロが造ったプログラムとアマチュアが造ったプログラムの差はエラー処理にある、とどこかで読んだことが有るし、そういうセリフを聞いたこともある。(そのセリフを吐いた男が造ったプログラムはアマチュアのそれだったが)私はアマチュアなのだが、いくらなんでもアドレスを重複して登録することくらいはチェックしなくてはならない。とはいっても機能を造っている時はそちらにばかり目がいってエラーチェックは後回しになる。

と手を出してみたのはいいけど、やっぱり面倒で今度はHMTLメールの表示なぞに手を出している。これをObjective-Cでやる方法はそこかしこに書いてあるのだが不幸にしてJavaを使ってどうやるかは不明なのであった。これは今に至るも不明である。

2/13

朝から一生懸命アドレス表示の整理。設定画面のところで、入力しただけで保存されるようにしようかと思ったがうまくいかず断念。全般的に入力の確定は問題が多い。

既存の設定をImportするクラスを作り始めた。とはいってもどうやって組み入れたものやら。OMEUtilityはあると便利だなあ。

2/14

朝電車の中で設定読み込みを作る。ちょっと妙だけど一度しかつかわない機能だからいいか。この一度しか使わない、というのを結構考えたけど、まずPreferenceにフラグをたてて、あとは読み込む方式にした。何度もでてきてもうっとうしいし、最初にマニュアルを読めともいえないし。まあこれでいいことにしよう。

あとはテストをちゃんとやったらアルファ公開。3月1日くらいかな。。 

必要にせまられ返信したメールにrplyをつける処理を追加。それとともにアルファ公開をめざしダウンロードページを作成開始。

[注釈]

私は設定ファイルの書き方を3秒と覚えていられない人間なので、必要な設定は画面から行えるようにしている。さて、問題です。OMEを最初にインストールするとあれやこれやの設定がなされる。その内容をGMailにどのように取り込めばいいでしょう。

取り込むこと自体はしょこしょこやればできる。問題はいつ、どのように読み込むのか、ということだ。一度GMailで読み込んだらあとはGMailを使って更新していいくからもう読まなくていい。とはいっても「手動で読み込んでください」とすると、そのとき一度しか使わないメニューを追加することになり、なんだかもったいない。しょうがない。プログラムの方で最初に一度だけ読み込むことにしようか、とこのときは考えた。しかしこの決定はこの後しばらくに渡って私を悩ませることになる。

2/15,2/16,2/17,2/18

あまりプログラムにはさわらず、公開にむけて説明書かき。最初はいろいろ図表をいれて、と思っていたが、いざ書き出すと面倒になり、項目が減ること。

マニュアルにそって使おうとすると時々妙なことに気がつく。前に接続してあったアクションが切れていたり。少しレイアウトを変えたり、小さなところをちょこちょこ直す。

[注釈]

公開が近くなったと自分で思いダウンロードページなど造っている。頭の中で考えている時はスクリーンショット満載の分かりやすいものにしよう、などと考えているのだがいざ作り出すと面倒だ、という叫びのほうが強くなる。かくして画像はだんだん減っていき今や説明用の画像は0になってしまっている。これでも人に造るのを頼めば「もっと絵をいれて分かりやすく」とか平気で言うのだろうな。

2/19

マニュアルを書いていたら、「引用して返信」という機能は設定のチェックボックスでもいいのではないか、という気がしてきた。あれこれ他のメーラーを見たり、悩んだりした末、いきなり変更。引用して返信はボタンからは消えた。その変わり「全員に返信」ボタンがついた。

[注釈]

何をボタンで選択できる機能にしようか、と悩んでいる。「返信」と「引用して返信」を別々のボタンにしていたのだが、ふと気がつくと会社で使っているメーラーには「引用して返信」というボタンがない。デフォルトで元の文章を引用することになっている。であるからしてメールの往復が続くとずらずらと引用メールをお尻にくっつけた長文メールが飛び交うことになる。

はて、他のメーラーはどうなっているのか、とかなんとか考えたあげくその機能はボタンからはずれた。とはいっても捨てるのももったいないので、「全員に返信」という機能に割り当てることにした。だからプログラムを観ればこの機能に関係するファイル名やら変数名が機能と合っていないことが分かる。そのときはいいや、と思うのだがしばらくたってから自分で観ても「これは一体何をやっているのか」頭をかかえることになる。

2/21

通勤時間に「メールの移動」メニューを追加。それから他のサイトで「80になる母に使わせるメーラー」という記事を見て「あれ、ボタンはだめなのか」と思ってしまった。。でもいいや。とにかくこれでいく。それともう一つ

「文字の大きさが変更できなくちゃ」

ということが書いてあり、自分でも小さすぎるかと思っていたところなのでがんばってつけてみる。Tableのフォントを変更するのが少してこずる。だけど動き出してみると結構快適。ひょっとすると私は老眼になったのだろうか。

[注釈]

元々このプログラムを作り始めたとき「父に使ってもらえる」という目標があった。そんに向けてあれこれやってきたつもりだったのだがある人が書いた「80になる母に使わせるメーラー」という文を読んでまだ考慮がたりないことに気がついた。

「簡単なアドレス帳で十分」など私が考えていたことと一致する主張もあったのだが、「ボタンは使えない」というのはちょっと意外だった。だって、そこに書いてあるのを押せばいいから楽じゃんとおもったのだが、きっちりと「○○メニューの△△を選ぶ」としたほうがいい、という意見。実際にお年寄りのパソコン教室などにいった今で有れば

「そもそもマウスで小さな領域を選択させるということが無理だ」と言う気もする。

その他に「小さな字は読めない。字の大きさが変更できなくちゃ」という主張があり、なるほどと思ったので文字の大きさを変更する機能を付け加える。自分にとっても予想以上に快適。考えてみるといつもコンピューター上の米粒のような文字ばかりみているなあ。

前の章 | 次の章


注釈