タグ別アーカイブ: node.js

大阪Node学園 四時限目に参加した-


またまた、参加してから数週間たってしまいましたが、参加した記録を残しておきます!
前回の三時限目からちょうど1年ぶりぐらいの開催でした。
ただ、感想としては、、、とてもおもしろかった!!!

大阪Node学園 四時限目
開催日:2012/11/24(土)

内容としては、以下の様な流れでした!

・テストについて
・実務での実例(Slidrsについて)
・yeomanについて
・東京Node学園祭参加レポート


テストについて

@craftgearさん
サーバサイドのテストはフレームワークの紹介程度であとはクライアントサイドのブラウザテストの紹介でした。個人的にもブラウザのテストって、難しいなーと思っていたのでフレームワークの使い方などとてもわかり易かった。testacularがよさそうなのと、MVCフレームワークも色々出ているけどangular.js がよさそうだなと思った。

【サーバサイド】
テストフレームワーク:mocha, expect.js(chai.js)

【ブラウザテスト】
testacular (node 0.8 over)
Angular.jsを採用している

Testem (node 0.6 over)
実行結果をブラウザで表示できる

Angular.jsの機能テスト(e2eテスト (End to End)のテスト)が使いやすい
Angular_scenario.js(Angular.jsに同梱されている)

angular.js の実装例で用意されてる機能テスト(e2e)参考
https://github.com/angular/angular-phonecat
https://github.com/angular/angular-seed


実務での実例(Slidrsについて)

@kumatchさん スライド資料

Nodeの利用したサービス(スライド共有サーービス)での環境構築から実際の中身の実装までの結構細かい内容を説明してくれた。実際のサービスで使用している例だったので、Nodeを使う上でのnginxの設定方法やNodeのデーモン化など、本番運用でのキーポイントをいくつも挙げていただき、がとても参考になった。

【nginxの設定】

  • try_files
    (メンテナンスページなどへの切り替え)
  • X-Accel-Redirect
    (大きなファイルをユーザへダウンロードさせる時などはnodeがシングルスレッドなのでnode自身がファイル転送でロックされるのを防ぐため、ファイルを生成したあとはnginxへレスポンスを返させる)

【node.jsのプロセスの管理】
・supervisord
pythonで作られたもの。簡単に利用できる!!
※自分はPerlで利用するときは「daemontools」を使ってるなー

【アプリケーションはexpress3 で開発】
2.x -> 3.x マイグレーション情報

【Redisを利用】
キャッシュなどの保持に使っている

【MongoDBを利用】
データストレージとして使用している。
monkを使っている(MongDBを簡単に叩く時に便利な簡易的なツール)
mongooseではない

【クライアントサイド】
テンプレートエンジン:jade
クライアントJSライブラリ:knockout.js

依存するモジュールも解決できる
Node/AMD (サーバ/クライアント) 共通化モジュールを書く
AMD (Asynchronous Module Definition) は、Javascript のコードをモジュールとして定義して、非同期ないし遅延ロードするための仕組みです。

【Node,ExpressのTips】
●expressのresponseオブジェクトを拡張できる

    app.response.send401 = function (realm) {...};

●initialize function

【route.js】
module.exports = function(myapp) {
    var routes = {
        index: function(req, res, next) {...}
    };
    return routes;
}
【app.js】
var routes = require('./routes')(myapp);
app.get('/', routes.index);

●ガーベジコレクション
node.jsのガーベジコレクション 処理が落ち着いた段階でGCが走る。(アクセスが終わって数秒後に)

●nodeの起動オプションで、任意のタイミングでガーベジコレクションを発生させることが出来る

起動する時に以下のオプションをつける
% node --nouse_idle_notificatio --expose_gc app.jp
実際にGCをかけるときはプログラム上で以下のようにする.
global.gc();

http://devjar.me/post/22886448979/manually-run-gc-in-node-js

【node.jsのメモリ調査ツール】
node-memwatch

【おすすめ本】
「RESTful Webサービス」 オライリーの本
「Node.js入門」


YEOMANの紹介

yeoman公式
yeomanのソース

クライアントサイドのテスト/ビルドツール
railsのような機能がある.

強力なscaffolding
cofeescript sass compass を自動でコンパイルする
構文チェック(jshintを使った構文チェック)
画像最適化
自由なテンプレート
自動リロード(ファイルの変更を監視HTTPサーバの自動うでリロード)grunt.js
パッケージ管理(Twitter Bower)


東京Node学園祭参加レポート

この報告会の内容がいつも大阪Node学園で楽しみ。。
今回の東京Node学園祭は特にホームページを見てもわかるようにすごい豪華なメンツ。
Ustreamのビデオとスライドの資料もあるので、今後見てみようと思う!

大阪Node学園2時限目に参加


大阪Node学園2時限目に参加してきました!

今回はnode.js のステッカーやらriakというキーバリューストアのステッカーなどたくさんのステッカーをもらいました。笑

全部貼ったらMacがすごいことになってます。

 

2012/03/24(土)http://atnd.org/events/25989

ここからはメモったことを以下に書きます!

Expressのハンズオンでした!

nodeのバージョン管理nvm は色々と問題がある。が、nvmで入れている人がほとんどだった・・・新しいnodebrewというものがある!PerlとCurlがあれば動作するので使い勝手が良さそう!

Expressは現在バージョン2系がStableのリリースバージョンだが、開発中のバージョン3もgithubから手に入れることができる。

