Text::CSV::Simple::WithHeader

Text::CSV::Simpleはフィールドを指定してやるとCSV読み込むときにハッシュにしてくれるので DBD::CSVとかDBD::AnyDataよりも便利じゃないかと、こっちばっか使うようになってしまったのだが、Text::CSV::SimpleはCSVにありがちなヘッダー付きのcsvをうまく処理してくれない

仕方ないので、

$parser->field_map(qw/id name null town/);
my @data = $parser->read_file($datafile);
shift @data;

と、フィールド指定をして、ハッシュで受け取ってから、ヘッダーの行(最初の行)をshiftして落とすという処理をさせてた。でも、これだとフィールドが100とか200とかあるとfield_map書くのが面倒でたまらんので、ヘッダー処理するようにしてみた。

こんな感じのヘッダー付きのcsvを用意したら、

name,address,etc
kz,tokyo,1
yu,kyoto,2
ha,mie,3

いつものように、Text::CSV::Simpleのノリで

use strict;
use Text::CSV::Simple::WithHeader;
use Data::Dumper;
my $datafile = "data/test.csv";

  my $parser = Text::CSV::Simple::WithHeader->new;
  my @data = $parser->read_file($datafile);
  print Dumper(\@data);

ちゃんとハッシュになって返ってくる。

$VAR1 = [
          {
            'name' => 'kz',
            'address' => 'tokyo',
            'etc' => '1'
          },
          {
            'name' => 'yu',
            'address' => 'kyoto',
            'etc' => '2'
          },
          {
            'name' => 'ha',
            'address' => 'mie',
            'etc' => '3'
          }
        ];

Text::CSV::Simple::WithHeaderに置いておいたがwant_fieldsには対応させてない。

毎度

毎度にラーメン食べにいった。駐車場で猫を見かけた。

ニャンコ

黒小麦の醤油を注文。黒小麦って普通の麺より黒ずんでてちょっとコクがある感じか?いつもの麺とあまり味の違いがわからんかった。(けどうまい)

黒小麦麺 麺

あと、前食べたときに比べて、スープの獣っぽい後味がなくなってるような。正直うまかった。

今度は夜に行って、にぼにぼ食べねば。

4シーズンぶりにウェア変えた

ずっと気に入って着てたgreen clothingのウェアがさすがにボロボロになってきたので、今シーズンはいっちょ新しいのに替えるかと、boothに行ってきた。

ま、ウィンドウショッピングのつもりだったんだけど予想外にイイウェアが多くてあれやこれやと悩んだ挙句、想定外の予算を突っ込んでしまった。

ちゅうわけで、今シーズンからはsepiaのウェアで滑る。

ライフサイクルイノベーション読んだ

なんか最近、持て余してる感が強いなぁと思ってたところで、こういう本もかなりおもろかった、ちょっと経営層向けな感じもするが、色々と考えさせられることは確か。

でも、成果主義的なアプローチには向かないのかナァなんて思ったり。特にファーマは意外にwhat's to make よりhow to makeが重視されたりするからな。

こちらの図を使って考えてみるに、

  • 成果主義的な評価は短期(六ヶ月おきとかにくる)なのでイノベーター的なチャレンジは難しい(というかそもそも評価対象にならないしな)。
  • 上記の理由により、アーリーアダプターの立場も結構難しい(これまた評価対象になりづらい)
  • (成果が明らかに短期で出せそうな)アーリーマジョリティっぽく振舞うのが吉(ここら辺は新しい試みっぽく見えるし、上の層に形として見せやすい)
  • 上司は大概レートマジョリティ。それはさらに上がlaggardsだから。laggardsからみたら、レートマジョリティは先進的にみえるのかな?

じゃぁ、キャリア形成どうすんの?とかいう話になるけど、今だとケモインフォもバイオインフォもオープンソースなソフトウェアの充実度が著しく、色々と自分で勉強できるので、単にやる気だけの問題じゃないのとか最近思うようになってきたし、仕事のやり方もそうなってる気がする。

実際はまぁ、ドライ系だからそういう考え方ができるんであって、実験メインだとそういうわけにはいかんだろうし、ドライでもファーマ固有のHTSみたいなリアルな化合物をたくさん動かしたり、それから派生するインフォマティクスとかは別だとは思うけど。

で先日、鰻をつまみながら、ベンチャーのヒト(うちの会社から転職した)と話す機会があって、成果主義、成果主義って言われると上記みたいな感じになっちゃって息ぐるしいんすよねー(特に最近)みたいな話題になったら、

そういえば、そういうのもあったなぁ、成果主義(懐かしい)。そんな風に言えるのは企業にドップリ浸かってるからなんだよな~

と言われて、自分の視界の狭さに気付かされた。

なんか、どっぷり浸かりすぎなのかなぁ、、、、、

違うフィールドのヒトと話すと新鮮だし、そろそろ色々考えないといけない時期にきてんのかもしれん。

桜家で鰻

久しぶりに桜家で鰻。

肝煮と白焼をつまみながら、ビールを。暗い席で、シャッター炊かなかったので、写真写りが悪い。

肝煮 白焼き

最後に鰻重で締めた。

うな重

