クライアントサイドMVCのノリでiPhoneアプリをつくる。それがalloy

@k0sukeyに教えてもらったalloyっていうTitanium Mobile用のMVCフレームワークがなかなか面白げなので触ってみた。

backbone.jsを土台にしているそうなので、そこら辺を知っていれば分かりやすいかなと思う。

Quick Startを写経したら10分程度でここまで出来た、すごいラクチンかもしれない!

alloy

注意点(Titanium StudioとNode.js使っている前提で)

  • nodebrewとか使っている場合はplugins/ti.alloy/plugin.pyのguessPathsにパスを追加しておく
  • これみてプラグインを入れておく

静岡 Titanium Mobile もくもく会 #01

というわけで、こういったあたりの内容でもくもく会をやります。

基本はもくもく会(無線LAN完備)なのですが、プロジェクタも用意してあるので、@k0sukeyがalloyのさわりをレクチャーしてくれるかもしれないし、僕(CoffeeScript派)がSpine.jsの布教活動をしているかもしれません。緩い流れで進行していくと思います。

  • Titanium Mobile
  • Alloy
  • Backbone.js(or Spine.js)
  • jQuery Mobile
  • (Cocos2D)

なんかに興味がある方は参加するとハッピーになれるはず。

それから会場の吉原にはB級グルメのつけナポリタンがあるので、変わったつけ麺が食べてみたいという動機でもいいかもしれないですね。

Cocos2dでつくるノベルゲーム

3章を写経してみた。

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


  • NSClassFromStringという便利メソッドがある
  • itemFromNormalImageは廃止されていてitemWithNormalImageになっている
  • CCNodeの初期化処理のやりかた
  • CCSceneは画面表示のルートになれるが、CCLayerはなれない
  • CCSceneは「ゲームの状態」CCLayerは「シーン内の意味のあるまとまり」

次章はボリューム大きめのシューティングゲーム

型の本

ここらへんか?

ProductName Types and Programming Languages
Benjamin C. Pierce
The MIT Press / 6567円 ( 2002-02-01 )


ProductName Advanced Topics in Types and Programming Languages

The MIT Press / 5829円 ( 2004-12-23 )


「関数プログラミング入門 ―Haskellで学ぶ原理と技法―」は予約した

Haskellの入門書に型推論の話題が含まれていないのはなんでだろう?

最近やったことを振り返ってみると

型推論のための知識ばかりじゃないかと。メタな知識がないとまともなコード書けないってことか、コード書くのには必要ない余計な知識を詰め込んだのか(多分前者だと思うけど)。

Haskell の型システムは2つの重要 な特性を発揮します。ひとつめは、正しく型付けされた式はいづれも唯一の主型 (これについては下で説明します)を持つことが保証されるということです。ふた つめはこの主型は自動的に推論できるものであるということです(§4.1.3)。Cのように単 態型を用いる言語と比較すると、多相性のある言語では表現力がアップしている のがわかると思います。型推論機構は、プログラマが型の問題で頭を悩ますこと を軽減してくれます。やさしい Haskell 入門 (バージョン 98 )

結局のところ、型推論機構の知識がないとプログラマが型の問題で頭を悩ますだけで、Haskellの型推論機構の恩恵を受けられないよってことじゃないのかな?と思うのだけど、なぜ入門書にそういう話題が含まれていないのだろうと思った。

あちこち探しまわって断片をかき集めてちょっとづつ理解していくのはちょっとしんどいかも。

僕は楽しかったけど。

ProductName Basic Category Theory for Computer Scientists (Foundations of Computing)
Benjamin C. Pierce
The MIT Press / 2302円 ( 1991-08-07 )


ランク2多相とかランクN多相を理解する

これもわかってしまえば、分かりやすい概念かもしれないが。

