Alloyのモデル

ドキュメントによると、

Alloy uses Backbone.js to provide support for its models and collections. Alloy also borrows the concepts of migrations and adapters from Rails for storage integration.

ということでmodelの仕組みはbackbone.jsっぽくてマイグレーションはRoRっぽいが、設定周りがちょっと違う。

  • 'sql' for the SQLite database on the Android and iOS platform.
  • 'localStorage' for HTML5 localStorage on the Mobile Web platform.
  • 'properties' for storing data locally in the Titanium SDK context.

とどのストレージを使うか選ぶ。backbone.jsとかspine.jsだとlocalstrageかrestなところが選択肢が増えたことで型とか設定するようになっている。

モデルの変更とかで送られてくるイベントの種類はドキュメントに書いてないのでソースコード読まないといけないっぽいんだけど、backbone.jsと同じかなと思っている。

alloy / test / apps / models / propertiesを眺めてみたんだけどcollectionの位置づけがわからなかった(backbone.jsのコレクションとモデルって分かれてるよね)。

なんか書いてみないとダメだな。

AlloyのTSSで演算させる

alloy / test / apps / advanced / themesはconfig.jsonでプラットフォームごとにテーマを切り替えるというサンプル。

alloy themes

TSSっていうのはAlloyのスタイルシート(CSS)みたいなものだが、exprを使うと演算できる。昨日@k0sukeyが言ってたのはこれのことかと今更理解したわけだが。

スライダーが縦になっているが、これはTSSをみると

"#slider": {
    leftTrackImage: '/title_green.png',
    top: 228, 
    left: -145,
    width: 350,
    transform: expr(Titanium.UI.create2DMatrix().rotate(-90))
},

こんな感じで縦方向に-90度回転されている。

Alloyでの継承(というより別のところが理解できてない)

alloy / test / apps / advanced / inheritanceを読んでみた。継承は分かりやすいが、windowまわりがいまいちわからん。

controller/index.js

$.index.open();

function openDialog(e) {  
    Alloy.createController(e.source.title, {
        message: 'Opened ' + e.source.title
    }).openDialog($.index);
}

createControllerメソッドで文字列を渡すとコントローラーが作られる。

views/index.xmlはこんな感じになっていて

<Alloy>
    <Window>
        <View layout="vertical">
            <Button onClick="openDialog">baseDialog</Button>
            <Button onClick="openDialog">animatedDialog</Button>
        </View>
    </Window>
</Alloy>

Buttonのtextじゃなくてtitleで渡される(e.source.title)みたいだ。コード追っかけててちょっと引っかかった。

openDialogメソッドはそれぞれのコントローラーで実装されている。

controllers/baseDialog.js

var args = arguments[0] || {};
$.message.text = args.message || 'dialog';

exports.openDialog = function(win) {
    $.refWin = win; 
    $.refWin.add($.cover);
    $.refWin.add($.dialog);
}

exports.closeDialog = function() {
    $.refWin.remove($.cover);
    $.refWin.remove($.dialog);
    $.refWin = $.cover = $.dialog = null;   
}

refWinってなんだよ?と思ったが新しい属性作って放り込んでいるだけなのかな?あとWindowにWindowを追加してんの?($.refWin.add)。それとも$.cover,$dialogはviewなんだろうか?コンパイル後のコードを読むにはどうしたらいいんだろうか?

継承はexports.baseControllerにスーパークラスを指定する。あとは普通にメソッドを上書きすればいい。

// Establish inheritance from baseDialog
exports.baseController = 'baseDialog';

// Override baseDialog's openDialog() function. We will still
// be able to use baseDialog's closeDialog() function.
exports.openDialog = function(win) {
    $.refWin = win; 
 ...

}

飼い犬が8歳になった

すっかりおばさん顔

1351985705

ジャーキーがろうそく代わり

1351985703

静岡 Titanium Mobile もくもく会に参加した

参加されたみなさんお疲れ様でした。

titanium cliでのアプリ開発の流れを学んだのが大きな収穫だった。Titanium Studioを使わずにEmacsで開発できるようになるのは個人的には非常に大きい。

ステッカー頂いた。

1351985625

