2009/05/26

ヘッダ要素にCSS

table-cellが気になって調べていたら、こちらが見つかった
display: table-cell を使ったマルチカラムレイアウト - IT戦記

その中のデモページ
Cols with table-cell.

意外だったのが2点

  • <head>の要素でもスタイルシートでdisplayを設定すると可視化される
  • <link>にbefore/after擬似要素でcontentを入れると、ハイパーリンクになる

後者はFirefoxの独自仕様かも知れませんが。これはちょっと使いたい。

2009/05/22

Friend Connect管理画面

以前、「Friend Connect管理画面でBloggerの情報を見る」なんてのを書きましたが、さっきGoogle Friend Connectを見たところ、Bloggerから追加したサイトも一覧に表示されていました。

理由はわかりませんが、ひょっとしたら単に表示されるまで時間差があっただけかもしれません。または変更があったのかもしれません。最近GmailやGoogle Readerでも発表がなくても細かな変更がしばしば見られますし。

Bloggerウィジェットとしてしか設定していない方は、Googleのアカウント情報に表示される利用中サービスにGoogle Friend Connectがあれば見られるかもしれません。

2009/05/17

Google カレンダーの土日を色付け

割と最近、変更が有ったらしく、気が付くと以前のスタイルが無効になっていました。
Google Calendar - Colorize Weekends (Sun-Sat) | userstyles.org
上記は2009/02/12更新となっています。

日本語/English(US)やTasks表示には影響を受けませんが、週の開始曜日に影響を受けます。土曜、日曜を探している訳ではなく、単に各週の最初と最後に色をつけているだけの様です(上記、日曜~土曜用Styleの場合)。

随分まえからuserStyleには有るみたいですが、Googleが公式で提供しないんでしょうか。曜日に色を付けるのは日本独自?と思ったのですが、そうでもないみたいです。
なぜカレンダーで土曜日は青字で日曜日は赤字なのでしょうか? - Yahoo!知恵袋

例えばバングラディシュは金が週末扱いで、金が休日です。

Google カレンダーで土曜開始(金曜終了)の設定があるのは、こういう国も有るからなんですね。新しい発見は有りましたが、公式対応しない理由はわからず。

2009/05/16

SQLite Optimizer

ちょっと前にこんな事(FirefoxのProfileを縮小)を書きましたが、SQLiteにはVACUUM以外にもANALIZEとREINDEXという操作が可能な様です。
SQLite が認識する SQL - Third impact

VACUUM
実効データの格納に必要なサイズだけ確保し、*.sqliteファイルを縮小する
REINDEX
INDEXを再構築する
ANALYZE
INDEXの統計をとる

REINDEXとANALYZEの厳密な動作内容や、必要性(REINDEXの前後にANALYZEが要るのか?)は解りませんが、とりあえずVACUUM+REINDEXやっとけば動作が速くなるという話しです。

前回はサイズ圧縮が目的だったので、REINDEXはしていませんでしたが、早くなるのであればやった方がよさげです。 (ただ、VACUUMだけでも早くなったという話も見かけました)

SQLite Optimizer :: Firefox Add-ons
こちらを使うと、Profileフォルダの下の全*.sqliteファイルにVACUUMやREINDEXを一括処理をしてくれる様です。前回は一個一個手作業だったので非常に便利に。

スクリーンショットではREINDEXのみに見えますが、設定によりVACUUM+REINDEXに変更できるそうです。ただし、REINDEXがメインなので、VACUUMは(このアドオンで行う事は)あまり推奨していない様です。(miyafx: sqlite 最適化 - Firefox拡張機能)

また、SQLiteの仕様上、頻繁にVACUUMを行うのは逆効果との話。
sqliteのvacuum。auto_vacuum危険 — ありえるえりあ

こちら(VACUUM)を見る限りでは、vacuumとauto_vacuumの動作もバージョンによっては異なる様なので細かい挙動については、要調査ですが。

SQLite Optimizerの設定メニューにある「終了時に(略)実行する」というのは毎回ではなく、(about:configの)指定回数毎みたいです(デフォルト10回)。ただ、再起動もカウントされてしまうので、指定回数をトリガーにした上で、確認ダイアログを出すオプションなどがあれば尚嬉しいですね。

なにかのカスタマイズで頻繁に再起動しているときに、たまに再起動が遅くなるとエラーと勘違いしたり。急いでPCの電源を切りたい時に限って10回目に当ってしまった!なんて事もありそうです。

