26102010 life
Scheme手習いは、最後の方の章が気になる。あと娘か息子が読んでくれればいいなぁと思いつつ。
起業のファイナンス ベンチャーにとって一番大切なこと磯崎 哲也
日本実業出版社 / ¥ 2,310 ()
一時的に在庫切れですが、商品が入荷次第配送します。配送予定日がわかり次第Eメールにてお知らせします。商品の代金は発送時に請求いたします。
26102010 life
Scheme手習いは、最後の方の章が気になる。あと娘か息子が読んでくれればいいなぁと思いつつ。
起業のファイナンス ベンチャーにとって一番大切なこと久しぶりの王様のカレー。富士、富士宮界隈ではピカイチだと思う。東京行ったらデリーとかうどんとかエチオピアとかあるけど、ここらへんはおいしいカレーがないから貴重だ。インドの方が経営しているんだけど接客がすごい良いですな。子連れにもやさしいし素晴らしい。

チーズナンで、ほうれん草ベースのカレーとトマトベースのカレー

タンドリーチキンを頼んでみた。これまた美味い。

帰りによこぜきでお酒買って、イオンでお買い物という鉄板コース。これにオプションで魚セイとかさの萬、ビオデリというオプションをつけると、だいたい事足りる。
25102010 Haskell
先週末の読書会。切符遊びの章。
団子うまかった。

懇親会はセルフ串揚げの店。マジセルフ。ネタケースから串を持ってきて、衣つけて揚げる。

なんていうか、この地域の居酒屋の名前を借りるなら、串電車でGoみたいなセルフ感満載だった。
来月、京都行きとかぶってるじゃんということにさっき気づいた。というわけで次回は初の欠席になりますな。
ブルームフィルター
Real World Haskell―実戦で学ぶ関数型言語プログラミング3,4日かけて一応buildまではしたが、テストとか動かしてない。いまいち理解も追いついてなかったのが心残りだが、一通り読み終わったのでよしとしよう。それにしてもこの本はPerl的には「続・はじめてのPerl」くらいのレベル?「実用 Perlプログラミング 第2版」ではないでしょうなぁと。
みなさんこの先どうやって進んでいくんだろう?超気になるところ。
一周目は15章以降がほとんど理解できなかったけど、今回読んだら結構理解できたのでよかった。

プログラミングHaskell読書会にでて、問題もきちんと解いたってのも良かったのかも。
25102010 chemoinformatics bioinformatics
熱海でだらだらと温泉につかりながら、コード書いたり書かなかったりという場を設けました。キーワードはchemoinformatics,bioinformatics,R,Python,Rubyで製薬企業でコード書いているヒト多めです。僕はFlaskいじるかopenbabelのMCS実装かなんかをする予定です(でもいい日本酒がゲットできたら飲んでるかも)
まだ何人か分の空きがありますので興味があれば私にメールかtwitterでメッセージを下さい。金曜から土曜にかけてという日程です。
今のとこの参加者
24102010 家庭菜園
作業は主にほうれん草と春菊の間引きと茄子の処分。めんどくさいので穴掘って埋めた。
来年に向けて堆肥とか腐葉土ぶち込んで土づくりもしたほうがいいんだろうな。あと石ころ多すぎるのでふるいにかけたりしたほうがいいんだろうけど、借りてる菜園なのでどこまで力をいれるか考えてしまうなぁ。
そらまめの芽が出てきた。右はニンニク。

ラディッシュは先日間引いたのでのびのび育っている。ミョウガは枯れてきた。北側の端のほうは夏の終わりに枯れてしまい、ミョウガが出てこなかったので、根腐れしたのかななぁと思っているのだけど、地下茎掘り起こして植え直したほうがいいんだろうか?スペースもったいないし。

かなりすっきりしてしまった。今から植えるものがちょっと見つからないなぁ。