GHCが暗黙の量化を行う手順は次のとおり。ユーザが書いた型の最上位(のみ)において、明示的なforallがないなら、またその時に限り、その型で言及されているもののスコープにない型変数を調べ上げ、それらを全称量化する。7.11.5.3. 暗黙の量化

をみると小難しい話なのかな?と思うが、具体例は分かりやすい。

f :: (a -> a) -> Int
         -- は
f :: forall a. (a -> a) -> Int
         -- のことであり
f :: (forall a. a -> a) -> Int
         -- ではない

なんというか数学の定義っぽいことをやっているが、代数的データ型だからそういうもんなんだろう。

ランクとはforallの深さ、つまり括弧のこと(層)のことを言っているわけである。

Haskellの関数従属とは「ある型が決まれば別の型が一意に決まる」という依存関係のこと

使う時にはあまり気にならないが、「| m -> s」が関数従属性を定義しているらしい。

第6回 局所的な「状態」を利用するためのStateモナド

class (Monad m) => MonadState s m | m -> s where
    get :: m s
    put :: s -> m ()

結局コレは何かというと以下のエントリが参考になる。

この「| a -> v」の部分は「aを引数に取りvを返す関数」ではなく、型同士の依存関係を関数形式で記述したものです。意味としては「aが決まればvの型が一意に定まる」ことを意味しています。型クラスにおける関数従属

具体例は関数従属の背景で丁寧に解説されているが、型推論の際の曖昧性の排除を目的としているという理解でいいのかな。

参考

cocos2d for iPhoneで神経衰弱を作ってみた

本の通りにやっただけだが、cocos2d for iPhoneのバージョンが2.1-beta2なので本書執筆時の1.0.1と多少違っていた。

  • いきなりIntroLayerってのが出来ててちょっと戸惑った。
  • [CCTouchDispatcher sharedDispatcher]が廃止されていて、[[CCDirector sharedDirector] touchDispatcher]になった
  • Clear表示のCCLayerColorが半透明になってくれない(typoかなぁ?わからん)
  • 実機転送したら表示が小さい(これに困っている)

cocos

XCodeはGitとの連携もできるので、コミットしながらすすめていけるのは楽かな。あとCocos2dは慣れれば分かりやすいかもしれない。

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


シャバドゥビ タッチ ヘーンシーン!

そろそろ探し始めないといけないらしいんだが。

このベルトはどう考えてもダサいんだけど。すぐ飽きるだろ。

Wii Uのソフト買ったほうがいいんじゃないのかなぁと思うんだが、そういうわけにもいかないんだよなぁ。

Haskell外部ライブラリの型をShowクラスのインスタンスにしてデバッグを楽にする

外部ライブラリを使っていてプリントデバッグをしたい時に、型がShowクラスのインスタンスになってないと印字されないので困る。

そういう時には、StandaloneDeriving拡張を使って外付けでderiving instance Showすればいい。

が、全てにderiving instance Showするようなデバッグ用オプションがあってもいいような気もするが。

コードの未来

タイトルだけからは何について語っているのか分からなかったので避けてましたが、読んでみるととても面白かった。

近未来の技術がどういう方向に動いていって、それにともなって言語はどうなっていくのかとかそういう話です。

しかし、現在のスレッドやRPCのような分散や並列を明示的に意識するような形では早晩限界が来ると思います。

と思っているので僕の場合はHaskellですね。

特に言語の話が面白かったが、SQLの話が個人的に一番おもしろかった。

  • NoSQLデータベースが優れていると言われているのは、性能と柔軟性のためである
  • SQLよりもNoSQLのほうが正のが良いというのは必ずしも事実ではない
  • 性能問題とSQLやACID特性には関係がない

ProductName まつもとゆきひろ コードの未来
まつもと ゆきひろ
日経BP社 / 2940円 ( 2012-05-17 )


  • プログラミングとは、アプリケーションのためのDSLデザインの過程である
  • DSLデザインの構成要素(コンテキスト、センテンス、ユニット、ボキャ、ヒエラルキ)