2009/05/15

FriendFeed

FriendFeed

一言で言うとfeed aggregatorです。

ぱっと見で良い点

  • OpenIDでログイン(=GoogleのアカウントがあればOK)
  • 外部feedの集約
  • 取り込んだfeedの検索
  • 取り込んだfeedにコメント

OpenIDという点と、自分のfeedを横断的に検索可能という点だけでも利用価値があると思います。過去に書かれた解説記事と比較する限りでは、取り込み可能な対応サービスも1年で倍ぐらい増えています。

ちゃんと調べてませんが

  • private設定も可能?

イマイチな点

  • 日本語化が未完(とくにヘルプ)

Google ReaderのShared itemsはfeedを出すだけ出していても、他人のfeedを検索も出来ないし、ホットエントリーの様な集約もされていないし、と思っていたのですが、この手の外部サービスがあれば、発信元はとりあえず出すだけ出しておけばいいんですね。流行れば買収なり真似なりしてくれるでしょうし。

KNYI Jong - FriendFeed

2009/05/13

Google Subscribed Links

Googleのアカウント情報に行くと利用しているサービスが一覧されます。

その中に登録した記憶の無い物が。

Googleの検索結果に特定のサービス内のコンテンツを優先的に表示させられる。らしい。

解ったような解らないような。

少し前にShared Stuffが404になってしまいましたし、Google Baseみたいに一度触ったきりのサービスもあるので、Googleサービスもたまに棚卸をする必要がありそうです。

2009/05/10

Google Readerでtombloo

クロスポストに便利なtombloo。2種類のポスト方法があります。

  • コンテキストメニューからポスト
  • ショートカットキーからクイックポスト

一般的なサイトでの挙動はどちらでも大差無いのですが、Google Reader(多分LDRでも?)上だと若干異なります。

前者では現在フォーカスされているエントリーがポスト対象となり、後者ではGoogle Readerのページ自体がポストされてしまいます。後者でもフォーカスされているエントリーをポスト対象として欲しい。

コンテキストメニューの場合、イベント発生元の要素(=マウスポインタが置いてある要素)から遡って親要素からタイトルやリンクを取得している様ですが、ショートカットの場合、マウスの位置が関係ないので親要素の取得が出来ません。

ただ、DOM Inspectorで見る限り、フォーカスのあるエントリーは動的に"current-entry"というIDが振られる様です。なので、ID指定で要素を取得してポストする様に勝手にソース改変。

158: var ctx = update({ 159: document : doc, 160: window : win, 161: title : doc.title, 162: }, win.location); 163:// custom start 164: if(ctx.href.match('//www.google.[^/]+/reader/')) { 165: if(item = $x('id("current-entry")', ctx.document)) { 166: // Google Readerで、かつアクティブなエントリーが取得できた場合 167: // タイトル等を取得 168: var res = { 169: author : ($x('descendant::div[@class="entry-author"]/*[@class="entry-author-name"]/text()', item) || ''), 170: title : $x('descendant::a[@class="entry-title-link"]/text()', item) || '', 171: feed : ($x('descendant::a[@class="entry-source-title"]/text()', item) || $x('id("chrome-stream-title")//a/text()')), 172: href : $x('descendant::a[@class="entry-title-link"]/@href', item).replace(/[?&;](fr?(om)?|track|ref|FM)=(r(ss(all)?|df)|atom)([&;].*)?/,''), 173: }; 174: 175: // この後ポストフォームで、ctx.titleとctx.hrefが使用される 176: // ので、勝手に書き換える 177: ctx.title = res.feed + (res.title? ' - ' + res.title : ''); 178: ctx.href = res.href; 179: ctx.host = res.href.match('http://(.*?)/')[1]; 180: } else { 181: // Google Readerだが、アクティブなエントリーが無い場合 182: // 何もしない 183: } 184: } else { 185: // Google Reader以外の場合 186: // 何もしない 187: } 188:// custom end 1403: // ドキュメントタイトルを取得する 1404: var title; 1405:// custom start 1406: if(typeof(ctx.title) == 'string'){ 1407: // ctx.title設定済みの場合、ドキュメントタイトルに優先する 1408: title = ctx.title; 1409: } else 1410:// custom end

いささかスマートさに欠ける方法ですが、とりあえず目的は達成。

