23062011 work
製薬業界にもXX駆動開発って有効だと思っている(というか、メガファーマでは実践されているらしい)が、その手段に名前が付かないのでなかなか認知されない。プロジェクトなんて典型的なTDDだし、プロジェクトはいつもデスマってんのにその状況に名前がつかないから、アジャイルへの渇望もない。
突き詰めていけばDDDこそが重要だと思ったりするんだけど、研究者の思考がマーケットインじゃなくてプロダクトアウトだからまぁ難しいなぁと思っている。
23062011 work
製薬業界にもXX駆動開発って有効だと思っている(というか、メガファーマでは実践されているらしい)が、その手段に名前が付かないのでなかなか認知されない。プロジェクトなんて典型的なTDDだし、プロジェクトはいつもデスマってんのにその状況に名前がつかないから、アジャイルへの渇望もない。
突き詰めていけばDDDこそが重要だと思ったりするんだけど、研究者の思考がマーケットインじゃなくてプロダクトアウトだからまぁ難しいなぁと思っている。
23062011 Python
最近またまたエキスパートpythonを読みなおしていてnosetests --with-doctest便利だわってことになった。何周読むねんって感じなんだけどちょこちょことつまみながら順調に吸収しております。ほんま良書やと思います。
で、rstでdocテストすんだったら文書管理はSphinxでいいじゃんと思って調べたらFlaskがそうなってた。
$paster create ... $tree . ├── myapp │ └── __init__.py ├── myapp.egg-info │ ├── PKG-INFO │ ├── SOURCES.txt │ ├── dependency_links.txt │ ├── entry_points.txt │ ├── not-zip-safe │ └── top_level.txt ├── setup.cfg └── setup.py 2 directories, 9 files
pasterで雛形作ってdocsディレクトリ掘って移動してsphinx-quickstart
$mkdir docs $cd docs $sphinx-quickstart ...
これで雛形が出来上がるのでまずはSphinxのドキュメントを書きながらどういうAPIにしたいのか練って実装していく。
そしておもむろに
nosetests --with-doctest --doctest-extension=.rst
これでOKな気がするんだけどもっとイイやり方あるんだろうか?
22062011 chemoinformatics Python openbabel GAMESS
去年書いたGAMESSラッパーに手を加えてGitHubにあげた。ヘッダーの生成まわりはもっとやらないといけないんだけど、基底関数とコントロールまわりは動くようにした。といっても一点計算と最適化ぐらいしかしないんだけど。
こんな感じで動かします。例としてEthane。デフォルトはCPUに優しいSTO3Gの一点計算です。
import gamess g = gamess.Gamess() obc = ob.OBConversion() obc.SetInFormat("mol") mol = ob.OBMol() next = obc.ReadFile(mol, "examples/ethane.mol") print g.gamess_input(mol) try: newmol = g.run(mol) except GamessError, gerr: print gerr.value print newmol.GetEnergy() print [(obatom.GetIdx(), obatom.GetType(), obatom.GetPartialCharge()) for \ obatom in ob.OBMolAtomIter(newmol)]
結果はこれ。
$contrl runtyp=energy scftyp=rhf $end $basis gbasis=sto ngauss=3 $end $SYSTEM MWORDS=30 $END $DATA 6324 C1 C 6.0 -0.7560000000 0.0000000000 0.0000000000 C 6.0 0.7560000000 0.0000000000 0.0000000000 H 1.0 -1.1404000000 0.6586000000 0.7845000000 H 1.0 -1.1404000000 0.3501000000 -0.9626000000 H 1.0 -1.1405000000 -1.0087000000 0.1781000000 H 1.0 1.1404000000 -0.3501000000 0.9626000000 H 1.0 1.1405000000 1.0087000000 -0.1781000000 H 1.0 1.1404000000 -0.6586000000 -0.7845000000 $END -78.30530748 [(1, 'C3', -0.16967199999999999), (2, 'C3', -0.16967199999999999), \ (3, 'HC', 0.056557999999999997), (4, 'HC', 0.056559999999999999), \ (5, 'HC', 0.056554), (6, 'HC', 0.056559999999999999), \ (7, 'HC', 0.056554), (8, 'HC', 0.056557999999999997)]
ラジカルの計算がしたいのでROHFかUHFの設定ができるようにしておいたがスピン多重度の指定が出来ないのでとっととやる。
あと、テスト書かなあかんなぁと思いながらエキスパートPythonを読んでます。二周目か三周目かわからんけど、何回読んでもこの本は楽しい。
21062011 life
人生において、一瞬一瞬の可能性を引き出すことほど重要な仕事があるだろうかと締めているように、短い時間をどのようにマネジメントしていくかという話。
脳の習性(つまり変化を嫌う)に背かずにうまく自分をコントロールしていこうという内容で、かなり面白いです。経験則に照らし合わせても、なるほどと思うことが多い。
自分に厳しくすれば成功するというのはつくり話で、実際には脳の抵抗を招くだけだというのが本書の主張。
ほめあう組織が成功するっていうのも、単なるポジティブシンキングというよりは、脳の性質をうまく使った科学的な根拠に基づいた組織マネジメントなのかなぁと。
色々つながったので個人的には満足の一冊だった。
知人に「ジム通いを習慣化させるために最初はお風呂に入りに行くのからはじめた」という話をしていた人がいて、なんだよそれ?とか思っていたんだけど、本書を読んでなるほどなぁと感心した。
20062011 sake
父の日に開けようととっておいた真澄のスパークリング。息子がエビを食べたいと五月蝿かったらしくエビとトマトも並んでた。

