たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
SearchLoad Optionsがすでにそういう機能を持っているから。以上。
まあそういう「車輪の再発明はもういいよ(しかも再発明するメリットがないし)」という理由以上に、自分の中では「その機能がヘドが出る程嫌いだから」っていう理由の方が大きいんですけどね。
元々セカンドサーチを作るより前にSearchLoad Optionsの存在を知って、「検索実行後に元の検索エンジンに戻す」という機能のことを知って、心の底から呆れた記憶がある。「ハァ? 何その発想。ありえねえ。理念も実装も全然スマートじゃない。『別の検索エンジンで検索しました。でもその後はその検索エンジンに切り替わったままです。普段使いの検索エンジンに戻ってなくて困ります。』オーケー、ユーザの声としてそういうのがあがってくるのは分かる。でもそこでどうして『じゃあ、検索し終わったら普段使いの検索エンジンに戻しましょう。』って発想になるわけ? そうじゃないだろ。そもそも『一時的に使いたいだけの他の検索エンジンに切り替えて(1)、検索して(2)、検索が終わったら普段使いの検索エンジンに戻す(3)』っていう風にやたらステップが多くてめんどくさい事が問題なわけだろ。その最後の(3)だけ省略できるようにしましたワーイワーイ!って、アホか。もっと頭使えよ。せっかくやるんだったら、その3ステップ全部省略しないと、時間かけて物を作る意味がないだろ。『文字を入力したら検索エンジンの一覧が自動的に出てきて、選択したら即検索される(1)』こうだろJK。その知的怠惰が気にくわない。」という感じである意味怒りに燃えて作ったのが、セカンドサーチなわけです。「これ以上ステップを省略するには脳にプラグ直結する以外無い」ってとこまで突き詰めて考えないと、ダメだと思うんだ、ホントに。
だから、僕がメンテナンスを行っているバージョンにおいては、セカンドサーチにその機能を付ける事はきっとあり得ない。すでに省略され消滅したはずのステップをわざわざ意識しないといけないようにする、なんて選択はよっぽどの事がない限りはしたくない。まあライセンスはMPL/GPL/LGPLなので、フォークしてそういう機能を持ったバージョンを誰かが作る事を止めはしませんけどね。
XUL/Migemo 0.11.1を公開してAMOにアップロードしたら妙に早く承認されて「へえ」と思っていたら、新規インストール時に特に発生する致命的な問題が存在していたことがついさっき判明して、速攻でAMOにログインして当該バージョンを公開停止にしようとしたんだけど、これ今になって気がついたけどファイルの削除はできても特定のバージョンの「公開停止」という措置は取れないんか……公開ページ上の最新バージョンは0.11.1と表示されててダウンロードボタンも緑色なのにクリックするとファイルのダウンロードに失敗する、という妙な状況になってしまった。せめて前のバージョンをダウンロード可能にしてくれればいいのにぃ。
つい先ほど、修正を施した0.11.2をアップロードしたものの、これが公開を承認されるまではずっとこの状態なんだろうか。困った。
しかしまあ何というか、ちゃんとレビューされてなかったのね、ということを今更ながらに実感した次第です。苦笑……できない。
XUL/Migemo新版を公開した。
池田さんに教えてもらうまで存在を知らなかったSearch Markerのような、検索のヒット位置をスクロールバー横に表示する機能を追加した。Search Markerとは以下の点が異なる。
これの絡みで、選択範囲とか強調表示とかまわりの処理をだいぶ書き直した。強調解除で選択範囲が復元されなかったり、強調表示した状態での再検索がやたら重かったり、といった細かい問題が色々直ってるはず。
検索にヒットしてフォーカスされた箇所を画面中央に表示する機能は、以前実装してみたもののいざ使ってみるとウザくて全然使ってなかった。そのウザさの原因はどこにあったのかというと、多分、すぐ次の行とか近くにある語にヒットした時まで強制的に画面がスクロールして、ページのどこが表示されてるのか分からなくなってしまいがちという所だったのだと思う。というわけで、画面の端から30%内側のラインより外にある時だけスクロールするようにした。Safariとかはこういう動作になってたと思う。どうしてFirefoxの素の検索機能はこういう所で気が利いてないんでしょうね。
スクロールといえば、クイックMigemo検索中にページをスクロールしている間はタイムアウトのためのタイマーを止めるようにしてみた。スクロールして眺めてるのにハイライトが消えてしまってムカツク、ということが何度かあったので。
そんな感じの細かい改善が結構入ってます。
んげ。今LDRでふと検索を試してみたら、スクロール全然できなくなった。iframeではないCSSによるスクロール可能なボックスのことを考えるのを忘れていた。
他にもやってる人いそうだなあ……
前のエントリの追記が多くなったので分ける。
「すべて強調表示」の強調箇所がspan要素ではなくnsISelectionになった件については、nsISelectionControllerの選択範囲の型の中にSELECTION_FIND
というのが増えていて、ユーザの選択範囲や検索で現在フォーカスがあたってる箇所を表すSELECTION_NORMAL
とは別に管理されていることが分かった(nsISelectionControllerのメソッドを使うとこれらの型別に選択範囲の一覧を取ることができる)。ということで、「どっちも同じ選択範囲だったらどうやってフォーカス箇所を取ればいいんだ!」という問題は杞憂だったと判明した。
あとはパッチと実際の新しい実装を見ながらFirefox 3.1用のコードを書いて、Safari風強調表示を有効にしてる時だけFirefox 3.0までと同様のspan要素を使うハックを復活させるようにしたところ、アニメーション効果も無事動くようになった。元々、XUL/Migemoでは正規表現にマッチする箇所をまとめて強調しないといけない関係上、span要素を使うハックの処理のほとんどを自前で再実装してたので、思った程には大規模の改修はしなくて済んだ。
一個だけ躓いた所として、XPCOMコンポーネントの新しいメソッドをIDL定義に追加して引数にnsISelectionController型のオブジェクトを渡すようにしていた所、XPIDLでのコンパイルは通るんだけど実際に使う時にNS_ERROR_XPC_CANT_GET_PARAM_IFACE_INFO
というエラーが出てにっちもさっちもいかなくなってしまった。ダメ元で、引数の型をnsISupportsにして受け取り側でQueryInterfaceするようにしてみたところ、ちゃんと動いてくれた。一体何だったんだろうこれは。
textbox要素のsearch型については、パッチを見た限りでは今の所サイドバーの「ブックマーク」と「履歴」でだけ利用されていて、XUL/Migemoのやってるハックには影響しないようだった。
ロケーションバーの方もテストしてみようと思ったらこれが全然動かなくなってて、調べてみたらmozIStorageServiceのopenDatabase()
メソッドでplaces.sqliteを指定して開く所で「ファイルがロックされてるぞゴラァ」と怒られていた。ななななななんてこった!!! SQLite Managerで見ようとしてもやっぱりロックされてて見れないと言われる。どうも不用意な書き換えでデータベースが破壊されないようにロックがかかるようになったようだ。これはやばい。PlacesデータベースにSQLでアクセスできなくなったらXUL/Migemoのロケーションバーまわりの実装の苦労が全て水の泡になる上に、Firefox 3 Hacksで物凄いページ数使って書いた内容がまるっきり無駄になるじゃないか。マジで一瞬気が遠くなった。
精神的に半泣きになりながらmozilla-centralでスマートロケーションバーまわりのコードを調べていたら、いくつかの箇所でDBConnectionとかStorageConnectionとかそういう文字列が登場していて、それをキーに調べてみたらnsPIPlacesDatabaseというインターフェースのDBConnection
プロパティからPlacesデータベースへのコネクションオブジェクトにアクセスすることができるらしいということが分かった。このインターフェースはPlaces API関係のサービスが実装していて、以下のようにすればアクセスできるという事も分かった。
var dbConnection;
if ('nsPIPlacesDatabase' in Ci) { // Firefox 3.1 の場合
dbConnection = Cc['@mozilla.org/browser/nav-history-service;1']
.getService(Ci.nsINavHistoryService)
.QueryInterface(Ci.nsPIPlacesDatabase)
.DBConnection;
}
else { // Firefox 3.0.x の場合
const DirectoryService = Cc['@mozilla.org/file/directory_service;1']
.getService(Ci.nsIProperties);
var file = DirectoryService.get('ProfD', Ci.nsIFile);
file.append('places.sqlite');
if (file.exists()) {
const StorageService = Cc['@mozilla.org/storage/service;1']
.getService(Ci.mozIStorageService);
dbConnection = StorageService.openDatabase(file);
}
}
ホント焦った……4日のトークセッションで土下座せなあかんかと思ったよ。
ちなみにその4日のトークセッションですが引き続き参加者の方絶讃募集中です。9月4日19:00から池袋ジュンク堂にて開催。参加費1000円ワンドリンク制(多分)で定員40名、電話か店頭で申し込む必要があります、としつこく宣伝しておきます。どうかよろしくお願いします!!!!
一旦は実装完了したと思ったんだけど実はまるっきり仕様を読み違えてた事が判明してから直さなきゃと思ってるうちに夏コミがあったりFirefox 3 Hacksの校正があったりですっかり放置してた、Firefox 3.1からの新機能への対応をぼちぼちと。
ていうかこの絞り込み機能、めっさ使いにくい気が……せめて初期状態のキーワードはもうちょっとわかりやすい物にした方がいいと思うんだ。こんなそこいらの使われてない記号を適当に当てはめただけのものなんて、とても憶えられんよ。
しかも複数指定可能とかで頭がこんがらがってきたので、手戻りを防ぐために自動テスト書いたりもしてみた。こういう時ほんとにUxUがあって良かったと思う。
あとlevelさんのエントリの後半で触れられてるスマートキーワードとの連携についても、パッチを見ながら実装してみた。でもこれって実装を見る限りPOSTメソッドのスマートキーワードには非対応ですよねぇ……どうすんだ?
他に、すでに開かれてるタブにマッチした時はどうこうするという話も出てるみたいだけど、僕としては本家の実装が出てきてからその動作を真似る形を取らざるを得ないので、現状は様子見です。
ああ、あとすべて強調表示が選択範囲になったことへの対応もしなきゃなあ。見た目の問題だけじゃなく、今のXUL/Migemoは選択範囲の位置で現在の検索のフォーカスを判断してるから、何もかもが動かなくなる予感。
textboxのsearch型というのは何か影響するんだろうか? 影響有りならこれも対応しないと……
なんか気がついたらDan Kogai氏が書評書かれてた。内容には触れてないけど。このエントリからのトラフィックでAmazon.co.jpのランキングが結構上がったらしいです。すごいね。
内容の中で僕がピンと来る物は、以下のような感じです。
他はまだちゃんと見てない(ひどい)。
関連イベントのお知らせ。
FirefoxNITE:Ustream使ってダラダラやってたアレの新装開店リニューアルオープンついでのスペシャル開催みたいです。8月27日20:00から渋谷bartubeにて開催、参加費3800円。参加登録が必要なので宴会君からどうぞ。
Firefox 3 Hacks NITE:本書発売記念のトークセッション、だそうです。bartubeのソレとは全然無関係に、9月4日19:00から池袋ジュンク堂にて開催。参加費1000円ワンドリンク制(多分)で定員40名、電話か店頭で申し込む必要があるとの事です。
誰も来なくて関係者だけで反省会、というのは怖いので、物申したい方の多くのご参加と喧々囂々丁々発止のリアルモヒカンバトルに期待しております。
状況がよく分からなかったので改めて調べてみたことのまとめ。
Firefoxその他のMozilla製品のソースコードはこれまではCVSでバージョン管理されていて、MXR(Mozilla Cross-Reference)というサービスを使うと最新の内容をオンラインで検索できた。mozilla1.8(リンク先はMXR)を見ると、Firefox 2.0.0.xやThunderbird 2.0.0.xのコードを検索できる。
しかしCVSが使いにくいということで、Mercurialという別のバージョン管理システムに移行しようという話がずっと進んでいたそうで、Firefox 4を目指しているTrunkのリポジトリがmozilla-central(リンク先はMercurialのWebインターフェース)という名前でMercurial上に作成され、すでに自動ビルドも動いているという。
ちなみにMercurialがらみでよく「Hg」という単語が出てくるけれども、これは、水銀(mercury)の元素記号がHgだからだそうで、コマンドラインツールのコマンド名等も「hg」になってるんだそうな。知らんかった。
自分が把握できていなかったのは、以下の点。
結論としては、以下のことが分かった。
以下、まだ分かってないこと。
すっかり時機を逸してしまった感がありますが、Firefox拡張機能開発チュートリアルのPDFを公開しましたことをここに告知いたします。このサイトかもじら組のFTPサーバからダウンロードできます。Creative Commonsなので一定の条件下で自由に転載、改変、再配布可能です(誰かMDCに転載してHTML版作ってくれないかなあ……と、誰ともなしに無茶振りしておきます)。
内容は、Software Design誌2007年4月号第2特集「Firefox拡張機能開発チュートリアル」として掲載された記事をFirefox Developers Conference Summer 2007でテキストとして頒布するために再録したもの(この度の公開にあたって既知の間違いは修正してあります)で、XULやXPCOMの紹介から、実際のアドオンの作り方、オープンソースなライセンスの紹介まで一通り扱っています。Firefox 2を前提に書かれていますが、Firefox 3やThunderbirdでも基本的にはそのまま利用できます。
8月発売予定のオライリーのFirefox 3 Hacksに書いた内容は、アドオン作るの初めてという人は完全置いてけぼりなので、まずはこちらで予習される事をお勧めします。
なお、このFirefox拡張機能開発チュートリアルでチュートリアルの章を執筆されているGomitaさんが、技術評論社WebサイトにてFirefox 3でのアドオン開発記事を連載されています。御託はいいからとりあえず作らせれ! Firefox 3の機能もソッコー使いたいんだ! という場合はこっちからご覧になるのがよいかもしれません。
クレジットには名前が挙がっていませんが、PDFにしてもらう際にほとんどの作業をご担当いただいたNさん、訂正箇所の反映作業を行っていただいたMozilla Japan吉野さんに感謝です。
やっと一般公開、長かった…
(mal_blue@tumblr)ごめんなさいほんとごめんなさい。実は、2007年のDevConでテキストとして再編集して配りたいという話になった時点で、Creative Commonsにして公開したいという話も同時に出ていたと記憶しているのですが、イベント直前での判断だったのでCCにする場合のメリット・デメリットをきちんと検討できる余裕がなく、イベント終わってからに先送りされて、それっきり忘れ去られてた時間がずっとあって、今年4月のOSC長岡の頃にDevConで刷った冊子がなくなりそうだから誤字を直して増刷しようとなった時にやっとその話がまた動き出して、誤字訂正のついでにライセンスの検討と関係者各位にライセンス変更の確認(CC-BY-SA+MITライセンス)を行って、その時増刷された物の時点でもうこのライセンスになってたから実はスキャンするなり手打ちするなりして再配布されても全然OKな状態だったし、PDFもできあがってたんですが、何故かズルズルと公開が遅れてしまっていました。まあ、先日のFirefox 3 Hacks校正会の時についでに僕の担当箇所のミスを2カ所修正してもらった(nsIConverterInputStreamとnsIConverterOutputStreamを使う所でバッファサイズを決め打ちにしてしまっていたせいで、サンプルをそのまま使うと読み込む内容や書き出す内容が1024バイトでちょん切られる問題があった)ので、公開が遅くなったのが全く無意味だったというわけでもないと言いたいところなんですが。
昨日は丸一日、朝から晩までFirefox 3 Hacksの校正を著者全員(+オライリーのM氏)でやっていました。僕は自分の担当部分だけでイッパイイッパイだったので他の方の担当章までは全然見れてないですが。
8月発売予定です。