残る問題はSBM経由だとタイトルに余計な文字が入ることです。例えばDelicious/networkだとタイトルに"[from {user name}]"というプレフィックスが入ってしまいます。非同期でオリジナルソースページにアクセスしてタイトル取得とか、良くあるプレフィックスリストを作って削除、とかする必要がありそう。

2009/04/30

Gmail on iGoogle

Gmailの設定で「常にhttpsを使う」にしていると、iGoogle上のガジェットではinboxの表示が出来なくなったようです。自分の環境由来の不具合ではない模様。

自分はiGoogleのアドレスを"https://www.google.com/ig?hl=ja"にしていたので、見えている物だと思っていたのですが、iGoogle自体がhttpsだろうと、iGoogleとGmail間の通信は関係なかったのでしょうか。

iGoogleでGmailガジェットが利用できなくなったときの解決策? | りょーちの駄文と書評

2009/04/28

Google Toolbarを設定する

自分のGoogle Toolbarの用途は以下の三つ

  1. Web検索
  2. ページ内検索
  3. マウスオーバー辞書
Web検索

デフォルトの検索ボックスはFirefox標準のカスタマイズ機能で消す。Google Toolbarをトグルさせるショートカットキーを設定する。

ページ内検索

ボタン類はFirefox標準のカスタマイズ機能で可能な限り消す。[Google ツールバーオプション]画面 > [検索]タブ > [ウェブ閲覧ツール]の中にある、[検索キーワードのハイライト表示]と[ウェブページで単語を探してハイライトします]というチェックボックスをONにする。これでデフォルトのページ内検索(Ctrl+F)は不要になります。

マウスオーバー辞書

[Google ツールバーオプション]画面 > [ツール]タブ > [翻訳]チェックボックスをONにする

この時点でこんな感じになります。

問題が2点

オプションボタンが消せない

検索ボックスの右隣にあるボタンです。オプション画面を開いたり、検索を切り替えたり(Web/画像/地図など)できますが、要りません。ver.5からは、ツールバーを右クリックでオプション画面が開けるようになりました。また、検索切り替えは検索後でも出来ます。

翻訳ボタンが消せない

Firefox標準のカスタマイズ機能で消せますが、消すとマウスオーバー辞書が使えなくなります。マウスオーバー辞書を有効にすると翻訳ボタンも表示されます。ページ全体の翻訳は滅多にしないので邪魔です。

そこで、DOM InspectorとStylishです。これら二つのボタンは独立したXULオブジェクトとして、IDが振られている様ですので、ID指定で隠します。

@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); #gtbSearchButton, #gtbTranslateMenu { display : none !important; }

これで自分の使いたいボタンだけ表示されました。

一日の内で、最も長く使用するアプリのUIが自在にカスタマイズできるというのはすばらしいと思います。どうでもいい人にとっては本当にどうでもいいでしょうが。

2009/04/25

Friend Connect管理画面でBloggerの情報を見る

Blogger以外のサイトにGoogle Friend Connectのガジェットを追加した場合、Friend Connectのページから管理情報を参照できます。

しかし、Bloggerに設置した場合、Bloggerのダッシュボードから参照できる情報は内容が異なります。

前者の管理画面の各メニューは、設置サイトの管理IDを後ろに付けた下記のURLで表示されています。

http://www.google.co.jp/friendconnect/admin/site/metrics?id={site id}

そのため、サイトIDさえわかっていれば、Bloggerに設置したFollowersガジェットの情報も見られるようです。 明らかに表示内容が変化しているので多分合っていそうですが。

とりあえず、サイトIDを調べる手っ取り早い方法は、設置したブログのソースを表示して"site:"で検索すると以下の様なコードが見つかるはずです。

この"site:xxxxxxxxx"の数字部分を上記のアドレスにくっつければ、強引ですが見られます。Blogger以外のガジェットを何かしら追加したアカウントであれば、"Reports"や"Site Settings"などのメニューが表示されるので、とりあえず表示→最後のIDだけ張替え、で全てのメニューが確認できると思います。

一度もBlogger以外のサイトにガジェットを登録していないアカウントだとメニュー自体表示されていないので、URLを直打ちする必要があります。

Google Friend Connectはどこにどういったデータが保存されているのか、データモデルがイマイチ見えないので統一的な管理コンソールが欲しいところです。設置者用にも、利用者用にも。

