タグ

ブックマーク / hakobera.hatenablog.com (10)

  • Node.js の Heroku 環境におけるパフォーマンス - hakobera's blog

    Heroku で Node.js を動かしても絶対的なパフォーマンスは得られないのだけれど、最近仕事で Node.js on Heroku をやっているので、実際にどれくらいのパフォーマンスがでるのか測ってみました。 今回調べたのは、主に3点。 2X Dyno (CPUとメモリが2倍のDyno。ただし、コア数は4のまま)を使うと速くなるのか? Cluster に効果はあるのか? Dyno 数はどれくらいが良いのか? ベンチマークは Node.js v0.10.9 を対象とし、全て siege のベンチマーク機能の結果です。ベンチマーク対象のコードは、Node.js 家トップページに載っている例のHTTP サーバで、AWS の us-east-1 リージョンの EC2 m1.large インスタンスで実行した結果です。 $ siege -b 60S -c 100 http://server

    Node.js の Heroku 環境におけるパフォーマンス - hakobera's blog
  • EventEmitter.emit() によくある勘違い - hakobera's blog

    突然ですが、Node.jsで次のプログラムを実行した結果を答えてください。 var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); console.log('1'); event.on('open', function () { console.log('2'); }); event.emit('open'); console.log(3); 正解は少し下の方に書いてあります。 少しだけスクロールを我慢して考えてみてください。 正解は 1 2 3 です。 1 3 2 だと思っていた人も多いのではないでしょうか。(私だけかもしれませんが) つまり、表題の「EventEmitter.emit() によくある勘違い」とは、EventEmitter.emit()が次のイベントループで実行さ

    EventEmitter.emit() によくある勘違い - hakobera's blog
  • 「Node.jsは静的コンテンツには向いていない」のか? - hakobera's blog

    この記事は東京Node学園祭2012 アドベントカレンダーの8日目の記事です。 この記事を書こうと思った理由 Node.jsに関するWeb上の記事を読んでいると、「Node.jsは静的コンテンツに弱い」とだけ書いてある記事をよく見かけます。有名なところだと、LinkedInのNode.jsのパフォーマンスに関する10個のTipsの3番目のTipsに"Don't use Node.js for static assets"とばっちり書いてあります。 確かにCDNやNginxに比べれば、Node.jsは静的コンテンツの扱いが遅いとは思います。しかし、それは LinkedIn くらいの超大規模なトラフィックがある場合には問題になるとは思いますが、小〜中規模なサイトでもNginxは必須なほど遅いのでしょうか?512MBしかメモリのないVPSNginxとNode.jsを入れてやりくりすることがホン

    「Node.jsは静的コンテンツには向いていない」のか? - hakobera's blog
  • Node.js と Titanium で SlideShare リモコンを作ってみた - hakobera's blog

    2012/1/11 に開催した 「Node塾 講義その5 Node.js × Titanium」の発表用に SlideConcert というアプリを作って、実際にそれを利用して発表してきました。 個人的にLTをする時に便利だなと思うを機能を実装してみました。 スライド発表時は結構歩きまわるたちなのでスライドを操作できるリモコンが欲しい 発表前に「今日のスライドです」と URL をハッシュタグ付きでつぶやくことが多いのでこれを簡単にしたい スライドの内容を手元で確認したい スライドの進行を見ている人で共有したい(進行も含めてスライド共有したい) 聞いている人の感想をリアルタイムで知りたい 言葉で説明するのも難しいので、実際の動作は以下の動画でご確認ください。 サーバは Node.js 、クライアントは Titanium という組み合わせで、構想1時間、実装がアイコンの作成なども含めて年末年始

    Node.js と Titanium で SlideShare リモコンを作ってみた - hakobera's blog
  • Node.js の Cluster のベンチマークをとってみた - hakobera's blog

    Node.js v0.6 から新規標準モジュールとして導入された Cluster のベンチマークを取ってみました。 測定環境 Server CPU: AMD PhenomII X6 1090T (6コア) MEM: DDR3 16GB (4GB*4) Client MacBook Pro 15 (Early 2011) CPU: Intel Core i7 2.0GHz (4コア) MEM: DDR3 8GB (4GB*2) Network 1GigabitEther (同一セグメント) テスト方法 テストスクリプト cluster-bench.js var cluster = require('cluster'); var http = require('http'); var numCPUs = parseInt(process.argv[2], 10); if (cluster.is

    Node.js の Cluster のベンチマークをとってみた - hakobera's blog
  • tail.io - 標準入力をブラウザで tail -f できる htmlcat のクローンを Node.js + Socket.IO で作った - hakobera's blog

    標準入力をブラウザで tail -f できる htmlcat というのを書いた - NaN days - subtech この記事をみて便利そうだったのですが、Perl 詳しくなくて動かし方がよくわからなかったので、勉強がてらに Node.js + Socket.IO でクローンを作ってみました。npm モジュールとして登録してあるので、以下の方法でインストールできます。 $ npm install tail.io -gコマンドラインツールなのでグローバルインストールしてください。これで tailio というコマンドが使えるようになります。 (追記) Socket.IO のデバッグログを標準で出力しないようにしました。また、--port オプションでポート番号を明示的に指定することもできるようにしてみました。既にインストールした人は npm update tail.io -g でアップデー

    tail.io - 標準入力をブラウザで tail -f できる htmlcat のクローンを Node.js + Socket.IO で作った - hakobera's blog
  • Canvas + File API + Drag&Drop API で Instagram みたいな画像フィルターを作ってみた - hakobera's blog

    Instagram の画像フィルターみたいことを HTML5 (Canvas + File API + Drag&Drop API) で実装してみました。 Instagram みたいなの - jsdo.it - Share JavaScript, HTML5 and CSS 動作するブラウザは FireFox 3.6、Chrome 8 開発版です。(Chrome 7 は File API はサポートしていますが、どうやら iframe 内では動作しないため、上記 jsdo.it 上では動作しません。) できること これを こんな風に加工できます。 大学時代に画像処理の研究をやっていた身としては、ブラウザだけでもここまで出来るようになったのか、と少し感慨深いです。 やっていること Drag&Drop API で画像ファイルを取得 File API で画像ファイルを DATA URI 形式に変

    Canvas + File API + Drag&Drop API で Instagram みたいな画像フィルターを作ってみた - hakobera's blog
  • Connect ソースコードリーディング(1) - ソースコードの依存関係 - hakobera's blog

    前置き Node.js で一番よく使われている Webフレームワークといえば、Express です。で、その Express が大きく依存しているのが Connect です。 Express を制するにはまずは Connect から、というわけで、Connect のソースコードを読み始めました。 対象とする Connect のバージョンは現時点(2011/11/23)での最新版である 1.8.1 (Express 2.5.1 が依存)です。 初回は、ソースを読む前の事前準備として、ソースコードの依存関係と各ソースの概要について説明します。 Connect ソースコードの場所 1.x ブランチ (master は 2.0.0alpha1 なので注意) senchalabs/connect at 1.x · GitHub 現時点でのメイン・コミッター(≒ 最もアクティブにコミットしている人の意

    Connect ソースコードリーディング(1) - ソースコードの依存関係 - hakobera's blog
  • enchant.js ソースコード・リーディングを開催しました - hakobera's blog

    enchant.js ソースコード・リーディング - [PARTAKE] 私の適当なtwitterでのつぶやきにid:nakamura001さんが反応してくれたので、脊髄反射的に上記の勉強会を開催しました。 なにげに初勉強会主催で、人があつまるかな、と不安だったのですが、蓋を開けてみれば、9名の方が参加してくれて、とても熱い会になりました。前半が説明、後半がハッカソンでした。ハッカソンは盛り上がりすぎて、予定時間を2時間ほどオーバーするほど楽しかったです。 以下簡単にまとめます。 enchant.js 概要解説 拙作ですが、enchant.js の概要解説をしました。 enchant.js source reading View more presentations from hakobera id:namakura001 さんによる enchant.js ゲーム開発入門 以下のサンプルペ

    enchant.js ソースコード・リーディングを開催しました - hakobera's blog
  • JavaScriptゲーム製作勉強会を開催しました(舞台裏の話) - hakobera's blog

    先週 5/15(日) 大森の Nifty さんの会議室を使って、JavaScript ゲーム製作勉強会を開催しました。 勉強会に参加した場合なら、ここから内容について書くのですが、今回は主催者だったので、イベントを主催する時に工夫した点、苦労した点などについてまとめてみたいと思います。 資料は後ろの方に張っておきますので、資料だけ見たいという人はスキップしてください。 勉強会の内容、規模など 今回の勉強会は参加人数で言うと40名弱なので、中規模といったところでしょうか。 詳細や当日の Twitter のタイムラインなどは以下を参照してください。 募集ページ 当日のつぶやきのまとめ JavaScript ゲーム製作勉強会 Vol.1 - Togetter 開催者として工夫したこと・苦労したこと 募集ページ選び 告知の方法 講演してくれる人探し 会場探し 募集ページ選び 今回の勉強会は3月に予

    JavaScriptゲーム製作勉強会を開催しました(舞台裏の話) - hakobera's blog
  • 1