MCSTree

ある化合物集合(ごく近傍のmarkushをちょっと拡張したようなセット)に対して、適当なスキャフォールドをrootとしたmaximum common subgraph(MCS)のサブセットの木(再帰するやつ)を作りたくて、午後中考えてたんだけどとうとう家まで持ち帰ってしまった。

適当な骨格を与えたときに、分割情報を最大にするように枝分かれさせていくアルゴリズムがいまいちよくわからん。

クリークとMCSをうまくつかってヒューリスティックなアルゴリズムで適当に分岐させていけばそれっぽいネットワークになる気がするんだけど。

どっかにそんな論文ないかのう

foldrでfilter

RWHのp.99

右から畳み込むはずなのに、、、不思議な感じがする。

myfilter p xs = foldr step [] xs
                where step x ys | p x = x:ys
                                | otherwise = ys

myfilter odd [1,2,3,4,5,6]
[1,3,5]

結局これは

(1:(3:(5:[])))

を評価してんのか。

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan
オライリージャパン / 3990円 ( 2009-10-26 )


openbabelのリングサーチ

openbabelのringsearchがちょっと使いにくい気がする。部分構造をmolオブジェクトで返すメソッドがあっても良いんではないか?

from openbabel import *

obconversion = OBConversion()
obconversion.SetInFormat("smi")
obconversion.SetOutFormat("smi")
obmol = OBMol()

notatend = obconversion.ReadString(obmol,"c1ccccc1CC(=O)C2CCC2C(=O)O")

for r in obmol.GetSSSR():
    for a in  r._path:
        print a

これだと原子のIDしか返さない。

でも縮環チェックしたいんだったら、原子のリストがかぶるかどうかをリングの構成原子のIDをつかって調べればいいのでminimumの環からmaximumの環にするのは難しくはないか。

アトムのリストを渡したら部分構造検索を実行して、結果としてマッチした構造をmolとして返すメソッドがあればいいのか。

SQLAlchemy: Database Access Using Python

来年の冬に出るのか。

