2010/02/26

気が向いたら調べる(FUEL addListenerの怪)

SQLite Optimizerの再起動回数を表示するアドオンを作る時に、SQLite Optimizerのコードを参考にしていたのですが、SQLite Optimizerでは下記のコードで終了イベントにハンドラーを追加していました。

21:Application.events.addListener('quit', sql_opt_listener );

これに習って、ComplementSQLiteOptimizerでは(起動時に処理したいので)イベント名を"load"にしてみたのですが、起動時に登録されず。"ready"というイベントもあるらしいのですが、そちらでも反応せず。

2時間ぐらい調べた挙句、"Application"オブジェクトを使うのを止めました。

11:window.addEventListener("load", ComplementSQLiteOptimizer, true);

また、途中確認のため、"quit"でテストコードを書いてみました。

1:var ComplementSQLiteOptimizer = { 2: handleEvent : function(event) { 3: alert("test"); 4: } 5:} 6: 7:Application.events.addListener("quit", ComplementSQLiteOptimizer);

すると、なぜか終了時に"test"が2回表示されます。試しにComplementSQLiteOptimizerが完成後に何回か再起動を繰り返してみたのですが、やはりカウントが2づつ減る事があります。毎回ではないのですが。

10回にしちゃREINDEXの頻度高いと思っていたのですが、実際に10回以下だったようです。

原因がライブラリにあるのか、環境(今インストールしているアドオンなど)にあるのか切り分け出来ないので何か致命的な問題が起きたら調べます。

まとめ

  • Application.events.addListener("quit", ...)で終了イベントハンドラーを登録すると2回呼ばれることがある
  • Application.events.addListener("load/ready", ...)で開始イベントハンドラーが登録されない

SQLite Optimizerの再起動回数を表示するアドオン

ステータスバーに何か表示するアドオンの練習としてComplementSQLiteOptimizerを作ってみました。残回数を表示するだけで変更する機能はありません。

再起動を繰り返しているとたまに負荷がかかるんですが、「恐らくSQLite Optimizerだろう」とは思うものの、既に負荷がかかった後だと確認できずに気持ち悪いので、表示してみました。

アイコン表示とか、回数の変更とか、回数のリセットとか、今回はスキップとか出来ると便利ですね。その内作りたい。

2010/02/24

goo.glの短縮URLを取得する関数を提供するアドオン

getGoogleShortenerURLFunction

先日の(Goo.glをFirefoxのショートカットキーで)がショートカットキーのマクロにしては長かったので、関数を一つ呼べばクリップボードに貼り付けられるアドオンを作ってみました。

keyconfigの様なchrome権限のあるスクリプトでgetGoogleShortenerURL()という関数を呼ぶと、クリップボードに結果が貼り付けられます。

アドオン作成の練習に作った物なので、実用する場合はgoo.gl liteの様なまともなアドオンを推奨します。

それ以前に、Buzzは文字数制限無いので、GoogleのサービスでURL短縮する場面が余り無いかもしれませんが。

Google Codeはライセンスなしとかクリエイティブコモンズみたいな解り易いライセンスが使えないので、ライセンスとかちょっと調べないとダメですね。バージョン番号の付けかとか、更新の仕方とか、サイトリンクだとか、結構細かい所が面倒臭い。

2010/02/21

Buzzで検索ブックマークレット2

Buzzで検索2

Googleのリアルタイム検索?にてドメインを"google.com"に限定すると、結果的にBuzz検索になっている様です。サイト指定(google.com)を外した、リアルタイム検索用ブックマークレットが下記。twitterやfriendfeedも対象になります。

リアルタイム検索

https://mail.google.com/mail/#buzz/search/{escaped URL} http://www.google.co.jp/search ?q={escaped URL} &tbs=mbl:1 &tbo=1

"tbs"がリアルタイム検索(検索ツール中の「アップデート」)、"tbo"が検索ツールを表示みたいです。

Buzzで検索ブックマークレット

Buzzで検索

