題名:Java Diary-60章

五郎の入り口に戻る

日付:2005/4/16

目次に戻る


SmartCalendar-Part1

さて、WISSから帰ってきた私は、インタラクションというカンファレンスにGoromiのデモを申し込んだ。しかし見事に「誠に残念ながら」という結果になった。

何がいけなかったのか、とReviewerのコメントを読んでみれば「WISSと同じ」「チャレンジ技術がない」「”半受動的閲覧”の位置づけが不明確」「キーワード抽出と配置のアルゴリズムがキーだが、記述がない」といった指摘だ。なるほど、と思う。今回のデモ用原稿はWISSの半分に縮めたのだが、内容の選択には気を付けねばならぬ、ということか。しかし”チャレンジ技術”ってなんなんだ。ここ数年口を開けば「技術がない」と宣うお客様に悩まされているせいか「技術」という言葉にアレルギーを起こしつつある。その上に「チャレンジ」とつけられても、はて何のことやら、と言ってはいけない。やはりReviewerに解ってもらえるように書かねばならぬ。今度から「チャレンジ技術」という一章を設けることにしよう。

もう一件提出していたのは表の仕事でやっていること。こちらは無難な内容もあってか見事通過となった。このインタラクションには3年前から参加しているが、今年はようやく「観客」ではなく「発表者」になれたわけで、やはり「観るなんちゃらよりは踊るなんちゃら」だなあという思いを深くする。他に何件かの発表もなされる。面白いのもあればなにやらよくわからんのもある。後者の時間私はあるプログラムをごきごきと作っていた。

話は2月の7日に遡る。この道(例によって自分で書いていてどの道かわからないが)で有名な某研究室が研究展示会をやっていた。首をひねるもの、うむとうなるものいろいろあるが、なんと言ってもそこに来ているスーツ姿の多さには驚く。いろいろなメーカーから見学に来ているのだろう。弊社ばかりでなく大抵のメーカーでやれ「技術がない」とか「位置づけがはっきりしない」とか言っているうちに、面白そうな使い道のアイディアはどんどんしぼみ、そのあげくこうやって大学に頼っているのではなどと勝手な想像をふくらませる。

さて、そこではWriterとして有名な美崎さんという方も発表をしていた。この人は家にものすごい容量の記憶装置を持ち、日々撮影した写真やら雑誌を写真にしたものやらを常時閲覧しているので有名な人である。去年のインタラクションでは自分のことを「一日に100枚写真を撮る男」と称していた。そしてこの日披露されたのが新ネタSmartCalendarであった。

お上が主宰している「未踏ソフトウェア」というものがある。新しいアイディアのソフト開発にお金を出します、というものだ。どのくらいの倍率か知らないのだが、そこでこのソフトは採択されたものだという。その日観ることができたのは、写真が撮影日に応じて、カレンダー状に配置され一定時間ごとに切り替わるというものだった。

それをみていてあれこれ考える。確かにカレンダー配置の写真というのは良いアイディアかもしれない。しかし画面のあちこちで写真が切り替わっては見づらいのではなかろうか。Goromi で経験したことだが、人間の目が集中して観ることができる範囲は狭い。画面のあちこちに写真を出しても見ることはできないのだ。

と文句を言っているだけでは面白くない。ではどうしたらいいだろうか、と帰りの電車の中であれこれ考える。そうだなあGoromi のページ内容表示のように、下から上に順次スクロールさせてみるか。などと言葉で書くと簡単に思いついたようだが、かなり長い間中に視線をさまよわせてぶつぶつ言っていたのも確かである。例によって周りから観れば不気味であっただろう。

さて、そう思いつくとさっそくつくろうかな、と思う。いや一日二日待ってみよう。今までもこうした妄想にとらわれたことは何度もあったが、すぐ消えたではないか。しかし二日経ったがまだ妄想は頭の中に残っている。では作りましょう、ということでごそごそ造りはじめる。

Goromiからいくつかのクラスを移して、、でもって写真のハンドリングはとりあえずiPhotoというApple純正の写真管理ソフトに頼ることにした。このソフトはは月日ごとに作ったディレクトリの中に写真とそのサムネイル(小さな写真だ)を作っていれてくれるのである。このディレクトリを読み込めばなんとかなるだろう。

