Express で JSONP をスマートにレスポンスする方法

Express にて JSONP をレスポンスする時、今まではこんなふうにやっていました。

app.get('/awesome/your/api', function(req, res) {
  var response = { sugar: "sweet", salt: "spicy" }
    , callback = req.query.callback;

  if (callback) {
    // コールバックが指定されていたら JSONP をレスポンス
    res.send(callback + '(' + JSON.stringify(response) + ');');
  } else {
    // コールバックが指定されていなければ JSON をレスポンス
    res.send(response);
  }
});

マニュアルにはありませんが、実はフレームワーク側で JSONP のレスポンスがサポートされています。

// res.send() にて JSONP を有効にするオプション
// GET パラメータに callback の指定があると JSONP でレスポンス
// app.config に書いておくと良さげです。
app.enable('jsonp callback');

app.get('/your/awesome/api', function(req, res) {
  var response = { sugar: "sweet", salt: "spicy" };
  // 設定が有効になっているのでフレームワーク側で自動で判別してくれる
  res.send(response);
});

/your/awesome/api

{"sugar":"sweet","salt":"spicy"}

/your/awesome/api?callback=fn

fn({"sugar":"sweet","salt":"spicy"});

フレームワークの機能を使うと、余計な if 文を書かなくてもいい上に、危険な文字もエスケープしてくれるのでこちらを使ったほうが良いでしょう。なお、コールバック関数名を指定するパラメータ名は変更できないみたいです。

以上、ちょっとした小ネタでした。

Kinect 勉強会 Vol.1 に参加してきました

RDDブログひさしぶりの小松です、

今日は、Kinect 勉強会に参加してきました

導入から丁寧に説明してもらえたので、だいぶ分かった気になりました

以下、自分のメモ。。
・最初のドライバはlibfreenect。賞金がついてオープンソースのドライバが開発された。
・今の主流はOpenNIのやつ。Macにも対応しているが、stableはwin/linux向けのもの。
・ C++/Python向けのバインディングが用意されている。
・深度画像と光学(RGB)画像が得られる。
・骨格トラッキングをすると、関節部分の座標と角度が取れる。
・primesense社のSDKというのも使えるらしい

・事例まとめ
http://www.openni.org/gallery
http://www.kinect-hacks.com/openni
・openFrameworks には、libfreenect / OpenNI のドライバが同梱されていてらくちん
・@hagino3000さんの発表スライドは、ハンドジェスチャーでページ送りしてた
・手が疲れるので途中でやめる
・画像処理はOpenCV使うとらくちん
・左右のカメラの視差で3D認識をしているんだと思っていたが、どうやら赤外線カメラで深度情報を取っているっぽい?
・@ndrugerさんの発表は、node.jpと、WebGLと、HMDを組み合わせてゲームを作る
・node.jsは、座標情報を右から左に流すだけのシンプルな物
・kinectからきた座標情報をTCPで送るコードも、OpenNIのサンプルコードに少し手を加えた程度の簡単なもの
・深度情報は、0-255の256段階、640×480の解像度
・深度は赤外線カメラで、映像はRGBカメラで撮影していて、カメラがついている位置が少し離れているためKinectに近づくと映像と、深度情報がずれる現象が起こる
・HMD楽しそうVR920 5万円ぐらいで、加速度センサ付きのHMDがかえるらしい。キネクト界隈でいろんな人が遊んでいるらしい。解像度はVGAぐらい

さて、あとは作るだけ!C++久しぶりに触ってみるのも、わくわくしますねー。

Music Boxel : Naked-eye 3D Display and Web Socket based multi user interaction

aircord社との協同プロジェクト Music Boxel のデモムービー(1分34秒)です。

Music Boxel from aircord on Vimeo.

関連記事
2011年1月17日 Music Boxel (裸眼3Dディスプレイ x WebSocketインターフェイス)
2011年2月7日 Music Boxel Prototype (Processing+PeasyCam)
2011年2月8日 Music Boxel@CreativeApplications.Net

Naked-eye 3D Display and Web Socket based multi user interaction.
Adding a voxel to make a trigger on roop timeline of virtual music box.

Display/Audio-Visual Program by aircord inc. made with : openFrameworks, SuperCollider
Server/Mobile Interface by Uniba Inc. made with : node.js, CSS3/HTML5

aircord.co.jp/​
aircord.co.jp/​labo
uniba.jp/​

Music Boxel@CreativeApplications.Net

CreativeApplications.Net 14879 February 7, 2011
Music Boxel [iPhone, iPad, openFrameworks]
http://www.creativeapplications.net/iphone/music-boxel-iphone-ipad/

取り上げていただきました!
ありがとございます!

Music Boxel (裸眼3Dディスプレイ x WebSocketインターフェイス)

aircord社とユニバの協同プロジェクト「Music Boxel」のご紹介です。

MusicBoxelは、aircord社が開発したN-3Dという裸眼立体視ディスプレイと、スマートフォン・携帯電話用のリアルタイム通信を組み合わせた、実験プロジェクトです。手元のモバイル端末から、ウェブページ経由でディスプレイの中を回転する「オルゴール(Music Box)」の音を増やしたり、減らしたりするリアルタイム操作を実現しています。

紹介ムービーを準備しているのですが、そちらは近日公開予定。
また、各パートを担当したスタッフから技術紹介の記事をアップしていきます。

Music Boxel
Music Boxel
Music Boxel

Music Boxel

Naked-eye 3D Display and Web Socket based multi user interaction.
Adding a voxel to make a trigger on roop timeline of virtual music box.

Display/Audio-Visual Program by aircord inc. made with : openFrameworks, SuperCollider
Server/Mobile Interface by Uniba Inc. made with : node.js, CSS3/HTML5

preload preload preload