たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
ruby-align、ruby-overhang、line-stacking-ruby(これはRuby ModuleではなくてLine Module)の仕様書を読みながらこれらを実装してみている。line-stacking-rubyはruby要素上下のマージンの動的設定でも使わないと再現できないので、display:inline-table
が使えるGecko 1.9(Minefield)でなければline-stacking-ruby:include-ruby
で固定になる。
まぁ、どれだけ意味があるかは甚だしく疑問で、ほとんど意地(と現実逃避)ですね。
ということでその成果をXHTMLルビサポート 2.1.2008031701として公開した。設定項目とその効果は基本的に上記の仕様通り(各設定項目の初期値も仕様の初期値)なので、何がどう変わるのか分からんという人はそちらを見てください。
ツリー型タブでタブバーの表示・非表示を切り替える時の画面のちらつきがUZEEEEEEEEEE!!というのは前々から把握してたんだけど、一時的に画面描画を止めるとかそういうのはJavaScriptのレイヤからは手が出せないっぽいので放置してた。AutoHideではC++あたりでXPCOMコンポーネントを作ってどうにかしてるようだけど、そんなん僕には作れないし。
でもよく考えたらHTML Canvas使って解決できるんじゃね? と思って、そういう物を作ってライブラリ化してみた。fullScreenCanvas.show()
を呼ぶと、今のウィンドウの表示内容のスクリーンショットを貼り付けたような状態のCanvasがウィンドウ内の要素の最前面に表示されます。画面がチラつくような処理をその下でやって、終わったらfullScreenCanvas.hide()
でCanvasを消す、という風にすると、ユーザにイヤンな思いをさせないでいろんな事ができるかも知れない。ブラウズ領域のスクロールバーの部分が描画されないのはどうにもならなかった。
以下、工夫した所。
XULとCSSのポジショニングの組み合わせは、Gecko 1.9でもバッドノウハウの塊ですね。
Firefox 3のタブにFirefox 2と同じプレースホルダーを復元するライブラリと併せて、MITライセンスでの公開とします。
追記。canvasついでに(意味不明)、タブバーの後ろにcanvasを置いてうそっこ透過タブバーを実現してみた(描画内容が微妙にズレることがあるのは勘弁してください)。これで、ページの閲覧を邪魔されずにタブバーを使えるようになるだろうか?
ここ最近のツリー型タブの状況まとめ。
先週末くらいから現実逃避度合いが加速して、それがそのまま頻繁なバージョンアップに繋がっています。この1週間くらいでやったことのうち大きなトピックは以下のような感じか。
他、細々とした改善が多数。だいたいAMOの配布ページのディスカッションに寄せられてた障害報告や要望への対応が多い。
以前TBEをやってた頃は、あまりに規模がでかかったこともあって、とてもじゃないけど他の拡張機能のために配慮するなんて事はできなかった。その点ツリー型タブとかの最近作った物は、なるべく機能を絞り込むように・見通しがよくなるように気をつけている(つもり)ので、あの頃よりもずっと楽にコードを書けてると思う。具体的に名前が挙がったアドオンについて、わりと片っ端から対応用のコードを書いていけてるのも、そういう事情があってこそだ。
しかしいくらサンドボックスから出られたからとはいえやたらたくさんコメントが付いて、正直追いかけるのだけで大変だ。何でだ?と思ってたら、数日前にlifehackerで紹介されてた。コメント欄を見てみると、おおむね好評なようで嬉しい。Firefoxのユーザ全体のうちこの拡張機能を使ってくれてる人の割合は物凄く小さいものだとは思うけど、英語圏はなにぶん人の数が桁違いに多い。英語でリリースしておくと日本語だけでリリースするより多くの人に誉めて貰える&喜んで貰えるので、僕のような構ってちゃんで誉めてもらえないとロクに動けない人間にとっては、その点では都合がいいと言えるかもしれない。
マルチプルタブハンドラによる複数タブのドラッグ&ドロップに対応するためのAPIの説明を書いた。拡張機能作者の人は、なんかおもしろい使い方を考えてください。
なお、このAPIはバージョン0.2.2008022701以降で利用可能です。
まーこんな記事誰も読みたがらんだろうとは思いますが。ここ数日取り組んでたマルチプルタブハンドラでの複数タブの同時ドラッグ&ドロップ処理について一段落付いたので、やったことのまとめを文章で残しておこうかなと。
さて。タブのドラッグ&ドロップの処理になんかの機能や処理を加えようと思ったら、まず思いつくのは、gBrowser(tabbrowser要素)をnsDragAndDropのオブザーバとして利用するために定義されているonDragStart、onDragOver、onDragExit、canDrop、onDrop、getSupportedFlavoursあたりのメソッドを上書きするというやり方。実際、ツリー型タブではそうしてる。Tab Mix Plusの場合はもいっこ上のレベル、ondraggestureなどのイベントハンドラを書き換えてnsDragAndDropに渡すオブザーバそのものを入れ換えるという事をやってるけど、まあ、これも要するに同じことですね。
ただ、マルチプルタブハンドラの場合はその方法は使いたくなかった、というか、使えなかった。自分の使い方ではツリー型タブとの組み合わせが必須なんだけど、そうなると、もしマルチプルタブハンドラの実装を同様の方法でやってしまったら、組み合わせて使うと二つの拡張機能が同じ場所(nsDragAndDrop用のメソッド)を互いに上書きしようとするわけで、これはもう衝突すること間違いなしなワケですよ。だから何としても別の方法を考えなきゃならんかった。
表題の通り。Multiple Tab Handlerではタブを選択して操作する機能があるけど、選択後のタブをドラッグ&ドロップしたら全部一緒に移動するようにしてみた。
というのはわりとすぐにできたんだけど、ツリー型タブとの組み合わせが少し大変だった。ツリー型タブがある状態のタブの移動は、単にタブの位置を変えるだけじゃなく、ツリー構造の変更も伴うから。故にツリー型タブではタブのドロップ時の処理をほとんど丸ごと置き換えるようにしていて、そっちの方でMultiple Tab HandlerのAPIを使って対応する(つまりMultiple Tab Handlerはツリー型タブがあるときは、タブのドロップ時は特に何もしない)ようにした。
あと、Firefox 3ではCtrl-ドラッグでタブを複製できるようになってるんだけど、ツリー型タブをこれに対応させるのにも手間取った。というか、今まで適当な処理でそれなりに動いてた部分について潜在していたバグが一気に表面化したという感じ。丸1日くらい使って地道に直した。
ツリー化された複数タブの選択→ドラッグ&ドロップの挙動については、例によってAdobe Illustratorのレイヤ/オブジェクトツリーの挙動を参考にしてる。
以下は未実装の項目。
Firefox 3でタブまわりの拡張機能の作りやすさが深刻なまでに低下した問題について、バグを立ててみたものの、余裕で放置食らってて、もう気づいてもらえることに期待するのが間違いなんだなとようやく悟ったので、諦めてFirefox 3のタブの中の要素構造をFirefox 2互換にするライブラリを作った。
上記3つのファイルを拡張機能の中に放り込んで、オーバーレイでtabFx2Compatible.xulを読み込ませるだけで使える。ツリー型タブや情報化タブのようにloadイベントのタイミングで初期化をするアドオンであれば、それ以外何も手を加えなくても、Firefox 2のタブを前提にしたコードのままでFirefox 3上で動くようになる。はず。あと、複数のアドオンで異なるバージョンのライブラリが読み込まれた場合は、その中で最新の物を有効にするようにしてある。
Windows用のMinefield Beta3でしか動作確認してない。
というわけでこれを組み込んでツリー型タブと情報化タブを更新した。
Firefox 3では更新情報の通知で具体的な説明文を配信できるということで、実験というか実践というか練習というかともかくそういう目的もあって、自前で公開してる方でもこの機能を使うようにしてみた。
問題は更新情報をどこに置くかということ。Firefox 3の新機能は、指定されたURLのXHTML文書をXSLTでサニタイズしてから表示するという物なので、既存のHTMLをそのまま参照させることは残念ながらできない。そこで、幸いというかなんというか、Rewind/Fastforward Buttons用に勝手SITEINFOを提供しようと思ってBlosxomで簡単なWikiっぽいものを作ったばかりだったので、これを流用して解決することにした。ここに更新情報を置いてflavourでapplication/xhtml+xmlで出力するようにしたあと、RewriteRuleで日本語版は日本語版・それ以外の言語は全部英語版に飛ばしている。早速戻る/進むサムネイルをアップデートしてみたところ、ちゃんと情報が表示されることが確認できた。
ところで、今までは更新情報のHTMLからupdate.rdfを生成するのに秀丸マクロを使ってたんだけど、このWikiっぽいものに更新情報を載せるというステップが加わるとさすがに秀丸マクロじゃ辛い。ということで、思い切ってMozilla用のJavaScriptに移植してみた。自作の偽DOM風サブルーチンじゃなくて本物のDOM、それもXPathとかバリバリ使いまくれるので、非常に楽だった。こんなだったらもっと早くにやっときゃ良かった。
McCoy用のアドオンにすればMcCoyだけで一連の作業を半自動で行えるようになるけど、今のところはまだそこまでたどり着けてない。そこは今後の課題ということで……
ということで、アップデートしました。余りに久しぶりの更新すぎて更新の手順を忘れてしまっていたのはここだけの秘密です。
やってることとしては、リンク先にも書いてるけど、まず検索対象のフォルダのメール全部を走査してヘッダ情報を収集。次に、それを文字列として連結して検索用のデータを作成。それに対してXUL/Migemoで生成した正規表現でマッチングを行い、ヒットした箇所を抜き出して、それを検索語句としてThunderbirdに渡す。という手順で、ローマ字入力でのメール検索を実現しています。今のところヘッダ情報しか収集していないので、本文内に含まれる単語は検索できません。要約とかをきちんとキャッシュするようにすればできるのかもしれないけど、そこまでやると大変そうなので今のところはここまで。
ハードディスクが逝ってしまった後に再構築した環境でテストしている都合上、大量のメールがある状況でどのくらい重くなるのかは未検証です。ヤバいくらい遅くなる場合は、設定ダイアログから「メールの検索でXUL/Migemoを使用する」のチェックを無効にしてください。
んぁ。意図したわけではなかったんだけど肉の日リリースになった……