2009-09-15

CJK Indexing

Mozilla Fluxが変な煽り(ネガティブな意味じゃないです)と某所で相談されたので、sqlite3のコードを見ながら実装を考えた。そのときのメモ。

現在のsqlite3の場合、サーチインデックス自体は、FTS3と呼ばれるモジュール構造を使って実装することが可能で、これは検索ワード用の別のテーブルを作ることでインデックスを実現している。

で、AndroidとかMacOS XのSpotlightとかだと、libicuというIBMの作った多言語ライブラリを使っている。これは、WebKitでも使っているので、WebKitベースのブラウザだとこれを使うことでの(コードサイズやメモリ使用量的な)コストはないに等しい。そのため、libicuは使うことにはWebKit的にはネガティブにはならない。

ただ、これがGeckoだと話が別。

外部のOSSのコードを持ってくるとき、Mozillaなやり方だとスタティックリンクで持ってくるのが普通なんだけど、これは非常にコードサイズを増加させてしまう。なので、libicuをそのまま使うということはよくない。

ただ、MacOSの場合は、OSでlibicuを持っているので動的にロードして使うことで、メモリ使用量の増加はたかが知れている。Linuxだと環境に依存する(この場合はある意味無視したほうがいいけどね)。Windowsだとこのライブラリを持ってないため、コスト面で不利。なので、libicuを使うことは諦めた。storage周りやっているShawnもlibicu使うことは否定的だしね。

また、Windowsだと、Indexing Serviceのワードブレーカーを使うコードを試したところ、速度面は問題ないのだけどブレーカーの精度の部分で納得いかず保留。それにプラットフォームでいろいろ変更するのは、Mozillaらしくない。

なので、porter+CJKのみbi-gramという方式で実装してみたところ、自分のメール環境で1.5倍のデータベースサイズの増加 (今まではCJKはブレイクなし) + 速度 (Althon64 X2 2.2GHz <- メイン開発環境)も問題を感じないので、それでテストパッチを作成してみた。

今の時期だと正直微妙なので、拡張でも対応可能なレベルで作っているというのが、今回の最大のポイント。

ちなみにMeCabとか使うのは却下。中国語の辞書ってどうするのよ。

2009-09-04

T-01Aの加速度センサーの実装をつくった

とある場所で、T-01Aを使う機会があったので、ついでに加速度センサーの機能をMozillaに実装してみた。

使い方は、ファイルしたバグに貼り付けたソースコードを見てくれればわかるが、TSRegisterAcceleration() でハンドルを持ってきて、TSGetAcceleration() で値を取得、TSDeregisterAcceleration() でハンドルを破棄するだけ。C# での使い方の場合は、http://smartmobidevice.blogspot.com/2009/08/toshiba-tg01-and-accelerometer.htmlに情報が載っているので、それを見てください。

Webブラウザが加速度センサーの情報を取得できるとくだらないことがもっと出来そうで、面白いよね。Dougの作ったボールのサンプルなんて、すごくショボいのに面白すぎて、10分くらい遊んでしまった。

それにしても、ガジェットとしての出来はT-01Aは相当良い。2台目需要としては、相当イイトコロ行っている。悔やまれるのは、OSがWindows Mobile 6.1だってことかなぁ。これで相当な減点材料。あと、この端末を触るまでSnapdragonには懐疑的だったけど、このチップ速すぎ。