エラトステネスのふるい

C/C++の課題丸投げ

sieve (x:xs) = x : sieve [y|y<-xs,y `mod` x /= 0]
prime = sieve [2..]

「入門Git」を読んだ

単に手っ取り早く使いたい場合には入門gitでもよいと思うが、版管理の思想とかを学ぶのにはこっちのほうがおすすめ。

ProductName 入門Git
濱野 純(Junio C Hamano)
秀和システム / ¥ 2,310 ()
在庫あり。

1-5章と16章を丁寧に読んで、あとは軽く流す程度。細かいところは使いながら読み直す予定。

あとはこの本読んで、創薬プロジェクトにおけるバージョン管理みたいなのを強烈にイメージ出来たのが収穫であった。

バージョンがツリーごとに並んでないで単なる集合として表現されているのが特許だと考えれば化合物特許解析というのは化合物集合を歴史として並べ直すことなんだよなぁとつくづく感じた。

そういうエントリを書こうと思っているんだけど、図とか作るのが面倒で放ってあるのでそのうち文章にまとめたい。

HaskellでGraphviz

fglを使えばよい。

import Data.Graph.Inductive
import Data.Graph.Inductive.Example
import Data.Graph.Inductive.Graphviz

m486 :: NodeMap String
m486 = fromGraph clr486

t1 :: Gr String ()
t1 = insMapEdge m486 ("shirt", "watch", ()) clr486

t2 :: Gr String ()
t2 = insMapEdge m486 ("watch", "pants", ()) t1

main = do putStrLn $ graphviz t2 "test" (0,0) (0,0) Portrait

これはDOT言語で出力される。

digraph test {
    margin = "0"
    page = "0.0,0.0"
    size = "0.0,0.0"
    rotate = "0"
    ratio = "fill"
    1 [label = "shorts"]
    2 [label = "socks"]
    3 [label = "watch"]
    4 [label = "pants"]
    5 [label = "shoes"]
    6 [label = "shirt"]
    7 [label = "belt"]
    8 [label = "tie"]
    9 [label = "jacket"]
    1 -> 4
    1 -> 5
    2 -> 5
    3 -> 4
    4 -> 7
    4 -> 5
    6 -> 3
    6 -> 8
    6 -> 7
    7 -> 9
    8 -> 9
}

pngで出力したいときにはdotに渡す。

$ ./gvtest | dot -Tpng > gvtest.png

gvtest

参考

来来亭

久々の来来亭。普段は混んでいるので避ける。京都なラーメンが食べたいときだけ。

1264327192 1264327186

薄切りの肉が好き。新福とか懐かしい。

「ホームページ復活 眠っているホームページを甦らせる「7つの法則」」を読んだ

沼津往復で読みきった。内容的には、知らない人向けにわかり易く説明した感じ。読み終わって7つの法則がイマイチ。復活というよりはホームページ世代の人達に今時の状況を説明しました(7章に分けて)みたいな。

  • Unique Sales Proposition (UPS)
  • 買う理由がないから買えない
  • Lead Exchange

Haskellでルービックキューブ

プログラム・プロムナードのRubicキューブと置換の乗算を読んで2X2のソルバーを書いていたんだけど、巡回とねじりを覚えれば基本的に解けるのでリアルのほうを揃える方に夢中になってしまった。

1264245450

*Main> prodPerm [e,t,t,e,s',b,b,s,e',t,t,e,s',b,b,s,e',e']
[[TSW,WTS,SWT],[TES,EST,STE]]
*Main> prodPerm [e,e,s,s,e',n',e,s,s,e',n,e']
[[STE,WTS,ETN],[EST,SWT,NET],[TES,TSW,TNE]]

ProductName ルービックの2×2 キューブ(CUBE)

メガハウス / ¥ 1,260 (2002-03-20)
在庫あり。

キャトルエピス

久々のキャトルエピス。

図書館帰りに不意に寄りたくなった。

1264245456 1264245462

1264245468

美味!

Haskellで文字のローテーション

プログラム・プロムナードのRubicキューブと置換の乗算を読んでいたら、文字のローテションをしたいときにcycleを使っているのを見つけた。

import List

shift n c xs = case elemIndex c xs of
                 Nothing -> c
                 Just i  -> cycle xs !! (i + n) 

こんな感じ。

*Main> shift 1 'y' ['a'.. 'z']
'z'
*Main> shift 1 'z' ['a'.. 'z']
'a'
*Main> shift 1 ' ' ['a'.. 'z']
' '

これを使えばプログラミングHaskellのシーザー暗号は次のように書ける

import List

chrs = ['a'..'z']

shift n c xs = case elemIndex c xs of
                 Nothing -> c
                 Just i  -> cycle xs !! (i + n)   

encode n xs = [shift n x chrs | x <- xs]

実行

*Main> encode 3 "haskell is fun"
"kdvnhoo lv ixq"

ProductName プログラミングHaskell
Graham Hutton
オーム社 / ¥ 2,940 ()
在庫あり。

「BCG流 非連続思考法」を読んだ

創造は個人のステップ、イノベーションは集団としてのプロセス

ProductName BCG流 非連続思考法 アイデアがひらめく脳の運転技術
リュック・ド・ブラバンデール,森澤 篤
ダイヤモンド社 / ¥ 1,890 ()
在庫あり。

  • イノベーションは行動であり、創造は考えることだ
  • 我々は現実をありのままに見ているわけではない。自分なりの方法でしか見られない
  • 新しいアイデアを生み出すプロセスとアイデアを優れたものにしていくプロセスは異なる
  • 経営者は答えを探し求める人よりも、答えを出す人を高く評価しがち
  • アイデアの寿命はずっと短くなってしまったので、アイデアを生み出し続ける能力が重要
  • 事故が起きたときに問われるべきは「誰がその管理プロセスをつくったのか」
  • 労働と非労働の区別も曖昧になっている

Real World Haskell 27章

UDPとTCPでsyslogサーバとクライアント作って通信させる。

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

28章はSTMだけどこれはJava並行処理プログラミング読んでからにしよう。

ProductName Java並行処理プログラミング ―その「基盤」と「最新API」を究める―
Brian Goetz,Joshua Bloch,Doug Lea
ソフトバンククリエイティブ / ¥ 3,990 ()


これで一通り読んだので、そのうちもう一度読む。二周目は練習問題解きながら。