2011-07-01から1ヶ月間の記事一覧

モジュール内でのthis

nodeでrequireされたモジュール内のthisはmodule.exportsになる console.log(this === module.exports); // true なのでthisに値を設定するのはmodule.exportsに設定するのと基本的には同じ。ただしスコープつくってしまうとthisが変わるので注意 (function(…

for in と Object.keys

for (var key in obj) { if (obj.hasOwnProperty(key) { ... } } っていうのは Object.keys(obj).forEach(function(key) { ... }); と等価。ベンチマークとってみた。環境はnode.js v0.4.7。 ベンチマークのコードはこんな感じ。一応hasOwnPropertyなしのfor…

Objectかどうかの判定

jQuery.isPlainObjectみたいなやつ。こんな感じかな function isObject(obj) { return obj instanceof Object && Object.getPrototypeOf(obj) === Object.prototype; } console.log(isObject({})); // true console.log(isObject({ foo: 'bar' })); // true …

enumerableがfalseのプロパティを見る

node.jsでconsole.logとかしてもenumerableがfalseなプロパティは見れない。 var o = Object.create(null, { foo: { value: 'bar', enumerable: false }, }); console.log(o.foo); // => bar console.log(o); // => {} o.fooはあるのにoをconsole.logしても…

ubuntuでdaemontools

node.jsのデーモン化とかプロセス管理するのでforeverっていうの試したけどいまいちバギーだったので結局damontoolsに落ち着いた。さすがの安定感。インストール。svtoolsがdaemontoolsでdaemontools-runってのは起動時に自動でsvscanしてくれるようになるや…

rsyncでdry-runで確認してから実行する

sh

的なシェルスクリプト #!/bin/sh FROM=/path/to/from/ TO=/path/to/to/ EXCLUDE=/path/to/exclude OPT="-av --delete --exclude-from=$EXCLUDE $FROM $TO" RUN="rsync $OPT" DRY_RUN="rsync --dry-run $OPT" $DRY_RUN echo -n 'deply? [y/n]: ' read YN if […

Objectのmerge

Objectを再帰的にマージしたい。 var _ = require('underscore')._; var a = { hoge: { key1: 'val1' } }; var b = { hoge: { key2: 'val2' } }; console.log(_.extend(a, b)); // こうなってほしいけど // { hoge: { key1: 'val1', key2: 'val2' } } // // …

node.jsのconsole.log

ってsprintfみたいなことできたのね。 console.log('foo %s', 'bar'); //=> foo bar

abで負荷かけすぎてエラーに

nginxのベンチとってたら、abの途中でつまって、 apr_poll: The timeout specified has expired (70007)とかなったのでなんぞと思った。こういうことらしい。 http://www.maidsphere.jp/archive/20100801

MongoDBのOplog

なんかMongoDBのログの設定いじってたらOplogっていう設定項目があってなんぞと思って調べた。ここに詳しくのってる。 MongoDB Oplog入門レプリケーションの同期とかに使うやつらしい。

expressコードリーディング その2 connect/http.jsを読む

前回に引き続きconnect.jsを読む。今回はconnect/http.js。ここがconnectのコア。まず最初にコンストラクタ。ここでhttp.Serverを継承してる。んでhttp.Server.call(this, this.handle)ってやってるのでリクエストハンドラをthis.handleにしてる。リクエスト…

http.createServer()の最も簡単な例

connect読んでてそもそもhttp.createServerがどういうものかわかってなかったので。 var http = require('http'); var server = http.createServer(); server.on('request', function(req, res) { res.write(req.method + ' ' + req.url); res.end(); }); se…

SendGridのSMTP API

メモ。 Getting Started - SendGrid Documentation | SendGrid var email = require("mailer"); email.send({ host : ..., port : ..., to : "to@example.com", from : "from@example.com", subject : "タイトル", body: "Hi, <name>" authentication : "login", u</name>…

nodeのmailerモジュールのtemplate

なんかnodemailerとかmailerとか名前が似てるけどmailerのやつ。 GitHub - Marak/node_mailer: ## Project deprecated, see READMEtemplateを指定するとテンプレートエンジンにmustache.jsを使ってレンダリングしてくれるんだけど、このとき、レンダリング結…

nodemailerで認証周りでエラーになる件が直ってた

なんか前回Sendgridではまりまくった件、やっぱり使ってたモジュールが原因だったっぽい。 SendGridのSMTPではまる - hokaccha.hamalog v2なんかこういうエラーがでてた。 events.js:45 throw arguments[1]; // Unhandled 'error' event ^ Error: 503 Alread…

node-devでrequireしたモジュールを監視できる仕組み

node-devがどういう仕組みでファイルを監視してるのか気になって調べたのでメモ。基本的にはfs.watchFileで監視するんだけど、ロードしてるモジュールも全部監視してるのが謎だった。node.jsはrequireでモジュールをロードするときrequire.extensionsという…

SendGridのSMTPではまる

http://docs.sendgrid.com/documentation/get-started/integrate/ とりあえずnode.jsからSMTPでメール送ってみようと思ってここのサンプルみながらやったけどなんかエラーになる。 Error: 503 Already authenticatedとか言われる。 node.jsのモジュールがお…

GoogleStorageのACLについてのメモ

ACLってのはアクセス制限を定義するやつ。ここに書いてある。 http://code.google.com/intl/ja/apis/storage/docs/accesscontrol.html スコープごとにパーミッションを指定する スコープごとっていうのはユーザーごとにとか、メールアドレスごとにとか、グル…

dateコマンドのフォーマットで%kとか使うとき注意

sh

時間をファイル名につけるようなシェルスクリプト書くときに FILE_NAME=`date +"%Y%m%d-%k%M%S"`.tar.gz とかすると、時間が一桁(1時〜9時)だったとき、%kは空白入りの文字列になるので意図しない動作になることがある。 $ date -d "2011-07-10 01:00:00" …

mongodbのバックアップをとって過去30日間分保存する

バックアップをとる簡単なシェルスクリプトのメモ。mongodbのdatabaseのデータをdumpしてtar.gzにして30日以上前のは消す。 #!/bin/sh DB_NAME=$1 if [ -z $DB_NAME ]; then echo 'require database name' exit fi BACKUP_BASE_DIR=/backup/db BACKUP_DIR=$B…

シェルスクリプトで1から10まで出力

sh

シェルスクリプトはほんとにたまにしか書かないので基本的なことも忘れがち。 for i in {1..10}; do echo $i; done

tarコマンドの-Pオプション

なんかtarで圧縮しようと思ったら $ tar cvzf hoge.tar.gz /home/hokamura/tmp/hoge tar: Removing leading `/' from member namesっていうワーニングが出たので何かと思って調べた、絶対パスでの指定は-Pオプションをつけるべしということらしい。 -P, --ab…

expressコードリーディング その1 connectを読む

使用するフレームワークのコードはちゃんと読んで理解しとけと偉い人が言ってた気がするのでexpressのコードを読んでみる。今回読むexpressのバージョンは2.4.3。 GitHub - expressjs/express at 2.4.3: Fast, unopinionated, minimalist web framework for …

http.Serverとhttp.createServerの違い

がよくわからんかったのでソース見たら exports.createServer = function(requestListener) { return new Server(requestListener); }; だった。

ビット反転演算子(~)でindexOfの判定

nodeのqsモジュールのコード読んでたらよくわからん書き方があった。 if (~key.indexOf(']')) { ... } って感じだったんだけど、チルダってなんだっけと思って。チルダはビット反転演算子で、整数をビット反転させると符号を反転させて1引いた数になる。こん…

ffmpegで動画の全てのフレームを静止画で書き出す

$ ffmpeg -i in.mp4 -f image2 out/%d.pngこんな感じ。超簡単。

ffmpegをMacにインストール

homebrewで簡単に入るかと思いきやmakeでこけて入らなかったので自前でビルドした $ svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg $ cd ffmpeg $ ./configure --enable-libmp3lame --enable-shared --disable-mmx --arch=x86_64 $ make $ make in…

sakura VPSのUbuntuを64bitにした

最初32bitにしてたけど64bitにした。理由はMongoDBが32bitだと容量2GB制限があるから。 心配してたのはメモリ使用量で、メモリ1GBしかないVPSだから32bitのほうがメモリにやさしくていいかなーと思って、32bitにしたけど、nginx+node.js+mongodbとかで色々ベ…

vundle.vim導入ではまったこと

vim

snipMateのディレクトリ指定 snipMateのsnippetsディレクトリを指定してなくて、2回読まれるのwarningが出た。スニペットは自分で編集して管理したいので.vim直下に置いてgitで管理したい。 let g:snippets_dir = $HOME.'/.vim/snippets' インデントがおかし…

Webアプリから使えそうなメール配信サービス

なんかSMTPサーバーをクラウドでやる的なやつ。調べたら色々あった。 SendGrid SocketLabs Amazon SES CritSend Postmark ElasticEmail SendGridがフリープランあるみたいだから試してみる。