2012
05/05
18:23

2012年のスクレイピングLatest!

[node.js][スクレイピング][jsdom][cheerio]

node scraping とかでググると request + jsdom の例がたくさん出てきますが、 そのとおりにやるとjsdomのメモリリークで大変なことになります。 StackOverflowでも話題になってました。 http://stackoverflow.com/questions/5718391/memory-leak-in-node-js-scraper 上記ページでは回避策が2つ挙がってます。 1. ページパース後に毎回window.close()を呼ぶ 2. js...

[この記事を開く]
2012
05/02
12:46

express3でswigを使う

[express3][swig]

やってみたのでメモとして。 ``` var swig = require('swig') , path = require('path') app.configure(function(){ swig.init({ root: __dirname + '/views' , allowErrors: true }) app.engine('html', function(filepath, option, fn){ var tpl = swig.... ```

[この記事を開く]
2012
04/29
16:48

大阪node学園三時限目を開催しました

[イベント][大阪node学園]

昨日は大阪node学園三時限目でした。 皆さんどうもありがとうございました。 チャットサンプルを動かしてSocket.IOの基礎を掴んだあと、 チャンネルを使ったメッセージ送信をやろうとしたのですが 進行が上手く行かず、待ちが長時間発生してしまい申し訳なかったです。 次回以降の教訓にしたいと思います。 勉強会自体は運営体制が充実してきたので、 今後は役割分担を進めてより持続的なものになるようにしていきたいと思っています。 次回は一度座学をやって、そのあとインストールからやるハ...

[この記事を開く]
2012
04/27
09:04

Socket.IOのログレベルを変更する

[Socket.IO]

デフォルトではデバッグメッセージがズラズラ出るようになっているのでうっとおしいです。 サーバ側でログレベルを変更できます。 ``` io = io.listen(http, {'log level': 1}) ``` デフォルトでは3になっています。 lib/logger.jsを見ると * 0 error * 1 warn * 2 info * 3 debug ということのようです。 実運用環境では1あたりがよいんではないでしょうか。

[この記事を開く]
2012
04/26
11:46

nginx + Socket.IOでつながらないときはポート番号を指定してみる

[Socket.IO][nginx]

nginxをnginx_tcp_proxy_moduleのパッチを当ててコンパイルしていることを前提として、 (参考:http://memo.yomukaku.net/entries/342) クライアント側でポート番号を指定してやれば良いです。 ``` <script type="text/javascript" src="/socket.io/socket.io.js"/> <script type="text/javascript"> var socket = io.conne... ```

[この記事を開く]
2012
04/25
05:01

express3とSocket.IO

[express][express3][Socket.IO]

express3だとSocket.IOのページにあるexpressとの連携の例はブラウザで ``io is not defined`` というエラーが出て上手く動きません。 このエラーはサーバ側のコードを次のようにすることで回避できます。 ``` var http = http.createServer(app).listen(3000) console.log("Express server listening on port 3000") var io = require('socke... ```

[この記事を開く]
2012
04/24
07:58

connect-redisでセッション管理

[express][redis][express3]

expressのセッションはデフォルトでメモリに保存されるのですが、 環境変数にNODE_ENV=productionを与えて動かすと、メモリストアは実運用向きじゃないよ、という警告がでます。 また、複数のnodeプロセスを動かしてラウンドロビンで負荷分散する場合などにもメモリに保存しているとセッションの共有ができません。 そこでセッションデータをDBに保存するようにします。 connect対応セッションストアには MongoDB対応、CouchDB対応、memcache対応、MySQL...

[この記事を開く]
2012
04/23
11:19

Guakeの幅を変更する

[ubuntu]

Guakeはホットキー一発で画面に表示される端末です。 gnome-terminalと違ってALT+Tabで行きつ戻りつして端末を探さなくて済むので重宝しています。 同様のツールにはYakuakeやTildaなどがありますが、使い勝手と見た目でGuakeを使っています。 Guakeが他の2つに劣っているのは幅の設定が設定画面からできないことです。 なんとか変更できないかと思って "guake width" でググったらあっさりやり方が見つかりました。 [How To Adjust Guak...

[この記事を開く]
2012
04/22
06:29

expressでURIError: URI malformedが頻発

[express][URIError][node.js][express3]

expressのログに URIError: URI malformed というエラーがでまくっていて、 何事かと思って調べてみたら原因はURLに含まれているエンコード済み文字列が壊れていることでした。 タイトルをencodeURIComponentを使ってエンコードしてURLに入れているのですが iPad用のニュースリーダのFlipboardというのが途中でこのURLをぶった切ってくれるらしく、 不正なエンコード文字がdecodeURIComponentに渡されて、URIErrorが発生していま...

[この記事を開く]
2012
04/21
06:31

nginx + nodeの構成で502エラーページを変更する

[node.js][nginx]

メンテなどでnodeのプロセスを落としているとnginxが502 Bad Gatewayというエラーページを返してくれるのですが、 あまり親切ではないので自前のページを用意することにします。 nginx.confにエラー時のページ移動設定を追加します。 ``` server { server_name *; client_max_body_size 10M; location / { proxy_pass... ```

[この記事を開く]
2012
04/18
22:23

非同期祭りを乗り切るためのsynchronize(とasyncblock)

[node.js][synchronize][asyncblock]

東京node学園5時限目のUst楽しかったです。 Twitterでつぶやいた質問が会場で採用されたりして一人で盛り上がりました。 運営の皆さん、発表者の皆さん、ありがとうございました。 この勢いを駆って一つエントリを。 node(やjQuery)でコードを書いているとコールバックが積み重なって 非同期地獄とか非同期祭りとか言われる状態になることがあります。 これを緩和するための方法は色々あって、古くはRyanがデモで紹介していた コールバックを関数オブジェクトとして外に出す方法...

[この記事を開く]