千代の光 ひやおろし

去年飲んだやつのほうがキレイめだったようなきがするが、これも美味しかった。

1288613877

ぬる燗というよりはひやか人肌よりもぬるいくらいで飲んでた。

天一にいった

泊まったホテルの近くに天一があったので、ふらふらと吸い込まれていった。

1288610519

こってり(並)

1288610517

よく考えたら、学生時代もそんなに食べなかったので記憶がすり変わっていた。新福菜館とか一番星とかよく行ってたな。

今日の畑(101030)

去年より10日ぐらい遅い種まきなのに、妙にほうれん草の成長が遅い気がする。

ラディッシュは根元がふくらんでいた

1288610290

そら豆は思ったよりも芽が出てきた。順調に生育しているように見える。

1288610297

ハイパーグラフのこと

ユーザー会お疲れ様でした。私の同僚の内容の思想的な部分はRESTful Webサービスのリソース指向アーキテクチャの章を読めばいいかなと。

ProductName RESTful Webサービス
Leonard Richardson,Sam Ruby
オライリー・ジャパン / ¥ 3,990 ()
在庫あり。

いまだとJSON返してjQueryとかで組み立てるような仕組みを採用するかなぁ。iPad対応とか(無駄に)してみたいし。


さて、自分の内容で「ハイパーグラフは使わんのか?」という質問があったのだが、ピンとこなかったので、帰ってきてから調べてみた。

グラフとは異なり、ハイパーグラフは紙上に図示するのが困難である。そのため、グラフ理論のような図解をされることは少なく、集合論の用語で表される傾向がある。

ハイパーグラフは他の数理科学分野では別の名前で知られていることも多い。たとえば協力ゲーム理論で「シンプルゲーム」(投票ゲーム) とよばれる概念がそれに該当し、社会選択理論の重要な問題を解くために応用されている。

あーこれだと複数のグラフをまとめて扱えますね。でも、薬理活性、ADME,in silicoのネットワークから、共通部分グラフを取り出したいだけだったら、別にHypergraphを使う必要ないからなぁ。実際に具体的な事例があるともうちょい理解度深まるかな。

ProductName グラフ理論 (Springer‐Verlag GTMシリーズ)
R. ディーステル
シュプリンガー・フェアラーク東京 / ¥ 4,410 ()
在庫あり。

ProductName 社会ネットワーク分析の基礎―社会的関係資本論にむけて
金光 淳
勁草書房 / ¥ 4,935 ()
在庫あり。

かれーの店うどんで秋の夜カレー

久しぶりの東京出張。しかも雅叙園@目黒だったので、昼はかれーの店うどん@五反田で。五反田には花善もあるしね。

ちょっと早く着きすぎてオープンしてなかったので、ぶらっとしたら、うどんのすぐ先に豚と小麦って店があって結構人が入っていたので、ココでもいいかなとふらふら入りそうになったけど、なんとなく察知して結局入らなかった。あとで調べたら、二郎インスパイア系だったので正解。昼に二郎系は濃すぎて無理だからな。

1288429171

ぶらっと近所をぐるットして戻ってきたらopenしてたので入店。季節の夜かれー(薬膳)を注文

1288429168

これがもう、ジワジワ来る感満載の味で。まぁそんな感じの表現しかできないな。

さて、来週はIBISで東大駒場か。嚆矢は一度は行くとして他にどこを攻めるかなぁ。

openbabel+GAMESSで計算できるようにする

Izu.R #0お疲れ様でした。いつもは22時前には寝るのだけど、2時半くらいまで起きてコード書いてた。たのしす。

1288429089 1288429091

今回が初めてで、Rらしく発表+LT的なほうがいいのか、ハッカソン的なもののほうがいいのか、わからなかったうえに初めての宿という不安はあったが、とりあえず集まってみて様子見しようという感じでしたが、蓋を開けてみれば、楽しい会になってくれて良かった。

次回もやる方向で考えているので、興味があれば。

今回のキーワード

Galaxy

pythonで書かれたワークフロー管理ツール。@bonohu さんに初期の導入のあたりを教えてもらいながら。みんな、ほとんどこれいじってたような。

ちなみにmacportsのpythonだと依存関係トラブリまくってうまく動かないので、潔く/usr/binのを使えという結論に落ち着いた。

これはもう少しいじる。次回にはなんか成果物をもっていきたいかな。

別トラックで流れていたセッションの情報交換

これはよい。あとで内容をきちんと把握する。あの、ユーザー会は一定の確率で面白い内容出てくるからよいです。面白さを面白いと感じるためには、面白さに対して感度をあげる努力を怠るとダメですな。

ジャパネットムスカ

きっかけは覚えてないが、MADの方向に行ってきた。

ついでに、一人ふぁぼ界に引きずり込まれてた。

Python

みんなのPythonは良書ですよね。

ProductName みんなのPython 改訂版
柴田 淳
ソフトバンククリエイティブ / ¥ 2,940 ()
在庫あり。

そういえば、前日の二次会でもPython利用者率を上げていこうという結論で落ち着いた(Pythonistaの中で)

書いたもの