インストールとか使い方は先取り “新” Titanium CLIの通りなんだが、titanium createコマンドがなかったのでちょっと躓いた。結局Developer Preview: The New Titanium Command Line Interfaceにあるように

titanium sdk install --branch 3_0_X --default

と打って、3.0系を入れることでtitanium createが使えるようになった。

もくもく会ではtodoMVCをalloyでやるつもりだったんだけど、Alloyのドキュメント読んで、Test/Basicsを触ったら終わってしまった。

todoサンプルを見つけたのでこっちも読んでみる。

その他

  • iPad miniは実物みると欲しくなる
  • mac book pro retina素敵。コンパイル速くて羨ましい(僕のはmacbook 2008 early)

bottomを理解して関数プログラミングへの理解が深まった

関数プログラミング入門の8ページにいきなりbottom(⊥)の説明があって、今までよくわからなかったのが「あーそういうことかーーーー!」ってなって、第8回 遅延評価の仕組みもよく理解できたし、頭部正規形なんかもその流れでさくっと理解できた。

ProductName 関数プログラミング入門 ―Haskellで学ぶ原理と技法―
Richard Bird
オーム社 / 3990円 ( 2012-10-26 )


f(⊥) = ⊥だったら正格で、そうじゃなかったら非正格ってことですね。

::: haskell
Prelude> let two x = 2
Prelude> two undefined
2
Prelude> two $! undefined 
*** Exception: Prelude.undefined

RWHでも確か載ってたなぁと思って探したら24章の並行マルチコアプログラミングの章だった。

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan
オライリージャパン / 3990円 ( 2009-10-26 )


Canopy ClusteringとDeep Learning

システム構築してるはずが、ここのところ分析多めというか120%

Canopy Clustering

ちょっと調べ物をしていてCanopy Clusteringという手法がmahoutに実装されていて面白そうだったので、論文読んでみた。

最初、自動で分割数選んでくれるのかーと勘違いしてたのだけど、荒くクラスタリングしてその後K-meansとかGreedy Agglomerative Clusteringに渡すだけらしい。分割数も荒いクラスタリングの中でAICとかBICを使って普通に求めるっぽい。

ProductName Mahoutイン・アクション
Sean Owen
オライリージャパン / 4200円 ( 2012-10-26 )


調べていく過程でIIR読めというような啓示があったが、積んであるのでそろそろ読もうかと思った。

ProductName 情報検索の基礎
Christopher D.Manning
共立出版 / 8400円 ( 2012-06-23 )


Deep Learning

NNがアツいらしい。活性予測なんかでも好成績をおさめているらしいのでちょっと興味がわいた。

Merck Molecular Activity Challengeはなかなかいい試みだなぁ。日本でもどこかがやらないかなぁ(リーディングカンパニーとか)

特に興味を惹かれたのは

いくつかの分野、特に人の認識に関係するような画像、音声、言語といった分野では既存の技術を大きく超えている感があります。

ドラッグライクネスというモヤモヤ感満載の指標がRo5から置き換わるのであれば素晴らしいことかもしれない。

11/3は静岡 Titanium Mobile もくもく会ですよ

javascriptでiPhoneアプリをつくりつつ、お昼にみんなでつけナポリタンを食べにいきましょう。

車でくる場合、ほんいちパーキングとかいうところに停めると2h無料になるんだけど、入り口が裏手にあってわかりにくいので、確認してから来たほうがよいかも。

僕はalloyTodoMVCでもやってみようかなぁと。

ナノブロックが面白い

子どもと一緒に作ってみた。

1351680791

子供の手伝い専門だったが、これはなかなかはまりそう。ハロウィンな感じのもあった。

ProductName nanoblock ジャック・オ・ランタン2012

カワダ / 777円 ( 2012-09-13 )


東京スカイツリーって難易度高そう

Node.js入門を読んだ

500ページ超の大作だが読みやすかったのでさくっと読みおわった。

ProductName サーバサイドJavaScript Node.js入門
清水俊博
アスキー・メディアワークス / 3990円 ( 2012-10-26 )


16章のExpressの章が丁寧、しかも分かりやすく書かれて理解が深まった。ここだけでも購入した意味があったかも。

他には7,9,10のイベント、ネット関係と22章のnpmパッケージを作る章がよかった。