24032006
招待してくれたヒトが、mixiおもろな。とかいってやめちゃったで、ある日こんなメッセージが。

検索エンジンにひっかからないサイトは存在意義がないばりに、マイミクのいないユーザーは存在意義がないということか。
僕もmixiほとんど使ってないからあれなんだけども。メタモやジャズトロのコミュとかは好きだからな、誰か誘うか。
24032006
招待してくれたヒトが、mixiおもろな。とかいってやめちゃったで、ある日こんなメッセージが。

検索エンジンにひっかからないサイトは存在意義がないばりに、マイミクのいないユーザーは存在意義がないということか。
僕もmixiほとんど使ってないからあれなんだけども。メタモやジャズトロのコミュとかは好きだからな、誰か誘うか。
24032006 bioinformatics
なる!とか思いつつも、これってサンプリングなだけでは?て思ったり。
[Bioinformatics]統合データベースでもなく、データのjoinでもなく、Mash upする - ichan::Weblog (2006-03-22)
そもそも統合データベースもデータのjoinも、複数のデータベースの情報を組み合せて、新しい生物学的な情報に辿りつきたいという話から生じているはず。それを表す言葉として、Web 2.0 で良く使われている用語 Mash up という単語を使うことを流行らせたい。マッシュアップとは、そもそも2つの音楽をDJが混ぜ合せて、新しいひとつの曲を作りだすというクリエイティブな行為のこと。
二つの曲を混ぜても、上モノちょこっといじったり、ベースライン微妙に付け替えたりとか、盛り上がり以外ミニマルっぽくしてみたりとかはどうかな?クリエィティブっていいうよりはむしろダサげ。
ロングミックスぶちかましてみたり、フミヤチックに原型をとどめぬほど混ぜてみてプレイ全体としてひとつの曲にしてみたりとか竹村延和みたいに紡ぐとかじゃないと面白くないような気がするのは、僕だけなのか?
だから、どっちかっていうとハイファナチックなイメージ
Remixも曲つなげんのもある曲の、(自分にとって)一番クル部分が強調されていればドップリドープに最強なわけで、結局提供者の意図を外れたところに本質があったりするんじゃないかナァと思ったりするわけですヨ。
あーそういえばWJってのもあったっけ。
20032006 designpattern
Factory Methodはちゃんと理解するのにちょっと時間がかかった。
というところがポイントだが、ここの部分は抽象メソッドでなくても、デフォルトのメソッドを用意してもいいし、エラー吐くようにしてもいいらしい。ココなど詳しいが、
naoyaのはてなダイアリー - prototype.js でデザインパターン - Factory Method
クライアントで利用する主人公であるところのインスタンスの生成ロジックを Factory の中に抽象化してやって、具体的な new によるインスタンス生成の束縛からクラスを解放してやりましょう、ということになります。
つまり、コンストラクトするメソッドを適当な方法で実際のクラスと切り離すという理解でいいのかな。
CPAN探してみたらClass::Factory というモジュールを見つけたので、これを使ってデザパタ本のサンプルを書いてみた。
まず、FactoryクラスはClass::Factoryを使うので特に書く必要はない(モジュールのインストールだけ)。で、IDCardFactoryクラスはこんな風に書くだけでラクチン。
package IDCardFactory; use strict; use base qw(Class::Factory); __PACKAGE__->register_factory_type( IDCard => 'IDCard' ); 1;
Productクラスもサンプルの通り、何はともあれuse出来るもの
package Product; use strict; sub use { die; } 1;
で、実際のプロダクトの生成メソッドはinitなのでここをちょっと書く(といってもサンプルのnewとほとんど変わらんが)
package IDCard; use strict; use base qw(Product); sub init { my ( $self, $owner) = @_; $self->{owner} = $owner; print "$self->{owner}のカードを作ります。\n"; return $self; } sub use { my $self = shift; print "$self->{owner}のカードを使います。\n"; } sub getowner { my $self = shift; return $self->{owner}; } 1;
さてメイン
#!/usr/bin/perl BEGIN { unshift(@INC, "./"); } use strict; use IDCardFactory; my $card1 = IDCardFactory->new('IDCard','kzfm'); my $card2 = IDCardFactory->new('IDCard','愛犬はな'); my $card3 = IDCardFactory->new('IDCard','U隊長'); my $card4 = IDCardFactory->new('IDCard','新入りゆき'); $card1->use; $card2->use; $card3->use; $card4->use;
で、実行結果
$./main.pl kzfmのカードを作ります。 愛犬はなのカードを作ります。 U隊長のカードを作ります。 新入りゆきのカードを作ります。 kzfmのカードを使います。 愛犬はなのカードを使います。 U隊長のカードを使います。 新入りゆきのカードを使います。
これだと、ファクトリーのインスタンスが作られないのがサンプルと違うとこかな。あとはClass::Factoryのメソッドregister_factory_typeで幾つかのプロダクトを登録できるので、IDCardFactoryではなくてCardFactoryにして、VISA,Master,Nojima,Kojima,Yamadaカードみたいに複数のカードを登録しとくのが正しい使い方なのかな。
このエントリは結城浩さんの本と、それに載っているサンプルをPerlで書いた例をみながら考えたことをメモってます。あとは、はてなの伊藤さんのjavascriptでの例も参考にしてます。 間違いの指摘とか、もっといいやり方教授してくれたらとても嬉しいゾ。
20032006
大阪-新大阪の一駅だけだったけど、結構耐えがたい雰囲気だったね!
っていうか3両目って微妙な位置じゃないか?今度から無意味に飛び乗るのやめよう。
ん?!、、、
これもまた、JRの陰謀なのか(飛び乗り防止の為の)
もしかして常識?
Catalystのアクションの優先度でまたもはまったのでメモ。
最上位のコントローラー(要するにcatalyst.plでつくられる)にRegexでアクションを定義すると、script/xxxx_create.pl controller test とかでlib/Controllerの下に作成したtest.pmのデフォルトよりも優先されてしまう。
例えば
lib/Test.pm
sub Regex : Regex('^(¥w+)$'){ my ( $self, $c ) = @_; # Hello World $c->response->body($c->req->snippets->[0]); }
lib/Test/Controller/priv.pm
sub default : Private { my ( $self, $c ) = @_; $c->response->body( "Test::Controller::priv" ); }
とかやっておいて、/privにアクセスするとRegexが実行されてしまう。
色々悩んだ挙句、
sub priv : Path('/priv'){ my ( $self, $c ) = @_; $c->response->body( "Test::Controller::priv" ); }
みたいに、Pathでルートからの位置を指定して優先度をあげることで解決。せっかくControllerで別にしてるんだから、
コントローラー内のデフォルトはコントローラー内ではデフォルトの動作をしてほしいナァ
Regexに持ってかれちゃったりすると気持ち悪いなぁと思ったり。
あと試行錯誤してて気づいたんだけど最上位のコントローラーでLocalRegexを指定すると何にもマッチしないようなんだけどこの認識であってるのかな?
16032006 perl designpattern
naoyaのはてなダイアリー - prototype.js でデザインパターン - Template Method
Iterator と Adapter では interface に相当するものは省略してきましたが、今回は抽象クラスをちゃんと用意します。JavaScript での interface みたいなものは Perl とかと一緒で実質意味を持ちませんが、抽象クラスなら実装がスーパークラスにちょこっとあるので意味があります。
Perlのコードだと、これのことか。
sub display {
my $self = shift;
$self->open;
for my $i (0..4) {
$self->print;
}
$self->close;
}
なるほど。そうすると抽象クラスでopen,print,closeメソッドでdieしておくことに意味があるのかも。でも、javaにはあるfinal修飾子がperlにはないから、オーバーライドされてしまうという危険性は残るよなぁ。
このエントリは結城浩さんの本と、それに載っているサンプルをPerlで書いた例をみながら考えたことをメモってます。あとは、はてなの伊藤さんのjavascriptでの例も参考にしてます。 間違いの指摘とか、もっといいやり方教授してくれたらとても嬉しいゾ。
15032006
昨日の大阪出張帰りに買って、そのまま読破。
いっつも、梅田 望夫さんのblog見てたから新鮮な部分はあんまなかったけど、自分の中で色々整理するいい機会にはなった。
製薬系もオープンソースな影響はもろに受けてるし、そういう流れを歓迎する向きもあるヨ。僕もweb2.0な風をふきこんじゃるみたいないきおいで、pubmed用del.icio.usクローン(通称publ.icio.us)を作って、啓蒙中だったりするけど、みんなの知を束ねる必要のあるところは多かれ少なかれ影響を受けているんじゃないかと思うよ。
で、製薬系の中の人として僕がうっかり感じたことを書きなぐり。
特にバイオインフォがオープンソースよりで、従来あったコンピューターケミストリーがケモインフォとか呼ばれることで、オープンソースに引っ張られやすくなっている気がする。で、化合物をいじるためのツールはdaylightとか買わないといけなかったのがPerlMolとかChemrubyとか色々面白いツールは増えてきてるのでいい感じ。特にオープンなケミカルデータは結構増えたので、家で色々試すのに困らなくなった。のと、チープ革命みたいなのはものすごくあって、ケミカルDBのデファクトとして君臨してたあそこが、読み違えたっぽいあたりが印象的。あとは企業が金をつぎ込むのが知をどうするかみたいなツールにシフトしてるかなぁという感じ。
なんて聞かれて返答に困ることが多くなった。仕事を通して覚えたいんですとか言われても、、、、みたいな。基本的な事柄はいくらでも学ぶ機会は用意されているしな。アッセイキットとか試薬とかが必要ないぶん、インフォマティクスに限らず、量子化学計算とか統計とかの習得のための障壁は恐ろしく低くなっているような気がする。結局やる気だけなのかも。
教えなきゃわからんやつは教えてもわからん
という状況が真なのかどうなのかはわからないけど、学習するために必要な情報を自分でうまく探し当てることの出来る能力が要求されることはものすごく増えた気がするヨ。
OJTの希薄化なのか、OJTで伝えることそれ自体の陳腐化なのかわからんが、高速道路論を肌身で感じ取れるかどうかはものすごく大きい気はするヨなぁ。
僕も職場は実践オンリーです。現実の問題を解析したりとか議論したりとか。だから、ほとんどコードは書かないヨ。コードは家で書いて、職場では家のsubversionからcoしたのを走らすだけになりつつある。論文も直で仕事と関係あるようなのは職場で読むけど、技術それ自体を指向するようなものは、家で読むことが多い。そういうものに限ってopen accessだったりするし。
うわ、すんげー面白いとかめっちゃクールやんけみたいな新鮮な感覚は、職場からは得られなくなったなぁと思う今日この頃でした。
でも、僕は、最初から意識が高い集団が勝ち逃げできるような未来は描いてなくて、(レガシーな考えの人はある程度淘汰されるにしても、)結局はみんなの意識はweb2.0チックにゆっくりとシフトはするんじゃないかナァと思うんだよね。
取り残されるというよりは、気づかぬうちに引っ張りあげられている
みたいな。というより、そういう貢献をしてみたいなぁというささやかな願望(というか趣味)。
14032006 大阪
新大阪駅で。
前回、さいごく路に行ったのでがんがら堂

ラーメン(硬め)でたのんだら、麺がダマになっていてちょっとがっかり。チャーシューもボソボソしてたし。替え玉する気もおこらんかった。もうちっと麺がしゃきっとしてくれたらなあ。