ちなみに上記の「Blogger以外のサイト」として利用したのはGoogle Page Creatorです。Google サイトではhtmlファイルのアップロードが出来なかったため、設置できませんでした。明らかに代替として用を成していない辺りも気になります。

Reports
http://www.google.co.jp/friendconnect/admin/site/metrics?id={site id}
Site settings
http://www.google.co.jp/friendconnect/admin/site/settings?id={site id}
Social bar
http://www.google.co.jp/friendconnect/admin/site/socialbargadget?id={site id}
Members gadgets
http://www.google.co.jp/friendconnect/admin/site/membersgadgets?id={site id}
Social gadgets
http://www.google.co.jp/friendconnect/admin/site/osgadgets?id={site id}
Moderate posts
http://www.google.co.jp/friendconnect/admin/site/postmoderation/main?id={site id}&count=10
Manage members
http://www.google.co.jp/friendconnect/admin/site/visitors?id={site id}
For developers
http://www.google.co.jp/friendconnect/admin/site/jsapi?id={site id}
Plugins
http://www.google.co.jp/friendconnect/admin/site/plugins?id={site id}

2009/04/23

Google Toolbarを更新する

なぜか知りませんが、Google Toolbar for Firefoxのバージョンがあがっていませんでした。

アドオンマネージャでは"3.1.20081127W"。[更新を確認]しても、「更新は見つかりませんでした」。しかし、Google ツールバーを見ると、「Google ツールバー5をダウンロード」の表記。

試しに、そのままインストール(多分上書き)してみると、"5.0.20090324W"にあがっていました。こちら(Google ツールバー :: Firefox Add-ons)ではダウンロード前にマイナーバージョンまで解りますね。

Googleのアプリはインストール経路が幾つかあるので、以前はどこからどう入れたのか覚えていませんが、意図的にGoogle Toolbarの更新を止めたいといったサイトも見つかるので、自分も似たようなことをしていたのかもしれません。

2009/04/22

BloggerのFollowerになる(Googleアカウント版)

Google Friend Connectを利用して設置されている"Followers"を介して特定のブログのFollowerになる方法です。ブログの表示設定が日本語の場合、"Followers"は「読者」と表示されます。

  1. OpenIDを取得する

    • Googleのアカウント
    • mixiのアカウント
    • はてなのアカウント
    などを持っていれば利用できます。

  2. 設置しているページを見つける

    こんなガジェット(Bloggerウィジェット)を設置しているページを見つけて下さい。
    私はBloggerの旧Follower機能で読者指定して下さっていた、お二方のページで登録させて頂きました。

    現在自分のブログにも設置してあります。 見た目的にはmixiでいうマイミクに似ていますが、mixi程相互に強い繋がりではないので、ソーシャルブックマークやトラックバック程度のつもりでお気軽にどうぞ。
    *当該サイトでのCookieを許可する設定にして下さい

  3. アカウントを選択する

    [読者になる]ボタンを押すとどのアカウントでログインするか聞かれます。ここでは[Google]を選びます。

  4. ログインする

    見慣れたGoogleのログイン画面が表示されます。
    スクリーンショットではアドレスバーをトリムしてありますが、必ずアドレスが"https://www.google.com"で始まっているか、錠前アイコンがきちんと表示されているか確認してください。

  5. 公開範囲を設定する(簡易)

    他の人が当該サイトを訪れた際、読者一覧に自分を表示するか、表示しないかを決めます。 [詳細オプション]を押すともう少し細かい設定が可能です。詳細に設定しなくても進めます。

  6. 公開範囲を設定する(詳細)

    選択できる内容が増えます。

    [現在Bloggerプロフィールを使用しています変更]

    Googleのアカウントでログインした場合、Blogger用のプロフィールとGoogle用のプロフィールが選択できます。また、そのどちらでもない、このサイトだけの表示も可能です([変更]を押した後で[リンク解除]を押す)。

    [次の読者になっています 一般公開]

    簡易画面での自分が読者になっていることを公開/非公開にする設定です。さらに[プロフィールにこのサイトを含める]で、他のサイトの読者になっているかを表示/非表示にできます。
    他の読者登録しているサイトで、第3者が自分のプロフィールを見た際に[参加しているサイト]欄にこのサイトを表示するかどうか決められます。

    [このサイトでソーシャル ネットワークから友だちに接続]
    後で調べる
    [参加している他のサイトに履歴を公開する]
    プロフィールの[参加しているサイト]欄の下に履歴が表示されます。いつ、どのサイトの読者になったかが表示されます。

  7. 完了

    完了後にFollowersガジェットを見に行くと[読者になる]ボタンのあった位置にプルダウンが表示されます。

  8. 再設定

    上記6のプルダウンから、[サイトの設定]を選択する事で、4-5の設定画面に戻れます。

  9. 他のサービスとの連携

    Googleの場合既に幾つかの別のサービスと連携しています。

    Blogger

    Bloggerを利用していれば、ダッシュボードに[読者になっているブログ]一覧が表示されるようになります。
    下にある[管理]ボタンを押すと先ほどの設定画面を開いたりも出来ます。

    Google Reader
    Google Readrerを利用してれば、サイドバーの購読一覧に読者になったブログが自動で追加されます。

  10. 読者をやめる

    上記5の詳細設定画面から、[このサイトの読者をやめる]を押します。Google Readerの購読一覧から削除してもFriend Connect上の読者一覧からは消えません。

