Iterator::Utilをつかってみた ( デザパタPerl )

イテレータのサンプルを実際にIterator::Utilモジュール使って書いてみたゾ。

今回、用意したのはBook,BookShelf,mainだ。インターフェースにあたる部分は省略ってことで。

Bookはサンプルのコードをそのまま使用してます。 BookShelfはbooksメソッドで配列返すようにしといた。

package BookShelf;
use strict;

sub new {
    my $class = shift;
    my $self = {};
    $self->{maxsize} = shift;
    $self->{books} = [];
    $self->{last} = 0;
    bless $self, $class;
}

sub appendbook {
    my $self = shift;
    my $book = shift;
    $self->{books}->[$self->{last}] = $book;
    $self->{last}++;
}

sub books {
    my $self = shift;
    $self->{books};
}

1;

mainでIterator::Utilを呼ぶ。

!/usr/bin/perl

use strict; use BookShelf; use Book; use Iterator::Util;

my $bookshelf = BookShelf->new(5); $bookshelf->appendbook(Book->new('Java言語で学ぶデザインパターン入門')); $bookshelf->appendbook(Book->new('憂鬱なプログラマのためのオブジェクト指向開発講座')); $bookshelf->appendbook(Book->new('かんたんUML')); $bookshelf->appendbook(Book->new('プログラミングPerl')); $bookshelf->appendbook(Book->new('オブジェクト指向Perlマスターコース'));

my $it = iarray ($bookshelf->books);

while (my $book = $it->value) { print $book->getname."n"; }

実行結果はこんな感じ。最後のIterator is exhaustedがちょっと気持ち悪い。

$ perl main.pl 
Java言語で学ぶデザインパターン入門
憂鬱なプログラマのためのオブジェクト指向開発講座
かんたんUML
プログラミングPerl
オブジェクト指向Perlマスターコース
Iterator is exhausted at main.pl line 18

増補改訂版Java言語で学ぶデザインパターン入門あなたの考えを広げるためのヒント(ここがおもろい)には、

実装とは切り離して数え上げできることが重要

とか書いてあるので、まぁ、これでいいのかな。

このエントリは結城浩さんの本と、それに載っているサンプルをPerlで書いた例をみながら考えたことをメモってます。あとは、はてなの伊藤さんのjavascriptでの例も参考にしてます。 間違いの指摘とか、もっといいやり方教授してくれたらとても嬉しいゾ。

ProductName 増補改訂版Java言語で学ぶデザインパターン入門
結城 浩
ソフトバンククリエイティブ / 3990円 ( 2004-06-19 )


subclipse

株ロボのためにEclipseの勉強を始めたヨ。 手始めに、Eclipseでsubversionを扱うためにsubclipseをインストール。

EclipseWikiSubclipseプラグイン をみながら導入作業。

更新マネージャーから更新すればいいのでラク。ちなみにsubversionは構築済み

trac

プロジェクトマネージメントネタも結構気にはなっていて、っていうか重要でしょう。まぁ基本的にSECIモデルとか大好きなので。

MSのプロジェクトは少しいじってたけど、ダサい。そもそもマネジメントするためのツールだから、テックも含めた(マネジメントの)共有とかできないし、webクライアントとか貧弱すぎ。トップダウンで工程管理するのには向いてんのかも知れないけど、その場その場で意思決定を迫られつつ、現場との対話を汲み取ってダイナミックに方針を調整する実験系の入るプロジェクトに使うのには無理があるんでないかと。実際こういうプロジェクトにはめてみるといつまでに誰が何をやります的な議事録的な予定表にしかならんよ。

そういうわけなんで、チームの意識のコンセンサスをとるというか、問題の共有化を効率的に進めるなにかがずっと欲しくていろいろ探してはいます。ちょっとよさげなものとしてphpcollab触ってみたけど日本語化がうーん、、、、もう少し待とうかな。

