東京Node学園 11時限目 アウトラインメモ
東京Node学園 11時限目
東京Node学園 11時限目 – connpass に参加してきたのでメモ
始まるまで何故か設営を手伝ってた
「これからのNodeの話をしよう」 by @yosuke_furukawa
- Node学園の代表変更
Node.js news
- Izaacs -> TJ FontaineにNodeの代表が変わった
v0.12
リリースが近そう- Stream3
- cluster round robin
- multiple context in vm
- sync child_process
- tracing api
--harmony
はデフォルトにならないことに決定
- sync child_process
- child_process に同期APIが追加された
- 同期的にプロセスを呼べるので、Task Runnerとかに便利
- tracing api
- V8のプロファイリングAPI
- nodeからheap memoryの状況を取得できるようになる。
気になるNode.jsライブラリ
- Koa
- generatorを使った構造
- 直感的に
try-catch
でエラーハンドリングできる - koa入門 – from scratch
- Socket.IO
- Primus
- 色々なリアルタイム系をラップして後から実装を変更できる
今後
意見は集約しやすいようにしよう
わいわいわーい
「browserifyことはじめ 〜その仕組みと活用〜」 by @hitsujiwool
browserifyの概要と使い方
- CommonJSのコードをブラウザで実行出来るコードに変換
browserifyの実装
$ browsefiy src/main.js > public/bundle.js
で変換できる。
- nodeの組込みモジュールが使える
-r
で外部モジュールのrequire()
を可能に--noparse
依存関係の探索を省略-
transformによるコードの変換処理(transform)
- 依存関係の探索(detective)
- モジュールのパス解決(browserify-resolve)
- ブラウザで実行可能なコードを生成(browser-pack)
さまざまなプラグイン(transform)
- 多様なフロントエンドの生態系
- 普通のJavaScript
- AMD
- altJS
- テンプレートエンジン
- パッケージマネージャ
プリプロセッサとしてのtransform
deglobalify
window
をexports
に変換する
exposify
deamdfy
- AMDをCJSに変換
coffeeify
- CofeeScript
hbsfy
- handlebars
debowerify
- bower経由で入れたものをnpm経由で入ったようにする
まとめと展望
- nodeライクなモジュールシステム
- サーバサイドJSの資産を活用できる
- Streamとの親和性が高い
- transformによる柔軟な前処理
何でも詰め込みすぎ?
- transformとtask runnerの被る部分がある
- 配布方法とかも多様化しすぎ
質問
Q: Buffer の代替実装は普通にやったら遅くならない?
- feross/buffer の実装次第
Q: CDNから読み込むライブラリと共有できる?
- globalに置くようにして、普通にscriptで読みこめば一緒に使える?
「NodeでDeep Learning」 by @Lewuathe
- 機械学習のアルゴリズムの一つ
- ニューラルネットワークを使った方法
- 脳のニューロンのやり取りをモデル化したようなネットワーク
- ニューロン = モジュールを組み合わせて入力から出力を得る
- 入力に対する判別等を学習させていく
- 入力データを用意する(入力のデータ)
- 教師データを用意する(ラベルとなるデータ)
- モデルを作成する
- Stacked Denoised Autoencoder (ノイズを除去する)
- 学習させる
- ノイズをかぶせたりして、学習させる
- 出力層
- 学習させた結果が何であるかを教える
- NodeでDeep Learning率直にする計算させると遅い
- クラスターとかNodeらしい方法があるかも
「非同期プログラミング養成ギブスとしてのnode.js」 by @niryuu
- node.jsで非同期プログラミングをやっていく事で教訓を得て行った
非同期の難しさ
- いったん元のコンテキストから切り離して、戻ってくるので処理がリニアではない
- 切り離すのはOK
- どう戻ってくるのかが大事
戻すのがマズいと大変
- 終わった/失敗した非同期処理、終わらない実行
- node.jsのプロセス1つなので、死んだら終わり
- 死んだら終わるのでデバッグが大変
コールバックによる方法
- コールバックのネストによる地獄
- 無名関数を使わないでちゃんとコールバックに名前を付ける
- だいぶまともになる
Promises
- 利点 : 記法が分かりやすい、続けて書ける
- 変わらない点 : 非同期処理を成否をちゃんと書く
- 変わらない点 : thenの中身が長くなるとコールバックと同じなのでちゃんと分ける
Generator
- 利点: スコープがわかりやすい、非同期でないように書ける
- 例外処理を自然に扱える(try-catch)
- 非同期っぽさが無くなって区別がつき難いのが問題になりそう
教訓
- だらだら同じ所にかからないで処理を分けよう
- 構造化プログラミング
- ちゃんとやる!
「node.jsなら日曜プログラマーでも簡単に通信対戦ゲームが作れる」by 竹内さん
HSP
メリット
- ウィンドウを作る1行で済む
- アニメーションも簡単に書ける
デメリット
- グローバル変数ばっかり、モジュール分けできない
- 通信対戦が難しい
DXライブラリ
- 3DはDXライブラリで何とかなったけど、素材が用意するのが大変
- ソケット通信プログラミング – 初期化するだけで100行
Node.js + Socket.js
- RailsとかJavaはscaffoldingのファイルがいっぱいあってそれを書き換える
- NodeのSocket.IOは余計なファイルがなくシンプル
- じゃんけんゲーム
-
作成期間は2日間 + コードは500行ぐらい
プロダクトにNodeを採用しようと提案した時の反応
Node 1.0 ないの?
メモ: Markdown life
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。