2009/04/20

Google Friend Connect

遅まきながら調べて見ました。ダッシュボードのFollowers表示が気になっていたのですが、放置しっぱなしで失礼致しました。

統一感のある日本語の解説サイトが見つからず、なんとも全体像が掴みにくいのですが、ざっと見た感じ。

  • mixi見たいなSNS的な機能がブログやその他のサイトに設置できる
  • 設置する側(サイト管理者側)はファイルアップロード(FTP等の)できるサービスが必要 *1,*2
  • 利用する側はOpenIDが必要(Google,Blogger,Twitter,mixiのOpenIDなど)*3

*1:Bloggerはアップロードしなくても使えるようになっている。
*2:あくまで現在公開されている「読者」機能の場合?
*3:mixiのログインIDとは異なる。

例えば、Bloggerの"Followers"、日本語設定だと「読者」機能の場合。 設置したブログにmixiでいう「マイミク」の様なガジェットが表示される。

Google Friend Connectサーバ(という物が便宜的にあったとして)上に、サイトのURL+OpenIDという二つのキーでプロフィールが登録されるイメージだと思っています。

当該サービス(当該サイトで提供しているサービス)の専用IDを使わず、OpenIDを使う利点は当然、既存のソーシャル情報を流用できるからです。

例えば、Bloggerの「読者」機能でも、GoogleIDで登録すると*4、Googleのプロフィールからアバター画像、ハンドルネーム、そのたプロフィール情報が取得できます。既に設定されている個人のプロフィールを追加設定して二重管理する必要がなくなります。

*4:解りにくいのですが、GoogleのIDにはGoogleのプロフィールとBloggerのプロフィールが両方関連付けられている様です。一度もBloggerを利用していないGoogleのIDを使用したところBloggerのプロフィールは表示されませんでした。あとから追加する事も外す事もできます。

当然、mixiのOpenIDでログインすれば、mixiのハンドルネームが取得できます。マイミクの情報やコミュニティの参加情報はBloggerのFollowersでは流用しない様ですが。

端的に言うと、これまでの「コンテンツ・サービス提供者」=「ID・プロフィール管理者」という構図が、「コンテンツ・サービス提供者」≠「ID・プロフィール管理者」になるだけです。

全然まとまらないですが、最も注意する点が一つ。

mixiで登録したプロフィールがBloggerでも、その他のGoogleサービスでも、twitterでも、はてなでも流用できたら楽かもしれません。が、一回の登録が他に波及するということは、一回の失敗が全体に波及する、ということです。mixiでも住所や出身地、実名のそれぞれに公開範囲を設定している様に、OpenIDを使用する場合、まず自分がプロフィールにどんな入力をしていて、何が何処まで公開されているのか事前に確認した方が良いかと思います。

特に「Googleのアカウント=Gmailのアカウント」だった時代にアカウントを作成したっきりの人は、公開用のプロフィール情報をきちんと作成するか、個人情報の登録内容を再確認することをお勧めします。

また、GoogleのIDでFollowers登録し、かつBloggerを利用している場合、Bloggerのダッシュボードで自分がどのサイトに登録しているのか一覧できます。しかしmixiのOpenIDで登録した場合、登録したサイトに行かないと自分の登録情報が閲覧・変更・削除も出来ません。mixiの設定情報画面にはGoogle Friend ConnectでOpendIDを利用したことしか記録されていないので、登録したサイトそのものを忘れてしまった場合、何処で確認できるのか解りません(未調査)。

