05082007 perl
これ読んでブレークポイントの使い方がわかってデバッグが楽になった気がする。
Richard Foley
Oreilly & Associates Inc / 882円 ( 2004-01 )
Devel::Baysideで公開されてる資料もわかりやすくてよいですな。
05082007 perl
これ読んでブレークポイントの使い方がわかってデバッグが楽になった気がする。
Devel::Baysideで公開されてる資料もわかりやすくてよいですな。
02082007 chemoinformatics perl PerlMol
PerlMolにはseparateメソッドがあるので、SMARTSで適当にマッチさせて結合を壊してからseparateすると化合物の構造を分割できる。
芳香環の炭素原子とヘテロ原子の間を切って、分割した構造をsmilesで出力するスクリプトはこう書ける。
use warnings;
use strict;
use Chemistry::File::SMARTS;
use Chemistry::File::SMILES;
use Chemistry::Ring 'aromatize_mol';
my $SMILES = shift;
my $react = Chemistry::Mol->parse($SMILES, format => 'smiles');
my $SMARTS = 'c-A';
my $pattern = Chemistry::Pattern->parse($SMARTS, format => 'smarts');
aromatize_mol($react);
molsplit($react);
sub molsplit {
my $mol = shift;
if($pattern->match($mol)){
my @nbd = $pattern->bond_map;
my @nfg = $pattern->atom_map;
$nbd[0]->delete;
for my $fg (@nfg){
my $hcnt = $fg->implicit_hydrogens();
$fg->implicit_hydrogens(++$hcnt);
}
for my $frag ($mol->separate){
molsplit($frag);
}
}else{
print $mol->print(format => 'smiles', unique => 1, name => 1),"\n";
}
}
試しにpioglitazoneを分割してみると
$ perl molsplit.pl "CCC1=CN=C(C=C1)CCOC2=CC=C(C=C2)CC3C(=O)NC(=O)S3"
CC
c1ccncc1
CCO
c1ccccc1
CC1SC(=O)NC1=O
Amazonのアフィリエイトにも対応した。
[ASIN : 4873112028]
という記法で、
みたいな感じに。
24072007 perl
perlで文字化けするときにutf8フラグが立ってるとか立ってないとかプリントデバッグすることが多い。特にCatalystいじってる場合とかはブラウザに表示させてる。
print utf8::is_utf8("知りたいもの") ? 'UTF-8 Flag' : 'not UTF-8 Flag';
Perl 5.8.x Unicode関連が参考になった。
21072007 perl
他のサイトをゴニョゴニョやって欲しいデータだけ抜き出すのに、Template::Extractとか正規表現つかったりするわけですが、今回HTML::Selector::XPathを使ってみた。
その流れでcpanサーチしてた時に、Simpleってのを見つけたが、これはHTML::TreeBuilder::XPathでHTMLをパースし HTML::Selector::XPathのCSS セレクタをXPath に変換して、ノードを探すってのをやってくれるげなモジュール。
というわけで、Hatena::Diary::Naoyaの例だと、
use strict;
use warnings;
use URI::Fetch;
use HTML::Selector::XPath::Simple;
my $id = shift or die "usage: $0 <id>";
my $res = URI::Fetch->fetch(sprintf 'http://b.hatena.ne.jp/%s/', $id)
or die URI::Fetch->errstr;
my $selector = HTML::Selector::XPath::Simple->new($res->content);
my @nodes = $selector->select('ul.bookmarkinfo li.favorited');
printf "User '%s' is favorited from %d users\n", $id, $nodes[1];
で書けた、シンプル。
昨日ちょっと気になったので触ってみた。
ヘルパーがあるので
script/myapp_create.pl create model Net::Amazon Net::Amazon
でモデル作成。yamlに
Model::Net::Amazon:
token: 'amazon_token'
locale: 'jp'
を設定して、Root.pmに
sub default : Private {
my ( $self, $c ) = @_;
my $ua = $c->model('Net::Amazon');
my $response = $ua->search( asin => '4873112109' );
if ( $response->is_success ) {
$c->response->body( $response->as_string );
} else {
$c->response->body( $response->message );
}
}
で、ルートにアクセスすると
[1] マーク ルッツ/デイビッド アスカー, "初めてのPython 第2版", 2004, ¥ 5,040, 4873112109
と表示される。あとは/ASIN/XXXXXXのURLでJSON返すようにすればMochikit(javascript)からいい感じで扱えるはず。うーんナイス!
さらに、Net::Amazonはキャッシュが使えるのでCatalyst::Model::Net::Amazonでもキャッシュを効かせたい。C::M::Net::Amazonに直接書いた。
use Cache::File;
use base qw/ Catalyst::Model::Net::Amazon /;
my $cache = Cache::File->new(
cache_root => '/tmp/amazon_cache',
default_expires => '30 min',
);
__PACKAGE__->config(cache => $cache);
Net::AmazonがCache::Fileオブジェクトをとるので、このようにModelに直接書いたのだけど、cache_rootとかdefault_expiresを設定ファイルに追い出すことはできないのだろうか?
20062007 perl
404 Blog Not Found:グラフィックに役立つ数学的事実
回転行列これはたしかにグラフィックでめっさ使う。
perlだとMath::VectorRealとMath::MatrixRealなのかな。
pythonだとSciPy
こういう計算はpythonのほうがやりやすい気がするけど、PerlMolでもやってるからなぁ。
TODO: PerlMolのソースを読む
18062007 perl
Perl Hacks読んでたら目にとまった。
specification-based testing systemらしい。
Needle in the Haystackってあるように合致するすべての条件に対してテストするようだ。
境界条件とか考えなくてもいいのでとりあえずテストをつくりたいときとかにはいいかもしれん。
今の仕事だと、モデリング用のツール作ってるときとかにアミノ酸のキャッピング(N末端、C末端)のテスト書いたりとか,S-S結合の確認テストしたりとかに使えそう。
アミノ酸とか核酸だと組み合わせのテストしたいし、化合物いじってってもC,N,O,S,Fなんかの組み合わせテストしたいってこと多いし。
という感じでそのうち使ってみそうなのでメモ。
14062007 perl
13062007 perl
「中途半端にでかいBlast」みたいなルーチンっぽいけど割とレスポンスタイムの長い仕事はTheshwartz->xmlrpcでwikiへ。という流れで省力化を図るのが定着してきて結構いい感じなんだけど、xmlrpcだと送り手も受け手もできることが限られちゃうので、図とか表みたいな補助資料を送るのが結構手間。
で、そういうことも考えるとAtomPPって良くできているよなぁとしみじみと。っていうかWikiこそAtomが必要かもんと思った。会社の中にいると図表のほかにもExcel,Wordを添付しないといけないからね。
あとは、旗ピラピラ~にどっぷりな会社だと
<link rel="alternate" type="application/msword" mmmmm />
なんつーのも必要だと思うのです。
イントラでWikiを入れてみて、まぁなんとなく感じるのはpdfのフォーマッタは要らんからwordで出力できないの?みたいな無言の圧力だったりする。