Unix/Linuxプログラミング理論と実践 1章

moreっぽいコマンドの実装。あとは導入っぽい章

ProductName Unix/Linuxプログラミング理論と実践
Bruce Molay
アスキー・メディアワークス / ¥ 6,090 ()
在庫あり。

  • あるコマンドは何をするのか
  • そのコマンドはどんな仕組みなのか
  • そのコマンドは自分で実装できるか

という感じで問いから始まり理解をしながら実装してみることを通して悟りをひらいていく感じの流れの本っぽい。

鰯雲 レンズが欲しい 欲しいかな

超広角とか魚眼とか単焦点とか欲しいよう

ProductName Canon EFレンズ 50mm F1.8 II

キヤノン / ¥ 12,600 ()
在庫あり。

DMPKとCの本

Clojureの本一通り読んだ(?)し、PK-PDも読まなあかんよなぁと。

ProductName Pharmacokinetic-Pharmacodynamic Modeling and Simulation
Peter Bonate
Springer / ¥ 8,731 ()
在庫あり。

でも、これ結構内容が濃くて、、、、、辛いっ。ていうか吞みながら読める本ではない。 ただ、いいこと書いてあるのでじっくり読まないと。

ちょうどUnix/Linuxプログラミングも届いた。

ProductName Unix/Linuxプログラミング理論と実践
Bruce Molay
アスキー・メディアワークス / ¥ 6,090 ()
在庫あり。

これもしっかり読む。

Programming Clojure chapter 6-9

駆け足で。

ProductName Programming Clojure (Pragmatic Programmers)
Stuart Halloway
Pragmatic Bookshelf / ¥ 3,198 ()
在庫あり。

Chapter 6 (Concurrency)

STMを使う。STMはデータベースでいうACIDのうちACIを提供する。実際にいくつか書いてみないと理解できない感じ。

Chapter 7 (Macros)

マクロ

Chapter 8 (Multimethods)

マルチメソッドの話。

Chapter 9 (Cloure in the Wild)

以下の事柄に関して簡単に説明 - tet-isを使ったユニットテストについて - データベースアクセス - Compojureというweb application framework

章の最後にLancetっていうRakeみたいなソフトウェアでの実例で説明してるんだけど、Lancet使ったことないのでイメージが掴みにくかった。

もう少しClojure触ってから再度読み直すとよいかもしれん。

今日の畑(090926)

ピーマンと唐辛子の収穫と、葉物野菜の準備

1254045353

シソの花。シソもそろそろ終わりにしようかな。

1254045375

白インゲン(もらいものの種)。この時期にちゃんと育つのか不安。今から撒くならスナップエンドウがよいらしい。

1254045380

苦土石灰撒いたので一週間ほどおいて、来週にはほうれん草と小松菜の種を撒く。

1254045386

Hell Is Around the Corner / Tricky

ダビーでスモーキー。

ProductName Maxinquaye
Tricky
Island / ¥ 1,357 (1995-04-18)
在庫あり。

trickyは最初のほうのアルバムのほうが好き。レゲエはあんま好きじゃないけどdubは好きってのが割と謎(自分七不思議のひとつ)。

Programming Clojure chapter 5

どんどん読む。5章はfunctional programmingに関して。遅延評価についてもふれている。

ProductName Programming Clojure (Pragmatic Programmers)
Stuart Halloway
Pragmatic Bookshelf / ¥ 3,198 ()
在庫あり。

clojureは(jvmが?)末尾最適化しないので、tail recursionでなくself recursionをすべし。

self recursionはrecurを使う。またはlazy-seqをつかって遅延評価させる。

mutual recursionの場合はtrampolineという最適化テクニックを使うとよいらしい(未消化)。

Programming Clojure chapter 4

4章はsequenceという抽象の話がメイン。

ProductName Programming Clojure (Pragmatic Programmers)
Stuart Halloway
Pragmatic Bookshelf / ¥ 3,198 ()
在庫あり。

clojureではsequenceの操作関数は重要。若干関数リファレンスみたいになってしまっている部分もあるが、それは仕方ない。どうせ、実際にコード書くときに何度も見返すことになるので、lispとか触ったことがあれば軽く読み流せる章。

Programming Clojure chapter 3

3章はJava周りと最適化の話

ProductName Programming Clojure (Pragmatic Programmers)
Stuart Halloway
Pragmatic Bookshelf / ¥ 3,198 ()
在庫あり。

Syntactic Sugar

javaのメソッドを呼ぶための使いやすい構文糖衣が用意されている/(slash)と.(dot)が重要

Collection

ClojureのCollectionはconcurrency-safeらしい。

Lancet

Clojureのビルドツール。これは使ってみないと読んだだけではよくわからん。

たらい回し関数

jrubyのたらい回し関数のエントリみてたらClojureでもやってみたくなった。

Clojure 1.0.0-
user=> (defn tak [x y z] 
      (if (>= y x) 
      z 
      (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y))))
#'user/tak
user=> (time (dotimes [_ 100] (tak 24 16 8)))
"Elapsed time: 27580.504 msecs"
nil

ついでにOCamlでも

let rec tak x y z =
  if y >= x then z
  else tak (tak (x-1) y z) (tak (y-1) z x) (tak (z-1) x y)
;;

for a = 1 to 100 do
  ignore(tak 24 16 8)
done
;;

まずはバイトコードで。

$ ocamlc tak.ml -o tak.exe
$ time ./tak.exe 

real    0m10.777s
user    0m10.692s
sys     0m0.033s

ネイティブコードにコンパイルすると

$ ocamlopt tak.ml -o tak_opt.exe
$time ./tak_opt.exe 

real    0m1.130s
user    0m1.119s
sys     0m0.006s

結構はやい。

そういえばMooseでLispはたらい回し関数はしるくらいまではやっとこうと思いつつ止まってしまっていたのに今気づいた。