たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
昨年くらいに試した時、日通のWebサイトからペリカン便の再配送を申し込もうとしたら、Firefoxではフォームが機能しなくて往生こいた。Amazonで買い物をすると僕の所には必ずペリカン便で届くので世話になる頻度も高いのだけれども、僕の中では日通は「つかえねー」サイトの代表の一つになってた。でも今日ふとFirefoxでアクセスしてみたら普通に動くようになってた。いつの間に対応したんだ? ともかく、この件で僕の中では日通の株がかなり上がった。
第8回Mozilla拡張機能勉強会のプレゼン資料を公開した。
以下、内容を改めて整理してみる。
McCoyの改造を試みるために、XULRunnerアプリでもアドオンを使えるのかどうかという実験をしてみた。
これだけでいける。逆に、アドオンをアンインストールしたい時は、アドオンのID名が付いたフォルダをプロファイル内の「extensions」フォルダから削除する。
amachangさんはアプリやアドオンそのものの中身をガリガリ書き換えるやり方を紹介されてるけど、僕はこういうやり方はしない方がいいと思ってる。理由は以下の通り。
なので、これらの問題を回避するために、teramakoさんのようにそれ用のアドオンを作って使うか、userChrome.jsを使うかする方がいいと僕は思う。今回McCoy用の改造をアドオンという手法で行うことを試みているのも、そういう理由からだ。
緑のgoo版Firefoxが今日公開されました。緑のgooは収益の15%が環境保護団体に寄付されるという検索サービスで、緑のFirefoxを使うと普通に検索してるだけで環境保護に貢献できるYO、という物です。
詳しくは配布ページなりITmediaやCNET JapanやINTERNET Watchの記事なりに書いてありますが、要するに、デフォルトの検索エンジンが緑のgooになってて、緑のgooで検索した回数がツールバー上の「gooの木」ボタンに(gooの木の本数換算(検索100回=gooの木一本)で)出て、おまけに緑のgooっぽいテーマが適用されてる、というFirefoxです。導入済みのFirefoxに全く同じ機能を追加するアドオンも同時に公開されてます。
まあぶっちゃけ、タブが使いやすくなるとかそういう系の実用的なメリットは特に無いっちゃあ無いんですが、損したり面倒な手間をかけたりしないでも普通に検索するだけで環境保護にチョコっと貢献できる、社会的なメリットがあるアドオンというのは珍しいんではないでしょうか。緑のgooのWeb検索のバックエンドはGoogleなので普段ググりまくりの人にも特にデメリットは無いし。ということで僕も今のところデフォルトの検索エンジンは緑のgooにしてます。
なお、他の検索エンジンと併用するためにセカンドサーチも入れておくとより一層便利でしょう(宣伝)。
とよく言われるんだけど自分の環境&自分の見てる範囲のWebサイトでは落ちないので原因が分からない、ということが多い。落ちるか落ちないかのギリギリの所をうまく突くようなコードを知らず知らずのうちに書いてしまっているのでしょうか。そんな能力いらなさすぎる。
タブのバインディングやスタイル指定のためのコードの削減のせいで、Firefoxのタブの拡張性は深刻なまでに低下した。ツリー型タブも情報化タブも動かなくなったし、Alice0775氏のスクリプトなども被害を被っているし、他にも被害を受けている拡張機能はあるんじゃないかと思う。
拡張機能がたくさんあるから云々ということを売り文句にしておきながら、このように拡張機能作者をいじめることにしかならないような変更を軽々しく入れてくる連中には、本当に腹が立つ。この詐欺的行為にあまりに腹が立ったので、自分でバグを立ててみた。
バグの報告文に書いたけど、この問題の要点は「拡張するためのあそびが全くなくなってしまった」という一言に尽きる。現行のFirefoxでは、スタイル指定のために用意された匿名要素のボックスや、そもそも今のFirefoxでは使われていないけれども今後実装されるかもしれない何らかの機能のために用意されていた(と僕は思っているけど確証はない)プレースホルダーがあって、それらの中に色々な要素を追加することができた。そのお陰で、タブの中にサムネイルを出したり、タブのロック状態などをアイコンで表示したりということが可能になっていた。ところが前述のバグで提出されたパッチによって、現在Firefoxの標準的な機能で使われている物以外の「あそび」は一掃されてしまった。
今の構造でも、バインディングを使えば要素を追加することはできるけれども、複数のアドオンでそれぞれ別々のバインディングを提供すればそれらは確実に衝突する。例えば、今までは情報化タブとツリー型タブを(それだけでなく、他のいろんなタブ系拡張機能を)好みに応じて組み合わせて使えていたのに、これからは、そのうちどれか一つしか使えなくなる、「組み合わせて使う自由」が失われるということだ。これでは、Firefox 1.5以前の暗黒時代に逆戻りだ。拡張性が高いことにFirefoxの価値を見出している者にとっては、こういう愚行は決して容認できるものではない。
でも英語力に自信がないしBugzillaの流儀にも詳しくないので、invalidとかworksformeとかそういう処理をされて、結局何も変わらないままFirefox 3正式リリースまでこの問題は解決されないまま放置されてしまいそうな気がする。誰か援護射撃してくれると嬉しいんだけれど……
ツリー型タブでずっと前から発生条件が分からなくて困ってた「一つもタブが選択されていない状態」になってしまうバグの原因がやっと分かったので、速攻で修正した。
この問題は、以下の条件がすべて揃った時に発生していた。
この時、内部的にどういう処理が行われていたかというと、以下のような感じだ。
この「TabCloseイベント」というのがFirefox 2以降で使えるAPIなんだけれども、問題は7のステップで起こっていた。7のステップで「次に選択するべきタブ」を決定するためのキーとして「現在開いているタブの総数」を使っているのだけれども、その値は1のステップの間に取得しているため、1から7までの間のどこかでタブの数が増減した場合、タブの選択状態が狂ってしまうのである。7のステップで「現在のタブまたはそれよりあとのタブ」が選択される場合、ここでは4のステップでタブの数が減少しているため、「次に選択するタブの番号」が「すでに削除されたタブ」のインデックスを指し示すことになり、selectedTabの値がundefinedとなりNull Pointer Errorが発生してしまう。……というのが事の真相だった。
ツリー型タブの側でselectedTabのセッタを上書きし、もし存在しないタブが選択されそうになった時は強制的に最後のタブを選択するようにしたところ、「一つもタブが選択されていない状態」は発生しなくなった。以下はそのためのコード。
// var b = gBrowser
var getter = b.__lookupGetter__('selectedTab');
var setter = b.__lookupSetter__('selectedTab');
eval('setter = '+setter.toSource().replace(
'{',
'{ if (!val) val = this.mTabContainer.lastChild;'
));
b.__defineGetter__('selectedTab', getter);
b.__defineSetter__('selectedTab', setter);
この部分ではなく、removeTabメソッドを上書きするという手もあるんだけど、ここはいろんなアドオンが上書きしたがるためコンフリクトの原因になると思ったので、「標準的な動作と変わってしまう」ことは仕方がないと割り切って、ほとんど誰も触らないであろうselectedTabの方を上書きするようにした。ちなみに、ゲッタとセッタ両方を定義し直しているのは、片方だけを再定義するともう片方が未定義になってしまうから。
表題の件に流れを戻すと、「タブを閉じる」という操作をイベントとして捕捉できるようにしたのなら、そのイベントをトリガーにして他のタブを連動して操作するという機能も当然登場してくるわけで、そういうことを考慮せずに「はいはいイベント発行すりゃいいんだろdispatchEvent っと!」と適当に設計してしまうとこういうトラブルが起こるので、APIを作る時にはもうちょっと慎重になった方がいいよね、という教訓を得たという話なのでした。
方針が明らかになったことを受けて、さらにいくつかのアドオンを追加で応募した。以下はその時に書いた紹介文。
今回追加エントリーした連中の方が一応僕にとっては「本命」なんだけど、これも箸にも棒にもかからなかったら泣けるね……
世間的には「ベータ版は機能を確定して細かい不具合のチェックに入った段階の云々」という風な説明がなされるようだけど、昔からずっと見てる限り、Firefoxの(というかMozillaの)それはただのリビジョン番号と変わらない気がする。RC(リリース候補版。問題がなければそのまま名前を変えて正式版になるかもしれないバージョン)と名付けてるくせにそこで平気ででかい変更を入れることも、メンテナンスリリースのはずの2.0.0.Xでセキュリティに関係ないでかい変更を入れてくることも、Mozillaではよくある話で、Mozillaのバージョン管理のいいかげんさは伝統的なものなんじゃないのという気がする。まあ「柔軟性がある」って言えばそれはそれでいいことなのかもしれんけど。
それか、もしかしたらこれは別にMozillaに限った話ではぜんぜんなくて、「ベータとは云々」という言葉の説明の内容自体が今の世の中の「ベータ」の多くの実態と乖離してるだけだ、という話なんでしょうか。