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}]"というプレフィックスが入ってしまいます。非同期でオリジナルソースページにアクセスしてタイトル取得とか、良くあるプレフィックスリストを作って削除、とかする必要がありそう。