で、tracなど惹かれています。そもそも実験系だとデータの一元化に注意を払うやつは少ないし、subversionなんか使ってみようかなと常々考えていたのでレポジトリのビューワーのあるtracはよいんではないかと。で、実験系の変更、追加なんてほとんとバグつぶしと一緒でしょみたいな印象があるのでバグトラッキングシステムにのっければいいのかななんて思っている。

Iterator ( デザパタPerl )

Perlの例だとインターフェースのクラスをdieしているので、最初これはどういう意味があるのかわかんなかったが、

naoyaのはてなダイアリー - prototype.js でデザインパターン - Iterator

デザパタ本のコードでは Java の interface をまず用意して、となるのですが例によって JavaScript は動的な言語かつ型がないのでサブクラスに実装を強制させるメカニズムがない。ということで、ここでは interface に相当するものは用意せずに Concrete クラスだけで実装します。

と書いてあったのを見てサブクラスで実装されてない場合によばれた場合のためのちょっとした仕組みなのだとわかった(あがきにちかいような気もするが)。で、試しにjavaで実際にインターフェースを実装してるクラスのメソッド名変えてみたらコンパイルできなかったし、をを~、javaのインターフェースって束縛としては便利だよなと思ったり。言語の違いってなかなかおもろいなぁと感じた瞬間だったり。

あと、こういうやり方もあるらしい。

オブジェクトをハッシュデータ構造と透過に扱う際に、tie ハッシュのインターフェースで NEXTKEY() というメソッドを実装しますが、これがまさに iterator なので、

って部分がイマイチ飲み込めなったので、実用PerlプログラミングのTieのとこと型グロブの章をよく読んでなんとなく理解した。(理解した気になった?)

ProductName 実用Perlプログラミング
スリラム スリニバサン
オライリー・ジャパン / ?円 ( 1998-11 )


で、CPANもいくらか調べてみたところ、Iterator::Utilというのがよさげなのかな?この場合はiappendを使えばいいのかな?

明日コードを書いてみよう。

このエントリは結城浩さんの本と、それに載っているサンプルをPerlで書いた例をみながら考えたことをメモってます。あとは、はてなの伊藤さんのjavascriptでの例も参考にしてます。 間違いの指摘とか、もっといいやり方教授してくれたらとても嬉しいゾ。

ProductName 増補改訂版Java言語で学ぶデザインパターン入門
結城 浩
ソフトバンククリエイティブ / 3990円 ( 2004-06-19 )


Chemrubyで構造描画 PNGに出力だ!

Chemruby web site初心者てのが出来てたので、初心者らしくRMagickを使ったテストをしてみたぞ。

をを~ pngで出力されるようになっとる !

早速、視覚化のサンプルもpngで落としてみることに

require 'RMagick' require 'chem' mol = Chem.open_mol("mol/C00019.mol") query = Chem.open_mol("mol/C00147.mol") m = mol.match_by_ullmann(query) matched_nodes = m.inject([]){|ret, i| ret.push(mol.nodes[i])} mol.edges.each do |bond, atom1, atom2| bond.color = [1, 0, 0] if matched_nodes.include?(atom1) and matched_nodes.include?(atom2) end mol.nodes.each{|node| node.visible = true unless node.element == :C} mol.save("chemrubytest.png") mol.save("chemrubytest.pdf")

でてきたpngはこれだ。

result

まだ、色はつかないのね。と、描画位置のバランスと、フォントの大きさとかちょっと気になる。結局そういうのは地道に綺麗にしていくだけなんで、個人的には大して気にならないが、最終的にはCDKよりは綺麗な絵が出力されるようになることを期待しますヨ。

あとsdf2png欲しい。まぁこれは自分で書けばいいのだが。よし、rubyの勉強も兼ねて書いてみよう。

支那そば家 毎度!で潮ラーメン

にんともかんとも駐車場がわかりにくいので、ちょっとはずれの有料駐車場に停めてしまうが、二度目なのに毎度な支那そば家にいってきたヨ。

毎度 毎度

塩な潮を注文。定休日が月火になったのと一部メニューの値段が変更で肩ロースのチャーシューが一枚100円に替わってた。

