Flask周りを調べていたらいくつかあった
Python
Ruby
Perl
Dancer面白そう。
#!/usr/bin/perl
use Dancer;
get '/hello/:name' => sub {
return "Why, hello there " . params->{name};
};
dance;
12072010 PK-PD
Exposure and Response after a Single Dose
Clinical Pharmacokinetics and Pharmacodynamics: Concepts and Applicationsひとつのセクションにかなり押し込んだ感じなので次の本を参考に読めば良いかもしれない
パーサーから直接書き出すようにしたいが、とりあえず。
import Data.Graph.Inductive
import Data.Graph.Inductive.Graphviz
labUEdges :: [Edge] -> [UEdge]
labUEdges = map (\(i,j) -> (i,j,()))
exprt :: Gr String ()
exprt = mkGraph (zip [1..5] ["2","*","3","+","4"])
(labUEdges [(2,1),(2,3),(4,2),(4,5)])
main = do putStrLn $ graphviz exprt "test" (0,0) (0,0) Portrait
コンパイルするには--makeオプションをつけて
$ ghc gvtest.hs --make
[1 of 1] Compiling Main ( gvtest.hs, gvtest.o )
Linking gvtest ...
$ ./gvtest | dot -Tpng > gvtest.png; open gvtest.png

ゴーヤは順調。他の畑では垣根みたいになってるとこがある。一面里芋だらけとか、さつまいもオンリーの畑とかあって、今年の家庭菜園は他の畑も見ていて楽しい。ただサツマイモみたいなツル性の作物って隣の畑を侵食するから家庭菜園では禁止されているとこ多いって聞いたことあるけどどうなんだろう?あとで貸主に聞いてみよう。

韓国唐辛子と茄子。韓国唐辛子はなかなか赤くならんね。

ミョウガは期待度大。オクラも順調。

トマトは実りすぎてて、近所に配っても消費できてない。大きいのも赤くなってきた。

あと、インゲンの収穫が終わって処分したのだけど、収穫タイミングが遅れて硬くなってて不味いのが多かった気がする。去年の方が美味かった。育てるのは蔓なしが楽だけど収穫のこと考えるとつるありのほうがいいかもしれんね。
10072010 R
Rにおける高階関数はCommon Higher-Order Functions in Functional Programming Languagesにあるように一通りそろっている
Reduce uses a binary function to successively combine the elements of a given vector and a possibly given initial value. Filter extracts the elements of a vector for which a predicate (logical) function gives true. Find and Position give the first or last such element and its position in the vector, respectively. Map applies a function to the corresponding elements of given vectors. Negate creates the negation of a given function.
foldl,foldrも簡単
foldl <- function(f,x,i){Reduce(f,x,i)}
foldr <- function(f,x,i){Reduce(f,x,i,right=TRUE)}
実行してみる
> foldl("-",list(1,2,3),1) # ((1-1)-2)-3
[1] -5
> foldr("-",list(1,2,3),1) # 1-(2-(3-1))
[1] 1
あとRの高階関数は大文字で始める規則にでもなってんのかな?
10072010 chemoinformatics
昨日のワークショップでは、面白い話が聞けてよかった。いくつかアイデアが浮かんだのでメモっておく。特に二次会の他愛のない話はブレスト的でよかった。
どういう解析をしたらいいかわからないとか、どういうグラフとかプロットが好まれるのかわからないという話があって、解析結果を含む(当該ソフトウェア名を含むとかで絞るのか?)論文を集めてきて、pdfから画像を抜き出し、プロット、チャートを画像類似検索とか組み合わせて、検索できるサイトがあれば便利なんじゃなかろうか?
R Graphical Manualの論文版みたいな感じ。
製薬企業が文献を出すのは、色々制約があって(故に制約企業)。たいていはプロジェクトがポシャったとき(またはゴールしたとき)と相場が決まっているので、patent中の実施例化合物名を会社名と紐付けて収集しておいてデータベース化しておいて、論文が出たらそっちのデータベースと照会するっていうのはどうかなと。パテントは結構そのプロジェクトのトーンがわかるでしょう(例えば実施例がやたらと多いパテントとかやっつけ仕事か?とか)。あと論文とかも学位対策か?とかもauthorと特許の出願者照らし合わせながらみればわかったりしませんかね。BMCLとか、「実験記録じゃねーのこれは?」というのが結構多くて、なんでこんなもん投稿すんのかなぁとか思ったりして背景が知りたかったりするのですよね。学位対策度87%とか出てくればdiscussionのとこだけ読んでたいしたことなければ読み飛ばして終了とかできるのでありがたかったりする。
というように、文献検索系のマイニングをビジネスというか組織ハックとか業界ハック的な側面から考えていくと色々面白そうなこともやれるよなぁと。
10072010 Haskell
関数型パーサー。復習を兼ねてもう一度
import Data.Char
type Parser a = String -> [(a,String)]
myreturn :: a -> Parser a
myreturn v = \inp ->[(v,inp)]
myfailure :: Parser a
myfailure = \inp -> []
item :: Parser Char
item = \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 = item >>== \v -> (item >>== \w -> (item >>== \z -> myreturn (v,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 = item >>== \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 >>== \x -> string xs >>== \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
identifier :: Parser String
identifier = token ident
natural :: Parser Int
natural = token nat
symbol :: String -> Parser String
symbol xs = token (string xs)
--p :: Parser [Int]
--p = symbol "[" >>== \_ -> natural >>== \n -> many (symbol "," >>== \_ ->
-- natural) >>== \ns -> symbol "]" >>== \_ -> myreturn (n:ns)
expr :: Parser Int
expr = term >>== \t -> ((symbol "+" >>== \_ -> expr >>== \e -> myreturn (t + e)) +++ myreturn t)
term :: Parser Int
term = factor >>== \f -> ((symbol "*" >>== \_ -> term >>== \t -> myreturn (f * t)) +++ myreturn f)
factor :: Parser Int
factor = (symbol "(" >>== \_ -> expr >>== \e -> symbol ")" >>== \_ -> myreturn e) +++ natural
eval :: String -> Int
eval xs = case parse expr xs of
[(n,[])] -> n
[(_,out)] -> error ("unused input " ++ out)
[] -> error "invalid input"