:quitした時と閉じるボタンをクリックした時の動作の違い

閉じるボタンでfirefoxを終了させた時にセッションを保存したくない - zaknakの日記 についての自分用メモ。大嘘ついてる可能性大。2.0b2。
vimperatorは起動時にbrowser.startup.pageの値を3に設定する。これは、「オプション>起動>一般>Firefoxを起動するとき」を「前回終了時のウィンドウとタブを表示する」と設定することに相当する。:quit や :quitall 等のセッションを保存しないコマンドによってFirefoxを終了する場合、vimperatorはbrowser.startup.pageの値を1に設定してからFirefoxを終了する。これは、「ホームページを表示する」と設定することに相当する。よって、次回起動時にはホームページが表示されることになる。しかし、閉じるボタンをクリックしてFirefoxを終了させた場合には、browser.startup.pageの値を1にするという動作は実行されず、起動時に設定された3のままで終了することになる。よって、次回起動時には前回終了時のウィンドウやタブが開くことになる。

はてブエントリーページでコメントを書いていないユーザーを表示させない

はてブのエントリーページにはブックマークしているユーザーの一覧が表示されるが、コメントを記入していないユーザーにはliタグに class="nocomment" が設定されていることを知った。
Stylish あたりで、

@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document url-prefix(http://b.hatena.ne.jp/entry/) {
    li.nocomment{
        display: none !important;
    }
}

こう書いておくとコメントを記入していないユーザーは表示されないので、ブックマークしているユーザーが多い場合にコメントが読みやすくなる。ブクマしているユーザー数が多かった場合の挙動がリニューアル前後で違っている気がしていて、リニューアル前はコメントを記入したユーザーのみが出力されていた気がするんだけど、どうだったかな。現在確認できる挙動は、ある人数を超えるとコメントの有無に関わらず最新x人の表示になっている。

閉じるボタンでfirefoxを終了させた時にセッションを保存したくない

vimperatorを入れてるくせについマウスで閉じるボタンをクリックしちゃったりして、次回起動時に前回終了時のタブが表示されてムキーッっとなったので調べた。
_vimperatorrc に、

set! browser.startup.page=1

を追記。起動時にvimperatorによって3が設定されている所を1に書き換え。副作用があるか不明。

vimperator の plugin を書く練習。はてブのエントリーページを開く

http://github.com/zaknak/vimperator/raw/master/plugin/hateb_entry.js

コード貼ってあったけど省略。http://github.com/zaknak/vimperator/tree/master/plugin まで。

:[count]hateb[!] でエントリーページを新しいタブに開く。[!]で現在のタブに。[count]の指定で指定した数だけ 'http://b.hatena.ne.jp/entry/' を先頭に付加。デフォルトは1個。
例えば閲覧中のurlが 'http://www.hatena.ne.jp/' だったとすると、
:hateb では 'http://b.hatena.ne.jp/entry/www.hatena.ne.jp/' を新しいタブに開く。
:3hateb! では 'http://b.hatena.ne.jp/entry/b.hatena.ne.jp/entry/b.hatena.ne.jp/entry/www.hatena.ne.jp/' を現在のタブに開く。メタブ閲覧用。

06/03 追記

エントリーURLの仕様に変更があったので、http://b.hatena.ne.jp/teramako/20090703#bookmark-14379286 を参考に修正した。

はてなブックマークのコメント文字数

追記あり

はてブのコメント。ブックマークレットを使った投稿だと投稿時にブックマークレット側で100文字を超えないように制限をかけてるけど、どうも記録時には100文字で切り捨てるって処理は入れてないみたいで、Tomblooや公開されているAtomAPIを利用して100文字を超えて投稿した場合、エントリー情報取得APIからだと100文字を超えたコメントが取得出来てしまう。
エントリーページ: http://b.hatena.ne.jp/entry/http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/
そのJSONリクエスト: http://b.hatena.ne.jp/entry/json/http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/
エントリーページには100文字*1までしか表示されないけど、エントリー情報取得APIからは制限を越えて出力されている。

09/02/27 追記

