たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
AiO GesturesとSplit Browserの連携を試みてみよう、と思って挫折した。基本的にSplit Browserは、Firefoxの初期状態の構造であることを前提にして開発されている拡張機能とは、とても相性が悪い。ハック用のコードを書いてみようと思っても、変更箇所が膨大になりすぎて、とてもやる気が起こらない。FireBugとの連携が結局中途半端な状態で止まってしまってるのもそのせいだ。
Split Browserが連携しやすいのは、Firefox全体に渡ってではなく、tabbrowserというウィジェットに対してだけ拡張を行うように設計されている物だ。マルチプルタブハンドラや情報化タブやなんかは最初からそういう風に設計したので、わりかし簡単に連携がとれるようになった。
TBEの分割・再構築の一環で、マルチプルタブハンドラに続いて情報化タブを公開した。
今回、未読タブの強調表示の方法は斜体で決め打ちにした(userChrome.cssでカスタマイズできるけど)。設定UIに凝っても誰も喜んでくれないみたいだから…… 現在のタブを強調表示する機能は、Fx 2のタブだったら最初から現在のタブが判別しやすくなってるから、オミットしてしまった。
これが第2弾なのは、実装に手間がかからないからというだけの理由なんだけど、まあともかく、これでuserChrome.cssを使ってタブを縦置きすれば、とりあえずFirefox 2には移行できるかなー。という感じ。
いちおう旧TBEよりは若干改良してある。
こないだ英語で問い合わせを受けた時に書いた物をここにも転載しておく。
I'm going to split TBE and re-create tiny extensions which can work with other extensions together. This is the first step. I repulsed by old TBE because it is too large, too heavy, and too spaghetti...
I've created the extension above at first because the feature is important just for me. "Tab Tree" feature becomes possibly available next. Currently I'm focusing to satisfying myself, not for other users, so I'm very sorry. However I think this is the best way to solve this huge business (restructuring TBE). When I developed the old TBE, I was a school student, and I could work for users (not for me) like a volunteer service. Now I have less time so I believe that the self-satisfaction-driven development is the way.
I'm planning to release a meta package (a new feature from Fx 1.5, which is an archive of several XPIs and can be distributed as one XPI) of those tiny extensions, as new TBE.
一応、こういう事を言いたかったつもりです、という訳。
僕は今、TBEを分割して、他の拡張機能と連係して動作できる小さな拡張機能として作り直そうとしている。これ(マルチプルタブハンドラ)はその最初のステップだ。僕は古いTBEにうんざりさせられてきた。アレは大きすぎて、重すぎて、あまりにスパゲッティ化していた……
僕が前述の拡張機能(マルチプルタブハンドラ)を最初に作ったのは、その機能が他の誰でもなく僕にとって重要だったからだ。多分次は「タブツリー」機能を提供する拡張機能をリリースすると思う。申し訳ないけど、現在、僕は他のユーザのためではなく、あくまで自分自身の要求事項を満足させることだけに集中している。しかし僕はこれが、TBEの再構築という難題を解決するための一番いい方法だと思っている。僕がかつてTBEを開発していた時、僕は学生で、他のユーザのために自分自身の要求以上のクオリティでボランティアのサービス的に尽くしていた。今ぼくはその頃ほど自由時間が無いから、僕は、自己満足ドリブンな開発こそが、唯一の道だと思っている。
僕は今、そうして開発した小さな拡張機能を一つのメタパッケージ(Firefox 1.5以降の新機能で、複数のXPIパッケージを一つのXPIパッケージにまとめて配布できる)にまとめて、新しいTBEとして配布することを考えている。
マルチプルタブハンドラの次にタブツリー機能を提供する物をリリースするつもりだったんだけど、先に実装の簡単な方から片付けることにしたので、上記の発言は結果的には嘘になってしまったなあ……
マルチプルタブハンドラを更新する中で、思い付いたというか気がついたことなんだけど。
nsISessionStoreを使ってウィンドウやタブを複製する方法って、うまくやればもっと効率よくやれるんだな。getWindowState()
で取得した文字列をそのまま使うんじゃなくて、一旦eval()
で評価してオブジェクトの形に戻して、不要なタブのデータとかをあらかじめ全部削除してから、もう一度toSource()
でJSON風文字列に戻して使えば、無駄なタブを開く→初期化→無駄なタブを削除 という処理をなくすことができる。
ていうかもっと突き詰めれば、ウィンドウ全体の状態を取得した後で、そのデータの中からある特定のタブの状態だけを抜き出して(それ以外を消して)、そのウィンドウ自身に対してsetWIndowState()
で「復元」を実行してやれば、タブをウィンドウ内に複製することだって簡単じゃないか。
というわけで、時々自分自身もタブの複製機能を使っていたこともあって、マルチプルタブハンドラにこの機能を組み込んでみた。
昨日一日がかりで作ってた物をマルチプルタブハンドラという名前で公開してみた。
「TBEのFirefox 2用アップデート」というのは敷居が高すぎるというか既に情熱が枯れてしまった僕には荷が重すぎてとても不可能なので、今ある機能のうち特に自分が今よく使っている機能から順番に再実装していくことにした。こいつはその中でも、タブのクローズボックスのドラッグによる選択→まとめて閉じる という操作だけに特化した拡張機能だ。
この機能は元々はiRiderというブラウザの挙動をパクった物で、TBEの機能の中では最も最近加わったやつなんだけど、Firefox 2標準のタブの使い方を勉強するには手頃な規模の物になったと思う。
で、せっかくだから似たような実装で実現できる機能として、タブカタログの「ドラッグして選択→いろんな操作」という挙動も盛り込んでみた。メニューの内容は簡単に追加できるようにしてあるので、これからTBEの機能を分割していった後にも比較的楽にそれぞれを連携できるんじゃないだろうか……と、夢想してみている。
APIはまだちゃんとしたドキュメントは書いてないんだけど、草稿はあるんで、userChrome.jsあたりと組み合わせて誰か使ってみてくれないかなあ。とか。
あと、Tab KillerをFirefox 2向けにアップデートした時に勉強した成果を活かして、Firefox 2のセッション管理機能だけを使って「タブをウィンドウに分割」という機能も入れてみた。
何となく、この規模でこの程度の機能の物は既に誰かがもう作っちゃってるんじゃないかなーという気もするんだけど。どうなんだろ。
ていうか開発初期の数時間くらいの間、名前をどうするか悩んでて、「タブを選択したりまとめて閉じたりするアレ」とかのネタっぽい名前が結構有力候補になってたんだけど、結局こういうモヤモヤしたよくワカラン名前に落ち着いた。まあ、どうせ今頃こんなの作った所でハナから死んだプロジェクトみたいなもんだし、どうでもいいよね……
どうでもいいといえばこれはほんとにどうでもいいんだけど、「マルチプルタブハンドラ」てカタカナで書くと「ハムナプトラ」とか「アルハンブラ」とかそういうのと混乱して困る。
複数ページに分かれている続き物のコンテンツを動的に結合して表示するGreasemonkeyスクリプトのPage Concater(バージョン0.10.0)を使っていると日経ビジネスオンラインの記事でうまく動作しないどころか次のページにすら進めなくなってしまった。
concater.REG_BODY = '<div class="articlecontent">(.*?)<!-- /articlecontent -->';
ここを
concater.REG_BODY = '="articlecontent">(.*?)(<!-- /articlecontent -->|<div align="center">)';
と書き換えてみたら、ちゃんと動くようになった。あと、そもそも前後のページがあるということ自体認識できない場合もあったけど、これについては、
el.href.match(/P=(\w+$)/);
ここを
el.href.match(/P=(\w+)(&.+)?$/);
に直したら改善された。
Split BrowserとGoogle Notebook Extensionがコンフリクトしてるという報告を受けて調べてみた結果のメモ。
XULでは、というかGeckoでは、iframeもbrowserも、インラインフレームについてはCSSのz-indexプロパティの指定とは関係なく、一番最後に描画されたものが一番上に表示されるようになっている。たぶんバグなんだけど、長年そのままになってるから、仕様ということになってるのかもしれない。
Google Notebook Extensionはウィンドウ内にインラインフレームを生成して絶対配置でメインのブラウザ領域の上に重ねて表示してるんだけど、Split Browserで新しいブラウザ領域を追加すると、それがGoogle Notebook Extensionのフレームよりも上に描画されてしまう、というのが問題の現象だ。この問題は分割後の領域でタブを切り替えた際にも発生する。
Google Notebook Extensionのデフォルトの挙動を調べてみると、メインのブラウザ領域については、タブを切り替える度にGoogle Notebook Extensionのフレームを表示し直すようになっていることが分かった。つまりこれと同様に、Split Browserでブラウズ領域を分割した時と、それらの領域内でタブを切り替えたときにも、Google Notebook Extensionのフレームを表示し直してやればいいということになる。
ただ、検証中にさらにもう一つ問題が発覚した。deck要素で内容を切り替えた部分と重なるGoogle Notebook Extensionの領域が白く抜けて描画されてしまうというものだ。deckを使わないようにすればどうにかなりそうなんだけど、そうするとツールバーの高さがガタついてしまうので、どうしたらよいか悩んでいる。
無効にするべき10の拡張機能。リンクされてたので見てみた。
要約すると、以下の10の拡張機能はこういう風にダメだから窓から投げ捨てろと書いてある。
大別すると「迷惑だから使うな」系と「大して役に立たないよ(メリットとデメリットが釣り合わないよ)」系に分類できるか。
後者のグループについては、大きなお世話という気がする。本人が感じるメリットとデメリットを天秤にかけて選んでるんだから、他人の感覚でどうこう言う筋合いではない。まあ、有効に活用してない人を見ると確かに「あーあ」って気はするけど。All-in-One Gesturesをわざわざ導入してるのに「戻る」と「進む」くらいにしかジェスチャ使ってない、とかね。
m.tamaki氏によるエントリとFirefox Hacksを見ながら自分でも試してみた。オブジェクト署名証明書が無いので、とりあえずオレオレ証明書での実験だけど。
Tab Catalogの一覧表示を開く時にもたつく問題の改善方法を、実験を交えながら改めて検討してみた。
色々試してみて分かったのは、どうもHTML CanvasをDOMツリーに埋め込んだ後、描画されるまでの間がもたついているらしいということ。何も描画していなくても、Canvas要素を埋め込むだけでだいぶ時間がかかるっぽい。
ということでサムネイル用のプレースホルダーだけ用意しておいてCanvas要素をタイマーで一つずつ追加するようにしてみたところ、ホットキーを入力した直後の反応が格段に良くなった。トータルではあまり変わってないか、むしろ遅くなってる可能性もあるけど、体感的にはこっちのほうがずっといい。