Titanium Mobileの環境を入れた

Xcode 4.2 for snow leopardが見つからなかったので、Lionに上げてXcodeの最新版を入れた。

titanium mobile

そんなこんなで半日がかりで環境構築までは進んだが、実機欲しいなぁ(iPhone)

ProductName Titanium Mobile iPhone/Androidアプリ開発入門―JavaScriptだけで作る
小澤 栄一
秀和システム / 2520円 ( 2012-02 )


今積んである本

アルゴリズムの本。いまいち読む気分になれない

Titanum Mobileは興味があるので次に読む本としてはこれが候補かな。

ProductName Titanium Mobile iPhone/Androidアプリ開発入門―JavaScriptだけで作る
小澤 栄一
秀和システム / 2520円 ( 2012-02 )


これは流し読みしたら途中で挫折したので、今度は丁寧に読む予定

ProductName Scheme修行
Daniel P. Friedman and Matthias Felleisen
オーム社 / 2940円 ( 2011-06-15 )


予約してあるやつ

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


SpineのtodoサンプルをSpine.appで書いてみた

SpineのtodoサンプルをSpine.appを使って書いてみた。これはBrunch(Backbone.js)みたいに、モデル、ビュー、コントローラーをバラバラに開発してbuildすると一つのjsファイル(cssも)にアセンブルしてくれるツールですね。テンプレートはecoを使っています。

index.coffeeの役割がわかりづらかったので理解するのにちょっと時間がかかった。

hem model task

とかやるといっしょにテストのひな形が作られるのとlocalhost:9294/testにアクセスすればjasmineのテストが走るようになっているので使いやすそう。

そして以下の素晴らしい三部作を読んでSinon.jsの便利さに目覚めたので積極的に使っていこうと感じた。

Spine.Model.AjaxつまりRESTのAPIはFlaskを使おうと思っているんだが、Flask-Restlessを利用するのが手っ取り早くていいかなぁと。

javascriptでundefinedから真偽値を作り出す

spine.todosのtodoがデフォルト値を入れてないのに真偽値を返すので、なんでだ?と。

適当なオブジェクトを作って確かめてみると確かに真偽値が返ってくる。

> t = {name:'kzfm'}
{ name: 'kzfm' }
> !t.done
true
> !!t.done
false

結局undefinedかと。

> !undefined
true
> !!undefined
false

JGPのappendixにundefinedはfalsyだって書いてあった。

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / 1890円 ( 2008-12-22 )


でもちょっとわかりづらいなぁ。

brunch(backbone.js)を触りまくってたら日が暮れた

Brunchはいまだにお作法がよくわからん。やっぱbackbone.jsから地道にステップアップしていくのがいいのか?

ProductName Developing Backbone.Js Applications
Addy Osmani
O'Reilly Media / 2760円 ( 2012-07 )


さて、クライアントサイドMVCってことはクライアント側に小難しい処理が移行しているってことですよね。加えてHTML5的な潮流はマークアップじゃなくてCSSでデザイン周りをやれというimplicitな意図を感じるわけです。さらにclosureみたいなアプリケーション構築用のライブラリの存在を考えると、jQueryでプラグイン入れまくりのスパゲッティライクなフロントエンドがどこまで許されるのかなぁと思ったりする。

ふとWOMASという言葉がよぎった。

Webservice Of Maintainability And Sustainability

BrunchというクライアントサイドのMVCフレームワーク

クライアントサイドのMVCフレームワークはbackbone.jsSpineのどっちかかなぁと。

coffeescriptで書けるSpineを使おうかなぁと思っていたのだけど、Brunchっていうのが便利そうなので調べてみた。

brunch

Application assemblerと銘打っているようにBackbone.jsを軸にjQueryやJade,Stylusの面倒をまとめてみてくれるうえにcoffeescriptでの開発がデフォルト。

ディレクトリの階層もわかりやすいし、使いやすそうなのでbackbone.jsを覚えておこうかなと。

ProductName JavaScript Web Applications
Alex Maccaw
Oreilly & Associates Inc / 3020円 ( 2011-08-30 )


静岡Developers勉強会 第4回HTML5読書会

三島でやります。

ProductName HTML5&CSS3実践入門 最新Web標準を使いこなす (The Pragmatic Programmers)
ブライアンP.ホーガン
インプレスジャパン / 2940円 ( 2011-07-08 )


今回は、ローカルストレージ、websocket、History APIあたりなので、以下の話題に興味があれば参加すると面白いかもしれません。

次の本

入門Gitを推しておきます。GitHubでフォローしているShizudeverいないんだよね、増えたらいいなっていうのが理由の一つ(他のサービス使っているんだろうか?)。もうひとつはブランチの切り方がイマイチきちんと身についてないので、勉強会で人が集まれば複数人作業ってのを試すことができるかなと。