ここまで来てなんですが、Google Friend Connectではなく、オープンソーシャル一般論になってしまいました。

Googleのプロフィール
Google Accounts
Bloggerのプロフィール
Blogger:Dashboard
Dashboard > View Profile

2009/03/20

マウスジェスチャの見える化

コンセプトモデルです。実用には至ってません。

svg_gesture.xhtml

リンク先を開いてもソースが見えるだけなので、ダウンロードしてから開く必要があります。

右クリックすると、マウスポインタの周りにパネルが表示されます。表示されたパネルの上にマウスを移動すると移動した先のマウスポインタの周りに再度パネルが表示されます。

作業環境はFirefox3.0.7。右クリック禁止スクリプトの許可や他のマウスジェスチャをオフにしておかないとおかしなことになります。

これで、最終的に右クリックボタンを離したときに通った軌跡にコマンドを割り振れれば、マウスジェスチャっぽくなるかなと。

仮想的な奇跡を計算するより、コンポーネント配置してマウスイベント取った方が早いんじゃないか、と思ったコンセプトモデルです。次の一手が見えた方が思い出す手間も減りますし。

マウスジェスチャと聖剣伝説タイプのランチャの中間みたいなのが欲しいのです。

2009/03/08

Googleサービスのfaviconいくつか

Google Readerのフィード追加ブックマークレットにはfaviconがないため、Firefoxのフィード追加アイコン(アドレスバーの右端に出る奴)を流用していたのですが、Google Reader自体のfaviconと見間違えることが多いため、Readerの方を変更。

なぜか知りませんが、Firefoxの特定のProfileだけ、Google Readerのfaviconが32x32版のアイコン(を16x16に縮小表示)だったため、他のProfileでもそれを流用。

加えて、Note&Shareのブックマークレットもfaviconがないため、Readerのサイドバーから流用。こちらはスプライト画像のため、自分でトリムする必要がありました。

また、tasksのfaviconがなぜか透過されない、と書きましたが、透過版(png)と非透過版(ico)の2種類があるようです。Google Chromeではブックマーク時になぜかpngが使用されたようですが、Firefoxではicoの方が使用されたようです。これも手動で変更。

faviconの変更はFavicon Picker 3 0.5を使用。最近のFirefoxはbookmarks.htmlを変更しても反映されないようです。履歴やブックマークをDB(sqlite)化しているとかなんとか。

Favicon Pickerはローカルの画像ファイルしか扱えないようなので、下記の手順を踏む必要があります。

  1. 当該画像だけを表示
  2. デスクトップにドラッグ&ドロップで保存
  3. ブックマークのプロパティから変更

また、ブックマークのプロパティを保存しなくても(キャンセルしても)faviconは変わってしまうので要注意です。

Reader(デフォルト)
https://www.google.com/reader/ui/favicon.ico
Reader(32x32)
https://www.google.com/reader/ui/573007822-app-icon-32.png
Reader(64x64)
https://www.google.com/reader/ui/4283503602-app-icon-64.png
Reader(スプライト)
https://www.google.com/reader/ui/972236033-lhn-sprite.png
tasks(非透過)
https://mail.google.com/tasks/res/favicon.ico
tasks(透過)
https://mail.google.com/tasks/res/favicon.png

2009/02/26

Gmail Tasks

PC用
https://mail.google.com/tasks/ig
モバイル用
https://mail.google.com/tasks
PCでモバイル用
https://mail.google.com/tasks/m

Firefoxだとブックマークして「サイドバーに読み込む」でサイドバーガジェットに。ただfaviconが、Chromeだと透過されるのに、Firefox3.*だと透過されませんでした。

これとカレンダーのオフライン化が無料版で出来ればChromeがオフラインOfficeスイートに。

2009/02/25

FirefoxのProfileを縮小

ついでにプロファイルを作り直してみた。 どれだけゴミが溜まっていたのか、プロファイルのサイズが76MB→38MBまで小さくなった。

これを見て、思い出しました。FirefoxのProfile配下にはsqliteのDBファイルが幾つかあります。sqliteは一度拡張すると、データを消しても小さくならないようです(デフォルトでは)。

そこで、sqliteにはvacuumという余分な空白を圧縮してファイルを縮小する機能があるそうです。他のDB(PostgreSQL等)にもあるみたいですが。

