東京Node学園 11時限目

東京Node学園 11時限目 – connpass に参加してきたのでメモ

東京Node学園 11時限目 – Togetterまとめ


始まるまで何故か設営を手伝ってた


「これからのNodeの話をしよう」 by @yosuke_furukawa

これからのNode.jsの話をしよう // Speaker Deck

  • 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
  • Socket.IO
  • Primus
    • 色々なリアルタイム系をラップして後から実装を変更できる

今後

意見は集約しやすいようにしよう

わいわいわーい

Gitter chat


「browserifyことはじめ 〜その仕組みと活用〜」 by @hitsujiwool

browserifyことはじめ // Speaker Deck

hitsujiwool/browserify-playground

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
    • windowexports に変換する
  • exposify
  • deamdfy
    • AMDをCJSに変換
  • coffeeify
    • CofeeScript
  • hbsfy
    • handlebars
  • debowerify
    • bower経由で入れたものをnpm経由で入ったようにする

まとめと展望

  • nodeライクなモジュールシステム
  • サーバサイドJSの資産を活用できる
  • Streamとの親和性が高い
  • transformによる柔軟な前処理

何でも詰め込みすぎ?

  • transformとtask runnerの被る部分がある
  • 配布方法とかも多様化しすぎ

質問

Q: Buffer の代替実装は普通にやったら遅くならない?

Q: CDNから読み込むライブラリと共有できる?

  • globalに置くようにして、普通にscriptで読みこめば一緒に使える?

「NodeでDeep Learning」 by @Lewuathe

Deeplearning with node

n42

  • 機械学習のアルゴリズムの一つ
    • ニューラルネットワークを使った方法
    • 脳のニューロンのやり取りをモデル化したようなネットワーク
  • ニューロン = モジュールを組み合わせて入力から出力を得る
  • 入力に対する判別等を学習させていく
  1. 入力データを用意する(入力のデータ)
  2. 教師データを用意する(ラベルとなるデータ)
  3. モデルを作成する
    • Stacked Denoised Autoencoder (ノイズを除去する)
  4. 学習させる
    • ノイズをかぶせたりして、学習させる
  5. 出力層
    • 学習させた結果が何であるかを教える
  • NodeでDeep Learning率直にする計算させると遅い
  • クラスターとかNodeらしい方法があるかも

「非同期プログラミング養成ギブスとしてのnode.js」 by @niryuu

「非同期プログラミング養成ギブスとしてのnode.js」について – 表道具

  • node.jsで非同期プログラミングをやっていく事で教訓を得て行った

非同期の難しさ

  • いったん元のコンテキストから切り離して、戻ってくるので処理がリニアではない
  • 切り離すのはOK
  • どう戻ってくるのかが大事

戻すのがマズいと大変

  • 終わった/失敗した非同期処理、終わらない実行
  • node.jsのプロセス1つなので、死んだら終わり
  • 死んだら終わるのでデバッグが大変

コールバックによる方法

  • コールバックのネストによる地獄
    • 無名関数を使わないでちゃんとコールバックに名前を付ける
    • だいぶまともになる

Promises

  • 利点 : 記法が分かりやすい、続けて書ける
  • 変わらない点 : 非同期処理を成否をちゃんと書く
  • 変わらない点 : thenの中身が長くなるとコールバックと同じなのでちゃんと分ける

Generator

  • 利点: スコープがわかりやすい、非同期でないように書ける
  • 例外処理を自然に扱える(try-catch)
  • 非同期っぽさが無くなって区別がつき難いのが問題になりそう

教訓

  • だらだら同じ所にかからないで処理を分けよう
  • 構造化プログラミング
  • ちゃんとやる!

「node.jsなら日曜プログラマーでも簡単に通信対戦ゲームが作れる」by 竹内さん

Node.jsなら日曜プログラマーでも簡単に通信対戦ゲームが作れる

HSP

メリット

  • ウィンドウを作る1行で済む
  • アニメーションも簡単に書ける

デメリット

  • グローバル変数ばっかり、モジュール分けできない
  • 通信対戦が難しい

DXライブラリ

  • 3DはDXライブラリで何とかなったけど、素材が用意するのが大変
  • ソケット通信プログラミング – 初期化するだけで100行

Node.js + Socket.js

  • RailsとかJavaはscaffoldingのファイルがいっぱいあってそれを書き換える
  • NodeのSocket.IOは余計なファイルがなくシンプル
  • じゃんけんゲーム

  • 作成期間は2日間 + コードは500行ぐらい

プロダクトにNodeを採用しようと提案した時の反応

Node 1.0 ないの?


メモ: Markdown life