モナド変換子はボイラープレートの回避というかパターン

モナド変換子という小難しい名前がついていたので、ちょっと中身を見るのを避けていたのだけど、久しぶりにモナドのすべてを読んだら、第三部まですらすら読めて、モナド変換子って単なるパターンじゃないかと思えるようになった。モナドの合成ってめんどくさいのねって思った一方でHaskell楽しいじゃんって思った。

さらに勢いで、RWHの「作って理解するモナド変換子」も今読んだらわかりやすかった。

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


モナド変換子を使ったプログラミングの強みと弱み

  • 純粋なコードとの干渉
  • 過度の順序付け
  • オーバーヘッド
  • インターフェースが大きすぎ

Haskellのレコード構文

レコード構文の話

data Test = TS {vars::[Int], others::[Int]} deriving Show

既にあるデータに対しても利用できて、もとのデータの値を一部だけ変更した新しいデータが作られる。

*Main> let ts = TS {vars=[], others=[1..10]}
*Main> ts
TS {vars = [], others = [1,2,3,4,5,6,7,8,9,10]}
*Main> ts {vars=[1,2,3]}
TS {vars = [1,2,3], others = [1,2,3,4,5,6,7,8,9,10]}

知らなかった。

それから、データコンストラクタが異なっていれば同じフィールド名を付けられる。

data AnotherTest = TS1 {vars::[Int], others::[Int]} 
                 | TS2 {vars::[Int], others::[Int]} 
                 deriving Show

othersを変更してみる

*Main> let ts1 = TS1{vars=[1..3],others=[]}
*Main> let ts2 = TS2{vars=[1..3],others=[]}
*Main> ts1 {others=[1]}
TS1 {vars = [1,2,3], others = [1]}
*Main> ts2 {others=[2]}
TS2 {vars = [1,2,3], others = [2]}

生きづらさはどこから来るか: 進化心理学で考える

進化心理学はちょっと突飛な感じがするが、よくよく考えてみると納得する。

社会学と生物学の視点から、現代的な進化理論を用いて、感情、認知、性的適応の進化などを含めた人間の本性を解明する学際的な学問

著者はもともとバイオインフォマティクスの人らしいので、トンデモ感はなく、論理的に納得性の高い考察が与えられていて非常に面白く読めた。

僕のバックグラウンド的には、

すべての未来は量子力学で計算できるが複雑すぎて解けない

みたいな感じだけど、進化的な制約をうまく使って人の感情的な行動を説明しているのは面白い。ゲーミフィケーションにもつながるんだろうなぁと思ったりもする。

  • 私たち人類の心身は一万年前から進化しておらず
  • 一律の教育は役に立たない
  • 双子研究の結果、教育を含む共有環境は正格や能力発揮にほとんど影響しなかった
  • ルールの破り方にも意味がある
  • 高齢者の介護は生物の観点的には非生産的で非合理的な行為
  • 人間はサルから幼形進化した

HaskellでPLEAC(9章)

HaskellでPLEAC 9 章 ディレクトリ

ファイル操作とかディレクトリ操作はSystem.DirectorySystem.FilePath.Posixを探せばいい。

それからHakyllとかTemplate Haskellとかチェックし始めた。

京都でパターン認識と機械学習の学習をゲット

烏丸五条から四条烏丸のほうに上がって、四条木屋町まで異動して五条まで下って、また烏丸方面に歩き出したら雨が降ってきたので、京都駅まで歩くのをやめて地下鉄に乗ってしまった。

四条烏丸の祇園祭の名残(といってもまだ続いているんだっけ?)

1342925150

目的の1つである、ジュンク堂でパターン認識と機械学習の学習をゲットするというタスクはこなした。

1342925160

創作八ツ橋の店はオープン前だったが、オープンまで待つモチベーションはなかったので、諦めた。八ツ橋ネタは色々教えてもらったので、そっちにスイッチした。

1342925152

高瀬川沿いは楽しい。三条まではしょっちゅう上がっていたけど、降りたことはなかったので新鮮。

1342925153

もう一つの目的である、近喜の油揚げもゲット。鳥彌三とか露庵菊乃井もまた行きたいなぁとか思いつつ、下りていった。

1342925155

高瀬川

1342925157

趣を感じつつ。

1342925158

もう少しゆっくりしてもよかったかもしれんが、観光する気分でもなかったしなぁ。

Haskellで日付をあつかう

