16102006 はな
はなと一緒に散歩してたら咲いてたので撮ってみた。
もう秋ですな。そろそろカワハギ釣りにもいかないと。 今年の冬は10/20 OPENみたい。
16102006 はな
15102006
毎晩、化合物のデータベースの新着チェックして物性計算してDBに突っ込むバッチを流してるのに、何でRSS吐くようにしてないんだろうとふと思った。
ついでに週で集計とって、分子量とかlogpの推移をRSSで出力しといたろか。
15102006
plaggerでblosxomに投稿する方法はあるのだけど、ネットワーク越しだとちと使いづらい。
で、ふと、XML-RPCインターフェースがあることを思い出したので、試してみたら調子よさそう。という経緯により、plagger使ってMeadowで書いているメモをblosxomにポストするという話だが、折角なのでこのエントリ自体Changelogで書いてみている。
Meadowでメモをとることとかclmemo,Meadowに関しては以下が参考になる。
Windowsで簡単にPlaggerをインストールする方法は簡単すぎ。 さくっとインストールは完了。
assets/plugins/Publish-MT/mt.ttはちょっと書き換えた。
[% FOREACH entry = feed.entries -%] [% entry.body %] [% END %]
設定のYAMLはこんな感じ
plugins: - module: CustomFeed::ChangeLog config: changelog_file: C:\home\ohkawa\clmemo.txt - module: Filter::Rule rule: expression: $args->{entry}->{meta}->{cltag} eq "blosxom" - module: Filter::Rule rule: module: Deduped path: C:\Plagger\blosxom.db - module: Filter::BreakEntriesToFeeds - module: Publish::MT config: rsd: http://localhost/blosxom-xmlrpc.cgi/RPC2 username: kzfm password: password blog_id: 1
plaggerの呼び出しはlispとかでマクロ書いてM-x plaとかC-x C-x Pでやりたいんだけど、Lispわからんので、今のとこはM-x shellでシェル呼び出して実行している。
というわけで、TODOってしとけばgmailにメールするようになってるし、blosxomって付けとけば、下書きにポストするような環境になって結構快適。
Filter::ChangeLogなんて作る必要なかった。既存のFilter::Ruleを利用すればいいだけだった。
rule: expression: $args->{entry}->{meta}->{cltag} eq "TODO"
あーそういえば、BXRってのがあったなというのを思い出したので、Net::MovableTypeで投稿することを思いついた。
my $mt = new Net::MovableType('http://localhost/blosxom-xmlrpc.cgi/RPC2'); $mt->username('kzfm'); $mt->password('okbkj'); $mt->blogId(1); $entry = { title => "Hello World from Net::MovableType", description => "おーけーおーけーOK牧場" }; $mt->newPost($entry);