記録を(というか撮った写真を)観ると、その週の土曜日には早くもカレンダー状に写真を配置することができた。やってみるとこれが意外に面白い。その月、その週何をやっていたが、本人にはおぼろげにわかるのだ。かつて写真というのは貴重なもので、撮影する際にはみなでしゃちほこばったものである。しかしデジカメの普及と共に、時刻表から冷蔵庫の中身からとにかく何でも撮影するようになった。そしてこのソフトを使えばまさしく日記代わりになるのかもしれん。

さて、それと前後して私はインターネット上にある場所に「家展で美崎さんのSmartCalenderを観た。 コンセプトはすばらしい。。。しかし私だったら写真の表示の仕方を変える」と書いた。それをさっそく美崎さんに見つかり、「では作ります?」とメールが来た。文句だけ言って何もしないのは私が常に忌み嫌っている態度だ。であるからして多少の自覚がある場合にはそれをできるだけ避けたいと思う。そこで私は「やります、というかもう作り始めてます」と返事を出した。

2月の17日に美崎さんの家に行き、あれこれ打ち合わせをする。そのときまでに月のカレンダー表示と下から上にスクロールする写真表示はできていた。Windows版は既に着手されていたので私はMac版を作ることになる。とはいってもこの時はpure Javaで作っていた。これにはある理由がある。

美崎さんのSmartCalendarというのはスケジューラー兼写真閲覧ソフトといった趣の仕様になっていた。しかし私は会社の仕事以外でスケジューラーを使わない人なので、どちらかと言えば写真閲覧のほうに興味がある。そしてあれこれ作っているうち

「これは家族間での写真共有にいいのではないか」

と思い始めたのだ。

構想はこんな感じである。私の家と実家、それに姉の家にそれぞれこのソフトをインストールしておく。写真をとったらとにかくパソコンに取り込む。でもって一日に一回くらいそれぞれのソフトがお互いに新しく追加された写真をやりとりする。すると例えば私の実家では

「あら、五郎がまた変な写真をとってきたわ」

とカレンダー表示をみて思うわけだ。

赤の他人が観たらつまらないと思うような写真でも親族が観ればそれなりにおもしろかろう。あるいは写真自体には全く興味がなくても

「新しい写真が来た」

ということはとにかく元気で何かしている、ということを知らせる事にもなる。こういうひそやかなコミュニケーションというのはなかなかいいのではなかろうか。

でもって私の家と実家にあるのはMacだが姉の家にあるのはWindowsである。それぞれの家をつなごうと思えば、どちらでも動くJavaを使う必要がある、というのがこの時の狙いだった。

正式に開発に加わることになり、登録されたメーリングリストで私は概略このような事を述べた。しかしその舌の根も乾かぬうちにこの構想は崩壊に向かっていたのである。

問題は「写真とサムネイルファイルの対応付け」である。何のことかと言えば、前述したようにiPhotoというソフトは登録された写真をその日付のフォルダに入れ、おまけに自動的にサムネイルまで作ってくれる。これはとても有り難いのだが、ファイルだけを観ていたのではどのサムネイルファイルがその写真ファイルに対応しているのかわからない。ファイルの名前順に並べ替えるとなんとなく対応がとれそうなのだが、時々間違っている。いや、いい加減な閲覧ソフトだから多少の間違いは気にしない、と開き直っていたのだが、それでは回避できない問題があることに気がついた。

写真の中には完全な写り損ないもあり、あるいはあまり人には見せたくないものもある。このため、写真ごとに「NG」「本人限定」「家族ならOK」「Webに載せても問題ないよ」というランク付けをしようと考えていた。ところがこれがうまくいくためには、写真とサムネイルがちゃんと対応していなくてはならない。例えば写真に「本人限定」の印をつけておいても、サムネイルが間違って対応していると、そちらが表示され恐ろしいことが起こるかも知れない。

あれこれやってみたがどうしてもファイルだけでは対応がつかない。はて、どうしたものかと考える。するとiPhotoがAlbum.xmlという巨大なファイルを作っている事を知った。中を見るとどうやら写真とサムネイルの対応、それにいくつかの情報がXML形式で記録されているようである。あまりiPhotoが独自に作っているファイルに依存すると将来困りものだ、と考えてはいたのだが、この際背に腹は替えられない。

よし、これを利用しようと決めたのはいいがすぐ壁にぶつかる。このファイルはMacのCocoaの環境では簡単に使えるようになっている。というかCocoaで之を読み込むと、そのままNSDictionaryとかいう辞書として扱うことができるのだ。ところがJavaで読むと単なるXMLだから読み方はあれこれ工夫せねばならぬ。

