東京Node学園祭2012に行ってきたよ
一昨日、東京Node学園祭2012に行ってきました。
いろいろ書いてるけど、微妙に間違ってるところとかもあるかもしれません。
Togetterでツイートをまとめてくれてる人がいるので、見ると雰囲気がわかって良いかも。
http://togetter.com/li/408747
説明のところにスライドへのリンクやらいろいろ書いてある!スバラシイ!
出発・到着
6:55発の新幹線で出発!LL Decadeの時と同じ新幹線だったみたい。
東京駅に着くまでほとんど記憶がないので、ぐっすり眠っていた模様w
東京駅に着いた後は中央線で市ヶ谷まで移動しました。微妙な乗り換えが面倒だったなあ。
電車に乗っていたときに法政大学が見えたので、そっちの方を向かっていたつもりが、川を挟んで逆だったりしたw
Galaxy Sにナビしてもらって逆だってことに気がついたからよかったけど。
会場の法政大学に到着するが、入り口がわからなくて適当に近くの建物に入ったらそれだったりとか。
恥ずかしい事に自動ドアに気がつかないで、非常用ドアから入ろうとした……w
そういえば、そのとき同じ参加者の人に話しかけられたのだけど、誰だったのだろう。何かしら聞いておけばよかったかも。
とまあ、なんとか到着。
なんかいろいろもらって適当な席に着いて、あとは待機してました。
1席に電源が1つ付いてるのすごいなあと思った。
基調講演 / New Readable Stream in Node 0.10 : @izs
続いて二代目node.jsゲートキーパーisaacの基調講演。
今までのストリームの歴史と、問題店、次のバージョンでのストリームについてのお話。
http://dl.dropbox.com/u/3685/presentations/streams2/streams2-nodefest.key
http://dl.dropbox.com/u/3685/presentations/streams2/streams2-nodefest.pdf
ストリームの歴史
- util.pump()
- 既に非推奨
streams1 / stream badness
- cryptoがstreamを継承していない
- 0.10.0でstreamを継承するみたい -> V(^_^)V
- バッファリングが難しい
- 使うのは楽だけど、作るのは難しい
streams2
readメソッドを呼んだタイミングでデータを取得できる
- Readable
- r.read(size) -> buffer or null
- r.emit('readable') -> time to read()
- わかりやすい
- バッファリングを簡単に設定
- highWaterMark(default = 1024)
- lowWaterMark(default = 0)
メソッドが対照的になる
read() | wtite() |
readable | drain |
end event | end() |
old-mode streams1 shim
ただまあ、streams1をstreams2で置き換えちゃうと既存のコードが動かなくなるので、
古いインターフェースを使っていたらstreams1を使うようにする後方互換性を入れるみたい。
1.0はいつ?という質問に対して
libuvが安定したら。1年くらい?という解答だったような。
安定するまでなので0.12とかも出るかも、とか言っていたような。
Track A / Nodeコアの歩き方 - 大津さん : @jovi0608
IIJ大津さんからのNodeのコア全般についてのお話。
https://speakerdeck.com/shigeki/nodekoafalsebu-kifang-nodefalsekai-fa-nican-jia-siyou-node-dot-js
以前のスライドはこっち。
http://www.slideshare.net/shigeki_ohtsu/processnext-tick-nodejs
0.9.3での変更点
昔、libeioとかで非同期だから〜的な記事をよく見たのに、libeio, libev削除しちゃうのかよ!と思ったw
Track A / Running Node.js in Production - Charlie Robbins : @indexzero
node.js PaaSであるnodejitsuのCEOによるプロダクション環境でのNode.jsのノウハウ的なお話。
https://github.com/indexzero/presentations/tree/master/2012/nodefest.jp
node.jsはバイナリからインストールしよう
ここ最近のソースコードは安定性が低いので、バイナリからインストールしましょう、とのこと。(HEAD/開発版の意味に取ったけど合ってるのかな)
もしソースコードからインストールしたいなら、stableブランチからインストールしましょう。
皆さんご存知の通り、偶数が安定板/stableで奇数が開発版/unstableです。
unstableはWindowsサポートで問題になる事が多いそうな。
uncaughtExceptionでエラーを補足したらプロセスを終了しよう
プロセスを終了せずに起動したままだと、意図しない副作用を起こす事があるらしい。
process.on('uncaughtException', function (err) { console.error(err); });
でなく
process.on('uncaughtException', function (err) { console.error(err); process.exit(1); });
って事です。ドメインの場合もそうなのかな?
エラーハンドラを書こう
var req = http.request(...);
でエラーが発生した場合、スタックトレースがわけわからないので、
var req = http.request(...); req.on('error', function (err) { });
とちゃんとエラー処理を書きましょう。
イベントリスナの登録に注意してメモリリークをなくしましょう
イベントリスナの登録はするけども、外すのはよく忘れるので忘れないように。
1度しか使わないリスナならon()でなくonce()で登録しましょう。
domainはまだおあずけ
エラーハンドリングがまとまって便利だけど、Experimentalなのでまだ変更される可能性がある。
プロダクション環境ではまだ使うべきではない。
nodejitsuを使おう
こういう面倒なことは
$ npm install -g jitsu
でnodejitsu使うようにすれば考えなくていいよ!とのことw
ローカルnpmリポジトリを使おう
自社開発のモジュールをオープンソースで公開する必要がない。
.npmrcのregistryでリポジトリを切り替えて使う。
手順のスライドはここにあるみたい。
https://github.com/indexzero/presentations/tree/master/2011/couchconf-nyc
@hide_o_55さんの構築記事はこちら。
http://d.hatena.ne.jp/hide_o_55/20120725/1343213351
ネイティブアドオンは使わない
ネイティブアドオンの運用は面倒なので、できるだけ使わないようにしよう。
などなど。参考になることが多く、一番お気に入りの発表でした。
Track A / layering distributed systems : @substack
mkdirpなどの多くのnpmモジュールを開発・公開しているsubstackのお話。
https://github.com/substack/nodefest-2012
browserlingというサービスを公開してますね。
理解力が足りなくてあんまりよくわかってなかったけど、すごかったのは覚えてる。
うーんと、UNIX哲学的に1つの事をうまくやるモジュールを作って組み合わせて行くと、
地層みたいな層に分かれたものができて、それぞれのモジュールは付けたり外したりができて良い、
って話だったような気がするけどなんか微妙に違う気がする。
で、
- secure-peer
- d-node
- scuttlebutt
- crdt.seq
- ecstatic
Track A / "Untitled" : @mikeal
reqeustモジュールで有名なmikealのお話。NodeConfの主催者ってのは知らなかった。
アンタイトルドって名前のタイトルだそうでw
内容はNodeは何故成功したのかというのと、それに合わせてNodeの良いところの紹介かな。
なぜNodeは成功したのか
「シンプルなパターンを用意しているから」
で、これは
function (error, result) {}
とか、Nodeを使ってる人なら見慣れたシンプルなパターンで書けるから、とのこと。
あとasync(caolan/asyncかな?)良いよね的な話もちょっとしてたような。
substackパターン
substackが書くモジュールは大抵
module.exports = function () {}
となっていて、substackパターンと呼ばれるようになったそうな。初めて聞いたw
これもまたシンプルでわかりやすい。単純に関数を返すものがシンプルで良いって。
早く終わったので別のスライド : Myfirst node.js program
2009年12月にTwitterで(?)
「node.jsでプロキシ書いた事ある人いる?」
みたいなツイートを見かけて書いたのが始まり。
Pythonでwindmillというプロキシを書いた事があったので、node.jsで書いてみる事にしたらしい。
書いてみたら2時間で出来た上に、3年かけて書いたPythonのものよりも速くてメモリ消費量も少なかった。
この出来事以来Pythonを書くのをやめたとかw
そのあとは年々機能が追加されていくnode.jsに合わせて、どんどんシンプルになっていくプロキシのソースコードを見たりとか。
最後には本当に数行程度になってました。
node.jsはコードを簡潔に書ける事を重要視している、とのこと。自分も書いててそう思う。
LT大会
続いてLT大会に。あまりメモできてない……
Node.js on Raspberry Pi : 河合さん
JavaScriptでハードウェア制御できるモジュールを使って実装したとか。
GitHub - EnotionZ/gpio: Talk to your Single Board Computer's gpio pins
あとJavaScriptなのでsetTimeoutなどが使えて良い感じみたい。
で、ブラウザから操作すると空気が入る装置を動作させるはずが……動かなかったw
これが後々活躍するのだけどw
はてなブックマークで振り返るNode.js : @cou929
はてなブックマークでNode.jsタグが付いたURLをdailyで表示するアプリを作って、歴史を振り返るというもの。
#Node.js on Hatena Bookmark - Speaker Deck
http://nodefest2012.cou929.nu/
発表では2011年あたりでドラがなってしまったので最後までは見れなかったのだけど、あーいろいろあったなー的な感じとかしました。
Node.jsで作る授業システム : @Blacks_G
Node.jsで作った授業システムの発表。九州から来たらしい……すごい……
発表に夢中でメモがあまり残っていないw
大学でぼっちというのと、node-webkitを使ったプレゼンシステムを作ったとか。
プレゼン中に#nodefestに反応してニコニコ動画風にツイートが横から流れてきてたのと、
それに反応した@mesoさんが
ちなみにそのプレゼンシステムがLTで使用していたスライドそのものだったらしく、
「これからDEMOをします。これです」でした。
node-serialportがつなげるハードウェア : @niccolli
どこかで見た事あるような、と思ったらLL Decadeでお会いした、光るネクタイのnicolliさんでした。
発表の内容はnode.jsを使ったハードウェア制御的な。
Node.js ♡ Hardwares w/ node-serialport
LTのときはhttp://LED.local/というURLにアクセスすると上部にボタン?があって、
それをみんなで連打すると、ネクタイに取り付けられたLEDがきんちゃんの仮装大賞のような感じで上がって行くというものでしたw
node-serialportというモジュールでArduino(なのかな?)に対してシリアル通信をするとか、
シリアル通信間を無線でやりたかったのでnode-xbeeモジュールとZigBeeを使って無線化したとか、
自分的には組み込み懐かしー的なお話でした。はんだごて久しぶりに握りたい。
Node.jsを使った次世代2ch : Kunshiro Murayama
しゃべりハウスというサービスの発表。
えっと、部屋があってWebSocket(たぶん)でリアルタイムに更新されて……
チャットのような感じのサービス、で良いのかしら?
いつかは忘れたけれど、そのうち公開されるそうなので「しゃべりハウス」で検索してねとのこと。
デモをする際になかなかネットにつながらず、困っていたところに、河合さんの装置が動いて場をつないだりしたw
Node.jsで音声認識家電コントロール : @hecomi
node.jsと音声認識エンジンJuliusを使った発表。
Node.js で簡単に音声認識できるモジュールを作ってみた #nodefest - 凹みTips
技術的な概要は記事の通りというか。
音声認識でエアコンとか操作できたら良いよね、というところからこれを作ったとか。(だったと思う)
デモのときは操作できるエアコンとかないので、代わりに3Dのミクさんが音声に反応して反応した台詞を出力してた。
「エアコンを付けて」➡「エアコンを付けました」のような感じ。
微妙に行ってる事と違う認識をしていたりして、音声認識難しいなあと思ったり。
Server-sideで作るVisualization : @muddydixon
D3.jsというライブラリをモダンなブラウザでなくても動かす、という発表。
制限時間にならないように焦っていたらしく、相当早口だったので全然メモできていない!
http://muddydixon.hatenablog.com/entry/2012/11/18/131459
でもスライド見れば大体わかると思う!てか、はてなブログがそのままスライドになってるのすごい。
Nude Knock Out : @nazomikan
Node Knock Outで作ったおっぱいDouble Mountainの発表。
Nude Knock Out
やっている事はそこそこ高度なのだろうに……w
ちゃんと声が出たり、振動が伝わったりとかすごいなあと思ったw
デモをするときに「nodejitsuが落ちると怖いのでローカルで」という発言に対しての
@mesoさんの「nodejitsuのCEOが居る前でw」というツッコミが面白かったw
帰宅
東京駅で親子丼買って新幹線に乗って帰った。
感想のような
新たに得た知識で、今までとは違うコードが書けるようになりそうな感じ。
他には自分には思いつかなかったnode.jsの使い方があるなーとか、思ったり。
刺激を受けたし、自分もnode.js/JavaScriptがんばろーって気になった。
東京Node学園祭2013もあるならまた行きたいなあと思ったのでした。