2006年3月アーカイブ

YAPC::Asiaの写真がリアルタイムにflickrにあがっているようです。

http://flickr.com/photos/tags/yapc/

最近書いてないので、とりあえず宣言でも書いておこうかと思い書いてみたエントリ。
このメンツって単純にすごいですよね…。問題は英語なのだが、まぁ雰囲気でなんとかなるでしょってことで、わかってるフリをして聞いていようと思います(ぉぃ

↓こんなバッグを持っていると思うので、気軽に声をかけてくださひ。
pc_a4_black_s.jpg

さっき書いたエントリにちょと関連しているけど、FeedBurner の SmartFeed という機能の使い方を勘違いしてたみたい。

SmartFeed というのは、User Agent を読み分けてそれ毎によしなに形式(AtomとかRSSとか)を変換して返してくれる機能だそうで、デフォルトでは RSS2.0 を返すんじゃないかということを聞きました。

でもこのブログで FeedBurner の設定を SmartFeed だけ Active にして、その他の設定をすべて Deactive とし、Plagger や Firefox や wget などで Aggregate しても RSS1.0 が帰ってきてしまう。。。なぜ RSS2.0 じゃないんだ~!たまたま RSS1.0 を返すような User Agent だけしか使ってないか、もしくは使い方を間違えているのかしら。

今日は遅いのでもう寝る。明日調べよう。

Plagger の P::P::Filter::FeedBurnerPermalink ですが、どうも自分のフィードや他の人で permalink がフィルタされないなぁと思って調べてみたら、feedburner の設定でフィードが RSS1.0 だったりするとだめなようです。

そもそも XML::Feed::Entry の id になにが入るかが調べきれてないのですが…、おそらく Atom1.0 の <guid> が入ってくるんだと思いますが、RSS1.0 にはその要素がないので permalink が見付けられない罠。

plagger.org の wiki の FAQ に書こうと思ったけど権限がないっぽいのであとで書いてもらう。

ちなみに RSS2.0 にしたら

Plagger [info] plugin Plagger::Plugin::Subscription::Config loaded.
Plagger [info] plugin Plagger::Plugin::Aggregator::Simple loaded.
Plagger [info] plugin Plagger::Plugin::Filter::FeedBurnerPermalink loaded.
Plagger [info] plugin Plagger::Plugin::Publish::Gmail loaded.
Plagger::Plugin::Aggregator::Simple [info] Fetch http://feeds.feedburner.com/clouder
Plagger::Plugin::Aggregator::Simple [error] Parsing http://feeds.feedburner.com/clouder failed. Can't locate object method "getValue" via package "XML::LibXML::Namespace" at /usr/local/share/perl/5.8.7/XML/RSS/LibXML/MagicElement.pm line 25.

こけちゃった。。。定義されてないエレメントがあるのかも。

すみません、昨日紹介した「del.icio.usでプライベートブックマークする方法」ですが、間違っていました。コメントでmomoさんから教えて頂きました。
ネット上の説明をみつつ実際にやって確認していたのですが、どうも勘違いして出来たと思い込んでいたようです。

正しいやり方は、プライベートブックマークをする専用のbookmarkletを作ってくれる http://sandbox.sourcelabs.com/priv.at/ のページにて bookmarklet を作成し、それを使ってブックマークを行なうことでプライベートなブックマークを作ることができます。

んで、なぜそんなことができるのかというと、上記のbookmarkletを作成してくれるサイトの方が private.bookmarks というユーザアカウントを取得して、そのユーザアカウントにて for:username ( username はあなたの del.icio.us アカウント)というタグでブックマークすることにより、http://del.icio.us/for/usernameでのみブックマークを閲覧することができるようになるということですね。for:username の機能をうまく利用した技です。

手間はちょっとかかるけど、同じことをアナログでやれば、このサイトのbookmarkletを使わずとも同じことができると思います。まったく違う別アカウントを作成して、そのアカウントでブックマークをして、タグを「for:本当のdel.icio.usアカウント」にすればよいわけです。
これで削除などが自由にできるプライベートブックマークができるということですね。正確にはプライベートではないですが…。

ここまで書いたついでに、上記のサイトがやっていることと同じことをするプログラムを書いたので晒しておきます。たいしたロジックではありませんし、エラーハンドリングもやってないので、その辺はご了承下さい。

使い方は、「http://example.com/foo.cgi?title=foobar&url=http://foo.example.com/」といった感じに url と title のクエリを渡せば、priv_usernameで指定したユーザのブックマークに 「for:real_username」 というタグでブックマークをすることができます。

追記: こちらの説明は間違っていました、正しくはこちら→http://clouder.jp/yoshiki/mt/archives/000643.html

最近知ったのですが、del.icio.usで他人に見せることなくブックマークすることが出来る方法があるようです。まぁ正しくは本当にブックマークしたのがわからないわけではないんですが、少なくとも自分がブックマークしたということはわからなくできます。

やり方は簡単で下記のようなブックマークレットを使うだけです。usernameのところを自分のものに変えておいてください。

javascript:location.href='http://del.icio.us/username?v=3&tags=private.bookmarks&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)

見てわかるようにタグでprivate.bookmarksと入れるだけです。ブックマークレットを使わなくても、自分で手でprivate.bookmarksを入れてもよいです。
こうすることにより、そのタグを付けたブックマークは通常の自分のブックマークリストである http://del.icio.us/username には出ず http://del.icio.us/for/username というリンクでしか見ることができなくなります。この /for/username のページはその username でログインした時しか参照できません。

この昨日にはいくつか問題(自分が見る限り)があって、1つはこの機能を使ったブックマークは http://del.icio.us/private.bookmarks ここで一覧が見られます。誰がブックマークしたかはわかりませんが…。もう1つは、一度ブックマークすると削除ができません。これはイケてない…。

ちょっとこのページをブックマークするのは…と躊躇って、でも自分のローカルに残すのもなぁと思った時にはぜひ試してみてください。

ずっとやろうと思っていた cvs から subversion への移行を今年の初めの頃にやったので、その時にやったことを書きます。
(※参考にしたページを一番下に記しておきますのでそちらもご覧ください)


  • svnのインストール

  • これは他の方が書いていると思いますのでそちらを参照してください(オイ

  • cvsからsvnへリポジトリの移行

  • これはcvs2svnというpythonのスクリプトがあるので、それを使いました。
    % cvs2svn -s /path/to/svn/repos /path/to/cvs/repos

    これで /path/to/cvs/reposにあるcvsのリポジトリが、/path/to/svn/reposにsvnのリポジトリとして変換されます。
    これはサクっといくと思います。

  • subversion流に管理するために一旦ダンプする

  • ここまででも、まぁ使えなくはないですが、subversion流に管理した方がいいと思いそのための変換を行ないました。subversion流というのは、下記のようにあるプロジェクトの下にはtrunk、tags、branchesというディレクトリを作るものです。

    -project
    --trunk
    --tags
    --branches

    まず先程/path/to/svn/reposとしたのですが、これを一旦ダンプします。

    % svnadmin dump /path/to/svn/repos > dump

  • パスの変換

  • 次にdumpファイルの中の「Node-path: trunk/project」という部分を、「Node-path: project/trunk」に変えます。変更の方法はperlのワンライナとかで一発で変換しました。コマンドは下記。

    % perl -pi -e 's|Node-path: trunk/([^/]*)|Node-path: $1/trunk|' dump

    ちなみにこの場合は cvs で管理していたときの最上位の階層でプロジェクトを管理していた際の話です。つまり下記のようなとき。

    -/path/tocvs/repos
    --project1
    --project2
    --project3

    もし、

    -/path/tocvs/repos
    --foo
    ---project1
    ---project2
    --bar
    ---project3
    ---project4

    とかなっていたときは、「Node-path: trunk/foo/project1」を「Node-path: project1/trunk」もしくは「Node-path: foo/project1/trunk」とかしたらいいんじゃないでしょうか。これは自分がやりたいようにNode-pathを変換してください。

  • プロジェクトの取捨選択

  • もう1つTipsとして、今まで cvs では管理していたプロジェクトを subversion では管理したくない、もしくは subversion では別のリポジトリとして管理したいという場合があると思います。その際に役立つ svndumpfilterというコマンドがありまして、これを使うと dump ファイルの中で指定したプロジェクトのコミット情報をすべて省いたり、もしくは、それだけを取り出すことができたりします。例えば trunk/project1 だけを subversionで管理したい場合には、dump ファイルに対して下記のコマンドを発行したら、それだけのダンプが生成されます。

    % svndumpfilter include 'trunk/project1' < dump > project1.dump

    サブコマンドは含めたい場合は include、省きたい場合は exclude を指定できます。また、trunk/project1は Node-path の部分を指定します。正規表現や部分一致は対応してないようです。

    これで dump ファイルを好きなようにいじったら、あとは subversion 用のリポジトリを新たに作成してそこに dump ファイルを流し込むだけです。

  • ダンプの流し込み

  • 流し込みは下記のようにやります。手順的にわかりづらいところはないかと思います。「svn mkdir project」というのは、作ろうとしているプロジェクトのディレクトリを先に作っておくのは、loadする時にコケるからのようです。自分で上記で変換した際のプロジェクト分 mkdir をしておきましょう。

    % svnadmin create /path/to/svn/newrepos
    % svn co file:///path/to/svn/newrepos
    % svn mkdir project
    % svn ci -m "new directories"
    % svnadmin load dump

とりあえず、今回はここまで。次回はapache2でdavを使ったリポジトリの公開や、tracの立ち上げなどについて書きたいと思います。

参考
http://blog.bulknews.net/mt/archives/001790.html
http://www.apache.org/dev/cvs2svn.html
http://svnbook.red-bean.com/

アグリゲートしてきた中にAmazonアソシエイトIDがあったら、それを自分のものに変えちゃいます。えぇえぇ、アサマシですわ。使用により生じた問題に対し、当方は一切責任を負いませんw
package Plagger::Plugin::Filter::AmazonAssociateIDShift;

use strict;
use base qw( Plagger::Plugin );

sub register {
    my($self, $context) = @_;
    $context->register_hook(
        $self,
        'update.entry.fixup' => \&update,
    );
}

sub update {
    my($self, $context, $args) = @_;
    my $body = $self->filter($args->{entry}->body);
    $args->{entry}->body($body);
}

sub filter {
    my($self, $body) = @_;
    if ($self->conf->{associate_id}) {
        my $url_re = qr#(http://www.amazon.co.jp/exec/obidos/ASIN/[^/]+/)[0-9a-z]+-\d{2}#;
        $body =~ s#$url_re#$1 . $self->conf->{associate_id}#ieg;
    }
    $body;
}

1;

__END__

=head1 NAME

Plagger::Plugin::Filter::AmazonAssociateIDShift - Shift from other's amazon associate id to your it

=head1 SYNOPSIS

  - module: Filter::AmazonAssociateIDShift
    config:
      associate_id: your_associate_id

=head1 SEE ALSO

L<Plagger>, L<http://www.amazon.co.jp/>

=back

検索

広告

月別 アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.12