東京Node学園 1時限目 メモ

東京Node学園 1時限目 : ATND

var memo = {
    opening: [ {
        speaker: '@meso',
        title: 'ご挨拶 / 5分でわかるNode.js',
        contents: [
            'http://tng1.mesolabs.com/',
            'キーワードはイベント駆動, 非同期(non blocking)',
            '簡単に早い非同期サーバが書けるよ!'
        ]
    } ],
    main: [ {
        speaker: 'masuidrive',
        title: 'ECMAScript5時代のJavaScript再入門',
        contents: [
            'JSON support / map, forEach / Objectの拡張 / strict mode など',
            'IE8 はECMA 5にだいぶ遅れてる 使えない子',
            'JSLintを使おう SVN, Gitコミット時などにチェック',
            {
                '非同期処理かきやすい': [
                    'インデント深くなるのがアレ',
                    'そこでDeferred',
                    'エラー処理もイイカンジで書ける'
                ]
            },
            {
                'ObjectのGetter, Setter': [
                    'プロパティへの代入、参照のときの処理を指定',
                    '内部で持つ値を整数値だけにしたりできるよね'
                ]
            },
            'freeze, seal アクセス権限の制御など',
            'Object.create() プロパティ設定してObject生成?',
            'その他 Arrayにイテレータ,Object.ke ys() など便利機能が多数',
            {
                'Test!': [
                    'HTTP経由でテストしてると時間かかる',
                    'Jenkins使ってるひと色々教えて!',
                ]
            }
        ]
    }, {
        speaker: '@koichik',
        title: '『非同期プログラミングの改善』のエッセンス',
        contents: [
            'Node本書いてます',
            {
                '非同期プログラミング': {
                    'イベントリスナ スタイル' : 'hoge.on("fuga", function())',
                    'コールバック スタイル'   : 'hoge.fuga("piyo", function(err, data))'
                }
            },
            {
                '問題': {
                    'コールバック'       : '深いネスト',
                    'エラーハンドリング' : '例外処理を各コールバック内でやると散在'
                }
            },
            'アクターとコールバックを分離',
            '無名関数とコールバックを分離し、コールバックは「次」の無名関数(アクター)を呼ぶ',
            'ライブラリ: "フロー制御モジュール"を用意しよう',
            'ライブラリ中でArrayで無名関数を保持、順番にメソッドを呼ぶ',
            'これでネストと無名関数の問題は解決',
            'エラー時のルーティング エラーが起きたら以降の処理を全部すっ飛ばせば良い',
            'さらに別のイディオムも。続きは書籍で!'
        ]
    }, {
        speaker: '@Jxck_',
        title: 'Test It!',
        contents: [
            {
                'nodeのtest': [
                    'assert: 失敗したらAssertionErrorを吐くよ',
                    'test framework: それぞれのtest成否を集計する',
                ]
            },
            'npm test: common.jsに沿ったtest framework',
            {
                'should': [
                    'いわゆるBBD style?',
                    'Objectのprototypeを利用',
                    'メソッドチェインでテストが書ける'
                ],
                'expresso': [
                    'パラレルでtest可能、シリアルでもok',
                    'coverageもとれる',
                    'httpサーバのテスト書きやすい'
                ],
                'nodeunit': [
                    '割と簡単に使えるunittest framework',
                    'setup, teardown可能',
                    '基本的には直列実行',
                    'Sandbox機能'
                ],
                'vows': [       // ばうず
                    'http://vowsjs.org/',
                    '非同期なものをテストするのに長けてる',
                    'topic, batch',
                    'event emitterをtriggerしてやる',
                    '@koichikの連載を読むべし'
                ],
                'tobi': [
                    'ブラウザシミュレート型',
                    'Test::WWW::Mechanize的な?',
                    'jQueryセレクタを使ってassertionしたり'
                ]
            },
            'その他 sinon, gjslint, node-dev とかもろもろ たくさん' // flymakeに使うと良いらしい
        ]
    } ],
    LT: [ {
        speaker: '@hakobera',
        title: 'Kinect + node.js + Audio Data API でテルミンみたいな楽器を作る',
        contents: [
            'kinnectから TCP/IP -> node server -> socket.ioでブラウザに',
            'kinnect.js',
            'libfreenectのJavaラッパーでRhinoを動かしてその上で実行',
            'device side javascript'
        ]
    }, {
        speaker: '@ndruger',
        title: 'node.jsによるマルチプレイヤーネットワークゲームの可能性',
        contents: [
            'いきなりデモ',
            'クライアント側をいじるだけで同じものが3Dでできたり',
            '簡単に作れる時代になってるよ!'
        ]
    } ]
};