2007-01-29

livedoor Readerの未読件数を淡々と記録するよ on lingr

作った。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use WebService::Lingr;

my $room_id = 'saisoku';
my $livedoor_id = 'YOUR_LIVEDOOR_ID';
my $lingr = WebService::Lingr->new(api_key => "YOUR_API_KEY");

my $res = $lingr->call('room.enter', { id => $room_id, nickname => "$livedoor_idの未読件数" });
my $ticket  = $res->{ticket};
$lingr->call('room.say', { message => sprintf("%s件", get_ldr_unread($livedoor_id)) , ticket => $ticket });

$lingr->call('session.destroy', {});

sub get_ldr_unread{
    my $livedoor_id = shift;
    my $url = "http://rpc.reader.livedoor.com/notify?user=".$livedoor_id;
    my $content = get($url);
    my ($count) = $content =~ /\|(\d+)\|\|/;
    return $count;
}


サンプル
http://www.lingr.com/room/saisoku

デザイニング・インターフェースを買った

買った。良本。



UI部品の名前が分からなくて困る、ってことが多かったのですが色々載ってて参考になる。基本的に英語の表記も載ってるのですが、たまに日本語しか書いてない箇所があるので、原書も買っといた。

2007-01-27

Firefoxでブックマークのフォルダをまとめて開くときはbrowser.tabs.loadFolderAndReplace

Firefoxでブックマークのフォルダをミドルクリックなどでまとめて開くと、現在開いてるタブが置き換わりますが、about:configを開いてbrowser.tabs.loadFolderAndReplaceの値をfalseにすると現在開いているタブはそのままで追加でタブが開くようになります。

2007-01-25

フィードリーダーの脆弱性まわりのこと

最近、FreshReaderに脆弱性があったということで、いくつか調べて直したり、赤松さんと連絡取り合ったり、それからはてな使ってないのにユーザー様とか書かれて不愉快な気分になったりしてたんですが。

この記事はひどすぎると思う。
フレッシュリーダーの脆弱性に関連してSage++のこと

そもそもの問題として「ローカルディスク上のHTMLファイルをブラウザで開くと超危険」です。XMLHttpRequestやIFRAMEでローカルファイルの内容を読み取れるからです。Sageに脆弱性があるということは、あらゆる個人情報の漏洩につながります。「開発者の個人情報を晒すリスクが云々」というのは、個人的には分からなくもないですが、ユーザーの個人情報を危険に晒していることを認識すべきです。

開発者本人が過去に書いているので、危険性の大きさは十分に認識できているはずです。「脆弱性がある」と公表してしまった時点で、勘の良い人ならどうやって突破するのかぐらいすぐに分かります。

Sageは危険です。はっきり危険だと言うべきです。「未修正の脆弱性があるから」というのはもちろんですが、脆弱性があった場合の影響範囲がでかいので危険だと考えるべきです。Sageのユーザーに悪意のあるフィードを購読させる、という手間がかかるので、起こりうる確率としては低いでしょうが、攻撃に成功すれば攻撃者はローカルディスクの全内容を取得できます。


IEの場合、独自機能でsaved from urlというのがあり、HTMLファイルの先頭にこのように記述することで、
<!-- saved from url=(0014)about:internet -->

参考: http://support.microsoft.com/kb/883866/ja

任意のスクリプトが実行されたとしてもインターネットゾーンで実行されるため、ローカルファイルは読めなくなります。ウェブページを保存する際にこの機能が使われていて、ローカルファイルを開いてもインターネットゾーンのセキュリティポリシーを適用するようになっています。

IEではこのあたりのセキュリティポリシーがしっかりしているのですが、他のブラウザはこのような仕組みが実装されていないようです(俺が知らないだけかもしれない)。この記述があったとしても、他のレンダリングエンジンを使って開いた場合は単なるコメントとして無視されてしまうので、ローカルファイル読み放題です。

