28072012 work
Empathyは重要
- 上司と部下はコーチと選手のようなもの
- 革新の大半は異なる領域同士の交流から生まれる
- ストレスは人生の一部
- 歴史は常に勝者の視点で書かれている
28072012 work
Empathyは重要
27072012 Haskell
インストールは簡単
cabal update cabal install fay
フィボナッチなコードをjavascriptにコンパイルしてみる。printを自分で定義する必要があってはまった。
fib 0 = 1 fib 1 = 1 fib n = fib (n-2) + fib (n-1) print :: Foreign a => a -> Fay () print = foreignFay "console.log" "" main = print $ fib 10
コンパイルのときにautorunオプションをつけるとmain関数がよばれるようになる
fay -autorun fib.hs
実行してみる
$ node fib.js
89
まだバージョンが若いのでこれからに期待な感じだけど、Haskellでクライアントサイドのプログラミングができるようになるのは面白いかもしれない。
26072012 life
まわりがどんどんマンション買ってるみたいだけど、うちはこのまま持ち家のままでいいのか?という流れになっている。やっぱ賃貸でいいんじゃないのかなーと。
家が資産と呼べるのは土地の価格が上昇し続ける昔の状況だからであって、建物自体は価値がなくなっていくからなぁ。
25072012 Haskell
モナド変換子という小難しい名前がついていたので、ちょっと中身を見るのを避けていたのだけど、久しぶりにモナドのすべてを読んだら、第三部まですらすら読めて、モナド変換子って単なるパターンじゃないかと思えるようになった。モナドの合成ってめんどくさいのねって思った一方でHaskell楽しいじゃんって思った。
さらに勢いで、RWHの「作って理解するモナド変換子」も今読んだらわかりやすかった。
モナド変換子を使ったプログラミングの強みと弱み
25072012 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]}
24072012 life
進化心理学はちょっと突飛な感じがするが、よくよく考えてみると納得する。
社会学と生物学の視点から、現代的な進化理論を用いて、感情、認知、性的適応の進化などを含めた人間の本性を解明する学際的な学問
著者はもともとバイオインフォマティクスの人らしいので、トンデモ感はなく、論理的に納得性の高い考察が与えられていて非常に面白く読めた。
僕のバックグラウンド的には、
すべての未来は量子力学で計算できるが複雑すぎて解けない
みたいな感じだけど、進化的な制約をうまく使って人の感情的な行動を説明しているのは面白い。ゲーミフィケーションにもつながるんだろうなぁと思ったりもする。
23072012 Haskell
ファイル操作とかディレクトリ操作はSystem.DirectoryかSystem.FilePath.Posixを探せばいい。
それからHakyllとかTemplate Haskellとかチェックし始めた。
烏丸五条から四条烏丸のほうに上がって、四条木屋町まで異動して五条まで下って、また烏丸方面に歩き出したら雨が降ってきたので、京都駅まで歩くのをやめて地下鉄に乗ってしまった。
四条烏丸の祇園祭の名残(といってもまだ続いているんだっけ?)

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

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

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

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

高瀬川

趣を感じつつ。

もう少しゆっくりしてもよかったかもしれんが、観光する気分でもなかったしなぁ。
22072012 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にきちんと書いてあった。