Computer Programming for Chemistry

久々にケモインフォクックブックを更新した。

先日同じことをするのにrxnフォーマットを扱えるライブラリ使ってちゃちゃっとやったけど、openbabelだとどう書くのがいいのかなと。


さて、SBDDとかLBDDとかそういう仕事に関わっているヒトはプログラミングくらい出来そうなイメージがあるけど、全然そんなことなくて、ちょっとしたシェルスクリプトも書けないヒトが多いです。基本アプリケーションの操作という作業がメインなので、プログラミング出来なくてもなんとかなるという。あとPipelinePilotみたいな便利ツールもあるしね。

という状況なので、仕事に関わりながらプログラミングを覚えていくというキャリアパスのようなもの存在しないと考えてよいです。それは単純に独学と自己啓発のエリアですな。

しかし、アプリケーションのみでは出来ない作業っていうのは存在するわけで、そうなるとやっぱプログラミングしなきゃいかんわけですよ。そこで、プログラミングが不得手なヒトは仕事の効率がガタ落ちするわ、最悪成果が出せないとか困ることになる。

僕なんかが「誰でもできるツールで誰でも出来る仕事をしてもしょうもないでしょ?」とかいうと「そういうツールを組み合わせて独創的な成果を」と反論されるんだけど、そんなこといってもしょうがないような。

だってそれは誰でもできるツールを使うヒトがごく自然にたどり着く結論というかみんなその制限の中で工夫しているからね。

そういった制限から抜け出すにはプログラミングは一つの解なのだろうなと思う。

ProductName Design and Use of Relational Databases in Chemistry
T. J. O'donnell
Crc Pr I Llc / ¥ 11,398 ()
通常2~5週間以内に発送

ま、とはいうもののプログラミングスキルは基本的に評価されないよね。

「ウェブ新時代の「口コミ」戦略 」を読んだ

タイトルと内容が全然あってない。

筆者の言いたいことは7章だけなんじゃないか?と思えば最後の章はおもしろい。

  • 「信頼」「規範」「ネットワーク」の3つよりなる社会的な見えない資本
  • 従業員に権限を与えるというのは、責任をとることを前提に自分たちで決定できるということ
  • 共進化の導入プロセス
  • 中間管理職のありかた

Optimizing the "Drug-Like" Properties of Leads in Drug Discovery

この本が欲しいが、ちょっと手が出せない

リードオプティマイゼーションってのは割と抽象的な言葉だなぁと思っていて、中期的にはターゲットタンパク質のオプティマイズ+physicochemical propertyの調整ではなくて、PharmacokineticsやPharmacodynamicsの最適化を指す言葉になるんだろうなぁと思う。

創薬ターゲットとしてのタンパク質は有限だって示されたわけなので、ある程度進んだあとの薬剤としての差別化ポイントは効き目の強さというよりは、効果の持続性とか投与経路が患者にとってより良いかとかのQOLでしょうしね。

そうすると臨床系のデータを探索の戦略に組み込めないとあかんよねとか。

web.pyで画像アップローダーを

しゃべるにtwitpicみたいなものが欲しくなったので、昼休みに画像アップローダーを書いてみた。

文字列のランダム化はodz bufferを参考にして、ロゴはtwitlogoを使った。

アーカイブはここ

shovelpic

web.pyはstaticっていうディレクトリのファイルは静的なものとして扱ってくれるのと環境変数はweb.ctxでアクセスできる。

#!/usr/bin/env python
# -*- encoding:utf-8 -*-

# kzfm <kerolinq@gmail.com>
import web
import string
from random import randrange

alphabets = string.digits + string.letters

def randstr(n=4):
    return ''.join(alphabets[randrange(len(alphabets))] for i in xrange(n))

image_dir = "images"

urls = (
    '/', 'Index',
    '/(.*)', 'Show',

        )

html_template = """<html><header><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</header><body>
<img src="/static/shovelpic.png" /><br />
%s
</body></html>"""

class Index:
    def GET(self):
        form = """<form method="POST" enctype="multipart/form-data" action="">
<input type="file" name="myfile" />
<input type="submit" />
</form>"""
        return html_template % form

    def POST(self):
        mol = web.input(myfile={})
        if mol['myfile'].filename == "":
           raise web.seeother('/')
        else:
            h = web.ctx.homedomain
            imgid = randstr()
            imgurl  = "%s/%s.png" % (image_dir,imgid)
            imgfile  = "static/%s/%s.png" % (image_dir,imgid)
            f = open(imgfile,"w")
            f.write(mol['myfile'].value)
            f.close()
            snip = "Your imageurl is <a href=\"%s/%s\">%s/%s</a>" % (h,imgid,h,imgid)
            return html_template % snip