Firefox拡張機能のScrapBookではページ取り込みの際にscriptタグやらonloadやら綺麗に取り除いてくれたりするのですが、Firefox標準のページ保存だとそういうことはやってくれません。そもそも拡張機能側の責任でそういうことをやらなければいけないというのが(中略)じゃねーのって気がするので、Firefoxとかインターネットの使用とかを中止した方がいいんじゃないかと思います。

2007-01-23

ウェブ型のRSSリーダーのシェアを調べてみた

このブログの2007年1月15日から2007年1月21日までのログを集計してみた。はじめに断っておくと、あくまで「このブログに対するアクセス」の集計結果であってフィードリーダーのシェア統計としては全く信頼できない。イギリス人に母国語を訊いたりインド人に主食を訊いたりするぐらい予想通りの結果だ。

はじめに


ウェブ型のRSSリーダーというのは乗り換えるにしろ使うのをやめるにしろ、購読リストをスッカラカンにしてから辞めるという人はあまりいない。あるいは登録しているだけで全然読まれないというケースも良くある。なので、feedburnerのアクセス解析で表示されるような購読者数というのはあまり当てにならなかったりする。(Bloglines一強だったころは当てになった)

というわけで、特定のRSSリーダーでのアクティブな購読者数を調べるには、記事本文内の画像へのリファラで集計して実際にその記事が読まれた回数をカウントするのが良いよ、ということは以前hail2uのkyoさんが書いてた通りです。
http://hail2u.net/blog/rss/numbers-of-active-users-in-bloglines-and-livedoor-reader.html

やり方


先日書いたお気に入りをサイドバーに常時表示させてない人はどうしてるのかというエントリ内に丁度画像が張ってあったので、その画像に対するリファラを集計しました。ユニークユーザーやブラウザ利用者数の集計にはVisitorsを使用しています。コマンドラインから手軽に使えるのと、どの時間帯にアクセスが多いかなどを視覚的にわかりやすく表示してくれて便利です。

こんな要領で画像ファイルへのアクセスだけ切り出してgrepで行数をカウントしてやればいい。
$ grep 'GET /path/to/image.png' access.log > imgacc.log
$ grep 'reader.livedoor.com' imgacc.log -c
$ grep 'bloglines.com' imgacc.log -c
$ grep 'google.com/reader' imgacc.log -c
$ grep -e 'feedshow\(cat\|all\)\?.php' imgacc.log -c
$ grep 'mail.google.com' imgacc.log -c


結果は以下の通りになった。

livedoor Reader : 1264
Bloglines : 428
Google Reader : 357
FreshReader : 63
Gmail : 25

FreshReaderは特定のドメインで実行されてないので、記事表示をするURLの正規表現で切り出し。Gmailで読んでるのは多分Plaggerユーザーである。

注意事項その1


これはリクエスト回数で、ユニークユーザーで計算すると少し減る。UUだと1216,420,306以下略となる。同じユーザーが既読にしないで何回も同じ記事にアクセスしたのかも知れないし、あるいはNAT内で同一のIPから別のユーザーがアクセスしたのかも知れない。順位に影響が無い範囲で、多少の誤差がある。

注意事項その2


リファラを送らない設定にしている人の分は全く集計されない。自分自身も開発中のプロダクト名なんかが外部に漏れないように、職場ではリファラを全く送信しないようにしてる(そういう人がどの程度いるのか知らない)。またhttpsからhttpに対してはリファラを送らないことが推奨されているので、真っ当なブラウザであればリファラを送らない。ローカルファイルからhttpに対しても、真っ当なブラウザであればリファラを送らない。

リファラ無しの画像へのアクセスは1616件あり304 Not Modifiedを抜いてUUを取ると1240件だった。クライアント型のRSSリーダー(Safari、Firefox拡張のSage、ThunderBird、Headline-Reader)からのリクエストがこの中に含まれると考えて良さそう。いくらかはUser-Agentから推測できるが、Sageでの記事表示は普通にFirefoxと同一なので区別が付かない。Bloglines、Google Reader、Gmailをhttpsで使ってるユーザーの数が案外多かったりするのかも知れない。

