24012007 soap
ウィズドゥール
http://yohei-y.blogspot.com/2004/12/blog-post_18.html
知らんかった。
でもべつにダブリューエスディーエルでもいいのか、、、
24012007 bioinformatics
生物学的な文献に関してもhubmedなどをうまく使ってRSSで処理してやれば処理量は跳ね上がるヨ。
しかし、本質的に知識に響いてくるのは
腰を据えてじっくりと読まねばならぬ、今の自分の力量よりは高いレベルにある論文
をどんだけ読むかであって、必ずしも処理量が多ければいいってモンでもないところが痛いところ。むしろそういったなかなか面白そうであるんだけど小難しい論文に注釈を付け合って効率的に読破したいというのが崩れ落ちそうな未読文献の山を抱えて困ってる僕の希望
じゃぁ、暗黙知を共有する仕組みを作ればええじゃろなんて思うわけだが、これもbiologgingみたいの使えばよかろうなんて軽く考えたんだが、イマイチ盛り上がりにかけてるっぽい。なんでか考えてみたんだが
の2つではないかな?と半ば勝手に仮定してみる。前者に関しては、RSSだヨ!ビジネスブログだヨ!とか煽っても、便利さは訴求できません。マニュアル作ったり、地道に啓蒙したりとかしないと普通のヒトは使うようにはならんじゃろな。
が一方、後者に関しては、研究室単位とかの興味とかチェックする論文が被っているようなとこ(イントラ)だと、ひょっとしたら入れとくだけで(WIKIのように)うまくまわるんじゃなかろうかってことで思いつきで職場にblosxomでイントラブログを構築してみたのが春くらいの出来事。
で結局、今のところは職場のblosxomはなかなかうまくまわりません。もちろん前者も大きいんだけど、それ以上に、論文あんま読まんから処理するのに困らんヒトが多いみたいだ(と再認識) というわけで、最近ちょっとほったらかし気味の職場ブロッサム(職ブロ)だが、自分用に一個持っておくと論文に注釈つけといたり、タグでまとめられたりと結構便利なので、こんなの作ってますということでメモ的なものを残しておくヨ。
23012007 catalyst
Text::Tags のCatalystプラグイン書いた。
my @parse_tags = $c->texttags \ ->parse_tags(q{ foo bar "baz bap" jenny's 'beep beep'}); my $joined_text = $c->texttags->join_tags(@tags);
こんな感じで。
23012007 catalyst
相変わらずCatalyst。Adding RSS feedsを参考にTTSiteでRSS出力。
が、なぜかファイルの先頭に謎の空白行が。
XML パースエラー: 外部実体の初めに XML 宣言がありません。 URL: http://localhost:3000/rss/bookmarks/kzfm 行番号: 2, 列番号: 1:<?xml version="1.0" encoding="UTF-8"?> ^
root/lib/config/colが原因だった。
[% site.rgb = { black = '#000000' white = '#ffffff' ... error = site.rgb.red }; -%]
とやって解決。
あと、rss用のテンプレート指定したときにヘッダーフッター入らないようにroot/lib/site/wrapperに書いておく。
[% IF template.name.match('\.(css|js|txt|rss)'); debug("Passing page through as text: $template.name"); content; ELSE; debug("Applying HTML page layout wrappers to $template.name\n"); content WRAPPER site/html + site/layout; END; -%]
Pythonでの関数プログラミングを流し読み。Xoltar使うと関数型言語っぽくかけるらしい。
ふつうのhaskell読んだあとなので、ここらへんの関数プログラミングの話題も楽しい。
第2回はクロージャとbindingの話でclosure()とやるとクロージャができ、Lispチックな書き方もできるらしい。第3回はカリー化の話で、これまたcurry()とかやるだけでいいっぽい。また、最後のほうの関数合成の話も面白かった。
ちなみにperlにもSub::Curryってのがあって、こんな感じで書ける。
sub foo { join "_", @_} my $f = curry(\&foo, 1, 2); my $f2 = curry($f, 3, 4); print $f2->(5);
で、実行すると
$ perl curry.pl 1_2_3_4_5
サブルーチンのリファレンスを指定すればいいだけのお手軽っぽいので、今度何かに使ってみよう。
あと、any()とかall()はQuantum::Superpositionsが使えるかな。
22012007 新潟
今シーズン初ボードとリップは、苗場へ。道中、車団地など見てテンション上げ上げ。
久しぶりに、
恐怖の洞窟だって。ドクターモリは撮り逃した。
10時過ぎに苗場到着。さっそく宿で情報収集。昨日降ったので、コンディション良好だそうだ。でも、今年は雪が少なくてキッカー作るのに苦労してるらしいそうだ。
初日は苗場は避けてドラゴンドラでかぐらへ。
ドラゴンドラは相変わらず怖い。
和田小屋の近くでカレー
初日は往復してドラゴンドラの最終で苗場に帰宅。滑り足りないのでナイター。宿経由で二日券買うともれなくナイターもついてくる。
ナイター怖すぎ
みんなすげー飛ばすのな。昼間張り切りすぎたので、5,6本滑って帰ろうとしたら、目の前でスキーヤー同士が接触。スコーーーーンって乾いた音が鳴って、ぶつけられたほうは10m近く、ぶつかったほうはその倍くらいすっ飛んでった。
結局、救急車とパトカーきてたみたいだけど、カービングコースの真ん中で(しかも段差の見えにくいところで)とまってんのもどうかと思った。端によっときゃいいのに。
すっかり萎えたので、宿に戻って、風呂はいってテトリス対戦して寝た。
今日もドラゴンドラにのってかぐらに行くはずが、いきなり数人行方不明。
しょうがないので、苗場ボーディングに変更。久々にボックス擦ってた。やっぱ気持ちいい。レールも擦りたかった。
そんな感じで、結局滑り終わるまではぐれっぱなしで終了。
で、帰りの高速道路で、タイヤが外れそうになるというアクシデント発生。もう少しで死ぬところだったかもん。路肩に止まってギチギチ締めたけど、路肩に下りるの初めてだった。
ってか、走ってる自動車怖すぎ。あんな怖いもんとは知らなかった。
初ボードトリップは無事に終了。
22012007 chemoinformatics
オープンソースで、blogカスタマイズしてラボノートっぽくするのはおもろいかもーと思う。
僕も、暗黙知を共有するというあたりに興味があって、イントラブログとかの流れで僕もあれやこれやと試したことがある。実験的というかお遊びというか、ほとんどぽしゃってるけど。
断片はここら辺に。
以前に誰かが同じ実験をしていたとしても、それを紙ベースの記録から探し出すのは大変な作業です。そうこうしているうちに、実は同じ失敗実験を何人もの人が繰り返している…なんてことも実際にはあるようです。
こういうノウハウ共有化っぽいものは、pukiwikiなんかを使ってマニュアルにノウハウを加えていって充実させたりするくらいでも結構効果がある。pukiwikiを4年くらい使っているが、それのおかげで生産性はかなりあがった(というかヒトの転職に対してロバストになってる)のは実感している。ノウハウがヒト依存から組織依存になったっていうか。
ブログシステムの重要な利点に、トラックバックシステムがあります。ある実験が別の実験を参考にしていたり、また多くの実験はそれ単独ではなく連続したステップの一つになっています。それらを有機的に相互リンクで結びつけるのに、トラックバックは最適です。
トラックバックは、トラックバックする相手を探さないといけないのでユーザーに処理させると結構面倒くさがる。WikiNameとかはてなキーワードみたいに単語に反応して勝手にリンクが張られるか、規約の中に押し込んで、実験者が意識しなくてもつながるような仕組みにしたほうが良い気がしてる。知らないヒトにトラックバックの意義とかをきちんと説明するのは意外に難しい。
その当時学んだことは、
まずはリテラシをあげるのが先かなとか思ってるが、ここら辺はツールが先でもヒトの意識が先でもどっちでもいいんでしょうね。種だけまいとけば。
22012007 catalyst
Catalystのflashは意外に使えるやつだった。
$c->stash->{XXX}
のようだがredirectしても使える。ただし、一度読むと消えてしまう。
なんかの操作をした後、メッセージと共にredirectしたいときとかに使うとよさげ。
22012007 catalyst
User:Bookmarkみたいな1対多(多対多でもいいけど)なテーブルをDBICでいじるとする。
DBICをスクリプトなんかでいじくるときには、Perl/DBIC - Nekokak's core dump な感じでいいんだけど、、、、
CatalystでDBIC+TTを使う場合に、どこまでコントローラーで処理すればいいのか分からなくて悩んでる。
http://localhost:3000/bookmark/kzfm
みたいに、ユーザーのブックマークを表示したいときに
sub test1 : Private { my ($self, $c, $user) = @_; my $uid = $c->model('PblDB::User') ->find({empnum => $user})->id; my $b = [$c->model('PblDB::UserBookmark')->search(user_id => $uid)]; my @bookmarks = map $_->bookmark_id, @$b; $c->stash->{bookmarks} = [$c->model('PblDB::Bookmark')->search(id => \@bookmarks)]; $c->stash->{template} = 'bookmarks/list.tt2'; }
これはイマイチというか駄目やろ(何のためにDBICのリレーション設定したのかわからんようになる) というのは分かるんだけど、下のやり方もなんか変。
sub test2 : Local { my ($self, $c, $user) = @_; $c->stash->{user} = $c->model('PblDB::User') ->find({empnum => $user}); $c->stash->{template} = 'bookmarks/test.tt2'; }
で、テンプレートのほうは、user受け取ってbookmarkを取り出すと。
[% FOREACH bookmark = user.bookmarks -%] <ul> <li>[% bookmark.id %]</li> <li>[% bookmark.title %]</li> </ul> [% END -%]
とかやると、処理がコントローラーとテンプレートにまたがっちゃうし、ページの処理とか面倒になっちゃう。
DBICのオブジェクトは渡さずに、コントローラー内で全部処理してハッシュをTTに被せるだけにするのがいいのかなぁ。
ウーム悩ましい(僕だけ?)
コメント見て、なるほどと思ったのでこうしてみた。そのうちイテレータにする。
defined($user) ? # $c->stash->{bookmarks} = [$c->model('PblDB::User') # ->find($user->id)->bookmarks] : # user exist $c->response->redirect('/bookmark/') ; # or not
ユーザーがいない場合には、インデックスにリダイレクトするようにした。
モデルでやるべし。というコメントを見て、ふむー、ResultSetってそのためにあんのかとか思った。開放された気分。DBIC好きになってきた。
22012007 Food
あるある教盲信しすぎ!てな感じの今日この頃。まぁ、納豆ダイエットは捏造だったってことで、平和がもどりそうだが、
その前に供給過多がやって来るんではなかろうか?
ニッパチサンパチは当たり前、2パック買うとさらに1パックおまけみたいな。(来て欲しい)
というわけで、冷凍保存の可能性に関して調査
納豆が冷凍できると聞いたのですが、試していらっしゃる方いますか?