openbabelで荒く構造立ち上げて、その後量子化学計算で精密化して、Mulliken Chargeとか楽に求めたいこと多いので、サクサク出来るようにラッパー欲しかったので書いてた。 ファイルの読み込みとかよくわからんバグが出ててはまったが、なんとか動くとこまでいった。

あとはもう少しちゃんと書いてクックブックにでもあげとく。

import openbabel as ob
from tempfile import mkstemp, mkdtemp
from os import removedirs, unlink, system, environ
import re
import os.path
import string
from random import choice

def randstr(n):
    "ランダムなファイル名を生成するため"
    return u''.join(choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') for i in xrange(n))

class Gamess(object):

    def __init__(self):
        self.tempdir = mkdtemp()
        self.gamess  = "/Users/kzfm/gamess/rungms"
        self.jobname = ''
        self.cwd    = os.getcwd()

    def calc(self, mol):
        self.jobname = randstr(6)
        obc = ob.OBConversion()
        obc.SetInFormat("gamout")

        gamin = self.write_file(mol)
        gamout = self.tempdir + "/" + self.jobname + ".out"
        os.chdir(self.tempdir)
        os.system("%s %s> %s  2> /dev/null" % (self.gamess, self.jobname, gamout))        

        # エラーが出たのでstringを渡したらなおった
        # TypeError: in method 'OBConversion_ReadFile', argument 3 of type 'std::string'
        new_mol = ob.OBMol()
        s = open(gamout).read()
        next = obc.ReadString(new_mol, s)

        os.chdir(self.cwd)
        unlink(gamin)
        unlink(gamout)
        return new_mol

    def header(self):
        h = """ $BASIS GBASIS=STO NGAUSS=3 $END
 $CONTRL SCFTYP=RHF RUNTYP=OPTIMIZE $END
 $STATPT OPTTOL=0.0001 NSTEP=20 $END"""

        return h

    def write_file(self,mol):
        obc = ob.OBConversion()
        obc.SetOutFormat("gamin")

        gamess_input_file = self.tempdir + "/" + self.jobname +".inp"
        gamess_input_str = obc.WriteString(mol)

        h = self.header()
        ng = gamess_input_str.replace(" $CONTRL COORD=CART UNITS=ANGS $END",h)

        with open(gamess_input_file, "w") as f:
            f.write(ng)
        return gamess_input_file

    def __del__(self):
        #print "remove " + self.tempdir
        removedirs(self.tempdir)

if __name__ == '__main__':

    g = Gamess()

    obc = ob.OBConversion()
    obc.SetInFormat("mol")

    mol = ob.OBMol()
    next = obc.ReadFile(mol,"test.mol")

    newmol = g.calc(mol)
    print [obatom.GetPartialCharge() for obatom in ob.OBMolAtomIter(newmol)]

GAMESSに関しては動く環境をもっているのが前提なので、そこをやりたい場合はこの本が良いです。

プレゼン用にGrowl通知するタイマーを作った

今日の朝、時計をもっていないことに気づいて。

import sys,os
import Growl
import threading

def timenotify(notify_string):
    image = Growl.Image.imageFromPath("/Users/kzfm/.tw_growl/kzfm.png")
    g = Growl.GrowlNotifier(applicationName='Timer', notifications=['Watch'])
    g.register()
    g.notify(
        noteType='Watch', 
        title="GrowlTimer", 
        description= notify_string,
        icon=image,
        sticky=False)

if __name__ == "__main__":
    t1 = threading.Timer(600, timenotify, args=["10分経過しました"])
    t2 = threading.Timer(1200, timenotify, args=["20分経過しました"])
    t3 = threading.Timer(1500, timenotify, args=["25分経過しました。そろそろまとめ"])
    t4 = threading.Timer(1800, timenotify, args=["30分経過しました。発表終了"])
    t1.start()
    t2.start()
    t3.start()
    t4.start()

やっつけスクリプト

旨い純米酒が味わえる店

近所の情報が載ってないと悲しい思いをするので、中見てからだな。

ProductName 旨い純米酒が味わえる店

エンターブレイン / ¥ 998 ()
近日発売 予約可

FMトランスミッターを購入

5,6年使ってたのが壊れたので、新しいのを買った。ちなみに初代iPod nanoを使っていて、バッテリーはないけど車内では電源があるのであまり困らない(電車内ではすぐ切れて使い物にならないが)。

色によって値段がかなり違うが色にはこだわらないので安いの購入。

満足。朝聴いてたHospital podcastのNu:Logic - Sundownがやたらと良かった。

おりがみプログラミング 3.14

apoL'を使ってinsertを定義する

-- 3.14

apoL' :: (b -> Maybe (a, Either b (List a))) -> b -> List a
apoL' f u = case f u of
              Nothing            -> Nil
              Just (x, Left v)   -> Cons x (apoL' f v)
              Just (x, Right xs) -> Cons x xs

insert3 = apoL' step u
    where 
      step Nil = Nothing
      step (Cons x xs) = if x < u then Just (x, Left xs) else Just (x, Right xs)

とやると

Not in scope: `u'

と言われるが理由がわからん。

ProductName 関数プログラミングの楽しみ

オーム社 / ¥ 4,410 ()
在庫あり。

疲れたので、今日はもう読むのをやめよう。