おー、かなりOK牧場だ。
ちなみにpackage blosxomのnewPostをちょっといじって常にランダムなファイル名を付与するようにした。ファイル名考えなくていいってだけでも精神的にはかなりラク。
# if ( defined( $struct->{'postid'} ) ) { # $filename = BXR::getFilenameFromPostId( $struct->{'postid'} ); # } # else { # $filename = lc( $struct->{'title'} ); # $filename =~ s/\W+/_/g; # $filename =~ s/_+$//; # $filename = BXR::getRandomFilename() unless $filename =~ m/[a-z]/;
これで、Plagger::Plugin::Publish::MTを使ってChangelog2blosxomができるはず。ここまでやれれば、僕はchangelogだけに集中すればよくて、それ以降の処理はplaggerがよきにはからってくれるのでかなり調子いいかも。あとは学会とかセミナーの参加ログもchangelogでとってるのでms-wordにpublishしたいなぁ。
12102006 perl
perlのテストのやり方って、みんなどうやって覚えるんだろうか?と疑問に思ってる(今でも)。そっち系の会社だと教育みたいなのあるんだろうなとか?
でも、僕の場合は周りにプログラミングするヒトがいなかったので、テスト技法っていまいちよくわかってなかった。続・初めてのperlにもちょろっとしか書いてないし、あれじゃぁ、実際のテストコード書けるようにならんよなぁとか思ってた。そういうわけで、なかなかプリントデバッグから先に進まない。しかもよくわからんので、モジュールのソースは読むけど.tは読まんみたいな。
というわけで、テストは覚えたいけど、何を勉強すればよいのかわからんという状態だったが、最近、Perl Testingが色々なところで薦められていたのでこれはいかねばと、買って読んでみた。
Perl Testing: A Developer's Notebook (Developers Notebook)かなりわかりやすくて、さくさく読めた。事例から学ぶノートブックというスタイルで、最初のほうは基本的なことから始まり、徐々にデータベースのテストとかwebアプリのテストまで押さえてある。読み終えたら、あとはドンドコ書いて、cpanの.tをドンドコ読むと。
というわけで、最近は.tのファイルも読んでて楽しい。もちろんデバッグも楽になった。
11102006 chemoinformatics perl plagger planet
planet chemoinformaticsのRSS Auto Discoveryが微妙におかしい(/が抜けてた)ので修正。これで、livedoor readerとかbloglinesに登録できる。ま、直接rssを放り込んでも良いんだけど。僕はwebでほとんどみないので、デフォルトのテンプレートをいじって綺麗にしたいという欲求が沸いてこない(今のとこ)。だからRSSリーダーで読んだほうが良いと思うヨ。ちなみに、一日3回更新するように設定してます。
あと、docking.orgも追加した。rssが日付と本文を含まないので、Filter::EntryFullTextを書いてみた。
author: kzfm handle: http://docking.org/.*?article\.pl\? extract: (<TABLE WIDTH="100%" BORDER="0" CELLPADDING="5" CELLSPACING="0"> <TR><TD BGCOLOR="#FFFFFF">.*? </TD></TR></TABLE>) .*?NAME="returnto" VALUE="//docking.org/article.pl\?sid=(\d\d/\d\d/\d\d)/\d+"> extract_capture: body date extract_date_format: %y/%m/%d
なかなか快適になってきた。
11102006 bioinformatics
プロテオミクス関係のモジュールがCPANに登場しました。
pIは別にEMBOSSでも予測できるんだけどHPLC周りとかMS/MSなんかちょっと気になりますな。あとphenyxともなにが違うのかも気になるヨ
10102006 perl
Class::DBI::Loader::Relationshipが便利そうなので、ドキュメント眺めてたら、
Class::DBI::Loader::Relationship - Easier relationship specification in CDBI::L - search.cpan.org
This module acts as a mix-in, adding the relationship method to Class::DBI::Loader.
とかいう記述があったので、何してるんだろかとソース眺め。
結局Class::DBI::Loader::Relationship自体は何もしてナイっぽくて、Class::DBI::Loader::Genericの名前空間でrelationshipメソッドが記述されてた。
うーんpackageって同じ名前空間を複数回宣言していいのか?と不思議だったので、試したのが以下のコード。
package A; sub a1_test { print "a_1\n";} sub a2_test { print "a_2\n";} 1; package B; sub b1_test { print "b_1\n";} sub b2_test { print "b_2\n";} 1; package C; sub c1_test { print "c_1\n";} sub c2_test { print "c_2\n";} 1; package A; sub a3_test { print "a_3\n";} 1; package Main; A::a1_test(); B::b1_test(); C::c2_test(); A::a3_test();
で、実行。果たしてa3_testは呼び出されるんだろうか?
$ perl packtest.pl a_1 b_1 c_2 a_3
うーん、これでもいいのね。
ただmix-inに関してはどっかから借りてくるのをmix-inって呼ぶのかナァと漠然と感じていたので、こういうやり方をmix-inと呼ぶのが, アイスクリームにアイスクリームを混ぜ込んでるみたいで、ちょっと不思議な感じがするんだよなぁ。
10102006 music