甘いっていうかどっしりしたタレはあんま好きじゃない場合には桜家の軽やかな味付けはお奨め。

桜家

SOAPAction

昨日のエラーは、SOAPpyのSOAPActionがなんかおかしいということで落ち着いた。

あれこれとwebをあさってみたのだけど、結局デバッグのやり方がわからなかったので、直接観測することにした。久しぶりのetherealだ。

とかいって、ここんとこ使う機会もなかったのでインストールから。最近のFCだと

yum install ethereal

だとGUIが入らなくて、

yum install ethereal-gnome

なのね。知らんかった。

でもって、パケットキャプチャーしながら、httpのみフィルタでSOAP::Liteのクライアントと、SOAPpyクライアントのXMLを比較したところ、SOAPpyはヘッダーのSOAPActionがなんか変だということに気付いた。

SOAPAction:"hi"\r\n

と、メソッド名が入ってるし、、、、エラーの原因がなんとなく見えてきた。で、なんじゃこりゃーとかいいながらSOAPAction直接指定したらやっぱ動いた。

>>> server = SOAPProxy('http://localhost/cgi-bin/test.cgi','http://localhost/Demo', \
soapaction='http://localhost/Demo#hi')
>>> server.hi()
'hello, world'

でも、これだとあんま意味ないし。なんでデフォルト空文字列にならないのかなぁ(ソースをちら見したけどわからんかった)。SOAP::Liteで書いたサーバーのほうでSOAPAction無視するようにすればいいのかも知れないけどなんか気持ち悪いんだよナァ。

SOAP関連

DWの第三部は相互運用性とかいうネタなのな。なんだかなー(といまさらながら)思った。

KEGGみたいにWSDL書いてやればこういうことあんま気にしなくていいのかなぁ(rubyでもperlでもpythonでも楽チンですよみたいに見えるし)。それとも結構苦労したのかな?

SOAPなのに異種言語間で躓く

perl同士だと、うまく通信できてんのにpythonのクライアントだとこける。
が、原因がさっぱしわからん。

サーバー

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

use SOAP::Transport::HTTP;

SOAP::Transport::HTTP::CGI   
  -> dispatch_to('Demo')     
  -> handle;

package Demo;

sub hi {                     
  return "hello, world";     
}

1;

perlクライアント

1
2
3
4
5
6
7
8
9
#!/usr/bin/perl -w

use SOAP::Lite;

print SOAP::Lite
  -> uri('http://localhost/Demo')
  -> proxy('http://localhost/cgi-bin/soap.cgi')
  -> hi()
  -> result;

でうまく動くのに、Dive into python 12章を参考にしたpythonクライアントは動かん。

>>> from SOAPpy import SOAPProxy
>>> server = SOAPProxy('http://localhost/cgi-bin/soap.cgi',namespace='urn:Demo')
>>> server.hi()

で実行すると、下のエラー

SOAPpy.Types.faultType: \
<Fault soap:Client: SOAPAction shall match 'uri#method' \ 
if present (got 'hi', expected 'urn:Demo#hi'

もうすこし、ちゃんと理解しないといけないなぁ。

The Clock (Surgeon Remix)とか

忘れずにダウンロード。

THOM YORKEが未発表曲を期間限定で無料配信 - bounce.com [ニュース]

ファンに向けて未発表曲を無料配信することを発表。日本時間の12月11日深夜より、アルバム『The Eraser』のオフィシャルサイトにて配信がスタートした。現在配信されている音源は、前述のソロ作に収録されていた“The Clock”と“Analyse”、それぞれのリミックス・ヴァージョン。

Surgeon Remixが良い。ミニマルにTHOM YORKEの声って結構あうじゃんと気付かされた。

カバーも良かったけど。

ProductName Exit Music: Songs for Radio Heads
Various Artists
Rapster / 2097円 ( 2006-04-08 )


そろそろ、レコードとかmp3に取り込んでボードトリップに備えないとな。

Bossa N Roses

Catalyst(というかDBIC)関係の情報を探してたら、miyagawa's blogでBossa N' Rosesのことを知り、iTMSでうっかり即買い。
んで週末はずっと聴いてる。

ProductName Bossa N Roses (Arg) (Dig)
Various Artists
Music Brokers Arg / ?円 ( 2006-11-21 )


  • Patience
  • Knockin' on Heaven's Door
  • Sweet Child of Mine

あたりが懐かしくてよかったが、Welcome to the Jungle,Paradise Cityがボッサなのはちょっと違和感が。

ついでに、ブックオフでオリジナルでもと、チャリ漕いであさりにいったけど、思ったより高かったので買わずに帰宅。

random forest

最近、QSPRやったりQSARやったりという論文が幾つかまとめてでてたので、理解しとかなきゃと思いつつ、放ってあったRandom Forestを。

とりあえずrandom forestが大体どういうことをやってるのかは分かった気になったが、ブートストラップ、バギングといい、アンサンブル学習がまだしっくりとこない。

でも、ちょっとおもろいかもと思った。計算機の性能があがってきたから、蛋白レベルでも量子化学計算できるようになってきて、それはそれで色々分かって楽しいんだけども、やっぱインフォマティクス(というか学習論?)的なアプローチのほうが好きだわと思った。後でじっくり読んでみるか。