Scalaのzipが

なんか慣れない。

scala> Array(1,2,3) zip Array(4,5,6)
res1: Array[(Int, Int)] = Array((1,4), (2,5), (3,6))

Haskellだとこんな感じでしょ。

Prelude> [1,2,3] `zip` [4,5,6]
[(1,4),(2,5),(3,6)]

Pythonだと

[1,2,3].zip([4,5,6])

とはできない。

>>> zip([1,2,3],[4,5,6])
[(1, 4), (2, 5), (3, 6)]

Monads in Scala

Scalaスケーラブルプログラミングを11章まで読んで、構文を多少理解したので、Monads in Scalaを読んだ。

要するにモナドはforに宿るってことでいいのかな。

bind [e1] (\v1 -> bind [e2] (\v2 -> unit(v1 + v2)))

というbindが出てきてこれはScalaのforだと。

for {v1 <- e1; v2 <- e2} yield v1 + v2

みたいな。

なるほどと思ったのであった。

ProductName Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)
Martin Odersky,Lex Spoon、Bill Venners
インプレスジャパン / ¥ 4,830 ()
在庫あり。

Scalaはインタプリタが遅いのがたまに気になる。

「いかにして問題をとくか」を読んだ

名著ですな。なぜ今まで読まなかったのだろう。娘には早い時期に読ます。

ProductName いかにして問題をとくか
G. ポリア
丸善 / ¥ 1,575 ()
在庫あり。

  • ある問題を解くときに我々は同じような問題を解いた経験に頼りつつ
  • サカナを釣ることは針にひっかけることではなく捕まえることである
  • 他のものよりも内容の多い記号を含みが多い
  • 未知のものをよく見よ。結論をよく見よ
  • 発見的推論は何も証明することはできないけれども、それにも関わらず重要である
    • アブダクション
  • 目先がきくということはたちまちのうちに物事の本質的な関連を見ぬいてしまうことである
  • 枕に相談せよ
  • 予想は当たっているかもしれないが、予想を真実と考えることほどばからしいことはない

「日本で最も人材を育成する会社」のテキスト

「7割は課長にさえなれません」と一緒に注文した。両者とも読みやすいが、課長のほうは社会的な構造のほうに焦点を当てているのに対し、人材のほうは、どういう組織を作っていくべきかという前向きな内容。

なので理想論というか、ちょっとリアリティに欠けるという感じはする。本書の内容は目指すべきだけど、そのためには、既存の枠組みを潰さないといけない組織の方が多いんじゃないかなぁと。どこかで一回リセットしないといけないけど、それはなかなか難しいかなぁと(今の組織にいると)思う。

ただ、近い将来の展望はどちらの本も一緒で、普通の能力のレベルから海外のアウトソースの対象になって上と下の生き方が二極化される。そのレンジは海外との賃金格差がなくなるまで落ちていくだろうというのはまぁそうだろう。

  • OJTの終焉
  • 退職していくヒトの扱い
  • ITサービス提供者がユーザー教育をするという高い志
  • バックワードチェイニング
  • どういう人とチームを組むのかが、ある人の成長の重要な部分を決めてしまう(仮説)
  • 読書とは他人が苦労して得た経験を、考えられないくらい格安で手に入れること

Linuxカーネル2.6解読室 Part III

メモリ管理

ProductName Linuxカーネル2.6解読室
高橋浩和,小田逸郎,山幡為佐久
ソフトバンククリエイティブ / ¥ 5,670 ()
在庫あり。

Linuxカーネル徹底理解も参考にしながら読んだ。

Heligoland / Massive Attack

ドープ目。

ProductName Heligoland
Massive Attack
Virgin / ¥ 1,820 (2010-02-09)
通常1~3週間以内に発送

  • Girl I Love You
  • Psyche
  • Saturday Come Slow
  • Atlas Air

あたりが好き。

Software Design 総集編 【2000~2009】(DVD付) (大型本)

手元に置いておきたい

ProductName Software Design 総集編 【2000~2009】(DVD付)

技術評論社 / ¥ 2,079 ()
近日発売 予約可

bayonで化合物クラスタリング

chemoinformaticsな用途でbayonを使ってみる。