潮

麺は旨い。が、潮味よりも醤油のほうが好きかも。塩だとちょっとインパクト薄めになっちゃうかも。

あの麺を、せいろみたいに、醤油味のスープで蕎麦みたいにすすったらうまいかな

ささやかすぎる願望だヨ。

支那そば家

ChemDB

ChemDBはDBMSにポスグレつかってるらしい。他のDBとの比較があったので眺めたが、アノテーションの多さが売りのデータベースって感じかな。

ちなみに、マシンラーニング用のデータセット が遊ぶにはいい感じ。なんかいい記述子発生ソフトとかあればR使っていじってみたいところだが、オープンソースのdescriptorプロジェクトってあんのかな?ないのかな?サブストラクチャーベースのヤツだったらありそうな気もするけど。

あと、ChemDBで使われているOEChemのpythonライブラリが非常に気になったりしたヨ。そしてChEBIにはChemAxonの影が。

気になるといえば、第3回オープンバイオ研究会「ビジュアライズの技法」というパネルセッションも気になる(さすがにいけないけど)。スライドとか公開されんのかな?

16174682 16381955 15608238 16381840

Rの基本パッケージ中の古典的検定関数一覧

RjpWikiRの基本パッケージ中の古典的検定関数一覧ってのができてて、しかもそれぞれに簡単な説明とRのサンプルが超訳として書かれてるので便利。

あとで、全部トレースしておこう。

Catalystのデータの更新って

Catalyst+CDBIでinsertはcreateメソッド呼び出すから、更新はupdateメソッドだろって勘違いしててデータ更新だけがうまくうごかないプログラムができてしまい、

キャッシュか?キャッシュなのか?もしや。

なんつって、しばらく悩んだ。

で、Shibuya Perl Mongersの Wiki作りの資料見ててやっとぼけてたことに気づく。

sub save : Global { my ( $self, $c ) = @_; my $title = $c->req->params->{'title'}; my $contents = $c->req->params->{'contents'}; unless(my $wiki = MyWiki::M::CDBI::Wiki->retrieve(title => $title)){ MyWiki::M::CDBI::Wiki->create({title => $title, contents => $contents}); }else{ $wiki->contents($contents); } $c->res->redirect($c->config->{base} . '?' . $title); }

O/Rマッピングで、オブジェクトとして扱ってんだから更新はセットすればいいだけじゃん。

いま思うと、そりゃそうだろうって感じだが。CDBIちゃんと理解しておかないといけなさげだな。

GeneRank

GoogleのPageRankをモジッてGeneRank。もちろんアルゴリズムを参考にしてます。PageRankはここみるとなんとなくわかるかも。

多分5年くらい前だと思うが、アレイのブームあたりで、どっかのベンチャーがGoogleのアルゴリズムを取り入れたいとか言っていたことを思い出したヨ。

さて、大雑把なGeneRankの式は

ランク = (1-d) x 発現変動率 + d x 結合度

みたいな感じ。PageRankだと左の項は(飽きて)他のページにいっちゃう項で、右項がリンクをたどる項か。要するに右の項は束縛なんだろうと思う。というわけで、GeneRankは発現変動率を、GOとか他のネットワークの情報である程度補正するイメージになるかな。程度はdで決める。

ちなみにPageRankはd=0.85らしい。が、そんなに大きい確率でリンク辿るか?ブログが多くなってくるとあんまりリンクを辿るという行為をしなくなるよな。

GeneRankでは、これをGOのネットワークとかで補正をかけて評価してます。が、あんま改善されてないっぽい。転写の制御被制御をGOで補正しようというところに無理があるのかな?と思ってみたりする。

同じシスエレメント持っているとかのネットワークを使ったほうがうまくいくのかも知れない。がそれって作るの大変ダヨナァ。というか、ネットワークをどう表現するかで、ランキングが改良されるかどうか決まるっぽいんだが。文献からNLPで作った、ネットワークは使えないんだろうかね。

16176585

© kzfm 2003-2021