はてなブックマークには1行コメントが付けられますが、そのコメントを利用した会話が見受けられます。

Google Buzzではスレッド形式で表示されるので会話自体は はてなブックマークよりも成立し易いですが、自分のバズに対するコメントは基本、自分のフォロワーからしか来ません。

あるサイトについて話題に上っているか知りたい場合、まず他にバズってる人が居ないか検索して、居たらそのバスにコメントしそのバズのパーマリンクをバズる、居なかったら自分でバズる。

とか思ったんですが、一連の処理はAPIとか公開されたら誰か便利なアドオンを作って欲しいところです。とりあえず検索だけするブックマークを作ったんですが、twitter検索ほどリアルタイム性がないですね。

Blogger経由でBuzzに流している自分のエントリーが見つからなかったので、直接バズった物だけが検索対象なんでしょうか。

2010/02/19

BuzzだけfollowしてReaderはShareしない

Buzzでfollowすると、Google ReaderのShared Itemも共有されるようです。

現状、Buzz側でfollowしていただいた方は基本全部follow返しさせていただいてます。ただ、Buzzの発言は気にならないものの、Google ReaderのShared Itemが明らかに方向性の異なる(かつ更新が多い)方は、自分にとってノイズになるため、follow解除しておりました。

しかし、Google Reader側で共有設定を変えれば、follow関係にある人のShared ItemをReader上から非表示に出来るようです。

Google Readerは発表もない小さな変更がちょくちょく入りますね。

2010/02/16

Google Contactsのフィールド名を自由に変える

Google Contacts(Gmailの連絡先)にはメールアドレスや住所などの入力フィールドに対して、分類ラベルが設定できます。ただし、既定の選択肢から選ぶだけで、追加は出来ません。「自宅/仕事/その他」ぐらいしか選択肢がないので分類しづらい。

しかし古い連絡先データを取り込んだ物や、別のアドレス帳ソフトから取り込んだ物は、これら既定のフィールド以外の物も そのまま表示されるので、カスタム可能と推測されます。

試しに、連絡先を設定→CSVにエクスポート→テキストエディタで編集→CSVからインポートとしてみたところ想定どおりに編集できました。

エクスポートがグループ単位なので、予めエクスポート用のグループを作成しておくといいかもしれません。

"google.csv"というファイルがダウンロードされるので、テキストエディタで編集します。
ラベル1,データ1,ラベル2,データ2,ラベル3,データ3,...
という順序で並んでいるので、ラベルの部分を好きに編集します。Unicodeで保存したら日本語でも大丈夫でした。

2010/02/14

ChromeにGreasemonkey用UserScriptをローカルからインストールする

  1. Userscripts.orgなどのスクリプトをローカルのテキストファイルに保存する
  2. ファイル名を*.user.jsにする
  3. Chrome上にドラッグ&ドロップ

基本的にこれだけです。GreaseMonkey用のUserScriptとしてヘッダ情報があれば問題無いようです。

1点注意するのが、Chromeのウィンドウ幅が小さいとインストール確認メッセージが表示されませんでした。ウィンドウサイズの横幅を広げれば解決します。

確認中はデスクトップなどに、"unconfirmed 99999.download"という一時ファイルが作成されるので、確認メッセージに気付かないと何かのバグかと勘違いします。

幅が狭い場合

幅が広い場合

Auto Read Adsを修正

Greasemonkey用スクリプトのGoogle Reader Auto Read AdsChromeに入れたのですが、正常に動かなかったため修正しました。一部コメントアウトしただけですが。

Auto Read Adsでは、

  1. "PR:"などで始まるアイテムの高さを0にする
  2. クリックイベントを発生させて、既読にする
という二つの処理を行っています。

後者の既読化処理は、「リスト表示」でn/pキーで移動すると通り過ぎたアイテムも既読にならないための処置かと思うのですが、私は「全文表示」でマウスホイールで流し読みするため、基本全て既読になるので要りません。

