おまけの話

製薬業界にもXX駆動開発って有効だと思っている(というか、メガファーマでは実践されているらしい)が、その手段に名前が付かないのでなかなか認知されない。プロジェクトなんて典型的なTDDだし、プロジェクトはいつもデスマってんのにその状況に名前がつかないから、アジャイルへの渇望もない。

突き詰めていけばDDDこそが重要だと思ったりするんだけど、研究者の思考がマーケットインじゃなくてプロダクトアウトだからまぁ難しいなぁと思っている。

pasterとsphinx-quickstartでnoseのdoctestでDDDができるようにする

最近またまたエキスパートpythonを読みなおしていてnosetests --with-doctest便利だわってことになった。何周読むねんって感じなんだけどちょこちょことつまみながら順調に吸収しております。ほんま良書やと思います。

ProductName エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス / 3780円 ( 2010-05-28 )


で、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な気がするんだけどもっとイイやり方あるんだろうか?

白隠正宗の本醸造柱焼酎仕込み

キリッとしてます。というかキリっとし過ぎてピリっと感もありますな。柱焼酎は九州に出張したときに飲んで以来。

1308737379

夏に飲むにはイイ味だと思う。

Python用のGAMESSラッパーを書いている

去年書いたGAMESSラッパーに手を加えてGitHubにあげた。ヘッダーの生成まわりはもっとやらないといけないんだけど、基底関数とコントロールまわりは動くようにした。といっても一点計算と最適化ぐらいしかしないんだけど。

  • エラー終了しているときにはエラーの内容を出力できるようにした
  • rungmsのパスの確認
  • gamess inputを出力できるようにした
  • SCF計算のタイプも指定できる

こんな感じで動かします。例として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を読んでます。二周目か三周目かわからんけど、何回読んでもこの本は楽しい。

ProductName エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス / 3780円 ( 2010-05-28 )


ドラスティックな変化を嫌う脳という器官を如何に従わせるか

人生において、一瞬一瞬の可能性を引き出すことほど重要な仕事があるだろうかと締めているように、短い時間をどのようにマネジメントしていくかという話。

脳の習性(つまり変化を嫌う)に背かずにうまく自分をコントロールしていこうという内容で、かなり面白いです。経験則に照らし合わせても、なるほどと思うことが多い。

自分に厳しくすれば成功するというのはつくり話で、実際には脳の抵抗を招くだけだというのが本書の主張。

ほめあう組織が成功するっていうのも、単なるポジティブシンキングというよりは、脳の性質をうまく使った科学的な根拠に基づいた組織マネジメントなのかなぁと。

色々つながったので個人的には満足の一冊だった。

ProductName 脳が教える! 1つの習慣
ロバート・マウラー
講談社 / 1365円 ( 2008-07-05 )


知人に「ジム通いを習慣化させるために最初はお風呂に入りに行くのからはじめた」という話をしていた人がいて、なんだよそれ?とか思っていたんだけど、本書を読んでなるほどなぁと感心した。

  • 質問は脳を目覚めさせ、喜ばせる。
  • 相手を尊重して、たとえ、その態度や答えをこちらが既に理解していると思っても、きちんと聞く
  • リバウンドはなぜ生じるのか
  • チョコレートは食べる。だが最初の一口は捨てる

真澄のスパークリングがスパークした父の日の夜

父の日に開けようととっておいた真澄のスパークリング。息子がエビを食べたいと五月蝿かったらしくエビとトマトも並んでた。

1308572599 1308572596

ビン内二次発酵ということをすっかり忘れていて開栓した途端にブワーッと吹き出して床にぶちまけて1/4以上消失した。

というか、突然の出来事にアーーーーといいながら呆然と立ち尽くしていた。まぁ間抜けな姿であったろう。

さて、お酒の味はというと、泡が綺麗でシャンパンのようだ。口当たりも爽やかで酸を感じさせるのに、後味は日本酒という不思議な感覚。すっきりと消えて行くので後味も残らない。

また飲みたいなぁと思うし、贈答品にもよいかな。

ネクスト・ソサエティ

なにげにドラッカーを読むのは初めてだったりする。経営者が読むもんだと思っていたので。

社会がどう変わるかという話ですね。モチベーション3.0なんかが語っている世界に近いです。

継続的に学習、教育の必要な社会になるのは間違いなく、知識労働者の資本とは知識そのものであり、知識社会と知識経済においては知識が主たる生産手段だと。

知識労働者として生きていくには3つのことを自答する必要がある。

  1. 自分の強みは何か、どのような強みを発揮できるか
  2. 何を期待してもらいたいか、いつまでに結果を出せるか
  3. そのためにはどういう情報が必要か

ProductName ネクスト・ソサエティ ― 歴史が見たことのない未来がはじまる
P・F・ドラッカー
ダイヤモンド社 / 2310円 ( 2002-05-24 )


  • 成熟産業に対する保護は無効
  • 鉄道が生んだ心理的な地理によって人は距離を克服し、eコマースが生んだ心理的な地理によって人は距離をなくす。もはや世界には一つの経済、一つの市場しかない
  • 製造の力では製品を差別しきれない
  • たとえ世界一の研究所を持っていたとしても、業界の景色を変える技術や製品は出てこない、研究所は内側を向いているから
  • 命令や管理の時代は終わった
  • イノベーションとは、市場に追いつくために自分の製品やサービスを自分で変えていくこと
  • 雇用関係は与件であってメンバーは変えられない。したがって、成果をあげるのは指揮者の対人能力
  • 高齢化よりも少子化のほうが問題だ

Javascriptの配列はトリッキーなオブジェクト

JGPを読んでいたら、配列リテラルはオブジェクトリテラルを使って書けると書いてあった。

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / 1890円 ( 2008-12-22 )


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);

array

というわけで、来週の読書会は配列のあたりをやりますので興味があれば参加すると楽しいと思います。ちなみに杉山フルーツの生ゼリーをおやつに迎える予定にしておりますよ。

もちろん、お昼につけナポを食べるのもありだと思います。

水素を引きぬいてラジカルにする

共有結合先の原子をチェックして冗長なものが出ないようにした。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近くまでいくんじゃないかなぁ。そもそもリタイアメントできるっていう保証があるからサラリーマンに意味があるわけであって、死ぬまで働き続けるのを前提でサラリーマンを選択するってのは超ハイリスクだよなと思う。

この本は、ファクトをつかむにはいいけど、基本的に如何に雇用されるかということに論点をおいているので処方箋としてはいまいちかな。サラリーパーソンとして勝ち残るためにどういう努力が必要かなぁと知りたい場合には読めばなんか得るものはあると思う。

ProductName 正社員は危ない! "リストラなう"を生き抜く方法
尾方 僚
朝日新聞出版 / 1470円 ( 2010-10-07 )


  • 転職マーケットでは、管理職といえども実務経験が重視される
  • 建前では「能力次第で、若い人に仕事を任せる」といいながらも、組織の実態は年功序列を中心にすえた力学で動いている
  • 本来会社に入ることはキャリアのスタート
  • ポジションよりもロールを求めて転職する
  • 今の会社を離れるということについてネガティブなコメントはいっさいしてはいけない
  • 出る杭になる
  • いま辞めさせられても一年はゆとりをもって暮らせるマネーを用意しておく