Your SlideShare is downloading. ×
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Nodefest2013 my npm modules
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Nodefest2013 my npm modules

5,930

Published on

https://github.com/mash/node-imagemagick-native …

https://github.com/mash/node-imagemagick-native
ImageMagick's Magick++ bindings for NodeJS

https://github.com/mash/node-angel
angel.js is a simple library to gracefully restart multi process net.Servers on node >= 0.6

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
5,930
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 実践で使える拙作npmモジュール twitter.com/maaash github.com/mash
  • 2. 無職 なのに実践って??
  • 3. 1. imagemagick-native https://github.com/mash/node-imagemagick-native Imagemagick's Magick++ binding for Node. % brew install imagemagick % npm install imagemagick-native
  • 4. 1. imagemagick-native サムネイルの動的生成 いろいろなサイズの画像へのリクエストがある、 UI改善するために異なるサイズを試したい × 画像アップロード直後にサムネイルを生成 ○ サムネイルへのリクエストが来てから画像を生成
  • 5. 1. imagemagick-native サムネイルの動的生成 1. HTTPリクエストを受ける 2. 画像ストレージ(S3など)から元画像を取得 3. サムネイルを生成 4. 保存(memcachedなど) 5. レスポンスを返す
  • 6. 1. imagemagick-native サムネイルの動的生成 1. HTTPリクエストを受ける 2. 画像ストレージ(S3など)から元画像を取得 (IO) 3. サムネイルを生成 (CPU) 4. 保存(memcachedなど) (IO) 5. レスポンスを返す IOで詰まったら同期IOなworkerは詰まっちゃうんじゃ? → node.jsでやったらどうか
  • 7. 1. imagemagick-native % npm install imagemagick 実体は require(“child_process”).spawn(“convert”, args); % npm install imagemagick-native ImageMagickのC++ Bindingを使う imagemagick: 8.07ms per iteration imagemagick-native: 0.87ms per iteration
  • 8. app.get( "/*", function (req, res) { async.waterfall([ function (options, callback) { var requestOptions = parse( req.url ); // download from s3 request.get( requestOptions, function(err,res,body) { callback( null, body, resizeOptions ); }); }, function (body, resizeOptions, callback) { var buf; try { buf = imagemagick.convert( resizeOptions ); } catch (e) { // handle error }; callback( null, buf ); }, function (buf) { // store cache.set(key, buf); }, function (buf) { // respond res.end(buf); callback( null ); } ], errorHandler ); });
  • 9. 1. imagemagick-native API群 * convert * identify * quantizeColors * composite サイズ、形式の変換 サイズや形式を識別 量子化 合成
  • 10. 1. imagemagick-native API群 * convert * identify * quantizeColors * composite 自分がつくったのはこれだけ pullreq pullreq pullreq
  • 11. 1. imagemagick-native うれしい
  • 12. 2. angel https://github.com/mash/node-angel gracefully restart multi process net.Servers % npm install angel
  • 13. 2. angel 昨日 npm publish しました
  • 14. 2. angel じわじわ系メモリリーク 数10MB/月
  • 15. 2. angel おれのせいじゃないよ〜>< って言いたい
  • 16. 2. angel 定期的にcronで殺したりして(しないか)
  • 17. 2. angel max_requests_per_child 一定のリクエスト数をこなした workerはいったん殺してforkしなおす これができるのが見当たらなかったので 作ってみたのが angel
  • 18. 2. angel net.Serverのインスタンスとportを渡すと CPU数分、プロセス起動してlistenしてくれる * workerが突然死したら生き返らせてくれる * HUPシグナルをmasterに送るとworkerを生き返らせ てくれる * その時モジュールを読み込みなおせる =無停止デプロイ
  • 19. CC BY-NC pedra_uding http://www.flickr.com/photos/petra_uding/6166961931/
  • 20. 2. angel 名前がかっこいいですね
  • 21. 2. angel var angel = require("angel"); var server = require("http").createServer( function(req, res) { res.writeHead(200); res.end("Hello, World!"); }); angel( app, { port: refresh_modules_regexp: max_requests_per_child: workers: }); 3000, "(config|lib)/", 10000, 4
  • 22. 2. angel % angel --port 3000 --workers 4 --max-requests-per-child 10000 --refresh-modules-regexp “lib/” app.js % cat app.js var server = require("http").createServer( function(req, res) { res.writeHead(200); res.end("Hello, World!"); }); module.exports = server;
  • 23. 2. angel % node eg/server.js master[70402] created pid_file: angel.pid master[70402] master will fork 4 workers master[70402] forked worker[70403] master[70402] forked worker[70404] master[70402] forked worker[70405] master[70402] forked worker[70406] worker[70404] launched worker[70404] listening on 3000 worker[70406] launched worker[70406] listening on 3000 worker[70403] launched worker[70405] launched worker[70403] listening on 3000 worker[70405] listening on 3000
  • 24. 2. angel % pstree -p 70402 | | -+= 55828 mash /bin/zsh | | -+= 70402 mash node eg/server.js | | |--- 70403 mash snip/proj/node-angel/eg/server.js | | |--- 70404 mash snip/proj/node-angel/eg/server.js | | |--- 70405 mash snip/proj/node-angel/eg/server.js | | --- 70406 mash snip/proj/node-angel/eg/server.js
  • 25. 2. angel master[70402] master[70402] master[70402] master[70402] master[70402] master[70402] worker[70560] worker[70560] worker[70561] worker[70561] worker[70559] worker[70559] worker[70562] worker[70562] worker[70403] master[70402] worker[70404] worker[70405] master[70402] master[70402] worker[70406] master[70402] SIGHUP reloaded snip/proj/node-angel/eg/app.js forked worker[70559] forked worker[70560] forked worker[70561] forked worker[70562] launched listening on 3000 launched listening on 3000 launched listening on 3000 launched listening on 3000 closes worker[70403] died closes closes worker[70405] died worker[70404] died closes worker[70406] died
  • 26. 2. angel 名前がかっこいいですね
  • 27. 2. angel pullreq お待ちしております
  • 28. Thank you twitter.com/maaash github.com/mash

×