データセットはPrimary screen for compounds that inhibit Insulin promoter activity in TRM-6 cells.でアクティブだった1153検体

ダウンロードしてきたsdfをopenbabelでフィンガープリントに変換

babel -imol pc_sample.sdf -ofpt pc_sample.fpt -xh -xfFP2

これをbayonでクラスタリングにするためのTSVに変換

python f2bayon.py pc_sample.fpt > pc_sample.tsv

f2bayon.pyのソース

def hex2bin(fingerprint):
   bf = ""
   h2b = {"0":"0000","1":"0001","2":"0010","3":"0011",
          "4":"0100","5":"0101","6":"0110","7":"0111",
          "8":"1000","9":"1001","a":"1010","b":"1011",
          "c":"1100","d":"1101","e":"1110","f":"1111",
          }

   for l in fingerprint:
       for c in l:
           b = h2b.get(c)
           if b: bf += b
   return bf

def convert(file):
   result = ""
   for data in open(file,"r").read().split("\n>"):
       fp = ""
       for list in data.split("\n")[1:]:
           fp += hex2bin(list)
       result += data.split("\n")[0].split(" ")[0] + " " + fp + "\n"
   return result

if __name__ == "__main__":
   import sys
   file = sys.argv[1]
   c = convert(file)
   for l in c.split("\n")[:-1]:
      id,fp = l.split()
      fps = ""
      for num,bit in enumerate(fp):
         if int(bit) > 0:
            fps += "\t%d\t%s" % (num,bit)
      print id + fps

でbayonで10クラスターに分割

$ time bayon -n 10 pc_sample.tsv > pc_sample.clust

real    0m0.859s
user    0m0.839s
sys 0m0.015s

超速い。

HaskellのArrow

Arrowを学ぶ。Programming with Arrowsを読んでから、「Arrowのはなし」というニコニコ動画をみるのがわかりやすい。イメージは3番目が参考になる。

Arrowを使って奇数列を作ってみる。 0から始まる数列を&&&で分岐させて一方はそのまま戻して、もう一方はtailすることで1から始まる数列にして、合流したら足し合わせる。

Prelude Control.Arrow> let odds = (tail) &&& id >>> (uncurry (zipWith (+)))
Prelude Control.Arrow> take 10 $ odds [0,1..]
[1,3,5,7,9,11,13,15,17,19]

他、参考にしたサイト

RWHではArrowは15.4.2にちょっとだけ触れられている。

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan
オライリージャパン / 3990円 ( 2009-10-26 )


「7割は課長にさえなれません」を読んだ

blogの内容をわかりやすくまとめた感じだけど、会社勤めの20代30代は必読的な内容。いや、ホント。

ProductName 7割は課長にさえなれません (PHP新書)
城 繁幸
PHP研究所 / 735円 ( 2010-01-16 )


成果主義+裁量労働とってる会社で組合の存在って意味あんのとか思ってるし、実際会合とかももう数年以上出てない。あいつらは社員の仕事の能力はそんなに変わらないから給料の最低と最高のレンジを20%以下に抑えろとか平気で言うし。あと、組合頑張るやつって基本大した仕事しないわりに、組合の役員やるのが昇進の道とか本気で信じてるし。

生涯賃金のピークがあと4,5年で来そうなのはわかりきってんのに、仕事の難度のピークがそれよりずっと先にある状況ってみんなおかしいって感じないのかな。そこらへん、やりがいとかでかたづけるのはぶっちゃけ暴論だろう。

今の30代くらいは、バブル世代の年功序列組(の使えないほう、使える組はとっとと偉くなってる)とガチでぶつかるんだけど、彼らのケツ拭きをしつつも、彼らのほうが給料が多いという状況を認識しないといけない。で、僕らが同じように下の世代にツケを回せるかというと絶対無理でしょう。

じゃぁ、辞めて移れば?となるんだけど、本書にも触れられているように、それはなかなか難しい気がする。あと、僕のいる業界はどこも似たような状況なんで、世代的に、年功序列と成果主義が中途半端に混じった状態のとこが多い気がする。

でも、だからといって現状に甘んじていることの言い訳にはならないんだよなぁ。というわけで、少し前向きに色々考えているんだけどねぇ。