hakobera's blog

技術メモ。たまに雑談

node.js

Node.js の Heroku 環境におけるパフォーマンス

Heroku で Node.js を動かしても絶対的なパフォーマンスは得られないのだけれど、最近仕事で Node.js on Heroku をやっているので、実際にどれくらいのパフォーマンスがでるのか測ってみました。 今回調べたのは、主に3点。 2X Dyno (CPUとメモリが2倍のDyn…

EventEmitter.emit() によくある勘違い

突然ですが、Node.jsで次のプログラムを実行した結果を答えてください。 var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); console.log('1'); event.on('open', function () { console.log('2'); }); event.emit('open'…

「Node.jsは静的コンテンツには向いていない」のか?

この記事は東京Node学園祭2012 アドベントカレンダーの8日目の記事です。 この記事を書こうと思った理由 Node.jsに関するWeb上の記事を読んでいると、「Node.jsは静的コンテンツに弱い」とだけ書いてある記事をよく見かけます。有名なところだと、LinkedInの…

Tuppari コミュニティ始めました & IE に対応しました

Tuppari コミュニティについて これまで個人で Tuppari を書いていましたが、@seratch が Ruby ライブラリ書いてくれてので、これを機にコミュニティ体制に移行しました。Tuppari の Ruby クライアントを書きました - case class HatenaDiary(id: Symbol = ’…

Tuppari の Java クライアントを作った

Tuppari - WebSocket on Your Cloud - - Scalaとlift のはずだった ・・・前回、Node.js で構築した Tuppari (コンセプトは Pusher クローン)を紹介しましたが、実は API 仕様が公開されていて、Node.js 以外の言語/環境でもクライアントを作ることができ…

Tuppari - WebSocket on Your Cloud -

Tuppari とは 東京Node学園 6時限目で発表した Node.js で作られた Pusher クローンです。 簡単に言うと WebSocket を利用した大規模 Broadcast に特化したサービスです。インフラとしては Amazon Web Services (以降、AWS)上で動かすことに最適化されてい…

Router-Line はじめました

4/18 に開催された 東京Node学園 5時限目 で @KOBA789 さんが自作のルータである Router-Line を紹介していました。その時から便利そうとは思っていたのですが、最近ちょっとした API サーバを書く時に実際に Router-Line を使ってみて、改めて良いなと思っ…

鹿駆動勉強会に参加してきました

4/29 に奈良の能楽ホール(重要文化財!)で開催された 鹿駆動勉強会 に参加して、LTしてきました。関東以外の勉強会に参加したのは初めてでしたが、懇親会で twitter でしか知らなかった方々と直接お話できたりして、とても楽しかったです。当日の流れや各L…

WebSocket で PNG 画像をバイナリ転送して、JavaScript で展開して表示してみた

Node.js で WebSocket-Node を使って実装しました。 転送するめぼしい画像が見当たらなかったので、デスクトップをスクリーンキャプチャして転送してみました。ブラウザはChrome 17以上か、Firefox 11以上が必要です。サーバ側は scrrencapture コマンドを利…

Node.js vs Play vs SAStruts

前置き Experiences with Node.js: Porting a RESTful Service Written in Java - ZiggyTech上記記事では、実験的にJava (Jersey + Hibernate on Tomcat) で実装された REST API サーバを Node.js で書きなおしてみたら、少ないリソース(CPU/メモリ使用量)…

Heroku で package.json で指定した任意のバージョンの Node.js を 動かす方法

2012/8/7 追記Heroku が公式で package.json での Node.js/NPM のバージョン指定に対応したので、現在は以下の方法は必要ありません。普通に package.json の engines に利用したいバージョンを書けばOKです。以下の情報は古いです。本日、開催された Heroku…

nvmw で npm がインストールできない問題を修正しました

hakobera/nvmw · GitHub1週間前に対応したんですが、念のため、こちらでも告知しておきます。 主な変更点は以下の通りです。 npm がインストールできなくなっていた問題を修正 npm の git リポジトリの構成変更に伴いインストール方法を変更 npm をビルドし…

僕の考えた最強の Node.js Document Viewer

自分がNode.js でプログラミングをする際に、必ず参考にするページがあります。それは Node.js の公式ドキュメントです。 Node.js v0.8.12 Manual & Documentationバージョンアップにも追随して、最新の情報が得られるので、書いている人には頭が上がりませ…

uglify-me : UglifyJS のフロントエンドを作った

既にあるような気もするのですが、ちょっとだけ特殊な要件に対応したかったので、uglify-me という JS 圧縮ライブラリである UglifyJS のフロントエンドを Node.js で組んでみました。hakobera/uglify-me · GitHub デモ以下のようなケースにマッチします。 …

tail.io - 標準入力をブラウザで tail -f できる htmlcat のクローンを Node.js + Socket.IO で作った

標準入力をブラウザで tail -f できる htmlcat というのを書いた - NaN days - subtechこの記事をみて便利そうだったのですが、Perl 詳しくなくて動かし方がよくわからなかったので、勉強がてらに Node.js + Socket.IO でクローンを作ってみました。npm モジ…

Node.js 入門者向けチュートリアル テストもあるよ

先月、学生向けの無料講義を開催している TechHUB.jp で Node.js の講義をやりました。そこで利用した講義資料(正確には補足資料)を、最新の Express と mocha でも動くように修正したので、せっかくなのでブログでも周知しておきます。Node.js で作るリア…

さくらのクラウドで Node.js v0.6 を動かすメモ

サーバの作成とSSH公開鍵の登録は済んでいるものとする。 OS は Ubuntu 10.04 LTS 64bit(随時追記予定) 初期設定 ログイン 普通の Ubuntu と違って root ユーザでログインする点に注意 なんとなく気持ち悪いので、一般ユーザを作成。sudo 権限を設定。SSH…

Node.js と Titanium で SlideShare リモコンを作ってみた

2012/1/11 に開催した 「Node塾 講義その5 Node.js × Titanium」の発表用に SlideConcert というアプリを作って、実際にそれを利用して発表してきました。個人的にLTをする時に便利だなと思うを機能を実装してみました。 スライド発表時は結構歩きまわるたち…

mocha と Jenkins で Node.js の CI 環境を構築する

最近、mocha をつかってテストを書くのが楽しくなってきました。でも、テストの数が増えてくるとローカルでの実行だけでなく、CI 環境が欲しくなりますよね。github にあげられるようなプロジェクトだったら、Travis CI も良いですが、実際に仕事で使うとな…

東京Node学園3時限目でLTしてきました

12/14 に開催された東京Node学園3時限目で 「Node v0.6 on Heroku」という LT をしてきました。スライドは以下においてあります。Node v0.6 on Heroku内容としては、Buildpack という仕組みを利用して、Node.js v0.6.5 を Heroku でも使えるようにするための…

Node Version Manager for Windows を作ってみた

これは JavaScript Advent Calendar 2011 (Node.js/WebSocketsコース) の1日目の記事です。 nvmw (Node Version Manager for Windows) とは Mac OS や Linux など Unix 系の OS で利用できる nvm (Node Version Manager) の Windows 版とするべく私 @hakobe…

Connect ソースコードリーディング(6) - 組込み middleware 紹介

第6回目は、標準でバンドルされている組込み middleware の一挙に紹介します。API の詳細は公式サイトやソースコードを参照してもらうとして、ここでは概要レベルの詳細にします。昨日紹介した TJ の記事に基づいて、フィルタとプロバイダの2つに分類して…

Connect ソースコードリーディング(5) - 小ネタをちょこちょこ

あまり時間が取れなかったので、第5回は小ネタをちょこちょこと。 HTTPServer の prototype チェーン(継承関係) net.Server |- http.Server |- connect.HTTPServer - [mix-in] -> connect.HTTPSServer なので、net.Server や http.Server のメソッドが普通…

Connect ソースコードリーディング(4) - bodyParser

bodyParser middleware 第4回目は Connect の組込み middleware である bodyParser を読んでいきたいと思います。 Node の http.ServerRequest は Java の HttpServletRequest などよりもかなりローレベルです。特に POST データはそのまま送信されてくるだ…

Connect ソースコードリーディング(3) - middleware の作成方法

前置き 今回は、前回までのソースコードリーディングで得た知識を利用して、実際に Connect の middleware を作成してみます。ソースは以下においてあります。 hakobera/connect-middleware-sample · GitHub 作成するもの GET リクエストにのみ対応した Expr…

Connect ソースコードリーディング(2) - 基本処理フロー

はじめに 今回は、以下の Connect を使ったコードが内部的にどのように初期化され、リクエストの処理がどのように行われていくのかを解説します。 var connect = require('connect'); var server = connect.createServer( connect.logger(), connect.static(…

Connect ソースコードリーディング(1) - ソースコードの依存関係

前置き Node.js で一番よく使われている Webフレームワークといえば、Express です。で、その Express が大きく依存しているのが Connect です。Express を制するにはまずは Connect から、というわけで、Connect のソースコードを読み始めました。 対象とす…

JavaScript で for/while 文を使わないで1から10までの合計を求める方法

Node.js 初心者に非同期(ネットワーク)、コールバック、ECMAScript5 について理解してもらうのにいいネタはないか考えてみた。その結果、「for 文を使わないで1から10までの合計を求める」プログラムを書いてもらうのはいいんじゃないか、と思ったので、思…

Node.js の Cluster のベンチマークをとってみた

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…

Node.js v0.6 で npm がインストール出来なくっている件の暫定対応

本日 Node.js v0.6 が予告より通りリリースされました!ただし、表題の通り、パッケージマネージャである npm が 2011/11/5 21:00 現在、インストールできません。 2011/11/6に npm v1.0.104 でこの問題は修正されました。 fails with node-v0.6.0 · Issue #…