月とくるりと富士山のシルエット

朝霧jamに行ってきた。

2,3,4,6と四回目の朝霧だけど、一昨年よりも早く行ったにもかかわらず、キャンプサイトMがほぼ一杯。奥のほうにスペースみっけてテント張った。思い起こせば2003なんて(これまた同じくらいの時間帯だったけど)Mサイトなんてヒトもまばらで好きな場所取れたのに。富士ロックっぽくなってくるのはしょうがないのかもしれんにゃぁと。

さて1日目はクラムボン-INDIVIDUAL ORCHESTRA-くるり-JUSTICE-EROL ALKAN-MIRROR SYSTEM(触りだけ)という流れで。

BBQしているうちに、クラムボンが始まってしまい、聴けたのは終わりのほうだけ。まぁ、サラウンド聴けたからよかった。

一回テント戻って、更にBBQってから、INDIVIDUAL ORCHESTRA。やっぱ田中フミヤ最高。最後にhoodrumの曲かっこよすぎ。続いてRYUKYUDISKOは、ちょっとテクノすぎて、、、最近テクノあかんです。というわけで、くるりのほうへ。

くるりは最初の3曲凄かった。月がちょうど顔出して、富士山のシルエットが浮かびあがるというシチュエーションでくるりこれが一番感動した。

月

途中、けだるい曲が続いたので、くるりはそこで打ち切って、justice始まるまでちょっと寝た。

JUSTICE-EROL ALKANの流れが今回僕的にベスト。ケミカルブラザーズ聴けるなんて。盛り上がった。ってか、盛り上がりすぎてあんまちゃんと覚えてないナァ、

MIRROR SYSTEMはちょっと聴いててまったりしてきたのでテントに戻ってその日は終了。

結構防寒してたけど、夜がやたらと寒かった。登山用の寝袋必要だったかも。

二日目は、Chris Pierce-COOL WISE MEN-SOIL & "PIMP"SESSIONS-NIGHT JUNGLE-1945 a.k.a. KURANAKA

という、まったりめの構成で。soilがなかなかよかった。NIGHT JUNGLEの途中で帰ることにしたけど、どうしても、1945聴きたかったので、連れを待たせてムーンにちょっとだけ。低音最高。行っといてよかった。

赤富士

赤富士ってホントに赤いのね。今回はよく晴れてとても楽しかった。

抽選当たれば、来年も行きたいナァと思うが、マウントフジ・コーリング・イン・山中湖も気になる。

1 while てなんだヨ

どっかで、

1 while (unlink $file)

っていう記述を見つけたので、何これ?と調べてみたら定番だった。

数字に「,」をいれるには?

つまり、「~が失敗するまで~を続ける」という定番の 書き方ですね。

openbabelって簡易DBっぽくつかえるのね

知らんかった。Zincの drug-likeのsmiを使ってみた。200万件くらいあるので、結構でかめ。

babel druglike.smi -ofs

でインデックス作成する(結構かかる、athron3000+mem512Mで2時間くらい)。 インデックスが作成できたら、SMARTSで検索してみる。