Express 3  のインストール
% git clone https://github.com/visionmedia/express.git
% cd express; npm install
% express/bin/express ong2
% cd ong2
% npm ln ../express

Urlの定義の仕方などはちょっと疑問に思っていたのでハンズオン形式てとても参考になった!

ミドルウェアについて

同じようなURLによるルーティングの場合
next()の使い方

sendやrender()せずにnext()を呼ぶと404エラーとなる。
next()に引数を与えると500エラーをかえす。引数は何でもよい!
next(new Error(‘error message’); OR  next(‘error message’)  OR next(”aa’)   など

上記のようにエラーとなるのは
next()した場合、最後までマッチしなければ、以下のように定義されているdevelopmentではexpress.errorHandler() に要求が投げられるため。next()の最後はエラーハンドラーにマッピングされる
app.configure(‘development’, function(){
app.use(express.errorHandler());
});

バリデータのライブラリ

revalidator
Amanda   結構使っている

Testフレームワーク

mocha

chai

コールバックのネストをなくすフレームワーク

async.js

node.jsのセッション管理

redis

大阪Node学園一時限目に参加してきた!


 

node.jsを使う事が増えてきているこの状況で今回の勉強会に参加してきました!!コミュニティの皆さんもとてもすごそうな人が多く、いいなぁと思った!!

懇親会には参加できなかったのが少し残念だったなぁ。イベント自体、とても面白く、いい勉強になった。。また近々2時限目を行うってことだったのでまた参加しよう!!

特に発表のテーマにもあった「ストリーム」はとても興味深く聞く事ができた!

たまたまnode.jsでzlibやfs、ストリーム、バッファなどを使って圧縮ファイルをアップロードしてから解凍し、パースするような処理を作ろうとしていたので、タイミングも良かったーー

「ストリームを制するものは、nodeを制する」この言葉も印象的だった!!!

ATND情報 http://atnd.org/events/23378
動画 http://www.twitvid.com/craftgear

 

Node.jsランダウン 〜怖くないNode.js入門〜

formidable 1.8からexpressの設定するだけでアップロードできる!

app.use(express.bodyParser({uploadDir:'./upload_tmp'}));

【リクエストを受ける側では以下のようにパス名などを受け取れる】
app.post('/items', function(req, res) {
    console.log(req.body);
    console.log(req.files);
    res.send('DONE', 200);
});

 

 

Socket.IOとリアルタイムなナニか

socketの名前空間、コネクションの共有範囲を分ける クライアントのjsで .ofというメソッドを使う。

1つのページを同期させるモードと同期させないモードに分けることで、プレゼン時は同期をして公開すれば発表者が画面を操作できる。

webSocketの使い道 m2m(マシンツーマシン) PCやモバイル端末だけではない。

【所感】

node.jsソケットを使ったプレゼンツールを作ってみたい(HTML5等を使う!)Canbusでユーザにも書いてもらえる。かつチャットsocket.ioを使えるようにする。講義中や公演中にパワポの資料とかだけではなく、web画面で動かして、さらにマーカーで文字が描けるようにすれば良さそう!impress.js で動的なWebプレゼンの見せ方!!に応用する! 

 

 

Streamについて(仮)

nodeの中I/Oのインターフェース

基本は次の2つのストリーム readable Stream / writable Stream

StreamObject は EventEmiter

イベントをonメソッドで受け取り .on(‘イベント名’, function(){ })

 

●readble streamの使い方

・メソッド

resume(読み込み開始), pause(読み込み止める), destroy

・定義されたEventの種類

data(ストリームに読み込みを続けているとき),end(読み込みが終わったとき(EOFまで読み込んだとき)), close(readableストリームを閉じたとき), error(エラー寺のイベント)

 

●writable streamの使い方

・メソッド

write, end, destroy

・定義されたEventの種類

drain, close, error

 

コピーするときはreadableストリームのresumeを実行した後readbleストリームのイベントを.onメソッドで受け付けながらwraitableストリームにwriteやendなどのメソッドを呼び書き込みを行う。

 

●pipe()について

readableで読み込んでパイプメソッドでwritableに渡して書き込む。。

コピー元ファイル(readable stream)を読み込みながらwritable streamに書き込んで一時的に止めてpause()する、その後resumeを行う。を自動で行う

 

●ストリームで表現されるケース

HTTP
http server Request (Readable)
http server Response (Writable)

Zlib
all classes(Readable/Writable)

圧縮ファイルを読み込んで
fs.Readable  ーpipeー>   zlib.Gzip  ーpipeー>   http.response

 

「drain は、WritableStream において、書き込み先が書き込む準備ができたとき発生するイベント。

書き込みがそれ以上できないときに、write メソッドが false を返し、そののち再開できるときに drain イベントが走る。」

 

【気になる事】

zip,gzipの違いは??

 

ストリームに関する参考リンク
http://d.hatena.ne.jp/Jxck/20111204/
http://jxck.tumblr.com/
http://jxck.tumblr.com/post/11984552004/node-js-stream

 

 

LTに出てきたキーワード

Express
modelがない!!
routes/index.jsにビジネスロジックを書くのか?けれど、model フォルダ作ってmongoose(モデル)の定義を入れた。

impress.js(http://bartaz.github.com/impress.js/
google hangout
Web RTC http://d.hatena.ne.jp/Syunpei/20111212/1323679295