今日の畑(101016)

そら豆が、カラスかなんかにほじられて全滅しているっぽい。やっぱポットで発芽させて植えたほうが無難か。まだ間に合うかな、間に合うようだったら明日種買ってきて、ダメだったら潔く苗を買おう。

一方、ラディッシュ、春菊、ほうれん草は無事に発芽。

ラディッシュ、間引かないと。

1287225079

春菊とほうれん草。

1287225067 1287225073

それにしても石ころ多いなぁ。土ふるいでも作って石取りしようかなぁ。

真澄 山廃

真澄の山廃

1287224858

しっかりしている感じ

仁王を見ていた

そろそろ転機かな?と思いながら仁王みてたけど、めぼしい職が見つからなかった。ちなみに自分の会社の募集は見つかって、おーなるほどと思ったくらい。

ProductName 起業のファイナンス ベンチャーにとって一番大切なこと
磯崎 哲也
日本実業出版社 / ¥ 2,310 ()
通常2~4週間以内に発送

Real World Haskell 24章 8,9

クィックソートを並列で。

正規形(NF),頭部正規形(HNF),弱頭部正規形(WHNF)を理解した。

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan,John Goerzen,Don Stewart
オライリージャパン / ¥ 3,990 ()
在庫あり。

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 24章 1-7

並行マルチコアプログラミング

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan,John Goerzen,Don Stewart
オライリージャパン / ¥ 3,990 ()
在庫あり。

import Control.Concurrent

communicate = do
  m <- newEmptyMVar
  forkIO $ do
    v <- takeMVar m
    putStrLn ("received" ++ show v)
  putStrLn "sending"
  putMVar m "wake up!"
  • Control.ConcurrentのforkIOを使う
  • 同期変数型MVarを使う
    • MVarはデッドロックの原因になることがある
  • tryTakeMVarとtakeMVarの違い
  • スレッド間で一度だけ通信する場合にはMVarがよい。それ以外はChan型を使う
  • MVar,Chanは非正格

Real World Haskell 22章

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が混じっておるな。

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan,John Goerzen,Don Stewart
オライリージャパン / ¥ 3,990 ()
在庫あり。

Vestax Typhoonが欲しい

超欲しい!

Spinも気になるけど、やっぱTyphoonやな

最初は子供と一緒に遊ぶのにIONのおもちゃっぽいやつでいいかなと思ってたんだが、これはオーディオインターフェースが別に必要らしい(だったらSpinかTyphoonのほうがいいじゃんと)。

「食料自給率のはなし」を読んだ

割と客観的な内容かな。最後の章は読んでないけど、「自給率100%を目指すべき」とか「日本は食料大国」とかいう極論ではない。

大規模農家って少ないの?JA的にはそのほうがありがたい?

ProductName 食料自給率のはなし -食卓から考える「40%」
日本生活協同組合連合会
コープ出版 / ¥ 630 ()
在庫あり。

  • そもそも、「自給率の向上」というテーマに反対するヒトはいない
  • 現在政府が発表している食料自給率という数値目標はまぼろしにすぎない
  • 消費を無視した食料自給率の議論は愚かで無意味
  • カロリーベースの数字のトリック
    • 農地面積に依存
    • 豚肉を食べること自体が餌の消費量を増やし、結果としてマイナスに傾く。つまり国産豚肉を食べないことが自給率の向上に貢献する
  • そもそも日本は世界中から食料を買える、だから自給率は低くなり、これは必然。
  • インドの食料自給率は98%だが、これを目標にすべきなのだろうか?
    • 食料自給率は低いが様々な食品をとっているほうが豊かでは?
  • カロリーベースの計算をする国は少ない
  • 食品廃棄を減らそう

そういえば、今日のめざましに出ていた米農家のひとはJAに米を買っていただいているというオーラが出てたな。

麺家ごとう

だんごのたむらの近く。土地勘ないとちょっと分かりにくい立地かも。

1286881882

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

1286881886

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

1286881880

Real World Haskell 21章

データベース

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan,John Goerzen,Don Stewart
オライリージャパン / ¥ 3,990 ()
在庫あり。

前回読んだときはデータベース接続まではやったので、今回は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_を二回適用させないとイケないのはいまいち理解していないが型のエラーがそんな感じだったので、適当に直したら動いた。いい感じ