ところが、Chromeでこのクリックイベントが発生すると、なぜかフォーカスが一覧の先頭に戻ってしまいます。数百件読み流した後に、PRアイテムがあったりすると凄い勢いで上下に移動して軽く酔います。

ということで、クリックイベントを消しました。また、全文表示で高さ0だと表示がおかしくなる事がありました。PRアイテム+もう一個の2アイテムしかない場合など。そのため、高さを5に微調整。

スクリプトを入れなおした後は、例によってF5等でリロードしないと適用されませんでした。

// ==UserScript== // @author F.Ko-Ji // @name Google Reader Auto Read Ads // @namespace http://blog.fkoji.com/ // @description This script click entries whose title "PR: " automatically // @version 0.3 // @include http://www.google.*/reader* // @include https://www.google.*/reader* // ==/UserScript== document.body.addEventListener("DOMNodeInserted", function(e) { var element = e.target; if (!element.className.match(/^entry/)) return; var title = element.getElementsByTagName("h2")[0]; if (title.textContent.match(/^(PR:|AD:|\[PR\])/i)) { element.style.height = 5; // var event = title.ownerDocument.createEvent("MouseEvents"); // event.initMouseEvent("click", true, true, // title.ownerDocument.defaultView, // 1, 0, 0, 0, 0, // false, false, false, false, // 0, title); // title.dispatchEvent(event); } }, false);

2010/02/13

Google Buzz markup

5 Google Buzz Tips for the Advanced User

Wiki文法的な修飾が使えるみたいですね

*太字* _斜体_ -打ち消し-

em-dashっていうのが使い道わからないんですが

2010/02/12

Goo.glをFirefoxのショートカットキーで

上記を参考にkeyconfig用のスクリプトを作成。chrome権限のスクリプトからWebサイト上のDOMにアクセスすると危ないとかなんとか、久しぶりすぎて色々忘れてますが。

var w = new XPCNativeWrapper(content, "window"); var c = w.document.createElement("script"); c.innerHTML = "function googl_callback(r) {" + " if (r.error_message) alert(r.error_message); " + " else prompt(\"short url\", r.short_url); "+ "}"; void(w.document.body.appendChild(c)); var s = w.document.createElement("script"); s.src = "http://ggl-shortener.appspot.com/?url=" + encodeURIComponent(w.location.href) + "&jsonp=googl_callback"; void(w.document.body.appendChild(s));

上記コードをkeyconfigに登録して、実行するとプロンプトで出ます。

正直ネタ元のソースをalertからpromptにしたブックマークレットでも機能的に十分でした。goo.gl関連のアドオンもあります。ブックマークレットやアドオン用ボタンで幅を取りたくない、という場合に。

followリストの分類

Google Buzzでとりあえずフォローしとけ的な動きになっているようですが、followerを全部フォローし返したら全部連絡先(Contacts)に入りました。

twitterみたいな専用のサイトのリストならそれで良いかもしれませんが、Gmailにはメールや電話番号などのオフ知り合いの情報も入っているので、オンも本名で活動している方は凄いことになってないでしょうか。

とりえあず、followしたことで追加した連絡先は全部、上記画像の様な形で追加されるので、"http://www.google.com/profile"で検索して、適当なグループ("buzz")とかに分類して一時避難。

メッセージと違ってコンタクトは自動分類無いんでしたっけ。「メールソフト」の連絡先更新頻度と「マイクロブログ(系)」のフォローリストの更新頻度は根本的に異なると思うので、その内設計見直される事を期待。

2010/02/11

Google Buzz

第一印象は「危なっかしい」

Google ProfileにBuzz関連の情報が表示されますね。本名アカウントを広く公開したくない人は注意が必要ではないでしょうか。

私は複数のハンドルネームのアカウント情報を集約するために、ハンドル→本名へメールを転送したり、Readerのスターなんかを連携したりしていたんですが、その所為でハンドル側のFollower一覧に本名アカウントが表示されていました。本名アカウント側に公開プロフィールがなくてもです。