ProductName 入門Git
濱野 純(Junio C Hamano)
秀和システム / 2310円 ( 2009-09-19 )


TodoっていうNode.js製のtodo管理ツール

CLIで良い感じ

$ npm install -g todo

でインストールできる。

node_todo

help:   
help:   todo - Todos in the CLI like what.
help:   
help:   Usage:
help:   
help:          todo Go shopping. - Adds new item.
help:          todo ls.          - Lists not finished items.
help:          todo ls --all     - Lists all items.
help:          todo rm 1         - Removes #1 item.
help:          todo check 1      - Marks #1 item as done.
help:          todo undo 1       - Marks #1 item as not done yet.
help:          todo clear        - Clears the whole list.
help:          todo version      - Lib version.
help:   
help:   Author: Veselin Todorov <hi@vesln.com>
help:   
help:

Node.jsのテスト系のライブラリなんかもそうなんだけど、ターミナルに色付きで表示されると見やすくていいですね。オプションもわかりやすいので、端末にちょっと入れておけばtodo管理ができてイイかも。普段はGmailのタスクを使っているので同期できると嬉しいんだけどねー

と思いながら調べたらGoogle Tasks APIってのがあったけど、これでいいんだろうか?あとで試してみよう。

テスト駆動Javascriptでテスト駆動開発を学ぶ

中級者向けのJavascript開発の本として読んでもいいし、テスト駆動開発の入門書として読んでも良い感じ。名著だと思う。

ProductName テスト駆動JavaScript
Christian Johansen
アスキー・メディアワークス / 3780円 ( 2011-11-25 )


自分はプログラマーの集団的な組織に属したことがないため、開発の色々(特にペアプロ)なイメージが良くわからんし、TDDもイマイチ理解していない感があったので、本書のように丁寧に書いてある本はありがたかったりする。

第三部の「Javascriptテスト駆動開発の実際」のパートが面白いが、その中でも特にNode.jsによるサーバーサイドのテスト(14章)とクライアントサイドのテスト(15章)が非常に良かった。この2章だけで90ページくらいあるし、じっくり写経したら2日を費やしてしまったが、得るものは多かった。特に実際のコードとテストコードが絡み遭いながら完成に向かって進んでいく感を味わえたのはなかなか素晴らしい体験だった。

ちなみに14章ではNodeunitを使ってたけど、実際に自分が使うならVowsかなぁと(CoffeeScriptでも使えるしね)

エディタに関しては、Emacsの場合、縦分割して左にコード、右にテスト出して交互に切り替えながら進めていくのが調子良かった。

一部がテスト駆動開発の一般論で、二部がJavascriptの概論だけど、第4章の「学ぶためのテスト」というパートが面白かったかな。他の人が書いたライブラリを観察するために、テストの形で評価した内容を記述しておくという方法論は斬新だった。 まぁ、よく考えてみると、自分も新しいモジュールを理解したい場合はまずテストを眺めて、よく分からない場合は、対応する部分のソースコードを読んでふるまいを理解したりするので、結局そういったやりかたの形を変えて、積極的に観察とその記録を取っていく手法って考えればいいのかと思った。

おまけ

html2jadeでHTMLを読みやすくする

HTML5ベースのスライドつくる場合はJadeみたいなインデントでブロックを表現するような形式のほうが見やすいし書きやすい。

html2jadeを使えば、逆にhtmlをjadeに変換して読みやすく出来るのでオススメです。

impress.jsのindex.htmlをjadeに変換してみた。読みやすい。

impress

      #bored.step.slide(data-x='-1000', data-y='-1500')
        q
          | Aren't you just
          b bored
          | with all those slides-based presentations?

      .step.slide(data-x='0', data-y='-1500')
        q
          | Don't you think that presentations given strong in modern browsers
          | shouldn't strong copy the limits
          | of 'classic' slide decks?

      .step.slide(data-x='1000', data-y='-1500')
        q
          | Would you like to strong impress your audience
          | with strong stunning visualization
          | of your talk?

      #title.step(data-x='0', data-y='0', data-scale='4')
        span.try then you should try
        h1
          | impress.js
          sup *
        span.footnote
          sup *
          | no rhyme intended

      #its.step(data-x='850', data-y='3000', data-rotate='90', data-scale='5')
        p
          | It's a
          strong presentation tool
          br
          | inspired by the idea behind
          a(href='http://prezi.com') prezi.com
          br
          | and based on the
          strong power of CSS3 transforms and transitions
          | in modern browsers.

      #big.step(data-x='3500', data-y='2100', data-rotate='180', data-scale='6')
        p
          | visualize your
          b big
          span.thoughts thoughts

      #tiny.step(data-x='2825', data-y='2325', data-z='-3000', data-rotate='300', data-scale='1')
        p
          | and
          b tiny
          | ideas