どのファイルがどういう役目なのかはググればいいとして、圧縮にはコマンドラインのsqlite以外にFirefoxのアドオンsqlite-manager - Google Codeも使えるそうです。

  1. SQLite Managerをインストール
  2. profile下の適当に大きい*.sqliteファイルを探す
  3. SQLite Managerを開く
  4. [Database] > [Connect Database]で当該ファイルを開く
  5. [Database] > [Compact Database]で圧縮

なぜか"vacuum"ではなく"Compact Database"です。その方が直感的ですが、関連付けがあれば尚解りやすい。"Compact Database(vacuum)"など。

SQLite Managerでは他にも、profileディレクトリにあるsqliiteファイルを一覧してくれるプルダウンもありますが、なぜか私の環境ではこのプルダウンをでファイルを選択->Compact Databaseではうまく機能せず、ファイルが圧縮されませんでした。

ちなみに、ファイルサイズですが

urlclassifier3.sqlite
50数MB->15MB強
urlclassifier2.sqlite
15MB前後->6MB強

程度の圧縮率だった気がします(記録忘れ)。これらのファイルは危険なサイトのブラックリストらしいので、警告機能をONにしている限り肥大化していきます。profileごと作り直すと当然小さくなります。

警告をOFFにすることでディスクアクセスも減らせるようですが、その辺は危険度と速度のトレードオフになるようです。

ほかにplaces.sqliteなども履歴ファイルなので肥大化するようです。私はUSBで持ち運ぶ前提でキャッシュのサイズや履歴の日数を少なくしていたので、それほど大きくなっていませんでした。

2009/02/24

Google Chromeのポータブル化

Google配布のGoogle ChromeとPortable Google Chrome 2.0.164.0 - Caschys Blog配布のPortable Google Chrome(以下Portable Chrome)の違いをテスト。手動ポータブル化時に勝手に生成されるようなレジストリキーがProtable Chromeでは作成されないのかを確認。

結論から言うと、作成されます。

起動後に以下のレジストリキーが追加された。

[HKEY_CURRENT_USER\Software\Google\Update\ClientState\{8A69D345-D564-463c-AFF1-A69D9E530F96}] "dr"="(値省略)"

タブを開いたり、閉じたりすこし作業した後にChromeを終了。終了後に以下のレジストリキーが追加された。

[HKEY_CURRENT_USER\Software\Google\Common\Rlz\Events\C] "C1I"=dword:(値省略) "C2I"=dword:(値省略) "C1S"=dword:(値省略) [HKEY_CURRENT_USER\Software\Google\Common\Rlz\PTimes] "C"=hex(b):(値省略)

ほぼ、同じです。Portable ChromeとGoogle Chromeの違いというより、その時の操作に依存しそうです。

API Hookなどでレジストリの書き込みを抑制している(そういう事が出来るというのを今回知りました)のかと思ったのですが、そういうわけでも無いようです。Portable Chromeでも「レジストリ汚染されない為に」という目的は達成されません。

Portable Chromeでは、手動ポータブル化の際に事前に追加したキーは、無くても起動できました。ただし、

  1. 一回目:当該キーが自動生成
  2. (終了後、当該キーを手動で削除)
  3. 二回目:当該キーが無いまま起動

と、当該キーの必要性がいまいちわかりません。(1回目の自動生成が見間違いの可能性もあり)

Portable Chromeでは以後、当該キーが無いまま起動・終了できますが、手動でポータブル化したGoogle Chromeでは当該キーが無いと絶対に起動できませんでした。

2009/02/23

Google Chromeのポータブル化

Google配布のChromeインストーラを一度も実行していないオフライン端末(XP SP2)にファイルコピーだけで動くかのテスト。

インストール済み端末のデフォルトのインストールフォルダから、必要ファイルを以下にコピー

D:\home\hoge\.google\Chrome\User Data
D:\usr\local\opt\Google\Chrome\Application

下記ショートカットで起動

D:\usr\local\opt\Google\Chrome\Application\chrome.exe --user-data-dir "D:\home\hoge\.google\Chrome\User Data"

うんともすんとも言わない
起動時に必要なレジストリキーがあるらしい。ぽっとの陽だまり研究室 : Google Chrome をUSBメモリで起動する試み

Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Google] [HKEY_CURRENT_USER\Software\Google\Update] [HKEY_CURRENT_USER\Software\Google\Update\Clients] [HKEY_CURRENT_USER\Software\Google\Update\Clients\{8A69D345-D564-463c-AFF1-A69D9E530F96}] "name"="Chrome" "pv"="1.0.154.48"

