YAPC::Asiaの写真がリアルタイムにflickrにあがっているようです。
2006年3月アーカイブ
最近書いてないので、とりあえず宣言でも書いておこうかと思い書いてみたエントリ。
このメンツって単純にすごいですよね…。問題は英語なのだが、まぁ雰囲気でなんとかなるでしょってことで、わかってるフリをして聞いていようと思います(ぉぃ
↓こんなバッグを持っていると思うので、気軽に声をかけてくださひ。

さっき書いたエントリにちょと関連しているけど、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.
こけちゃった。。。定義されてないエレメントがあるのかも。
ネット上の説明をみつつ実際にやって確認していたのですが、どうも勘違いして出来たと思い込んでいたようです。
正しいやり方は、プライベートブックマークをする専用の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」 というタグでブックマークをすることができます。
最近知ったのですが、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流というのは、下記のようにあるプロジェクトの下には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/
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