$ babel druglike.fs -osmi -s 'N#Cc1cccc(F)c1C#N'
2 candidates from fingerprint search phase
C(#N)c1c(c(c(c(c1C#N)F)F)F)F    ZINC00155214
C(#N)c1c(c(c(c(c1C#N)F)F)N)F    ZINC01507036
2 molecules converted

おお、7秒くらいで結果を返すので結構速い。
っていうか、babelのwikiみたら書いてあった。

babelはIDで検索はできないようだが、これはsmilesをsqliteにでも突っ込んでおけばいいので、Catalyst使えばお家いじり用のcompounds_dbが出来上がるな。

plaggerでChangeLog(3)

少し色々やってみた。
CustomFeed::ChangeLog
Filter::ChangeLog

  • markdownのフィルターは教えてもらったplaggerのplugin使うように変更
  • clmemoのタグでフィルタリングするようなプラグインも用意した(とりあえずtodoだけGMailに送ればよいので)
  • Filter::BreakEntriesToFeedsでエントリ毎に送信
  • Filter::Ruleで重複チェックをしたいために、偽のpermalinkを生成するようにした。

というわけで、今はこんな設定で動かしてます。

plugins:
  - module: CustomFeed::ChangeLog
    config:
      changelog_file: /home/kzfm/clmemo.txt

  - module: Filter::ChangeLog
    config:
      tag: TODO

  - module: Filter::Rule
    rule:
      module: Deduped
      path: /tmp/dedupe-changelog.db

  - module: Filter::Markdown
    config:
      empty_element_suffix: ’ />’
      tab_width: ’4’

  - module: Filter::BreakEntriesToFeeds

  - module: Publish::Gmail
    config:
      mailto:   kppppq@gmail.com
      mailfrom: kppppq@gmail.com
      mailroute:
        via: smtp_tls
        host: smtp.gmail.com:587
        username: kppppq@gmail.com
        password: ppppppppppp

これで、TODOのタグつけたアイテムのみGmailに送られるようになる。

2006-10-04 kzfm  <kzfm@teketou.com>
    * TODO: perl
    まるパーのcatalystの章激読み返す
    ====
    Jiftyもcheck

publishのプラグインを変えれば、blosxomもOK(下書き書いておくのに便利そう)。

さて、気になってるのは、重複チェックの為に用意した嘘っこパーマリンクは駄目だよなと。そもそもパーマリンクのないようなものを扱うのはどうしたらいいんだろうか?と。この際、wikiとかchalowみたいなのにpublishするようにしたほうがよいのか。

かなりやっつけなFilter::ChangeLogなんて作ったけど、ホントは既存のフィルタで対応できるんだろうなと。あとでちゃんとプラグイン調べないといけない。

変更検知して自動でplagger動くようにしたいが、POE使えばよいんだろか?またはmeadowだったらキーバインド指定しておくのが使いやすいんだろうか。

過去のエントリ

WWW::Searchのプロキシー設定

プロキシーサーバーの設定は

$search->http_proxy(['http','ftp'] => 'http://proxy:port');

で。$search->env_proxyはなぜかだめ。

ここらへんのモジュールを使って、P450 Tableから、CYPの基質とか阻害剤の情報取ってきて、DrugBankの構造情報とつなげてみた。

いきなり、P450 TableはDOMれず、躓く。しょうがないので、正規表現使って化合物名とinhibitorとかのクラス分類を抽出した。あとは、WWW::Search::DrugBank 使って、ほしいデータ(mol)をサーチしてつなげれば完了とか思ったんだけど、WWW::Search::DrugBankってIDでしか検索できない。うーん。

結局、webからサーチかます(これも色々ヒットしてきて精度悪くないか?)サブルーチン用意して、IDゲットしてからWWW::Search::DrugBank使って欲しいデータ取ってきた。

URI::Fetchがプロキシーサーバーを通らん

お盆前にインストールにトライしたことがあるんだけど、表題の通り、職場のマシンにplaggerがインストールできない。まぁ、面倒だったのと、どうせ職場からだとGMail通らんし、家で遊んでたほうが楽しいし生産的だしとかいった理由で、ずっと放置してた。

でも最近、イントラのRSSをまとめるためにイントラにplanetが欲しくなったので、URI::Fetchのtestが豪快にこける理由を追ってみた(ってどうせプロキシの設定なんだろうけど)

71     $ua->agent(join '/', $class, $class->VERSION)
72         if $ua->agent =~ /^libwww-perl/;
73     $ua->env_proxy;

やっぱ原因はプロキシで、lwpのuaちょっといじるだけで対応できた。 あとはplaggerのインストールも無事完了。

LWP::UserAgent::WithCache

ごくたまに、思いつきでLWPを使ったコードを書くことがある。そんな時は、wgetとかcurlで、対象のファイルをローカルに落として、ゴソゴソとテストを繰り返し、最後にLWPをくっつけるというちょっと無駄が多いやりかたをしていた。最近さすがに嫌になってきて、なんとなく気になっていたLWP::UserAgent::WithCacheというモジュールを使ってみた。

なんも考えなくてもキャッシュされるので便利!

キャッシュがある限りそれを読めばいいし~~
って、キャッシュの読み込みどうすればいいんじゃろか?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent::WithCache;

my %cache_opt = (
                'namespace' => 'lwp-cache',
                'cache_root' => "/tmp",
                'default_expires_in' => 60 * 60 * 24 * 7 );
my $ua = LWP::UserAgent::WithCache->new(\%cache_opt);
my $response = ua->get('http://www.potschi.de/svmtut/svmtut.html');

if ($response->is_success) {
    print $response->content;  # or whatever
} else {
    print $ua->{cache}->get('http://www.potschi.de/svmtut/svmtut.html')->{content};
}

$uaでできたcache::fileのオブジェクトを引っ張り出してきてgetしたのを出力させてみた。あんまりいい方法とは言えない気がするけどこんな感じでいいのか。

CDK使ったモジュールを書いてみた

Inline::JavaでCDKのニ次元構造立ち上げをperlでやれるようになったんだけど、やっぱuseして使いたいのでモジュール化してみた。

最初、Inlineでモジュールを書く方法の通りに書いてみたらエラーを吐いて動かないので、どうしたもんかと。
で、少し探してみたら、あまり深く考えなくて、普通にコンストラクタだけ用意してやればOKということらしい。

use 5.008008;
use strict;
use warnings;

our $VERSION = '0.01';

use Inline Java => "DATA";

sub new {
    my $class    = shift;
    return CDK::Simple::smi2mol->new();
}

1;

__DATA__
__Java__
import java.io.StringWriter;
import java.io.IOException;
後はjavaコードがジャヴァジャヴァと。

で、使ってみる。

my $parser = CDK::Simple->new;    
my $smiles_string = "C(=O)O";
print $parser->convert($smiles_string);

お~、モジュールだ。実行すると無駄にタメがあるのはjavaだから~。ところで、newでblessする必要はないのかな?とか気になる。

実際に作ってみて、Inline::Java使ったモジュールは意外に簡単だった。

PharmGKBはWeb ServiceAPIつき

PharmGKBはAPIつきでperlのサンプルもある。

というわけで早速ダウンロードして動かしてみたけど、こんなデータのdetailにアクセスできないので、イマイチ使えん。半減期とかVdとかProtein Binding Dataとかにさくっとアクセスできればいいんだけど。

あと、perlのサンプルwsdl読みに行くようになってないんだよね(あるにも関わらず)。

use Data::Dumper;

$wsdl = 'http://www.pharmgkb.org/services/PharmGKBItem?wsdl';
$serv = SOAP::Lite -> service($wsdl);

my $res = $serv->searchDrug("PA452624");
print Dumper($res);

こんなんで、いいような気がするんだけど。

いまのとこdrugのエントリーが400ちょいしかないけど、もっとデータが増えてきてAPIも充実してくると面白そう。