5/23 Node International Day
5/23にサイバーエージェント様を会場にしたNodeSchoolに参加してきました.100人超とかすごい.
International Day
当日は「International Day」という催しのようで世界各地で同時に開催されていた.大阪やドイツなどと映像つないだりした. 大阪の巨大スクリーンがNodeでいじってるらしく(詳しく分からない)すごかった.
Node
だいぶ久しぶりのNodeでいろいろ作法に戸惑った. でもメンターの方々のとはあまり触れ合えなかった.いろいろレベルダウン.
カリキュラム
当日に提示されていたカリキュラム(ワークショップ)Nodeの基礎についての「learnyounode」を選択しました. これがよく出来ている.
npm install -g learnyounode
カリキュラムはいろいろ選択ができる. Node School TokyoのGitHubページにリストされているのは以下のとおり. (当日にリストされていたのものより数が多いと思います)
https://github.com/nodeschool/tokyo/blob/gh-pages/README.ja.md
https://github.com/nodeschool/tokyo/blob/gh-pages/README.ja.md
- learnyounode
- levelmeup-jp
- javascripting-jp
- how-to-npm-jp
- browserify-adventure-jp
- tower-of-babel
- learnyoureact
当日は自分のNode力が残念だったので半分くらいしか進まなかった. ようやくすべて終えた.一番苦労した「ASYNCジャグリング」の問題についてメモっとく.
ASYNCジャグリング(JUGGLING ASYNC)
この問題の詳細は現物を見てもらうとして. 簡単に要点を書くと,
というところで,むずかしいのが最後に書いたことだった.
ここがNodeのキモだと思う.非同期のコールバックというのでしょうか. 前にNodeを書いていた時もだいぶ苦労したのに,やはりすっかりコツは忘れていた.
ワークショップの解答はここには写しません. 自分の解答を書きます.
var http = require('http'); var urls = []; urls.push(process.argv[2]); urls.push(process.argv[3]); urls.push(process.argv[4]); var counter = 0; var results = new Array(urls.length); function getCallbackClosure(index) { return function(response) { var buf = ''; response.on('data', function(data) { buf += data.toString(); }); response.on('end', function() { results[index] = buf; counter++; if (counter === results.length) { results.forEach(function(elm) { console.log(elm); }); } }); }; } for (var i = 0; i < urls.length; i++) { http.get(urls[i], getCallbackClosure(i)); };