ビン内二次発酵ということをすっかり忘れていて開栓した途端にブワーッと吹き出して床にぶちまけて1/4以上消失した。
というか、突然の出来事にアーーーーといいながら呆然と立ち尽くしていた。まぁ間抜けな姿であったろう。
さて、お酒の味はというと、泡が綺麗でシャンパンのようだ。口当たりも爽やかで酸を感じさせるのに、後味は日本酒という不思議な感覚。すっきりと消えて行くので後味も残らない。
また飲みたいなぁと思うし、贈答品にもよいかな。
19062011 life
なにげにドラッカーを読むのは初めてだったりする。経営者が読むもんだと思っていたので。
社会がどう変わるかという話ですね。モチベーション3.0なんかが語っている世界に近いです。
継続的に学習、教育の必要な社会になるのは間違いなく、知識労働者の資本とは知識そのものであり、知識社会と知識経済においては知識が主たる生産手段だと。
知識労働者として生きていくには3つのことを自答する必要がある。
18062011 javascript
JGPを読んでいたら、配列リテラルはオブジェクトリテラルを使って書けると書いてあった。
var nums = ['one', 'two', 'three'];
これは
var obj_nums = {'0':'zero', '1':'one', '2':'two'};
ただし配列リテラルの方はArray.prototypeを継承するが、オブジェクトリテラルの場合にはObject.prototypeを継承する。
そこで継承関係をいじれば配列として使えるのかなぁと試してみた(Firebug)。
まずそのままだと
var obj_nums = {'0':'zero', '1':'one', '2':'two'}; console.log(obj_nums.toString()); // [object Object] var nums = ['zero','one','two']; console.log(nums.toString()); // zero,one,two
となる。続いて継承をいじってみる
var obj_nums = {'0':'zero', '1':'one', '2':'two'}; obj_nums.__proto__ = Array.prototype; console.log(obj_nums.toString()); // (an empty string)
empty stringってなんやねんと思ったがlengthプロパティを付けてみる。
var obj_nums = {'0':'zero', '1':'one', '2':'two'}; obj_nums.__proto__ = Array.prototype; obj_nums.length = 3; console.log(obj_nums.toString()); // zero,one,two
Arrayリテラルと同じ挙動を示すようになった。内部でなにやってんだろうか?
ただし、オブジェクトを出力するとobj_numsのほうがプロパティが見えるんだよなぁ。これがちょっと気になる。
var obj_nums = {'0':'zero', '1':'one', '2':'two'}; obj_nums.__proto__ = Array.prototype; obj_nums.length = 3; console.log(obj_nums); var nums = ['zero','one','two']; console.log(nums);

というわけで、来週の読書会は配列のあたりをやりますので興味があれば参加すると楽しいと思います。ちなみに杉山フルーツの生ゼリーをおやつに迎える予定にしておりますよ。
もちろん、お昼につけナポを食べるのもありだと思います。
18062011 chemoinformatics openbabel
共有結合先の原子をチェックして冗長なものが出ないようにした。GAMESSのテストも終わったのであとは走らせるだけ。
共有結合先の原子を知るメソッドがなくて、総当りでGetBondを行う。もし結合が形成されてなければNoneが返ってくるのでそれで評価できるらしい。
import openbabel as ob import sys def clone(mol): obc = ob.OBConversion() obc.SetInAndOutFormats("mol", "mol") molstring = obc.WriteString(mol) new_mol = ob.OBMol() obc.ReadString(new_mol, molstring) return new_mol def abs_h(mol): radicals = [] mol.AddHydrogens() h_indexs = [] hetero_indexs = [] for atom in ob.OBMolAtomIter(mol): if atom.GetType() == 'H': h_indexs.append(atom.GetIdx()) else: hetero_indexs.append(atom.GetIdx()) hatoms = [] non_redundant_hs = [] for h_index in h_indexs: hetero = neighbor(mol, h_index, hetero_indexs) if hetero not in hatoms: hatoms.append(hetero) non_redundant_hs.append(h_index) for h_index in non_redundant_hs: new_mol = clone(mol) new_mol.DeleteAtom(new_mol.GetAtom(h_index)) new_mol.SetTotalSpinMultiplicity(2) new_mol.SetTotalCharge(0) radicals.append(new_mol) return radicals def neighbor(mol, index, hetero_indexs): q_atom = mol.GetAtom(index) for i in hetero_indexs: if mol.GetBond(index, i): #print "#%d is attached to atom #%d" % (index, i) return i if __name__ == '__main__': input = sys.argv[1] obc = ob.OBConversion() obc.SetInAndOutFormats("smi", "mol") mol = ob.OBMol() next = obc.ReadString(mol, input) radicals = abs_h(mol) for r in radicals: print obc.WriteString(r)
65歳まで定年引き上げが議論されてるってことは、僕らの時代には70近くまでいくんじゃないかなぁ。そもそもリタイアメントできるっていう保証があるからサラリーマンに意味があるわけであって、死ぬまで働き続けるのを前提でサラリーマンを選択するってのは超ハイリスクだよなと思う。
この本は、ファクトをつかむにはいいけど、基本的に如何に雇用されるかということに論点をおいているので処方箋としてはいまいちかな。サラリーパーソンとして勝ち残るためにどういう努力が必要かなぁと知りたい場合には読めばなんか得るものはあると思う。