さて、XMLを読み込むためには、、と情報を探しあれこれやるがなかなかうまくいかない。元はといえばちゃんと勉強もせず、勘だけにたよって解析しようと言うのが間違っているのだろうが、とにかくうまくいかない。そのうち「ええい、これをもうCocoaで読み込み、結果だけ渡してやろうか」と思い出す。となるとCocoaで書いたところとPure javaつなぐのってどうするんだろう、、。

などと考えているうち、月表示だけでは面白くない。年表示ができないかと思い出す。ごそごそやったらうまくできた。わーいわーいと思うがまだ元の問題は解消していない。そのうち頭に来て

「ええい。もうWindows版の事は知らん。とにかくCocoa+Javaで作ってしまおう」

と考え出す。Goromiのときは最初Cocoa+Javaで造り、其の後Pure Javaに持って行った。今度は逆である。グラフィックス関係は上と下からして違うからまた随分作り直しになる。それでもなんとか月表示はできた。

しかしそこで又思い直す。とにかくPureJavaは年表示まで作っているではないか。それを捨てるというのは勿体なくはないか。というわけで再度Album.xmlの読み込みにチャレンジする。少し真面目に考えたらなんとか必要な情報が取り出せるようになった。わーいわーいと考え大きなバージョン(それまでデバッグ用に小さなファイルを読んでいたのだ)を読んだら愕然とした。異常に遅いのだ。数分経っても読み終わる気配がない。うぐぐぐと思い決断する。ええい、もうCocoa+Javaにしてしまおう。

というのをインタラクションの間やっていたわけだ。表示はだんだんできあがっていく。作りかけのプログラムであっても表示させると面白いだから日々やたらと写真を取る。基本的には自分が

「こんな表示の仕方があったら面白いかも」

といものをごりごり作る。最初は月の表示。次に年表示を作った。一ヶ月あたり3枚までしか表示できないのだが、それでも結構面白い。次に一日表示を作る。これには結構手間がかかった。こういう部分を作るとなると少しの間集中して考える必要がある。その時間をどこで捻出したかというと、某シンポジウムである。年度末の忙しい時期というのに私は二日間行われるシンポジウムにただ出席していた(つまり自分の発表は無かったと言うことだ)面白い話もあるが、つまらない話はそれより多い。というわけでその間あれこれ考えてごりごり作る。一日の時間スケールをどうやって作ろうか。そこに写真をどのように配置すればいいか。あれこれ試行錯誤の末なんとか動くようになる。

さて、一日表示ができれば週表示がほしくなる。しかしこの「週」というやつはなかなか厄介だ。何が問題かというと、それまで年、月、日表示を考えていたのでデータを月単位に分けて管理していた。ところが週というやつは月をまたいだりするのだ。ええい、どうしてくれよう。いっそのこと日だけもつようにしようか、あるいは週という区分でもデータを持つようにしようか。

などとパソコンに向かえない時間は頭のなかであれこれ考える。よし、こんなところでと思いコードを書き始めるとたちまちにして方針はごろごろ変わっていく。

などとあれこれやって週表示ができあがった頃、美崎さんが

「Mac Mini買ってきたら使えますか?」

と言い出した。私は作りかけのバージョンをサイトの目立たぬというか知らない人には到達できぬ場所にアップする。いつものことながら自分が作ったプログラムが人様のパソコンの上でも動く、というのは一種の驚きである。(そして実際よそ様のパソコンに持っていた途端、問題が発覚することもよくある)

「いい感じに動いてます。<、>ボタンはまだ作ってないんですよね」

とメールが来る。いや、前の月(もしくは年、日、週)次の、、ボタンも一応作ってあるし、私の環境では動いて居るんですけど。そうですか。動きませんか。うーん。これはデータの持ち方を根本的に考えなくちゃだめだな、とあれこれ考えたり書き直したりする。こういう間は表示がかわらないから使っていても面白くない。しかしここで問題を放置しておくと確実にひどい目にあう。うんうんうなりながらあれこれ直す。しかしなあ、Eclipseは書いた途端に単純なエラーを指摘してくれるのだが、あれは便利だったなあ。このXCodeではコンパイルして"13 erros"なんてのを観てからしょこしょこ直さなくてはならん、、などとのろいの言葉をつぶやきながら作る項目がつきることはない。

前の章 | 次の章


注釈