題名:Java Diary-100章

五 郎の 入り口に戻る
日付:2009/7/31
目 次に戻る


Gorotte Part1

さて、ふたたび研究を生業として暮らすことになる。この生活がどれだけ続くかわからないができることはなんでもやらなくてはならない。 まずはWISSに応募だ。さて問題です。何を作りましょう。

SI屋生活をしている間にも、いくつかアイディアは頭に浮かびそして書きためておいた。それを眺める。どうもEvernoteに溜め込 んだ情報を組み合わせて云々という線がよさそうだ。もちろん今から他の構想に邁進してもいいのだが、そう簡単に「どかん」という方向が思 い浮かぶわけでもあるまいし。

というわけで以前一度だけ調査してほったらかしておいたEvernote APIについて調べてみる。Sandboxと呼ばれるテスト環境にしかアクセスできないか、と勝手に決めつけていたのだが、「本番環境にアクセスしたいで す」と申請をだせばだいたいもれなく認められるらしい。ならばこれを使って何か作れそうでは無いか。

というわけでまずはJavaで書いたサーバープログラムからEvernoteにアクセスするところを作り出す。指定されたアカウントに アクセスし、ノートの一覧を取得、その上で個々のノートの取得する、というサンプルプログラムはいくつも存在する。試してみれば簡単に動 く。わーいわーいとはならない。ここから先まだいくつも難関があるのだ。

次に試したのはGoogle App Engine上で形態素解析プログラムを動かすことだ。形態素解析とはなんだ、といわれれば日本語の文章を入力するとそれを単語単位に切り出し、おまけに 原型まで教えてくれるありがたい処理だ。世の中にはこうした処理をWeb上で提供しているものもあるのだが、一日あたりの回数が制限され ていたりしてなんとも具合が悪い。でもGoogle App Engineにのせるのって、、と思っていたが世の中にはそうした必要性にちゃんと答えた人がいるようで、Igoなるパッケージが公開されている。それを Google App Engineに導入し、、JavaだからSlim3というパッケージをいれ、、とGoromi-Tubeを作っているときに学んだことを思い出しながらあ れこれやる。

ここらへんを作っていたのは、情報処理学会の全国大会にでている時だった。発表は実に、、、が多かったのだが良い点もある。その間は心 置きなく開発に専念できるからだ。Slim3の説明書を読み、「まず最初にこれをやってみましょう」という手順を丁寧に実行し、さあ動か すぞとボタンを押せばエラーが起こる。何度やってもエラーが起こる。これはどういうことか。

あれこれ情報を探してみる。しかし頻繁に起こるエラーならGoogle先生で答えが見つかりそうなものなのに何もでてこない。でてくる のは、Twitterに存在する断片的な言葉だけだ。どうもこのSlime3のサポートはTwitterでやっているらしいのだが、情報 が散らばってしまい見にくいことこの上ない。そこからあれこれ推測すると、どうやら使用しているライブラリが実行環境に自動的にはコピー されないようだ。(これが何を意味しているかは知る必要は無いよ)手動でコピーすると見事に動き出す。同じ問題に突き当たる人もいるだろ う、と思い自分のブログに事の顛末を書く。

ほっとしたのもつかのままだ先は長い事に気がつく。取得できるのはEvernote独自の定義によるXMLファイルだ。つまりただの文 字情報ではなく、タグと呼ばれるものがあれこれ混じっている。これがあるから画像の表示とかができるのだが、今回は「文字だけ勝負」を考 えている。だからいらんのだ。タグまじりのXMLから文字だけ抜き出すにはどうすればいいのか。そういえばGoromiの最初のころは自 分で<>とかみて何やら作っていたなあ。そのあと「パーサー」なるものが存在することを知り、、とにかくそれを使ってあれこ れやりだす。

それが終わるとつぎにまっているのは「Evernoteに保存したWebページから”主要な文章だけ”を切り出す」という作業。これは 結構馬鹿にな らないほど面倒でやっかいだ。しかし2月にある研究会にでていたとき、それを解決するライブラリがあることを知る。これは良いニュース。 悪いニュースはそ れがRubyなる言語で書かれていることだ。誰か相当品をJavaで作っていないかと探してみたがさすがにそこまで世の中甘くはない。で はどうする。幸いな事にそのライブラリの作者は、基本的なアルゴリズムを文章で書いていてくれる。こうなればそれに沿って自分で作るしか あるまい。

ごそごそやって、えい、と動かす。えーっとだいたいうまく動いているように思うけど、なんだかおかしいな。どこが、、とかやっていると 会議室が揺れだす。そこからのできごとはこちらを読んでもら いたい。理論的にはホテルの床に座っている間プログラム開発もできたはずなのだが、私はそこまで筋金入りのプログラム開発者ではないよう だ。

さて、余震も落ち着くと開発再開。切り出した文章を形態素解析し単語にちょんぎり、サーバー側のデータベースに突っ込む。ここまででき たところで、今度はクライアント側を作り出す。久々のiOSアプリだ。(なぜ久々かといえば、一時Goromi-TubeをiPad上で 動かそうと一部試作をしていたからだ)えーっとCore Animationってどうやるのか、とかCoreGraphicsってなんのことだろうか、とかあれこれ調べながら作る。サーバーからちょんぎられた単 語を受信する。それをローカルのデータベースに保存する。(ここも一週間ぐらいかかったのだがそれは細かい事なので省略)それを並べ直し て画面に表示すれば文章になるはず、、、なのだが何かがおかしい。なーんとなくそれらしく表示されるのだが、単語が複数重なって表示され ておりとても読めたものではない。何かが間違っている。

あれこれ調べながら作り直す事しばらく。画面にEvernoteに保存した文章が表示されるようになった。ほっと一息とはならない。こ こで私は観ない振りをしていた問題に直面する。そもそもこのプログラムは何をするものなのか。そこが全く決まらないままなのだ。

ある人のブログにこんな提案があった。その人のTweetの中から「重要なもの」をピックアップし、並べて表示するプログラムはないだ ろうか。あえて縦書きにするとか。そうするとその人のよいようやくになるのではなかろうか。なるほど、と思う。その提案にすがろう、と 「縦書きはどうやるのか」ということについて調べだす。

すると世の中には何人か同じ問題に直面した人が居る事を知る。大まかな方針は示されていたり、あるいは別の言語 (Javascript)で実現したものも存在する。もちろんこれを根性でObjective-Cに移植することもできるし、それをやれ ばしばらくはなんだか手を動かしていることができる。

しかし問題は別なところにある。そもそもこれをどうやって「創作」に結びつけるのだ。その問題から目をそらして

「まあ縦書きができたからいいや」

というのは現実逃避である。縦書きがおもったより難しそうだから、というのは理由にならない。論文の締め切りは8月末。新しい会社に来 たので社外発表の許可をえるのにどれだけ時間がかかるかわからない。7月末に論文を完成させたいし、それまでにはある程度システムを使い 込んで

「ほら、こんなことができるんですよ」

という実例を溜め込まなくてはならない。このように締め切りから考えるととめどもなく日付がこちらに迫ってくる。なのにそもそも何をす ればいいのかわからん。

というわけで縦書き構想は一旦棚上げにする。さて、問題です。これをどうしましょう。evernoteのノートを表示することはできる けど、ここからどうしたらいいのでしょう。

というわけで簡単な問題に没頭する事はさけ、より厄介な問題に取り組む事にする。そもそもどうするのか?Evernoteに書いてある ことを組み合わせて新しい文章を作り出すとはどういうことだろう?

前の章 | 次の章


注釈