24102010 work
手放しで大絶賛する内容かと言われると疑問符が付くが、第三部の内容が言語化されていることが素晴らしい。第一部と第二部は今時の常識で、それを知らないヒトのために丁寧にベージを割いているといった感じ。でも、ラテラルシンキングは改めて読むといいことがたくさん書いてある。
特に
想像力だけで勝負できる場所などどこにも存在しないのであって、地道に積み上げたスキルの上に、そのスキルの文脈の範囲内においてのみ花咲くのが価値ある創造性
は、僕が普段「下からは見下ろせないよ」と表現するような感覚、つまりサイエンティフィックにより高いとこに登ってみて初めて見えてくる創造性の世界を言い表していて気に入った。結局、自分の能力の範囲を超えたセレンディピティなんか存在しないし、してはいけない(と強く思う)。
三部は、これからの思考というタイトルに関することなので垂直、水平思考を知っているヒトが読めばかなり面白いと思う。ただ、学びの場を企業内においているけど、実際は企業内で学ぶことよりも、それを離れた場所での学びの比重が増えてるからそういった部分は何かで補う必要があるかもしれない。
例えば、「ウェブで学ぶ」とか。
23102010 music
まったり。あまりピンとこなかった、聴いてるうちに良くなってくるのかな?
チルの境地で。
22102010 life
娘と息子がドミノとして遊んでいるが、小動物バージョンにすれば戦略性が高まっていいのではないかと思った。
みたいな。
どうぶつしょうぎは、ライオンを如何に取るかというよりは、自分のライオンを如何に相手の最終ラインに持っていくかの勝負だなと思った。
22102010 Haskell
Real World HakellのSTMの章がなんか消化不良だったのでなんかないかなぁと探したら、ビューティフルコードにSTMの章があったのを思い出したので、早速読んだ。
ちなみに英語のはここ
サンタクロース問題わかりやすい。ついでに動かしてみたけどControl.Monadもインポートしないと動かない@GHC6.12.3
module Main where
import Control.Concurrent.STM
import Control.Concurrent
import Control.Monad
import System.Random
meetInStudy :: Int -> IO ()
meetInStudy id = putStr ("Elf " ++ show id ++ " meeting in the study\n")
deliverToys :: Int -> IO ()
deliverToys id = putStr ("Reindeer " ++ show id ++ " delivering toys\n")
helper1 :: Group -> IO () -> IO ()
helper1 group do_task = do
(in_gate, out_gate) <- joinGroup group
passGate in_gate
do_task
passGate out_gate
elf1, reindeer1 :: Group -> Int -> IO ()
elf1 gp id = helper1 gp (meetInStudy id)
reindeer1 gp id = helper1 gp (deliverToys id)
data Gate = MkGate Int (TVar Int)
newGate :: Int -> STM Gate
newGate n = do { tv <- newTVar 0; return (MkGate n tv)}
passGate :: Gate -> IO ()
passGate (MkGate n tv) = atomically (do n_left <- readTVar tv
check (n_left > 0)
writeTVar tv (n_left-1))
operateGate :: Gate -> IO ()
operateGate (MkGate n tv) = do
atomically (writeTVar tv n)
atomically (do {n_left <- readTVar tv; check (n_left == 0)})
data Group = MkGroup Int (TVar (Int, Gate, Gate))
newGroup :: Int -> IO Group
newGroup n = atomically ( do g1 <- newGate n
g2 <- newGate n
tv <- newTVar (n, g1, g2)
return (MkGroup n tv))
joinGroup :: Group -> IO (Gate, Gate)
joinGroup (MkGroup n tv)
= atomically (do (n_left, g1, g2) <- readTVar tv
check (n_left > 0)
writeTVar tv (n_left-1, g1, g2)
return (g1,g2))
awaitGroup :: Group -> STM (Gate, Gate)
awaitGroup (MkGroup n tv)
= do (n_left, g1, g2) <- readTVar tv
check (n_left == 0)
new_g1 <- newGate n; new_g2 <- newGate n
writeTVar tv (n,new_g1,new_g2)
return (g1, g2)
randomDelay :: IO ()
randomDelay = do
waitTime <- getStdRandom (randomR (1, 1000000))
threadDelay waitTime
elf :: Group -> Int -> IO ThreadId
elf gp id = forkIO (forever (do {elf1 gp id; randomDelay}))
reindeer :: Group -> Int -> IO ThreadId
reindeer gp id = forkIO (forever (do {reindeer1 gp id; randomDelay}))
santa :: Group -> Group -> IO ()
santa elf_gp rein_gp = do
putStr "--------------------------\n"
choose [(awaitGroup rein_gp, run "deliver toys"), (awaitGroup elf_gp, run "meet in my study")]
where
run :: String -> (Gate, Gate) -> IO ()
run task (in_gate, out_gate) = do
putStr ("Ho! Ho! Ho! let's " ++ task ++ "\n")
operateGate in_gate
operateGate out_gate
choose :: [(STM a, a -> IO ())] -> IO ()
choose choices = do act <- atomically (foldr1 orElse actions)
act
where
actions :: [STM (IO ())]
actions = [do {val <- guard; return (rhs val)} | (guard, rhs) <- choices ]
main = do
elf_group <- newGroup 3
sequence_ [ elf elf_group n | n <- [1..10]]
rein_group <- newGroup 9
sequence_ [reindeer rein_group n | n <- [1..9]]
forever (santa elf_group rein_group)
で、なんでputStrLn使わないのかなぁとか思いつつ、自分でputStrLn使って書いたコードを実行したら
--------------------------
Ho! Ho! Ho! let's deliver toys
Reindeer 4 delivering toys
Reindeer 6 delivering toysReindeer 5 delivering toysReindeer 7 delivering \
toysReindeer 2 delivering toysReindeer 3 delivering toysReindeer 9 \
delivering toysReindeer 8 delivering toysReindeer 1 delivering toys
みたいに文字が出力された後に改行がずらずら出力されることがある。
あー!と思ってソースを見たら
putStrLn :: String -> IO ()
putStrLn s = do putStr s
putChar '\n'
という定義だった。というわけで、putStrじゃないといけない理由がわかった。