前述のショートカットで起動->成功

--user-data-dirで指定したフォルダの下に"Default"フォルダを(無ければ)自動作成する。Defaultまで指定してしまうと、D:\home\hoge\.google\Chrome\User Data\Default\Default\というフォルダが作成されてしまう。

起動後に以下のレジストリキーが追加された。

[HKEY_CURRENT_USER\Software\Google\Update\ClientState\{00058422-BABE-4310-9B8B-B8DEB5D0B68A}] "dr"="(値省略)" [HKEY_CURRENT_USER\Software\Google\Update\ClientState\{8A69D345-D564-463c-AFF1-A69D9E530F96}] "dr"="(値省略)"

タブを開いたり、閉じたりすこし作業した後にChromeを終了。終了後に以下のレジストリキーが追加された。

[HKEY_CURRENT_USER\Software\Google\Common\Rlz\Events\C] "C1F"=dword:(値省略) "C1I"=dword:(値省略) "C2I"=dword:(値省略) "C1S"=dword:(値省略) [HKEY_CURRENT_USER\Software\Google\Common\Rlz\PTimes] "C"=hex(b):(値省略)

これらの、レジストリキーを生成・削除する起動スクリプトを作らないと、完全ポータブル化とは行かないようです。 ただ、作ったり、作られなかったり、キーによってまちまちなので、網羅するのは面倒そうです。

2009/02/22

".NET Framework Assistant 1.0"の削除の仕方。

2009-07-15 追記

現在、より簡単に削除する方法が提供されているそうです。

Mozilla Re-Mix: Firefoxから[Microsoft .NET Framework Assistant]を簡単に削除する方法。

マイクロソフトのテロ行為に対する対処法。背景は後述。

レジストリキーの削除
HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Firefox\extensions\{20a82645-c095-46ed-80e3-08825760534b}
未確認:レジストリを削除しただけだと、実体ファイルは残る?ディスクスペースの無駄にならないか。
実体ファイルの削除
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Windows Presentation Foundation\DotNetAssistantExtension
未確認:実体ファイルを削除しただけだと、毎回起動時にレジストリキーを参照する?起動時間が遅延しないか。
prefsの修正
general.useragent.extra.microsoftdotnet
インストールされた状態で、一度でも起動したprofileはprefs.jsかabout:configでキーを削除。about:configの場合、キーの設定値をリセットして再起動すると消える。

以下、背景。

Microsfot Updateを行うと、.NET Framework 3.5 SP1がインストールされる。

.NET Framework 3.5 SP1がインストールされると、FirefoxにMicrosoft .NET Framework Assistant 1.0というアドオンがインストールされる。

このアドオンが最悪な点は、以下の4つ。

  • インストールに関して、事前の説明がない。
  • インストールに関して、ユーザの同意を得ない。
  • デフォルトの削除手段が提供されていない。
  • ユーザエージェントが改竄される。

ユーザエージェントの後ろに"(.NET CLR 3.5.30729)"なんて文字列が追加されるのは、まるで「馬鹿」と書かれた紙を背中に張られる類の胸糞の悪い悪戯だ。正直吐き気がする。

なぜ、このアドオンが「悪意あるソフトウェアの削除ツール」で削除されないのか不思議でならない。

マルウェアの定義 : FAQ - Microsoft Technet
http://technet.microsoft.com/ja-jp/library/dd362857.aspx

Q. マルウェアの問題を防ぐ方法の要約はありますか?

はい、以下をご覧ください。

現在、コンピュータユーザーにとっての最大の問題は、ウイルスおよびスパイウェアの 2 つです。これらはいずれも問題ですが、以下のような対策を計画的に行うことにより、容易にコンピュータを保護することができます。

* コンピュータのソフトウェアに常に修正プログラムを適応し、最新の状態にしておきます。オペレーティングシステムおよびウイルス対策ソフトウェアを定期的に更新する必要があります。

* 信頼できるソースからの修正プログラムのみをダウンロードします。Windows オペレーティングシステム向けには、常に Windows Update を訪問し、そのほかのソフトウェアは常に、製造元の会社または人物の正規の Web サイトを使用してください。

* 何かをインストールする前には常に考え、リスクと利益を秤にかけてください。長期使用許諾契約は読むのが嫌になりますが、その中にスパイウェアがインストールされる警告が隠されていませんか?