09042011 life
先週のチェンツォンカオのドライフルーツはもう一つだったみたいで、今回は干し葡萄のみを使って葡萄蒸しパンにしてみた。
あとはつまみやすいように前回よりも小さく切ってみた。

今回は二度目なので一次発酵、二次発酵を逆算してうまく空き時間に押し込むことが出来て効率的に作ることが出来たな。
09042011 life
09042011 music
以前買ったベスト盤よりは、こっちのほうが好きだな。
ダビーで内省的、癒し度高し。
pdbgetというpdb-idを引数にとって構造データをまとめてダウンロードするコマンド使っていたんだけど、ちょっと前のサーバリプレースでPDBのミラリング環境が失われたので使えなくなってた。こういうの致命的だよなとは思うが今時はネットワークが太いので別にミラリングする必要性はあまりないのかな?でも遅いよなぁ。
とりあえず、自分用に。プロキシ使いたいのでFancyURLopener
import urllib import sys pdblist = sys.argv[1:] proxies = {'http': 'http://[hostname]:[port]/'} opener = urllib.FancyURLopener(proxies) for pdbid in pdblist: f = opener.open('http://www.rcsb.org/pdb/files/%s.pdb.gz' % pdbid.upper()) data = f.read() with open('%s.pdb.gz' % pdbid.upper(),'wb') as wf: wf.write(data)
ちなみに初代はperlで書いてあった。これいつ書いたんだろう?多分7,8年よりは前だと思うんだよなぁ。
use strict; use Net::FTP; die "usage:$0 [pdb_id] ...\n" unless @ARGV; my $ftp = Net::FTP->new("[hostname]", Debug => 0) or die "Cannot connect to [hostname]: $@"; $ftp->login("pdb",'pdb') or die "Cannot login ", $ftp->message; $ftp->binary(); for my $pdbid (@ARGV){ $pdbid =~ tr/[A-Z]/[a-z]/; my $pdbdir = substr($pdbid,1,2); my $pdbfile = "pdb" . $pdbid . ".ent.gz"; $ftp->cwd($pdbdir) or warn "Cannot change PDB directory ", $ftp->message; $ftp->get($pdbfile) or warn "$pdbfile : ", $ftp->message; $ftp->cwd('..') or warn "Cannot change PDB directory ", $ftp->message; } $ftp->quit;
Bioinformatics Programming Using Python08042011 chemoinformatics
目次見たけど概要をつかむにはよさげ。
Virtual Screening: Principles, Challenges, and Practical Guidelines (Health Care and Disease Management)ただ、スコア関数の方法論がもう限界ですからな。もっと丁寧なモデル化が望まれているような気はするし、そういったあたりのもっとイノベーティブなアプローチが議論されない限りはつまんないフィールドになっていっちゃうと思っている。
08042011 Python
Sphinxで文書を書いていて気になるのは、謎じゃない謎の空白だ。
これはあちこちで書かれていてそのための拡張とその改良版が用意されているが、自分の環境(Python2.6.6+Sphinx1.0.7)ではうごかなかった。
なんでかなーと調べてみるとtype(node.parent)が<type 'instance'>を返してたのでisinstanceで評価するようにしてみた。
def trunc_whitespace(app, doctree, docname): from docutils.nodes import Text, paragraph if not app.config.japanesesupport_trunc_whitespace: return for node in doctree.traverse(Text): if isinstance(node.parent, paragraph): newtext = node.astext() for c in "\n\r\t": newtext = newtext.replace(c, "") newtext = newtext.strip() node.parent.replace(node, Text(newtext)) def setup(app): app.add_config_value('japanesesupport_trunc_whitespace', True, True) app.connect("doctree-resolved", trunc_whitespace)
なんでかなーってのを調べるためにSphinxのソースコードを読み始めたりdocutilsのソースを読み始めたりしたけど、昨日あたりからかなり脱線し始めたのでとっとと成果物を残しておこう。
エキスパートPythonも読みなおそうっと
08042011 processing
07042011 Python
cmdを使えばコマンドラインのツールを簡単に作れる
コマンドループは
line = self.precmd(line) stop = self.onecmd(line) stop = self.postcmd(stop, line)
となっているのでpre,postのフックが効く。onecmdのほうはdo_をつけたメソッドを呼び出している。
cmd, arg, line = self.parseline(line) if cmd == '': return self.default(line) else: try: func = getattr(self, 'do_' + cmd) except AttributeError: return self.default(line) return func(arg)
getattrでメソッドを呼び出して、引数与えて実行した結果を返している。動的にメソッドの適用したい場合にはこうやればいいのか。
CPANといいCRANといいパッケージガイドが立て続けにでますな。
このながれでPyPIやHackageも出ないかなぁ
06042011 work
4月からチームごと異動になってる。異動先はまぁルーチンワークに全力投球的な部署ですね。保守メインだから仕方ないんだろうけど。意図というのはまぁ薄々感じていて、要するに我々が染まるのか、我々に染めるのかという駆け引きが行われる感満載なわけだけど、実際疲れるからイヤなんだよなぁ。一掃してつくり直すというオプションが存在しないってのは問題だと思っている。年功序列でところてん方式で押し出されたのを押し戻すと組合がうるさいからどうしようもないんだろうなぁ。って、僕らの世代にそういう処理も押し付けても困るわけですが、まぁそういう世代なんだろうなぁと思っている。
本書はちょうど僕らが抱えているそういうジレンマを含んだ給料格差をフリーライダーという観点から分類して分かりやすく説明して、暗黒面に染まらない、またはうまく避けるポイントを提示している。
経験上、真のフリーライダーってのはたしかにいますね。ぱっと思いつくのはこういうヒトとか。
本書のフリーライダーの分類っていうのは積極的にフリーライドしようという人間と、認識の違いとかカルチャーの急激な変化により取り残されたヒトの区分けをあまり明確にしていないかなぁ。なんというか歴史的経緯によるフリーライダーってのは一定数いますよね。上司から与えられた仕事をこなすのが仕事だったはずなのに、気がついたらその仕事はいつからか企画型業務に分類されちゃって困った困ったという。とりあえずやれる範囲で一生懸命やってみよう的な。給料一緒だったら同情すんだけど、結局そういう人達高給なんだよね、本書でいうアガリ系ってやつか。
それからフリーライドに一生懸命な人間というのは意外に組合活動頑張るという側面に触れてないな。これ重要かも。とりあえず組合に前向きなやつとは目を合わすなというのは僕の生きる智慧ですね。結局、ああいうのに染まると研究者的な堕落しか待ってない。キャリアブルスキルが喪失しますね。成果主義とか取り入れていながら組合のベアとか年功序列とかああいうの一生懸命なやつのほうが積極的なフリーライダーだと思うんだよなぁ。
本書を読んだからといって、モチベーションがあがるわけではないが、なんとなくモヤモヤするシチュエーションってのはフリーライダー絡みではけっこうあるので、そういう時にモヤモヤしないで、自分の心に折り合いをつけるためには読んでおくといいのかも。
Sphinx使っているのだけどファイルを更新するたびにmake htmlと打って確認するのがめんどくさい。linuxだったらpyinotifyがあるんだけど、macbookでは使えない。
簡易コマンド書いた。
#!/usr/bin/env python import os from time import sleep, strftime, localtime import sys import commands filename = sys.argv[1] mycommand = sys.argv[2] def get_mtime(): return os.stat(filename).st_mtime mtime = get_mtime() while 1: sleep(1) new_mtime = get_mtime() if mtime != new_mtime: mtime = new_mtime commands.getoutput(mycommand) print "done: %s ( %s )" % (mycommand, strftime("%a, %d %b %Y %H:%M:%S", localtime(mtime)))
監視対象のファイルを第一引数に、更新されたら実行するコマンドを第二引数に。
$ wdo docutils.rst "make html" done: make html ( Wed, 06 Apr 2011 05:12:30 ) done: make html ( Wed, 06 Apr 2011 05:26:27 ) done: make html ( Wed, 06 Apr 2011 05:28:36 ) done: make html ( Wed, 06 Apr 2011 05:33:35 ) done: make html ( Wed, 06 Apr 2011 05:33:45 )
そうです、お分かりの通り早朝からdocutilsのソースを読んでいるのです。
ちなみにpyhttpd='python -m SimpleHTTPServer'っていうalias切っているので、makeで生成されたhtmlはlocalhost:8000で見てる
参考