06112006
perlのデータ構造をDFSするモジュール探してたら、Data::Traverseというモジュールを見つけた。
で、ソースを眺めてたら、こんな記述が。
no strict 'refs'; local(*{$caller."::a"}) = \my $a; local(*{$caller."::b"}) = \my $b; use strict 'refs';
おーなんか気持ち悪い。
my $a; \$a;
を縮めると
\my $a;
になるのか。
06112006
perlのデータ構造をDFSするモジュール探してたら、Data::Traverseというモジュールを見つけた。
で、ソースを眺めてたら、こんな記述が。
no strict 'refs'; local(*{$caller."::a"}) = \my $a; local(*{$caller."::b"}) = \my $b; use strict 'refs';
おーなんか気持ち悪い。
my $a; \$a;
を縮めると
\my $a;
になるのか。
06112006
いまさら感があるが読んだ。
というか、エントリとか見ると欲しくなって書店に行くんだけど、売ってないんだよね(田舎ゆえに)。あと、うちの近くだと売ってるところが限られててちょっと足をのばさないと買えないという。
テスト駆動開発のとこがやっぱ面白かった。特に興味をひいたのが5章の学習テストという未知のライブラリの調査、習得の為にテストを書くってやつ。
perlの場合だとモジュールにはtestがついてくるから、.tを読むとかモディファイしつつprove でテストすれば学習テストになるのかな。とか、そんなこと書いてないかナァと探したけどみつからなかった。perlの.tの面白い使い方もっとありそうなんだけどナァ。
と、色々探してる中で、プログラミング中に湧くアイデアを書き留めるというエントリは面白そう。僕もSKIP, TODOをアイデア置き場として使ってみよう。
05112006 chemoinformatics
またもや、個人的ネタで恐縮ですが、今週末のスポッポファイアーのユーザー会でポスター出します(多分)。
しかも名前だけで発表はしないでうろうろします。単なる質問要員としてノミネート。
発表自体は、ITインフラ系構築ネタになる予定。明日から2人で作り始めます。Ajaxとかバリバリ取り入れてるので、そこらへんの話になるかなぁ。か、いわゆる(インフォマティクス的に)テックレイヤーの人達に如何にデータトラッキングの重要性とか、一元管理を浸透させたかとかそういう苦労話メインになるかなぁ。明日、オーバービュー書きながらどっちに転ぶか決めまする。
ホントは、スポッポファイア meets Ajaxとかいうネタがやれればよかったんだけど、手動かす暇なくて。僕の頭の中で腐りかけてル。
05112006 chemoinformatics
DjangoとTurbogears ってsql文を書いたりしなくていいので楽だナァと。djangoだとクラス定義して
$ python manage.py syncdb
ってやればいいし、Turbogearsも同様に
$ tg-admin sql create
でうまくやってくれる。で、そういえばYAPCでJiftyもそんなこと発表してたのを思い出して、大量のモジュールと共にインストールしてみた。
練習用に使ったサンプルはJifty::Manual::Tutorial。ちなみにJiftyのバージョンは0.60912。
最初の流れはCatalystと違って、アプリケーションだけつくれば、ビューとかコントローラー作る必要ないみたい。いきなりモデルをつくりはじめるわけだが、もちろんデータベースの設定はSQL文など書かなくてよくて、
column title => type is 'text', label is 'Title', default is 'Untitled post'; column body => type is 'text', label is 'Content', render_as 'Textarea';
とハッシュっぽく記述しておいて、
jifty schema --setup
これだけ。あとはテンプレートまわりをいじるわけだが、僕の使ったバージョン(0.60912)だとwebではなくshare/web/だった。また、テンプレートシステムにMason利用しているので、実用Perlプログラミングなど読み返しながら。
%でperl式を挿入する場合%は行頭から始めないといけない(間にスペースとかをいれてはいけない)ことを理解していなくてちょっとはまった(下の部分)。
% while (my $post = $posts->next) { <dt><%$post->title%></dt> <dd><%$post->body%></dd> % }
Masonってなんかphpっぽいな。今回Jiftyの触りしかいじってないけど、アプリ作成すると、オンラインドキュメントも一緒に作られるので、これを読むのがなかなか面白い感じ。あとMasonも暇があればなんかで使ってみよう。でもMason使うとビューとコントローラーの切り分けが曖昧になってきちゃうような気がするんだよナァ、、、
あーめんどうだ、テンプレートに直接書いちゃえ!
みたいな(うーん実際はどうなんだろうか)。
というわけで、一通りサンプルを作ってみて、感想を。Jiftyは(RoR,djangoもそうだけど)フルスタックなのでサクサク開発できそうで、なにより使っていて気持ち良い。
Catalystと使い分けできれば生産性は上がるかな。ちょっとしたもの作る場合にはJiftyはいいと思った。
04112006 chemoinformatics
CRANのNewsletterが更新されていたので、一昨日の帰りの新幹線の中で読んでたら、fingerprintっていうパッケージが追加されてた。
This package contains functions to manipulate binary fingerprints of arbitrary length. A fingerprint is represented by an object of S4 class 'fingerprint' which is internally represented a vector of integers, such that each element represents the position in the fingerprint that is set to 1. The bitwise logical functions in R are overridden so that they can be used directly with 'fingerprint' objects. Distances metrics are also available. Fingerprints can be converted to Euclidean vectors (i.e., points on the unit hypersphere)i and can also be folded using XOR. Arbitrary fingerprint formats can be handled via line handlers. Currently handlers are provided for CDK, MOE and BCI fingerprint data.
CDKとかMOE,BCI用のハンドラがついてるようです。で、Similarity metricは何使えんのかな?とマニュアル読んでみると、
の4つ。このなかで、MT係数って聞いたことないナァ。ちょっと調べてみたけどわからなかったので直接ソースを読んでみることにした。はじめてのパッケージイントロスペクション。
で読んでみたら、あー、Rのパッケージ読むの単なる食わず嫌いだったかも。思ったよりややこしいことはしてませんな、これからは積極的に読んだほうがいいかもと思った。
というわけで、ちょっとまとめておいた。前提としてフィンガープリントの共通のビットが立つかどうかを下の表であらわしておく。
| fp1 bitあり | fp1 bitなし | |
| fp2 bitあり | C | B |
| fp2 bitなし | A | D |
まずはわかりやすいタニモト係数から。
dist <- c / (a+b+c)
dは考慮されない、つまりビットの立たないもの同士は類似とみなされない。
dist <- sqrt((d+c) / (a+b+c+d))
ユークリッド距離はお互いビットが立ってないという情報も似ていると判断されるわけですな。
dist <- c / (.5*a + .5*b + c)
diceの距離も基本的にはタニモトと一緒。僕はあまり使わない。
size <- length(fp1) t1 <- c/(size-d) t0 <- d/(size-c) phat <- ((size-d) + c)/(2*size) dist <- (2-phat)*t1/3 + (1+phat)*t0/3
t1はc/(a+b+c)、t0はd/(a+b+d)とかける。phatは全フィンガープリントでのビットの立っている割合(ビットの密度)。ビットの密度を考慮してるのはわかったんだが、t1,t0の分母の意味がちょっと理解できてないかも(aとbの情報を考慮してんだろうな)。おそらくビットの密度に偏りがある場合にできるだけ補正できるような距離なのかなとか思った。タニモトにビットが立たない場合の情報の扱いを加えた感じか。
と、ここまで考えてやっと気付いた。
MTってもしかしてModified Tanimoto?
ビンゴだった。
もうちっと重いほうが好き。でもTwilight's Last Gleamingは名曲だと思ふ。
http://www.cisco-records.co.jp/cgi/title/techno/detail_175034.php
BBKの買うのはDuppy Man以来ではなかろうか(しかもまたピクチャー買っちゃったし)。
切な目の、微妙なリキッドっぷりがシブイ。