はじめてのcocos2d for iPhone

なかなか楽しい。

cocos2dtest

Objective-Cの基本を理解しているのを前提にしているようなので、僕はとりあえず別の本を読んだ後にこの本を読み始めた。

ProductName cocos2d for iPhoneレッスンノート
加藤寛人
ラトルズ / 2499円 ( 2011-09-22 )


Haskell Platformをアンインストールして綺麗な環境を取り戻す

なぜか/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ディレクトリを消せばいいだけなので、精神的によろしい。

Haskellの一般化代数データ型(GADT)

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

ProductName プログラミングHaskell
Graham Hutton
オーム社 / 2940円 ( 2009-11-11 )


Haskellerも順調に増加している

Objective-Cに入門した

構文がキモいとか書かれているのを見て敬遠してたのだけど、Haskell最初に読んだ時とかOCamlとかOzのほうが強烈だったな。あいつらと比較すれば[Java,C,C++,Go,Objective-C]でくくれるじゃんとか思ったけど、実際にアプリ作るとキモいとか思うのかな。

読んだのはObjective-Cの入門本でiPhoneアプリ開発系の本ではない。

ProductName XcodeによるObjective-C入門
大津 真
毎日コミュニケーションズ / 3150円 ( 2010-01-23 )


構文

ラベル

メソッド名とセレクタ、ラベルがわかりにくかった

クラスメソッドの実行

[[NSString alloc] init]

と、括弧でくくるとクラスメソッドの実行になる。newとかないのかな?と思ったら

[NSStrint new]
// [[NSString alloc] init]と等価

でもいいらしい。

idは汎用データ型

どういう場面で使うといいのかいまいちわからん

property

@property  変数名;

で、ゲッタとセッタが簡単に定義できる(@synthesizeも必要)

これを使うとpythonみたいに.でアクセスできる

カテゴリ

使いどころがいまいちわからん。ミックスインとも違うんだよなぁ。

Tips

  • open -h とhオプションでヘッダファイルを検索して開くことができる

というわけで一通り頭に入れたのでCocos2Dの本でも読もうかなと思う。

はじめてのObjective-C

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でないんだよな。重いのはつらい。

ProductName 詳解 Objective-C 2.0 第3版
荻原 剛志
ソフトバンククリエイティブ / 3990円 ( 2011-12-28 )


HaskellのType Familiesがわからんよ(改めわかった)

Yesodの本を読んでいて、Type Familiesでいきなり躓いた。

1349308784

class SafeHead a where
    type Content a
    safeHead :: a -> Maybe (Content a)

の type Content aでContentってなんで必要なの?という。

Content a :: *

なんだろうけど

a :: *

にはならんのかね?

ProductName Developing Web Applications With Haskell and Yesod
Michael Snoyman
Oreilly & Associates Inc / 2805円 ( 2012-05-04 )


追記 2012.10.04

@koyama41教えてもらった

「型引数を取って結果の型を返す、型レベルの関数」という表現から抽象への理解がぱっと上がった気がする。

わかってしまうと最初の方の疑問は寝ぼけたものだった。Haskell面白い。

Haskellのモナド内包表記(リスト内包表記じゃないよ)

リスト内包表記とリストモナドのdo表記の関係性がわからない場合にはReal World Haskell 14章のUnderstanding the list monadか、すごいHaskellの13章を読んでおくと良いです。

ProductName すごいHaskellたのしく学ぼう!
Miran Lipovača
オーム社 / 2940円 ( 2012-05-23 )


モナド内包表記

栄光のグラスゴー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)

しかしこれは読みにくい。

Nexus 7が到着した

Fedexは宅配ボックスに入れておいてくれないとか再配達に同期するタイミングがつかめないとかプチトラブルはあったけど無事に到着した。

1349257804

軽いし片手で持てるので電子書籍リーダーとして使うには良い感じかも。

早速Yesodのepubを購入した。

1349257806

そして読む

Titanium Mobile Cookbook

緑の本読んだら、これを読むのがいいかも。

ProductName Appcelerator Titanium Smartphone App Development Cookbook
Boydlee Pollentine
Packt Publishing / 3810円 ( 2011-12 )


参考になったテク

  • Raphael.jsを使ってチャートを実装
  • 「引っ張って更新」の実装
  • Facebookや他のSNS系サービスとの連携のさせ方

リーンソフトウェア開発を読んだ

アジャイルとは結局のところ何なんだろう?という疑問が再浮上してしまった。

アジャイル・ソフトウエア開発を、トヨタの生産方式とし知られる「リーン思考」の視点から解説したユニークなアジャイル解説本です。「ムダをなくす」という意味のリーン思考と「俊敏さ」を主眼とするアジャイル開発とは、根本的なところで実は同じ考え方であり、方法論としても共通するところが多くあります。

ソフトウェア開発は製造と大きく異なるが、創薬もソフトウェア開発と大きく異なると思う。

開発はレシピの作成であり、製造はレシピにしたがって料理をつくることであると考えていい。

という文脈にならうのであれば、創薬とはレシピの発見である。つまり見つかるかもしれないし、見つからないかもしれないという不確定さが常につきまとう。

ProductName リーンソフトウエア開発~アジャイル開発を実践する22の方法~
メアリー・ポッペンディーク
日経BP社 / ?円 ( 2004-07-23 )


7つのリーン原則

  1. ムダの排除
  2. 学習効果を高める
  3. 決定の遅延
  4. できるだけ早く提供
  5. チームに権限を与える
  6. 統一性
  7. 全体をみる

ムダの排除に関して

だれも読まないペーパーワークは価値を付加しない

バリューストリームマップも重要

学習効果を高める

ある程度の新しい情報を得るためには、ある程度の失敗率がなくてはならない

決定の遅延

イテレーションをくり返すなかで、自然と設計が浮き彫りになってくるようなシステムの作り方をすると、開発中に発生する変更に対応しやすいロバストな設計ができあがる

問題解決に関しては

深さ優先の手法は、照準を合わせる領域を正しく選択した場合にのみ、うまくいく

できるだけ早く提供

プルシステムの特徴は「見える化」つまり目で見るマネジメント

全体をみる

「ヒトは生産性の測定対象となる計測結果を最適化しようとする」ので測定対象は慎重に選ばないといけない。

  • 標準化
  • 仕様化
  • 分解

オースチンの指摘

個人の成果計測値を個人に帰するのではなく集合化することが重要だ