Firefoxのシェアがとても高い


どのRSSリーダーを使っていようがFirefoxのシェアが非常に高い。総じて50%以上。

livedoor Reader: 66.6%
Bloglines : 70.5%
Google Reader: 80.4%

Bloglinesの使われ方


Bloglinesでの記事表示は
myblog_display?sub=xxxxxが個別表示
myblog_display?folder=xxxxxがフォルダまとめて表示
myblog_display?all=1が全部まとめて表示

となっているので、リファラを見ると、どのモードが多く使われているのかを知ることができる。

個別表示 : 261
フォルダまとめて表示 : 137
全部まとめて表示 : 18

となった。

その他のウェブ型RSSリーダーのシェア


記事へのリンクは「このブログの購読者」ではなく、はてなブックマークの人気ページなんかを経由で来た人も含む。先週はちょくちょく上がっていたので、普段よりも多い印象を受ける。

- Googleパーソナライズドホームからのアクセスは、記事へのリファラがユニークで458件。
- はてなRSSは画像へのアクセスが30件。全文表示でないユーザーが多いだろうから正確な読者数ではない。記事へのリファラはユニークで311件。
- feedpathは画像へのアクセスは0件。記事へのリファラがユニークで62件。
- FEEDBRINGERは画像へのアクセスが1件。記事へのリファラがユニークで28件。
- My Yahoo!は記事へのリファラがユニークで21件。
- goo RSSリーダーは画像へのアクセスは0件。記事へのリファラがユニークで12件。
- exciteリーダーは画像へのアクセスが0件。記事へのリファラがユニークで3件。


という結果になりました。エクセルとかパワーポイントとかは持ってない。

2007-01-21

livedoor Readerを十字キーで操作するためのGreasemonkeyスクリプト

思うところあって作ってみた。カーソルキーだけで読めます。IME有効無効に関わらず使えます。
http://la.ma.la/misc/userjs/ldrkeybindforldr.user.js

フィード一覧フォーカス時
↑ : 前のフィードを選択
↓ : 次のフィードを選択
→ : 開く

記事画面フォーカス時
↑ : 前の記事に移動 / 前のフィードに移動
↓ : 次の記事に移動 / 次のフィードに移動
→ : ピンを付ける / 外す
← : フィード一覧にフォーカスを移す

2007-01-19

PerlでIEの履歴にアクセスする方法

こんなんで出来た。

use strict;
use Win32::OLE;
use Data::Dumper;

my $wshell = Win32::OLE->new('Shell.Application') or die "oops\n";
my $HISTORY_FOLDER = 0x22;
my $history_dir = $wshell->Namespace($HISTORY_FOLDER);
my $url_list = scan_folder($history_dir, []);
print Dumper $url_list;
sub scan_folder{
    my ($folder, $ref) = @_;
    my $items = $folder->items;
    for(my $i = 0;$i < $items->count; $i++){
        my $item = $items->item($i);
        if($item->IsFolder){
            scan_folder($item->GetFolder, $ref);
        } else {
            my $url   = $folder->GetDetailsOf($item,0);
            my $title = $folder->GetDetailsOf($item,1);
            push @{$ref}, [$url, $title];
        }
    }
    return $ref;
}
exit;

2007-01-17

そろそろライブドア事件について一言いっておくか

今から1年前2006年1月16日はライブドアに強制捜査が入った日で、その日自分が何をしていたかというと社長面接を受けに行っていた。たかだか面接に大げさなもので、六本木ヒルズの周辺には報道陣が詰めかけており、張り詰めた空気の中、何も知らずに六本木ヒルズに突入すると、こんな状況ですいませんと茶菓子も出されずに真っ直ぐ家に帰された。全くひどい会社である。俺の面接と強制捜査とどっちが大事なのか、冷静に考えてみれば分かる話である。