ProductName SQLAlchemy: Database Access Using Python (Developer's Library)
Mark Ramm,Michael Bayer
Addison-Wesley Professional / ¥ 4,874 ()
近日発売 予約可

「週末起業サバイバル」を読んだ

アイデアは考えるなと同時に注文してた。

ProductName 週末起業サバイバル (ちくま新書 811)
藤井 孝一
筑摩書房 / ¥ 735 ()
在庫あり。

基本的にはビジネスってのは自分の手を離れるような仕組みにすることみたいな金持ち父さん的な話だった。ただ、それを会社に属しながら如何にやるか?という場合に、どういうあたりに気を使わなければならないかという内容。

リスクを最小限に抑えながら起業にそなえるには、税金とか就業規則みたいな法律関係にも注意する必要がある。

表紙の

「自分は起業にむいているかどうか」など、考える必要はありません。選択肢を選ぶ権利は、もはや雇用者側にはないからです。何も考えずに、いざというときに備えて、、、

ってあたりにピンと来るものがあれば、読むと面白いかもしれません。

ClojureとScala

説明だけみるとPro Scalaのほうが面白そうな気がするが両方とも欲しい気分

ProductName Practical Clojure (Expert's Voice in Open Source)
Luke Vanderhart
Apress / 4308円 ( 2010-05-17 )


ProductName Pro Scala: Monadic Design Patterns for the Web
Gregory Meredith
Apress / ?円 ( 2011-07-30 )


「アイデアは考えるな」を読んだ

昨晩から嫌な予感はしていたのだが、朝起きたら喉がザラザラで熱っぽい(+今月まだ有給とってないわ)ってことで、休んだ。

午前中寝てたら、佐川のヒトが本持ってきてくれたので読んだ。

ProductName アイデアは考えるな。
柳澤 大輔
日経BP社 / ¥ 1,365 ()
在庫あり。

ライフハック系の本というよりは働き方のメッセージ色が強いかな。 アイデア出しの本が読みたいんだったら、本書の参考のとこにあげられている本を何冊が読めばいいんではないかな。

「おわりに」に

断言します。これからはカヤックのように、面白く働くことにこだわる会社や個人が増えてきます

ってのがまずあって、そういう結論をイメージしながら本を組み立てたのかなと思った。

会社があってそこにヒトが集まるんじゃなくて、ヒトが集まって面白いことをやるから結果法人格としての会社という体裁になんだろうなぁと。

  • コミュニケーションは先に取ったほうが勝ち
  • アイデアとは既存の要素の新しい組み合わせ以外の何ものでもない
  • 発送法
    • 結果逆算法
    • 曼荼羅チャート
    • アイデアの公式
  • 仕事と遊びを区別してはいけない

プログラミングHaskell8章(関数型パーサー)

プログラミングHaskell8章

ProductName プログラミングHaskell
Graham Hutton
オーム社 / 2940円 ( 2009-11-11 )


本の通りにdo記法使うと動かなかったのでbindをつかってせっせと書いた。そのおかげで、←とか>>=見るとラムダ式が意識できるようになってきた。

第14回 関数脳のつくり方 Second Season 〜モナドで悟りをひらく〜

関数型言語で「プログラムの実行順序を保証」したり

import Char
type Parser a = String -> [(a,String)]

myreturn :: a -> Parser a
myreturn v = \inp -> [(v,inp)]

myfailure :: Parser a
myfailure = \inp -> []

myitem :: Parser Char
myitem = \inp -> case inp of 
                 [] -> []
                 (x:xs) -> [(x,xs)]

parse :: Parser a -> String -> [(a,String)]
parse p inp = p inp

(>>==) :: Parser a -> (a -> Parser b) -> Parser b
p >>== f = \inp -> case parse p inp of
                    [] -> []
                    [(v,out)] -> parse (f v) out

-- p :: Parser (Char,Char)
-- p = myitem >>== \x -> 
--     myitem >>== \y -> 
--     myitem >>== \z -> 
--     myreturn (x,z)

(+++) :: Parser a -> Parser a -> Parser a
p +++ q = \inp -> case parse p inp of
                    [] -> parse q inp
                    [(v,out)] -> [(v,out)]
sat :: (Char -> Bool) -> Parser Char
sat p = myitem >>== \x -> if p x then myreturn x else myfailure

digit :: Parser Char
digit = sat isDigit

lower :: Parser Char
lower = sat isLower

upper :: Parser Char
upper = sat isUpper

letter :: Parser Char
letter = sat isAlpha

alphanum :: Parser Char
alphanum = sat isAlphaNum

char :: Char -> Parser Char
char x = sat (== x)

string :: String -> Parser String
string [] = myreturn []
string (x:xs) = char x >>== \_ -> string xs >>== \_ -> myreturn (x:xs)

many :: Parser a -> Parser [a]
many p = many1 p +++ myreturn []
many1 :: Parser a -> Parser [a]
many1 p = p >>== \v -> many p >>== \vs -> myreturn (v:vs)

ident :: Parser String
ident = lower >>== \x -> many alphanum >>== \xs -> myreturn (x:xs)

nat :: Parser Int
nat = many1 digit >>== \xs -> myreturn (read xs)

space :: Parser ()
space = many (sat isSpace) >>== \_ -> myreturn ()

token :: Parser a -> Parser a
token p = space >>== \_ -> p >>== \v -> space >>== \_ -> myreturn v

identifer :: Parser String
identifer = token ident

natural :: Parser Int
natural = token nat

symbol :: String -> Parser String
symbol xs = token (string xs)

-- 8-1 --
int :: Parser Int
int = char '-' >>== \_ -> nat >>== \n -> myreturn (-n) +++ nat
-- --  --

-- 8-2 --
comment :: Parser ()
comment = string "--" >>== \_ -> many (sat (/= '\n')) >>== \_ -> myreturn ()
-- --  --

matplotlibの本

Pythonの描画ライブラリであるmatplotlibの本が出てた。

欲しいのう

twitterでフォローされているか調べるスクリプト

ダイレクトメッセージを送れるかどうかで判断するみたいなつぶやきが流れてたので。

setでごにょれば良かろうと。

import twitter
api = twitter.Api(username='user',password='pass')
friends = set([u.name for u in api.GetFriends()])
followers = set([u.name for u in api.GetFollowers()])

print "follow and followed: "     + ",".join(list(friends.intersection(followers)))
print "not follow but followed: " + ",".join(list(followers.difference(friends)))
print "follow but not followed: " + ",".join(list(friends.difference(followers)))

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