たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
XUL/Migemo勝手改造版の新版を公開した。目に見える所では、アイコンを追加したのと、クイックMigemo検索(自動的に始まる、もしくは「/」キーで開始する検索)の終了トリガーを変更できるようにしたくらいしか違いは無い。
根本的に変わったのはバックエンドで、先日から取り組んでた事の成果を反映して、主要な部分をXPCOMコンポーネント化した。以下、開発者向けの情報。
JavaScriptによるXPCOMコンポーネント作成の練習に、XUL/Migemo勝手改造版の主要な部分をXPCOMコンポーネントにするという実験をやってみた。
ブランチ切って昨日一日作業してたんだけど、それなりにうまくいったようなので、すでにTrunkにマージはしてある(Subversionでブランチ切ったものを再び統合するやり方が分からなくて右往左往したのは秘密だ)。
Thunderbird 2でメッセージ内検索がFind As You Type/Find Barベースの物に変わったということで、これから仕事でTb 2をいじくり回す機会も増えてきそうだからその練習も兼ねて(?)、XUL/Migemo勝手改造版をTb 2に対応させてみた。あと、Tb 2対応のためにコードの一部を若干抽象化したので、その勢いで同じくFind Barを使ってる「ソースの表示」ウィンドウでもXUL/Migemoを使えるようにしてみた。
新規プロファイルでTb 2(2.0正式版リリースに向けた最新のナイトリービルド)を起動して気がついたけど、「戻る」「進む」って初期状態でツールバーに表示されてるのね。カスタマイズで自分で追加しなきゃいけないって聞いてたから「ありえねー」と思ってたけど、単に旧バージョンからプロファイルを引き継いだ人だけがそうなるってことだったのか。
あとGmailのアカウントを簡単に設定できるようになってた(名前とメールアドレスを入力するだけでOK)のは地味に嬉しい。内部的にはただのアカウント設定のテンプレート内蔵ってことなんだけど、こんな調子で有名どころのサービスを一通り網羅してくれてれば、個人ユーザ向けにお薦めできるポイントになると思うんだがなあ。
plus7さんによるXUL/Migemoの実装の解説を見ると分かる通り、XUL/Migemoでは正規表現での全文検索を実現するためにDOM2 Rangeの機能を使っている。この方法は素直に使うとscript要素の内容やstyle要素の内容、その他非表示の要素の内容にまでヒットしてしまうということで、氏は色々と工夫されていた。
takenさんが紹介されている、nsIScriptableUnescapeHTMLを使えばこの件について改善できるか……? と思ったけど、調べてみたらこの機能はFirefox 2以降でしか使えないっぽい(Fx 1.5では使えない)。残念。
まあ、軽く見た感じでは、全然別のDOMDocumentFragmentを生成するものということで、どちらにしろXUL/Migemoでは利用できなかったかもしれないんだけど。
Migemoの元々の開発者の高林氏による横着プログラミング 第2回: Migemo: 日本語のインクリメンタル検索という記事の中に、「Migemo」の名前の由来の解説があった。
「にゃんマゲみたいにポケモンにマゲをつけてマゲモンはどうだろうか」という発言が発端となって
マゲモン → マゲモ → Magemo → Migemo
な、なんだってー!! 何かの略語かと思ってたよ……XUL/Migemoのフォーク版なんてものを扱ってるのに今の今まで知らなかったし。
XUL/Migemo [Forked Edition]の挙動がおかしいのを直そうとしてハマってしまった。検索欄に長い文字列をペーストして検索を実行しても正常に検索できないという問題。
色々条件を変えて試してみたら、どうも、検索できなくなってるんじゃなくて、リンク内の文字列のみ検索するモードに強制的に切り替えられてしまっているようだった。しかし検索モードを指定するフラグの値を変更しても全然効果が現れない。
Type Ahead Findの実装の深いところを見てみてびっくらこいた。検索バッファ(最後に検索した文字列)が空の状態で検索を始めて、且つ、accessibility.typeaheadfind.linksonlyがtrueの時は、強制的にリンク内検索モードになるように書かれてるじゃあないですか。そりゃあ、いくらやっても無駄なはずだよ……
つうかコレ書いた人何考えてんだろう? 普通のページ内検索でこの設定を参照する意図が全然わからない。これってクイック検索の時専用の設定じゃないのん? まあ、そもそもこの問題に引っかかったのは何らかの理由でaccessibility.typeaheadfind.linksonlyがtrueになってしまってた(初期状態はfalse)のが原因なので、こっちのせいといえばこっちのせいなんだけど。
とりあえず、検索を実行する前に検索文字列の最初の1文字で検索してからもう一度長い文字列で検索するようにしてみたところ、accessibility.typeaheadfind.linksonlyがtrueでも問題なく意図通りの動作をするようになってくれるところまでは確認できた。でも、これって変なやり方だよなあ。たぶんaccessibility.typeaheadfind.linksonlyをfalseに設定するのが本道なんだと思う。でもこの設定を本来の目的で使いたい人はどうすればいいんだろう? 全く訳がわからない。
Fx2でこの問題が起こることを確認したけど、Fx3ではどうなのかは未確認。そっちでも起こってるようならいよいよバグ報告してみようか(どちらかというと機能要望?)。
久々にXUL/Migemoを更新した。標準の検索ツールバーの挙動を見てたら、XUL/Migemo入れてると検索ツールバー出しっぱなしにしたままタブを切り替えるとかそういった操作ができなくなってしまってたことに気付いたので、その辺りをきっかけに色々改修した。
元のXUL/Migemoでは、ヒットした語句全部をハイライト表示したらシャレにならんからということでこの機能が無効になってたんだけど、よく考えたら、ヒットした正規表現の内容を全部ハイライトせんでも、実際に今ヒットしてる単語でハイライト表示したらよくね? ということに気がついたので、この機能は復活させた。
一番手こずったのは、テキストエリアの中も検索できるようにするという変更。色々試行錯誤してどうにか形になったので入れてみたけど、若干動作が怪しいところもあるので、まあ、そういうものだと思ってください。
ついでに先日Trunkに入ったという、選択範囲の内容で検索を開始する機能も入れてみた。秀丸とかのエディタでは普通にこういう挙動だしね。
とまあそんな具合で、常時XUL/Migemoをオンにしててもそれなりに使えるようにはなってきたと思う。
XUL/Migemo勝手改造版に辞書の自動インスコ機能つけました。XUL/Migemoを初めて導入する人が多分真っ先に躓くであろうポイントの解消は、本家XUL/Migemoが登場したときからずっと「こうだったらいいのになあ」と思ってたことだったので、それを解決できて何となく感慨深い。
Greasemonkeyの旧版とか拡張機能マネージャのコードとかDownload Statusbarとか関係ありそな物を片っ端から調べてみたけど、結局のところnsIWebBrowserPersistを使ってダウンロードさせるのが、ダウンロードの進行状況を見たりするためには一番確実みたい。で、そうやってダウンロードした物をnsIZipReaderで展開する、という。
その辺のコードはdownloader.jsにまとめたので、もし興味のある人がいたら見てみてください。って、こんなのちょっとでもマトモにプログラミングの勉強した人にとっちゃ常識なのかな……
まあとにかくこれでXUL/Migemo導入の敷居がぐっと下がったと思うんで、今まで使ったことのない人もこれを機にぜひともMigemoの快適さを体感していただきたいところです。(←えらそう)
XUL/Migemo [Forked Edition]のページに簡単なチュートリアルを加えてみた。配布しといて何も説明無しってアレだよな……と思ったので。
追記。英訳もしてみた。
XUL/Migemoの動作の中で一番のネックになっているのは「辞書から正規表現のパターンを生成する」処理だそうで、そのために、本家XUL/Migemoでは200KB近いキャッシュファイルまで用意されていた。plus7さんの環境では一文字のパターンに対するキャッシュを生成するのに14秒もかかった(その間Mozillaはフリーズする)とまで書いてあって、他をどんなに改善してもここが足をひっぱってるんじゃあなあ、という感じだ。
んで、少しでもこれを高速化できないかな?と思って自分の分かる範囲で考えてみた。