PLEACのレシピ9.1 タイムスタンプをHaskellで書いてみたんだけどちょっとめんどくさかった(Pythonも日付はめんどくさいけど)。

import System.Posix.Files
import System.Time
import System.Posix.Types
import System.Environment

getTimes :: FilePath -> IO (ClockTime, ClockTime)
getTimes fp =
    do stat <- getFileStatus fp
       return (toct (accessTime stat),
               toct (modificationTime stat))

toct :: EpochTime -> ClockTime
toct et = TOD (truncate (toRational et)) 0

main :: IO ()
main = do
  (file:_) <- getArgs
  (atime, mtime) <- getTimes file
  print atime
  print mtime

getFileStatus関数で時間の情報はEpochTime型が返ってくるので、これをClockTime型に変換する

type EpochTime = CTime

EpochTimeはCTimeの別名なんだけど、CTimeはRealのインスタンスなのでtoRationalで有理数に変換してtruncateを通してIntegerに。

これをClockTime型のデータコンストラクタであるTODに通す。

ClockTime型の出力は

Sun Jul 22 09:10:59 JST 2012

もう少し細かく制御したい場合にはtoCalendarTime関数でCalendarTIme型に変換して望みのフォーマットにすればいい。

RWHの20.4にきちんと書いてあった。

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


今日の畑(120718)

ゴーヤを初収穫(2個)、インゲン、ミニトマト、キュウリ、人参とかなりの量がとれた。

もうそろそろモロヘイヤもでかくなってくるし、空芯菜にも期待している。あと、人参もそろそろまかないといけないのかな、それとも大根を多めに植えるべきか悩むなぁ。

1342863242

トマトの茎下ろしという技を知ったので早速試してみた。

1342863244

アンディ先生と私(トヨタのカイゼンの話)

最近、生産効率のカイゼンに取り組んでいるのでこういったあたりを勉強している。

無駄な仕事を省く。そしてより価値のある仕事に就かせる

労働者目線だったらこれはいいのかもしれないが(研究者でこういう受け身なのはダメだろうなと思いつつも)、まぁ新しいことをやるのは面白いので楽しく取り組んでいる。

ProductName アンディ先生と私―トヨタが私に教えてくれたこと
パスカル デニス
センゲージラーニング / 1575円 ( 2007-12 )


本書を読んでいてカンバン方式ってものがよくわかった。これは結局プルじゃないかと。

創薬系だと、合成した化合物は後ろの工程にプッシュ式に送るのが普通だ(動態試験とか、薬理試験) これをプル方式で考えなおすっていうのは面白いかもしれない。

そういう試験系のフローは「依頼書」という形でプッシュしていくんだけど、そうすると依頼される側は依頼されたことしかやらないというカルチャーが根付いてしまい、官僚化、保守化するんだよね。うちの部署も完璧にそんな感じで、インフラ構築しなきゃいけないのはずなのに依頼されてないからやってないとかそういう発言するのをなんとかしたいんだけど、なかなか難しいよね。

久しぶりの京都

やっぱ京都はいいですね、この時期暑いけど。

1342792050

昼は新福菜館で。

1342792052

こういう趣のある感が好きです。

1342792053

セミナーは楽しくて色々勉強になったのと、気づきを得たので、帰ったらちょっとやってみるかと思うことがいくつか増えた。ラーメンは一乗寺のあたりがいまだに激戦区らしい。明日あっちに行く暇あるかな。

それから、おみやげ情報もたくさん頂いたので明日は早めにぶらぶらしようかなと。

nikiniki

LBDDのソリューション

まぜてもらうことになりました。

多様化する分子設計用ソフトウエア

僕の思うLBDDの行き着くところは、当たり前のように量子化学計算が行われていて軌道の相互作用として結合論が語られる未来だと思っているので、まぁそんな感じの話に持って行きたいなーと思っています。

FMOをやっても、表面的には相関エネルギーっていう数値しか出てこないけど、軌道の係数とか理解出来ないとドラッグデザインに生かせないし、ケミストもMOに対する直感的な理解とか必須だと思うしね。

みたいな話を、informaticsとかSBDDと絡めてお話できればいいと思うんだけど、突然心変わりしてHaskellの文脈でLBDDを捉えてみるとかPDCAサイクルはドラムンベースでいうところのベースラインそのものであるとかそういう謎のストーリーを作るかもしれない。