ゆーがいぶろぐスマートフォン専用ページを表示ゆーがいぶろぐにわか興味と浅い予備知識で薄っぺらい情報を垂れ流す有害ブログです。gBrain」にてGMarksとeBrainを組み合わせるとスゲーぜ?ってな論調で、ご丁寧にも改造版eBrainまで公開してしまいましたが、この組み合わせ、危険です。具体的に何が起こるかというと、GMarksで登録したブックマークを再訪すると、eBrainがタグを上書きしてしまいGMarksのフォルダから当該ページが消えてしまうという・・・ああ、本当にごめんなさい。同じGoogleブックマークを、コンセプトも作者も違う2つのアドオンが仲良く共有するわけないのは、ちょっと考えれば分かることでしたね。何って言うか、己の軽率さに辟易してるわけです。あのエントリを読んでそのまま適用しちゃった方がいましたら、もう一度謝罪します。申し訳ありませんでした。懲りずにgBrainを更に改造してやろうなんて考えが沸々としているわけですが、方針としては、gBrainによる登録の際にはタグの上書きではなく追加という仕様にすれば問題は解決できると思います。Googleブックマークに既存のエントリは登録しないと割り切ってしまうのも手かなと。いずれにしろGMarksが既存タグを取得しているわけですから、可能なはずです。現在の俺にはJavaScriptコードを読み解くスキルがないので無理ですけどね。出来たとしても今回の失敗もありますんで公開はしません。最後の最後にもう一度、適用しちゃった方、本当にごめんなさい。Ears改造日誌その2一筋の光明さて前回、gBrowser.addProgressListener関数で躓いてしまいましたが、ネットを丹念に調べて解説してくれてるページを見つけました。ページが切り替わったタイミングを知る(せりか式)いや〜、もう俺のやりたいことそのまんまじゃないっすか。Earsのスクリプトに何をすればいいかって言うと、"onLocationChange"関数の実装として、アイコンを切り替える関数を呼び出す。"onLocationChange"関数を含むリスナー関数群のリスト変数を定義する。Load関数内で、addProgressListener"関数を使ってリスナー関数リストを登録する。Unload関数内で、"removeProgressListener"関数を使ってリスナー関数リストを削除する。うむ、見通しが立ってきたー。どんなもんかね細かい部分はさておき、この仕組みがちゃんと組み込めるかテスト。EarsでもTabooと同じく、アイコンに対するパラメータを真偽値で指定することで切り替えを実現しているので、"onLocationChange"関数に問答無用でアイコンが「マークありまへん」になるように書いてみました。テスト用のFirefoxプロファイルを作りインストール。タブを2つ開きそれぞれ別のページを読み込んでおきます。タブAのページにマークを追加し、ツールバーアイコンを「マークありまっせ」の状態にセット。タブBに切り替え・・・・いやっほう!見事「マークありまへん」アイコンに変わった!!るんるん気分で眠れるように、今日はここまでにしおこっと。この様子をFlashで公開しようと思い、改造前後でキャプチャしてみて思わぬ発見。使ってるキャプチャソフトは取り込んだものを1コマずつ確認・編集できるのですが、改造前のある1コマ、ちょうどタブを切り替えてもツールバーアイコンが変わらないよ〜っていう見せ場で、一瞬だけアイコンが変化していました。この直前のエントリがそのFlashです。シークバーを使ってうまくストップできれば、ご覧になれると思います。え〜〜〜!前提総崩れ。タブを切り替える=Location変化のイベントはハンドリングしてないと思ってたのに、しっかりやってるってことですよね。う〜ん・・・またコードを良く見直さなくちゃ。(1)」に追記もしましたが、流動的なWEBページでは使えません。Earsの仕様が云々という話ではないんで、もう気にしません。Earsは、過去にマークしたページを開いたとき、ツールバーのアイコンを切り替えて教えてくれます。ところが、これはそのページを読み込んだ時に限定されちゃってるようです。Earsでマークしていないページを開いてるとします。タブAにマークしたページを読み込むと、上述のとおりアイコンが変化します。Earsのマークありまっせ」の状態になってしまいます。逆も同じで、マークを付けたはずのページで「マークありまへん」の状態になってしまいます。Earsのためだけにリロードするなんてバカバカしいですよね。変化するように改造してみることにしました。前置きが長くなりましたが、もうちょっと続きますwご大層にもこんなタイトルで記事を書いているわけですが、俺、JavaScriptまったく知りません。コードはなんとな〜く読めるのですが、うまく改造できるかどうかの見通しもまったく立ってません。最終的には「俺には無理でした。海見てくる・・・」ってことになるかもしれませんが、まあお付き合いください。どっから手をつけるべきかな?まず改造の方針を決めるところから始めました。これも本ブログで取り上げたアドオンですが、Tabooにもツールバーアイコンがあります。Earsと同じで、読み込んだページが既に登録済みだとアイコンが変化します。この時上述のようにタブの切り替えを行うと、それに応じてアイコンもちゃんと切り替わってくれます。Earsに応用すればいいだけじゃん。やっほい、案外簡単かもぉ♪スタートダッシュで大転倒さてではTabooのJavaScriptコードの中で、上述の制御を行っている箇所を特定しましょう。熟練の方々にはきっとファイル名だけで分かったんでしょうけど、なにせ右も左も分からないド素人なのでアイコン画像のファイル名をコード内で探しました。ところがヒットするのはCSSファイル、つまり「見た目の体裁」を定義するファイルだけです。え〜〜・・・いきなり躓いちゃったよ・・・。見ると、なにやらパラメータの有無で、切り替え前後のアイコンを変えてることが分かります。制御部であるJavaScriptではこのパラメータの値だけを決定し、あとはCSSに任せているようです。予想は見事的中、パラメータ名で検索すると"updateButton"というその名もズバリな関数を見つけることができました。ボタンを更新するこの関数ですが当然のことながらTabooにユニークな内容です。他のアドオンに応用するには、細かい制御ではなくもっと抽象的な制御部分を知らなければなりません。そこで"updateButton"関数を呼び出している箇所を探してみました。次に見つけたのが、"onLocationChange"関数です。これも名前がズバリですね。前置詞onが付いているのでますますイベントハンドラ臭いです。ここでLocation、つまりはカレントタブのURLが変化したことをハンドリングするのは間違いありません。分からないながらに読んでみると、Tabooではこの関数の実装として、直前のURLと現在のURLを比較し、相違があれば"updateButton"関数を呼び出してアイコン変化の要否を判断させ、その後現在のURLを直前のURLとして保持し直す、ということをしています。次にさらに上位部分を探してみます。"onLocationChange"関数はどうやら関数リストの一部として変数に格納されています。はて、ファイル内にはその関数の定義がありません。ことは組み込みの関数なんだろうとネット検索してみましたが、英語力の無さがここで障害になりました。・・・う〜ん、分からん。分からなすぎて若干飽きてきたので、今日はここまでです。少〜しずつ勉強しよっと。gBrainこのエントリで紹介しているGMarks+gBrainの併用で重大な問題が発生することがわかりました。gBrainは履歴をGoogleブックマークに登録する際、同一ページが既存である場合に、「既存のラベルを削除してから年月日のタグを付ける」というとんでもないことをしているらしいです。gBrain以外のラベルはゆくゆくはすべて消されることに・・・。自慢げに両アドオンのコラボを紹介してしまいましたが、申し訳ありませんでした。前回、ひとまず納得できる形でGoogleリーダーの利用方法が固まりました。今回はブックマークと履歴もシームレスにオンライン化するアドオンを紹介します。GMarksGoogleブックマークをFirefoxのサイドバーに読み込むアドオンです。Firefox起動時にGoogleアカウントに自動ログインし、さらにGoogleブックマークの最新状態をロードするので、オンラインであることを意識することはほとんどなく、ローカル感覚でサクサク使えます。ブックマークの管理もローカルから行え、おそらくGoogleブックマークのページに1度も訪れることなく使用できてしまうはずです。GMarksを使用するうえで注意しなければいけないのが、GMarksとGoogleブックマークの分類方法の違いです。Googleブックマークはタギングによってエントリを分類しますが、GMarksのインターフェイスはフォルダ管理(階層化)を採用しています。最初はこの違いに慣れず、戸惑うことも多いかと思います。FirefoxのブックマークをGoogleブックマークに移行する際には、Firefoxのブックマークをもう一度しっかり整理してから行うと、戸惑いも軽減されるはずですので強くお薦めします。現在のFirefoxブックマークをGoogleブックマークにエキスポートするには、Googleツールバーを使うと簡単です。実はタグしか持っていないエントリをGMarksはどのように階層化するかという話をしておきます。GMarksはタグの文字列を解析して、セパレータごとに子フォルダと解釈します。Serverという階層構造でサイドバーに表現します(セパレータ文字は変更できます)。GMarksで新規にブックマークを登録するとき、既存の階層に登録する場合には、エントリダイアログでその候補が表示されるので楽ですが、まったく新しい階層を作りたい時には注意が必要です。タギングの利点は一つのエントリを複数のカテゴリに登録でき、どちらをキーにしても検索できる点です。階層管理に置き換えると同じブックマークが別々のフォルダにそれぞれ登録されている状態です。これを「検索キーが複数持ててよい」とするか「多重管理はNG」と取るかは皆さん各自のご判断になります。(タグを階層構造で表現しているので、あくまで実体は1つだけということに注意してください。)同一ページの重複登録はブックマーク管理に付き物の問題ですが(Firefoxブックマークには同一エントリを解消してくれるアドオンがあります)、GMarksはフィルタ機能を持ちいることでこの問題を解消することが出来ます。タグ、タイトル、URL、メモを含む全文検索もできるので、もはやフォルダツリーを展開することすらなくなるかも。この検索も検索クエリをGoogleブックマークに投げて結果を取得する仕様(らしい)ので、ローカルマシンに負担をかけることなく強力な検索が可能です。gBrainFirefoxの表示履歴をブックマークとしてGoogleブックマークに登録するアドオンです。履歴更新の度にGoogleブックマークへ随時登録してくれているようです。gBrainは登録する際に、各エントリに年、月、日の3つのタグを付けます。これにより時系列での履歴管理がオンラインで可能になります。表示履歴を片っ端から登録しますので、エントリはどんどん増え続けます。ワンクリックで機能を起動/停止させることができたり、指定サイトをフィルタリングして登録しないようにする機能もあるので、上手にコントロールすると良いでしょう。(※思ったんだけど、特にコアなネットサーファーの履歴を全部登録していたら、ものすごいエントリ数になるのは想像に難くありません。GDriveみたいにそのうち規制かかっちゃうかも・・・。)案の定、作者さんにGoogleからクレームがきたそうです。現在、gbrainの公開は中止されています。GMarksとgBrainの最凶コラボさて、gBrainは履歴をブックマークとしてGoogleに預けるものです。GoogleブックマークはGMarksで管理することにしたので、gBrainが収集した履歴もGMarksのサイドバーに表示されます。先述のようにgBrainは毎日新しいタグを作るので、GMarksのフォルダもどんどん増えていってしまいます。これは非常に不恰好です。これをなんとか解消するために、僭越ながらgBrainの改造をしてみました。(数バイト書き換えただけですが(^^;)eBrainのインストールフォルダを開きます。プロファイルフォルダの「extensions\gbrain@andreas.gohr」です。「chome」フォルダを開き、「gbrain.jar」を解凍します。解凍した中の「content\gbrain.js」をテキストエディタなどで開きます。299行目,309行目でタグの文字列を生成していますので、これをGMarksの階層管理に都合のいいように書き換えてしまいます。具体的には、年・月・日それぞれのタグを、GMarksのセパレータ文字を使って階層表現するだけです。■例■Line299:旧)'y'+y+',m'+m+',d'+d;新)'!gBrain>Year>'+y+',!gBrain>Month>'+m+',!gBrain>Day>'+d;Line309:旧)'!gbrain,'+dt+lbls新)dt+lbls再びgbrain.jarとしてまとめて終了です。した作業が苦手な方はこちらからダウンロードしてください。同梱のReadMe.txtを良くお読みください。⇒gbrain-0.5.4-fx-forGMarks.zip本家gbrain作者さんが公開を中止されたことを受け、このブログでも改造版gbrainの公開を中止いたします。上記のように1つのフォルダにまとめると、GMarksの指定タグ非表示機能により、フォルダツリーにgBrainの履歴を一切表示しないように設定することも簡単に出来ます。上記の例ですと「!gBrain」タグを非表示設定すればOKです(フォルダが非表示になるだけで、各エントリは検索結果に表示されます)。さあこれで、ブックマークと履歴のオンライン化完了です。履歴はGoogleが許してくれる限り、半永久的に保存されます。「前に見たけど履歴も残ってないし、どこのページだったっけな〜。」という事態から解放されたのです。オンラインであるがゆえに、ネット環境さえあればどこでも利用することができます。先日「オンラインストレージ」のエントリで言及したオンラインデータとローカル環境のシームレスな統合。俺の求めてるシームレスって、GMarksとgBrainが提供してくれるているような、つまりはこういうことなんだよな〜と実感した次第です。まー、ブックマークという小さなデータだからこそ、これだけサクサクなんだろうけどね。Mixで使えるものをまとめてみました。他にご存知のアドオンがあればコメントしていただけると有難いです。最後のほうにNGだったアドオンも載せてみました。指定するパスについて、各アドオンインストールフォルダの「chrome.manifest」ファイルに思いっきり書いてある場合があります。少なくとも「chrome://〜/content/」までは分かるので、あとは.jarファイルを解凍してcontentフォルダの中の目ぼしい.xulファイルを片っ端から指定してみるといいかもです。記事chrome://gmarks/content/gmarksSidebar.xul以下は「GoogleとMozillaに囲まれる日々」さんからの引用です。Treeタブツリー化chrome://tabtree/content/tabtree.xul翻訳パネル翻訳chrome://Translation/content/Translation.xul(*1):公式版はFirefox1までの対応となり、Firefox2対応版は非公式版として別の方が開発されました。非公式版作者さんのご厚意によりここに掲載します。以下、NGだったアドオン一覧。俺自身で確認したもの、2chで報告されたものなど情報源はいろいろです。2.0Seesaaブログ広告この広告は60日以上更新がないブログに表示がされております。以下のいずれかの方法で非表示にすることが可能です。「広告を表示しない」にチェックを入れて保存する。