ブックマークレット側で制限かけてるとぬかしたけど、ブックマークレットでも制限かかってないですね。勘違いしてた。というわけで、投稿方法は問わず100文字以上記録していて、エントリー情報取得APIから100文字以上のコメントが取れる。
参照 http://chronicle.g.hatena.ne.jp/rikuo/20090226/p2009022601

*1:ASCII文字?は3文字で1文字換算

はてなブックマークでタグを付けていないエントリーに仮にタグ付けするスクリプト

はてブからタグ付けしていないエントリーを探し出して仮にタグ付けするスクリプトを書いみた。本当は、はてブ側でタグ付けしていないエントリーを表示する機能があると嬉しいのですけど、その手の要望は、
はてなアイデア - タグの付いていないものを一括で表示する 未分類タグが欲しいです
こんな具合に旧はてブ時代から塩漬けになっており、また、リニューアルで検索性が高まったことでこの先も望み薄っぽいので、自分で何とかしてみようと。

#!/usr/bin/perl
use strict;
use warnings;
use XML::Atom::Client;

#はてなアカウントのIDとパスワード
my $username = '****';
my $password = '****';

#付けるタグ
my $tag = "[*]";

my $url = 'http://b.hatena.ne.jp/dump';
#エクスポート機能からの一括取得に失敗する場合は、
#ユーザーのフィードを利用する。キャッシュが効いているので要注意。
#my $url = "http://b.hatena.ne.jp/$username/atomfeed";

my $sleepTime = 1;

#ブクマのコメントを編集
sub updateSummary{
    my ($api, $url, $summary) = @_;

    my $entry = XML::Atom::Entry->new;
    $entry->add(undef,'summary',$summary,{type => 'text/plain'});

    my $res = $api->updateEntry($url,$entry) or die $api->errstr;
    return $res;
}

#フィードからタグ付けしていないブクマのEditURIとsummary、フィードの続きのurlを取得
sub getNotTaggedEntries{
    my ($url,$api) = @_;
    my $dc = XML::Atom::Namespace->new(dc => 'http://purl.org/dc/elements/1.1/');
    my @notTaggedEntries;
    my $nextUrl;
    my $feed;

    if(ref($api) eq 'XML::Atom::Client'){
        $feed = $api->getFeed($url);
    }else{
        $feed = XML::Atom::Feed->new($url);
    }

    foreach my $link ($feed->link){
        if($link->rel eq 'next'){
            $nextUrl =  $link->href;
        }
    }

    foreach my $entry ($feed->entries){
        my $tags = $entry->getlist($dc,'subject');
        if(!$tags){
            foreach my $entryLink ($entry->link){
                if($entryLink->rel eq 'service.edit'){
                    push(@notTaggedEntries,{
                            editUrl => $entryLink->href,
                            summary => $entry->summary
                        });
                }
            }
        }
    }

    return {entries => \@notTaggedEntries, nextUrl => $nextUrl};
}

my $api = XML::Atom::Client->new;
$api->username($username);
$api->password($password);

do{
    print "feed: $url\n";
    my $res = &getNotTaggedEntries($url,$api);
    $url = $res->{nextUrl};

    foreach my $entry (@{$res->{entries}}){
        print "\t$entry->{editUrl}\n";
        &updateSummary($api, $entry->{editUrl}, $tag . $entry->{summary});
        sleep $sleepTime;
    }

}while($url);

エクスポート機能から自分のブックマークをAtom形式で一括取得してタグを付けていないエントリーを探し出し、はてブAtomAPIを使って仮のタグを付けていきます。エクスポート機能のアドレスは以下。要認証。

my $url = 'http://b.hatena.ne.jp/dump';

で、このエクスポート機能なんですが、応答が無かったり違う形式が返って来たりとおかしい時があるので、そういう時はユーザーごとに用意されている /atomfeed の方を使ってもよし。こっちは認証無しで取れる。

my $url = "http://b.hatena.ne.jp/$username/atomfeed";

ただこっちは20件ずつしか取得できないのでブクマが多いと時間がかかるし、キャッシュが効くようになっているみたいで、一度タグ付けをした後に時間を置かずにもう一度実行してしまうと、実際にはタグが付いているのにキャッシュによってタグが無いという情報が取得されてしまい、結果的にタグが二重に付いてしまうので注意。