class Show:
    def GET(self,imagename):
        img = "/" + image_dir + "/" + imagename + ".png"
        imgurl = "<img src=\"/static%s\" width=500 />" % img

        return html_template % imgurl

if __name__ == "__main__":
   app = web.application(urls, globals())
   app.run()

web.pyはちょっとしたものを書くときには便利だ。

今日の畑(100613)

今夜から雨が続くようなので、昨日今日と草むしり。一畝だけでもマルチかけてるので労力がぜんぜん違うのと、今年はマメに除草しているので管理が楽だ。

ミニトマト(アイコ)

1276428808

甘とう美人とピーマン

1276428821 1276428802

韓国唐辛子は一株しか植えてないので、沢山成って欲しいところ。

1276428815

ゴーヤの花が咲いていた。ちなみに後ろ側から見ると既にゴーヤーらしきものが見えている(豆知識)。

1276428796 1276428827

吉原祇園祭

吉原祇園祭は楽しかった。太鼓いいね。

1276428444 1276428451

娘は義母に綿菓子買ってもらったり落書きせんべいとか、ヨーヨーとかウィンナーとかやりたい放題だった。

1276428457 1276428463

pasteとwsgirefでhttpserver

参考

paste

def app(environ, start_response):
    start_response('200 OK', [('content-type', 'text/html')])
    return ['Hello world!']

if __name__ == '__main__':
    from paste import httpserver
    httpserver.serve(app, host='127.0.0.1', port='8080')

wsgiref

def app(environ, start_response):
    start_response('200 OK', [('content-type', 'text/html')])
    return ['Hello world!']

if __name__ == '__main__':
    from wsgiref import simple_server
    server = simple_server.make_server('', 8080, app)
    server.serve_forever()

app関数は同じ。

きろく(七七七六)

U隊長がリキュールの素に入れるお酒としてタカラのホワイトリカーを買ってきたので、そんなものいれても美味しくないよと進言したら、じゃぁ入れるもの買ってきてと言われた。

で、イワセさんにいって物色してきた。

その結果きろくが選ばれた。元老院も捨てがたかったんだけど。

1276261200

これがリキュールの素。醤油の素と一緒のとこが作ってんのかな、そんな感じ

1276261194

きろくをなみなみと注いだ。

1276261206

当然、余った分は僕が呑むわけだが、焼酎は久しぶりだなぁ。

egg entry pointsを使ってプラグインっぽいことをしてみた

Eggがよくわからんと少し調べてたら、Python plugins egg cooking mini-howto ってのがわかりやすかったので、デコレーターっぽいことをしてみた。

まず環境汚すのがいやだったのでvirtualenvでテスト環境をつくる。pylonsだとスクリプトでよろしくやってくれるのだけど、自分で作る場合にはvirtualenvwrapperを使うとよいらしい。

というか使ってみると便利すぎ。これは手放せん。

続いて実際に書いてみる。ディレクトリ構造はこんな感じ

$ ls -R deco
minus/     mydeco.py  plus/

deco/minus:
minus_plugin/ setup.py

deco/minus/minus_plugin:
minus.py

deco/plus:
plus_plugin/ setup.py

deco/plus/plus_plugin:
plus.py

ポイントはsetup.pyのentry_pointsってとこで、呼び出す方は entry_pointsに選んだ名前をpkg_resources.iter_entry_points("xxxx")に指定して呼べばいい。

アーカイブはここに置いといた

mydeco.py

#!/usr/bin/env python
# -*- encoding:utf-8 -*-

import pkg_resources

for entrypoint in pkg_resources.iter_entry_points("my.plugins"):
    plugin_class = entrypoint.load()
    decorater = plugin_class()
    print decorater.display("hello world!")

実行結果

$ python mydeco.py 
++++++++++++++++
+ hello world! +
++++++++++++++++

----------------
| hello world! |
----------------

エキスパートPythonプログラミングの4,6章あたりでも触れられており、これも参考になった。

ProductName エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス / ¥ 3,780 ()
在庫あり。

武勇 純米吟醸

武勇

すっきりとしていて美味い。するする入っていく。

1276165780

ぬーこれは美味しいなぁ。