06102012 iPhone
なかなか楽しい。
Objective-Cの基本を理解しているのを前提にしているようなので、僕はとりあえず別の本を読んだ後にこの本を読み始めた。
06102012 iPhone
06102012 Haskell
なぜか/usr/local/binのcabal(2010年製)を使っていたり、依存関係がぐちゃぐちゃになってしまい、Yesod入れようとしたら目眩のするようなエラーリストが生成されたりとグッタリ感満載の環境になってしまった。
全てをなかったことにしたいが、完全にきれいにするアンインストーラーは用意されてないみたいなのでそれっぽいのを消していく。
sudo /Library/Frameworks/GHC.framework/Versions/Current/Tools/Uninstaller sudo rm -rf /Library/Frameworks/HaskellPlatform.framework rm -rf ~/.cabal rm -rf ~/.ghc
/usr/binのシンボリックリンクとかも消せばいいんだろうけどもう一度インストールするので放っておいた。
(注) Haskell-Platform-2012.2.0.0には/Library/Haskell/bin/uninstall-hsというコマンドが用意されてました。
入れなおす。cabalを新しくしたらすぐにvirthualenvを入れる(超重要)。
open Haskell\ Platform\ 2012.2.0.0\ 32bit.pkg cabal update cabal install cabal-install-0.14.0 #0.16.0はvirthualenvがバグる cabal install virthualenv
新しいパッケージなんかを試したくなたらサンドボックスをつくる。例えばyesodを使いたい場合、適当なディレクトリを掘ってvirthualenvコマンドを叩くと.virthualenvディレクトリが出来てそこにcabalとか色々な設定がされる。
mkdir yesodtest
cd yesodtest
virthualenv
サンドボックス環境にするにはactivateする
source .virthualenv/bin/activate
cabal install yesod-platform
サンドボックス環境から抜けるにはdeactivateコマンドを叩けばいいし、要らなくなったら.virthualenvディレクトリを消せばいいだけなので、精神的によろしい。
05102012 Haskell
GADTs使ってみたを読んだらわかりやすかったので、適当なサンプルを見つけてみた。
プログラミングHaskell10.5の仮想マシンを例に取る
data Expr = Val Int | Add Expr Expr value :: Expr -> Int value (Val n) = n value (Add x y) = value x + value y
GADTで書き直すと
data Expr where Val :: Int -> Expr Add :: Expr -> Expr -> Expr value :: Expr -> Int value (Val n) = n value (Add x y) = value x + value y
データコンストラクタが、型をとって型を返す関数のように表現できる。
実行するにはGADTs拡張をつける
$ ghci -XGADTs vmachine2.hs GHCi, version 7.4.1: http://www.haskell.org/ghc/ :? for help [1 of 1] Compiling Main ( vmachine2.hs, interpreted ) Ok, modules loaded: Main. *Main> value (Add (Val 3) (Val 2)) 5
Haskellerも順調に増加している
05102012 objc
構文がキモいとか書かれているのを見て敬遠してたのだけど、Haskell最初に読んだ時とかOCamlとかOzのほうが強烈だったな。あいつらと比較すれば[Java,C,C++,Go,Objective-C]でくくれるじゃんとか思ったけど、実際にアプリ作るとキモいとか思うのかな。
読んだのはObjective-Cの入門本でiPhoneアプリ開発系の本ではない。
メソッド名とセレクタ、ラベルがわかりにくかった
[[NSString alloc] init]
と、括弧でくくるとクラスメソッドの実行になる。newとかないのかな?と思ったら
[NSStrint new] // [[NSString alloc] init]と等価
でもいいらしい。
どういう場面で使うといいのかいまいちわからん
@property 型 変数名;
で、ゲッタとセッタが簡単に定義できる(@synthesizeも必要)
これを使うとpythonみたいに.でアクセスできる
使いどころがいまいちわからん。ミックスインとも違うんだよなぁ。
というわけで一通り頭に入れたのでCocos2Dの本でも読もうかなと思う。
04102012 objc
Yesodがインストールできなくてヤサグレてきたので、Objective-Cでも。
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello, World!"); [pool drain]; return 0; }
gccでコンパイルできるのね。
$ gcc -framework Foundation test.m $ ./a.out 2012-10-04 17:21:09.654 a.out[22068:407] Hello, World!
よくわかるiPhoneアプリ開発の教科書はできるだけXcodeのGUIの助けを借りて開発する感じの本だった。
長いこと使うんだったらやっぱ詳解 Objective-C 2.0 第3版がよさそうだけど、pdfでないんだよな。重いのはつらい。
04102012 Haskell
Yesodの本を読んでいて、Type Familiesでいきなり躓いた。
class SafeHead a where type Content a safeHead :: a -> Maybe (Content a)
の type Content aでContentってなんで必要なの?という。
Content a :: *
なんだろうけど
a :: *
にはならんのかね?
「型引数を取って結果の型を返す、型レベルの関数」という表現から抽象への理解がぱっと上がった気がする。
わかってしまうと最初の方の疑問は寝ぼけたものだった。Haskell面白い。
04102012 Haskell
リスト内包表記とリストモナドのdo表記の関係性がわからない場合にはReal World Haskell 14章のUnderstanding the list monadか、すごいHaskellの13章を読んでおくと良いです。
栄光のグラスゴーHaskellコンパイルシステム利用の手引き バージョン7.4.2 (7.3.11)
モナド内包表記はリスト内包表記をあらゆるモナドに一般化したものである。これには並列内包表記(7.3.9. 並行リスト内包表記)と変換内包表記(7.3.10. 一般化(SQL風)リスト内包表記)を含む。
MonadComprehensions拡張を有効にして呼び出す。分かりやすいMaybeモナドで
$ ghci -XMonadComprehensions GHCi, version 7.4.1: http://www.haskell.org/ghc/ :? for help Prelude> Prelude> [x+y | x <- Just 5, y<- Just 3] Just 8 Prelude> [x+y | x <- Just 5, y<- Nothing] Nothing
Maybe箱に入って出てきますね。MaybeはもちろんMonadPlusのインスタンスなのでガードが使える。
Prelude> [x+y | x <- Just 5, y<- Just 3, x < 3] Nothing
続いてEitherを。これはControl.Monad.Errorを使う。
Prelude> :m +Control.Monad.Error Prelude Control.Monad.Error> [ x+y | x <- Right 5, y <- Right 3] Right 8 Prelude Control.Monad.Error> [ x+y | x <- Left "not a number", y <- Right 3] Left "not a number"
Stateモナドだってできるぞ。
Prelude Control.Monad.State> runState [x | x <- get] 3 (3,3)
しかしこれは読みにくい。
Fedexは宅配ボックスに入れておいてくれないとか再配達に同期するタイミングがつかめないとかプチトラブルはあったけど無事に到着した。
軽いし片手で持てるので電子書籍リーダーとして使うには良い感じかも。
早速Yesodのepubを購入した。
そして読む
03102012 Ti
緑の本読んだら、これを読むのがいいかも。
参考になったテク
02102012 work
アジャイルとは結局のところ何なんだろう?という疑問が再浮上してしまった。
アジャイル・ソフトウエア開発を、トヨタの生産方式とし知られる「リーン思考」の視点から解説したユニークなアジャイル解説本です。「ムダをなくす」という意味のリーン思考と「俊敏さ」を主眼とするアジャイル開発とは、根本的なところで実は同じ考え方であり、方法論としても共通するところが多くあります。
ソフトウェア開発は製造と大きく異なるが、創薬もソフトウェア開発と大きく異なると思う。
開発はレシピの作成であり、製造はレシピにしたがって料理をつくることであると考えていい。
という文脈にならうのであれば、創薬とはレシピの発見である。つまり見つかるかもしれないし、見つからないかもしれないという不確定さが常につきまとう。
7つのリーン原則
だれも読まないペーパーワークは価値を付加しない
バリューストリームマップも重要
ある程度の新しい情報を得るためには、ある程度の失敗率がなくてはならない
イテレーションをくり返すなかで、自然と設計が浮き彫りになってくるようなシステムの作り方をすると、開発中に発生する変更に対応しやすいロバストな設計ができあがる
問題解決に関しては
深さ優先の手法は、照準を合わせる領域を正しく選択した場合にのみ、うまくいく
プルシステムの特徴は「見える化」つまり目で見るマネジメント
「ヒトは生産性の測定対象となる計測結果を最適化しようとする」ので測定対象は慎重に選ばないといけない。
オースチンの指摘
個人の成果計測値を個人に帰するのではなく集合化することが重要だ