16102010 家庭菜園
そら豆が、カラスかなんかにほじられて全滅しているっぽい。やっぱポットで発芽させて植えたほうが無難か。まだ間に合うかな、間に合うようだったら明日種買ってきて、ダメだったら潔く苗を買おう。
一方、ラディッシュ、春菊、ほうれん草は無事に発芽。
ラディッシュ、間引かないと。

春菊とほうれん草。

それにしても石ころ多いなぁ。土ふるいでも作って石取りしようかなぁ。
16102010 家庭菜園
そら豆が、カラスかなんかにほじられて全滅しているっぽい。やっぱポットで発芽させて植えたほうが無難か。まだ間に合うかな、間に合うようだったら明日種買ってきて、ダメだったら潔く苗を買おう。
一方、ラディッシュ、春菊、ほうれん草は無事に発芽。
ラディッシュ、間引かないと。

春菊とほうれん草。

それにしても石ころ多いなぁ。土ふるいでも作って石取りしようかなぁ。
クィックソートを並列で。
正規形(NF),頭部正規形(HNF),弱頭部正規形(WHNF)を理解した。
Real World Haskell―実戦で学ぶ関数型言語プログラミングmodule Sorting where
import Control.Parallel (par, pseq)
parSort :: (Ord a) => [a] -> [a]
parSort (x:xs) = force greater `par` (force lesser `pseq`
(lesser ++x:greater))
where lesser = parSort [y|y <- xs, y<x]
greater = parSort [y|y <- xs, y>=x]
parSort _ = []
force :: [a] -> ()
force xs = go xs `pseq` ()
where go (_:xs) = go xs
go [] = 1
sort :: (Ord a) => [a] -> [a]
sort (x:xs) = lesser ++ x:greater
where lesser = sort [y|y <- xs, y<x]
greater = sort [y|y <- xs, y>=x]
sort _ = []
parSort2 :: (Ord a) => Int -> [a] -> [a]
parSort2 d list@(x:xs)
| d <= 0 = sort list
| otherwise = force greater `par` (force lesser `pseq`
(lesser ++x:greater))
where lesser = parSort2 d' [y|y <- xs, y<x]
greater = parSort2 d' [y|y <- xs, y>=x]
d' = d - 1
parSort2 _ _ = []
で実際に時間を測ってみると
-- parSort2
kzfm:ch24 kzfm$ ./SortMain +RTS -N2 -RTS 1000000
we have 1000000 elements to sort.
sorted all 1000000 elements.
11.419152s elapsed.
-- sort
kzfm:ch24 kzfm$ ./SortMain 1000000
we have 1000000 elements to sort.
sorted all 1000000 elements.
6.212093s elapsed.
-- parSort -N2
kzfm:ch24 kzfm$ ./SortMain +RTS -N1 -RTS 1000000
we have 1000000 elements to sort.
sorted all 1000000 elements.
6.188667s elapsed.
-- parSort -N2
kzfm:ch24 kzfm$ ./SortMain +RTS -N2 -RTS 1000000
we have 1000000 elements to sort.
sorted all 1000000 elements.
35.960397s elapsed.
GCのせいかな、よくわからん。
並行マルチコアプログラミング
Real World Haskell―実戦で学ぶ関数型言語プログラミングimport Control.Concurrent
communicate = do
m <- newEmptyMVar
forkIO $ do
v <- takeMVar m
putStrLn ("received" ++ show v)
putStrLn "sending"
putMVar m "wake up!"
webクライアントを作る章なのだけど、一度やったことあるのでHTTPまわりだけ。
import Network.HTTP
getGoogle = (simpleHTTP $ getRequest "http://google.com/") >>= getResponseBody
実行
*Main> getGoogle
Loading package HTTP-4000.0.9 ... linking ... done.
"<HTML><HEAD><meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">\n \
<TITLE>301 Moved</TITLE></HEAD><BODY>\n<H1>301 Moved</H1>\n \
The document has moved\n<A HREF=\"http://www.google.com/\">here</A>. \
\r\n</BODY></HTML>\r\n"
\nと\r\nが混じっておるな。
Real World Haskell―実戦で学ぶ関数型言語プログラミング13102010 music
超欲しい!
最初は子供と一緒に遊ぶのにIONのおもちゃっぽいやつでいいかなと思ってたんだが、これはオーディオインターフェースが別に必要らしい(だったらSpinかTyphoonのほうがいいじゃんと)。
12102010 life
割と客観的な内容かな。最後の章は読んでないけど、「自給率100%を目指すべき」とか「日本は食料大国」とかいう極論ではない。
大規模農家って少ないの?JA的にはそのほうがありがたい?
そういえば、今日のめざましに出ていた米農家のひとはJAに米を買っていただいているというオーラが出てたな。
だんごのたむらの近く。土地勘ないとちょっと分かりにくい立地かも。

割とオーソドクスな感じの豚骨醤油。量は少なめかな、それとも太麺だからそう感じるのかな。

カウンターがメインなので家族連れにはつらいかも。というか我が家の構成だとつらいな。

データベース
Real World Haskell―実戦で学ぶ関数型言語プログラミング前回読んだときはデータベース接続まではやったので、今回はUTF-8で出力させてみた。
import Database.HDBC
import Database.HDBC.Sqlite3
import qualified Data.ByteString as B
import Control.Monad
svToUTF8 (SqlByteString s) = B.putStrLn s
main = do
conn <- connectSqlite3 "drkcore.db"
res <- quickQuery conn "select title from entries" []
mapM_ (mapM_ svToUTF8) (take 5 res)
実行
$ ghc --make dbtest.hs
[1 of 1] Compiling Main ( dbtest.hs, dbtest.o )
Linking dbtest ...
$ ./dbtest
blogを変えてみた
卓次郎商店でつけ麺
かど乃やで黒びしおラーメン
drkcore
はてなスターつけたヨ
mapM_を二回適用させないとイケないのはいまいち理解していないが型のエラーがそんな感じだったので、適当に直したら動いた。いい感じ