RAST in piece (メガンテ)
さりげなくLinux Conferenceに遊びに行ってみました。と言っても聞いてきたのはRASTとRuby stdioの2セッションだけだけど…普段Rubyいじっているわけではない上に、ものの1時間20分で消失(w 本当はもうちょっと聞いていたかったんだけど、仕事出来なくなっちゃうのでまあほどほどにしてきました。
RASTは、実は今日初めてどーいうものか知ったんだったりして。本当は明日やるらしい全文検索BOFとゆーところに参加するといいんでしょうけど、明日は行くつもりがないので、ここにだらだらっと書いてみます。と言っても僕はNgramとか本当にindex engineっぽい話は全然分からないのでその辺は割愛。(この時点でこのエントリはかなり無意味w)
RASTのアドバンテージは、やっぱしエンコーディングネイティブな検索でしょうか。いったんUnicodeなどに変換するとCHTMLなページで絵文字検索なんかが出来なくなってしまうわけです。
で、C#のフロントエンドがあるらしいんだけど、見あたらないので、APIがどうなっているのか分かりません。が…C#とかJavaみたいに、文字列の内部データがUTF-16ベースになっていると、結局Stringを検索対象として指定した時に、ネイティブだった文字列はUnicode文字列になってまうのではないかなあ。System.Encodingみたいにbyte[]を入力として受け付けるAPIになっていれば理屈としてはOKですが(でも面倒そう)。
そう言う意味では.NET(のSystem.Web)のCHTMLサポートなんて実はすげー意味がないのかも
あとutf-8があってutf-16が無いのはパフォーマンス的な問題かもしれないけど、例のMichael Kaplanがこの辺で興味深いエントリを残していて、参考になるんじゃないかなあと思う。特に日本語処理を意識した場合、utf-8の文字サイズはutf-16のそれより大きい(日本語のコードポイントはだいたいU+3040以上にある)っていうのは本当っぽい気がする。あ、でもutf-8がネイティブの環境も多いので微妙なのかなあ。
検索語の切り出しと文字列比較とエンコーディングまわりがまだ混ざってて云々というのはあの短い時間でも何度か繰り返されていたので、あえて僕が書くことは何もないでしょう…。
ところで↓のGoogle Codeには、MonodocにdotLuceneみたいなインデックスエンジンを付ける、っていうアイディアも上がっているんですが、C#が使えるならRASTもアリかもしれませんね。と煽ってみたりして(w
ていうかそもそもRuby.NETとかゆーのも書いてあるんですが(笑
あ、で書き忘れたけどstdio considered harmfulの話もけっこう面白かったです。専門外なんだけど分かりやすい内容でした。そーいやConsole I/Oは.NET 2.0でも何かいろいろ手が加えられてましたねえ。Gonzaloがその辺いろいろいじってたんですが、中まではヲチしていなかったので僕には分かりません…。今日の話題は、Dickが劇的に改善したdaemonless I/Oとは、あんまし関係し無さそうだった、かな、たぶん。もともとMonoはWindowsのI/Oをエミュレーションさせられる立場ですからねぇ。あんましRubyとはかぶらない気がします。
Google Code: Student Projects
所定のオープンソース プロジェクトに関連する開発を学生が立ち上げて、プロジェクトを上手く成功させたらGoogleが$4500出そう、っていう企画です。残念ながら学生さん限定。
この中にMonoも含まれています。他にはPython, Perl, Apache, Ubuntu, Gnome, Wine, Subversion, Googleが挙げられています。
詳しいことは僕は知らないので、興味のある方はMiguelに聞いてみてください。って、僕が仲介してもいいのかな。後で直接Googleとかとやりとりをすることを考えたら、僕が毎回英訳とかするのは無理じゃないかと思うけど(笑
かな、頭を良くしてあげよう
今日のMichael Kaplanのネタは日本語仮名文字ですねえ。長目のコメントを書いて投げてみたら、ひらがなが混じっていたからかエラー扱いされちゃいました。もしかしたら彼がサルベージするかもしれないけど、ここに要約を書くと
- U+3031やU+3032は直前の文字だけを繰り返すわけじゃないから(「かくかくしかじか」とか)、その実装はおかしい
- U+3005もたまに2文字以上の繰り返しで使う人がいるから、これを1文字の繰り返しと決めつけるのはおかしい
…えっと、最初にもいっこ何か書いた記憶があるんだけど、忘れちゃった。
コメント
ladybug — 06/03/2005 01:19:25
でもutf-8がネイティブの環境も多いので
外部ライブラリの API 層がインターフェスとして文字列を utf-8 形式と定めていることは結構ありますね。「環境」って、この「環境」?
Interop の DllImportAttribute.CharSet とか、足元動けば〜な auto/ansi/unicode/none から一歩進んで System.Text.Encoding の GetEncoder()/GetDecoder() を呼べるぐらいの構造にしてくださいよ、と。
(Microsoft や Mono のリクエストあさったらありそうだ)
atsushieno — 06/03/2005 01:39:25
はい、そういう意図です〜。GNOME 2.xとか、utf-8ベースですよね。ちなみにDllImportAttributeについては、akirameiさんもはまって(^^; ここでも一回取り上げた記憶があります。Monoではansiの時はロケール設定に限らずutf-8ベースですね。
ladybug — 06/03/2005 12:28:20
(そのときのやりとりで)Microsoft にしても、Mono にしても、どっちも自身のフレームワークが動くための足元しかみてないんだよな、と思いました。
ランタイムから見たプラットフォームに対してしか考えてないんですよね。
だからこそ「プラットフォーム相互呼び出し」なのかもしれませんが、属性設定だけで済む手軽な実装を提供してるんだから、もう一歩進んだライブラリ相互呼び出し機能としてユーザ(開発者)に提供して欲しいところです。
(軽〜く軽く検索したけど、こういうリクエストは見かけなかった…)
atsushieno — 06/03/2005 13:55:48
いやそんなことはありません。そのとき(っていうかmonoのMLで発覚したとき)のやりとりで、MiguelがMSに追加要望を出したんですが、何か内部フラグで使っているから空きがないとかいう変な理由ではねられたんですよね。Monoだけ直してもしょうがないので、こっちとしてはUTF-8でやるしかないわけです。