(以下ノンフィクションに一部誇張を交えてお送りします)

強制捜査なんてものは言ってしまえば良くある話で、それに対して俺が面接を受けるとなると世紀に一度あるかないか惑星直列ぐらいの確率である。てっきり報道陣もそっちを取材しに来たのかと思ったらスルーである。全力スルーである。この手の事件に関するマスコミのスルー力ときたら大したもので、唯一かまってくれたのはスポニチだけだった。あれは捏造だけれども。そういや岡田有花が取材したいとかいう話があったらしいが写真NGだといったら無かったことになった。お前も写真NGだろうが。

話がそれた。マスコミ批判はどうでもいい。

遡って、2005年の10月15日。とあるオフ会みたいな場所で、偶然その場に居合わせた幹事みたいな人(後のid:nagayama)が「ユー働いちゃいなよ」と、なぜかジャニさんみたいな口調でしきりに俺を働かそうとするのである。そこで偶然その場に居合わせたゼロベースの石橋社長に名刺をもらったが丁重にお断りした。と、ここまでよくある話ではあるのだが、この日は特別だった。id:nagayamaが耳打ちしてこう囁いたのである「id:wanparkがはてなに就職するらしいよ」と。とたんに私は精神錯乱呼吸困難に陥り、眼球から塩分が出すぎて、あやうく救急車で運ばれる直前まで行った。それほどid:wanparkが就職するというのは、自分にとって衝撃的な出来事だった。(id:wanparkを知らない人のために解説しておくと、かつて「childtv.org」というロリペド鬼畜サイトを運営していた20世紀最大の危険人物である)

もちろんこれは言うまでもなく当時ニートだった自分をどうにかして職に付かせようとする幹事の人の粋な「はからい」であったわけだが、(後にid:nagayamaもはてなに就職することになる)、まさかここまで酷いことになるとは思ってなかったらしく、あの時の取り乱しようといったら、あの時は取り乱してすいませんでしたとしか言いようが無いほどであった。そこで再び偶然居合わせたゼロベースの石橋社長に「面倒見てやってくださいよ」とお願いするid:nagayama。再び名刺をもらうが錯乱していたため、すぐに無くしてしまった。そんな折に「良かったらうちに来ませんか」と言ってくれたのが増井俊之さん(当時産総研、現アップル)である。

たった一言の悪意の無い言葉が、これほどまでに人をどん底まで落とし込むものかと思った矢先に、たった一言のさりげない言葉が、どれだけ人の救いになることか。おそらく人生においてもっとも感情の起伏が激しかった日であろう。

(中略)

その後、色々あって、ライブドアに入社するに至ったのである。

2007-01-15

お気に入りをサイドバーに常時表示させてない人はどうしてるのか

一般人は常に「お気に入り」を表示している!
http://plaza.rakuten.co.jp/catfrog/diary/200701140026/
http://b.hatena.ne.jp/entry/http://plaza.rakuten.co.jp/catfrog/diary/200701140026/

らしいんですが、自分はもっぱらURL直打ちですね。どのブラウザでも使えるし。

二文字ぐらいタイプして、カーソルキーの下かTabを押してエンター。アクセス回数が多い順に勝手に並べ替えてくれます。Firefoxだと「Ctrl + L」でアドレスバーにフォーカスが移ります。IE系だと「Alt + D」が使えます。具体的にはよく使うサービスのドメインの先頭二文字ぐらいを覚えておくといいです。

サイドバーとかリンクバーの位置で覚えちゃうと並び順が変わっただけでメガネメガネみたいなことになるんですが、アドレスバー直打ちだと手が覚えるので、そういうことが気にならなくなります。

3人に聞いたら2人そういってました。間違いないです。
Firefoxだとブックマークレットにキーワードを割り当てられるので、例えば「ctrl+l sub enter」でsubscribeとかいうのもやってる。

こんなん↓