本名で活動していない方は、自分のハンドルアカウントとの連携や、知り合いがハンドル・自分が本名といった意図しないfollow関係がないか、ReaderやGmailのContactを見直した方が良いかと思います。

オンラインでアクティブにアウトプットしている人などは、それが全然気にならない人も居るかと思いますが、日本では気になる人の方が多い気がします。

2010/02/03

Google Chrome再設定3

Google ChromeにGreasemonkey用スクリプトを入れてみました。入れたスクリプトはGoogle Readerに流れてくる広告エントリーを非表示にする"Google Reader Auto Read Ads for Greasemonkey"です。

予定と順番が前後してしまいましたが、ChromeはGreasemonkeyがネイティブサポートされ、userscriptが一つの拡張として登録される、というニュースがあったので、一番使用頻度の高いスクリプトをとりあえず入れてみました。

  1. インストール済みFirefoxと未インストールのChromeで比較

    Chromeで広告エントリーが表示された状態
    タイトルが"PR:"で始まるのが広告エントリー

    Firefoxで広告エントリーが隠された状態
    間にある線が一本だけ表示されているのが広告エントリーです。

  2. スクリプトのインストール

    Greasemonkeyのインストールは不要なので、まずuserscripts.orgに行きます。[Install]ボタンをクリック

  3. ダウンロード前に確認

    左下に警告が表示されるので、入れる場合は[続行]をクリック。

  4. ダウンロード後に確認

    Chromeの拡張インストール時用の警告ポップアップが出るので、入れる場合は[インストール]をクリック。

  5. 完了報告

    アドレスバーの右の方に完了した旨の、バルーンが表示されます。

  6. 動作確認

    Google Readerを再表示すると確かに消えています。自分が試した限りでは、Google Readerのショートカットによるリロード(r)では消えませんでした。ページごとリロード(F5)したら消えました。

  7. インストール確認

    拡張機能の一覧には、他と見分けが付かない感じで表示されてます。

Firefox版では、元のスクリプトでは消せないタイトルのエントリーを消すために、すこし正規表現をいじっていたんですが、手違いで消してしまいました。

Chromeではそもそも編集が出来ないんでしょうか?

2010/02/01

Google Chrome再設定2

Firefoxに習って、プロファイルフォルダを分けました。

  1. デフォルトプロファイル %USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default が結構大きかったため(98MB)、全履歴、Cookie、フォームの履歴、パスワード、Gearsの許可を削除。6.5MBまで縮小。

  2. Defaultフォルダをコピーして"KNYI Jong"に名前を変更。 %USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\KNYI Jong

  3. 起動オプションにプロファイルフォルダ指定を付けて起動。 --user-data-dir="%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\KNYI Jong"

    デフォルトではなく、指定したフォルダが更新される事を確認。

  4. 設定ファイルを一箇所にまとめたいので、 "C:\home\KNYI Jong\.google\Chrome\User Data" というフォルダを作成し、User Data\KNYI Jong\ 以下のファイルを移動。シンボリックリンク(厳密にはジャンクション)を張る。

  5. 前述(手順3)のオプションのまま起動してみて、C:\home\以下のファイルが更新される事を確認。

Chromeにはプロファイルマネージャが有り、オプション付きで起動すると、[Google Chromeの設定]ボタン(スパナアイコン)から呼び出せる。もしくはCtrl+Mで呼び出せる。という話もあったんですが動きませんでした。

一部のバージョンで使えないバグがあるとか、Ctrl+Mならどのバージョンでも使えるとか、開発版(dev channel)でないと使えないとか、幾つか試してみましたが、どれもダメだったので、旧来の方法でプロファイルを分けました。

ここ4ヶ月ほどオンライン活動を完全に放置していたので、残っていた直近30日分のGoogle Readerを斜め読みしながら、Chromeを入れてました。7days agoあたりでGoogle Chrome再設定1を書いたのですが、最後まで読んだ所、拡張は既にベータじゃなくても対応していた様ですね。