2010年2月アーカイブ

界王拳がスムースに変換できないのについカッとなってことえりを捨ててATOKに乗り換えました。結局辞書登録しています。こんばんは。

さて、このたび DeNA Technology Seminar #1 というのを会社で開催することになって、その中で Inside mbga Open Platform ( Gadget Server ) というお題で話すことになりました。

OpenSocialというとアプリケーションの作り方とかの話が多くて、裏側の話というのはなかなかないと思うのでよかったら聞きに来てください。会社を首にならない程度に話せたらなーと思います。

まだ詳細は決まっていませんが、懇親会もあるのでよかったら僕と握手!

あと、zigorou先生が気合いを入れてくれたエンジニアブログも始まりました。僕もそのうちネタができたら書けたらなーとか思ってますので、こちらも是非。

年始から5kgほど減量したのに、先日飲み会で某メガネダンディーなエンジニアに「本当に痩せたのー?」と嫌というほど首の肉をつままれ泣きそうになりました。こんばんは。

今更感がとってもありますが栗原さんに触発されて、Arduinoを買いました。

RIMG0509.JPG

Arduinoとはフィジカルコンピューティングのためのオープンソースプラットフォーム...アラフォー的に一言で言うといわゆるマイコンです。

デジタルIOピンとアナログIOピンを備えていて、ここにフィジカルデバイスをつないで遊べるという代物です。

今風なのがブレッドボードを使ったパッチングでデバイスをつなぐのでハンダ付けがいらないことと、USBポートを備えていて、ここからスケッチと呼ばれるプログラムをアップロードしたり電源を取ることができます。

また、シールドと呼ばれる拡張キットもあって親亀小亀よろしくピンをバイパスして乗っけて拡張することができます。

RIMG0511.JPG

ソフトウェアの方はプログラム...じゃなくてスケッチをパソコン上のIDEでProcessingというCに似たような言語で書いてUSB経由でアップロードする事ができます。

公式ライブラリだけではなく、有志がライブラリを書いて発表してくれていて、DHCPだとかMIDIコントロールだとか、Twitterクライアントまであります。ライブラリはC++で書くみたい。

で、最初に買ったのが


Arduinoをはじめようキット
スイッチサイエンス
売り上げランキング: 619

本体のArduino Duemilanove 328、ブレッドボード、ジャンパワイヤ、抵抗、LED、スイッチ、光センサが入ってます。これだけあれば十分遊べます。4200円。


Arduinoイーサネット・シールド
スイッチサイエンス
売り上げランキング: 5375

やっぱりインターネッツと繋がりたいですよね。4200円。


Arduinoをはじめよう
Arduinoをはじめよう
posted with amazlet at 10.02.11
Massimo Banzi
オライリージャパン
売り上げランキング: 3193

Arduino自体にはマニュアルとかは一切ついてないです。Arduinoの哲学から例、リファレンスまでついてるのであってもいいと思います。オライリー。2100円


全部合わせても1万円ちょい。安い。

実際に使うにはまずArduino IDEをダウンロードしてPCにインストールします。
後は本体に色々デバイスをつないで、PCとUSBで接続して、スケッチを書いてアップロードするだけ。超簡単。

拡張ライブラリを使いたい場合にはダウンロードしてArduinoのディレクトリに展開します。(Macなら /Applications/Arduino.app/Contents/Resources/Java/libraries/)。

とりあえず本に書いてあるものを一通りやるだけでもかなり楽しいです。
イーサーネットシールドがあればclouderさんがやってるみたいにプロキシーを走らせて、それと通信させれば一々ArduinoでプロトコルをしゃべることもなくIRCなんかとつなげるのも簡単にできるのでこれまた楽しいです。

逆にサーバーのライブラリもあるのでサーバーとして動かす事も可能。試しにクライアントがつながったらLEDを点灯させるサーバーを書いてみたらこんな感じ。シンプル。

#include 

#define LED = 13

byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte ip[] = { 192, 168, 0, 1 };
byte gateway[] = { 192, 168, 0, 254 };
byte subnet[] = { 255, 255, 255, 0 };

Server server(1919);

void setup() {
  Serial.begin(9600)
  pinMode(LED, OUTPUT);
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.println("Server Start");
}

void loop() {
  Client client = server.available();
  if (client && client.connected()) {
    degitalWrite(LED, HIGH);
  } else {
    degitalWrite(LED, LOW);
  }
  delay(100);
}

久々に秋葉原行ってセンサーか何か買ってこようかな。

相変わらず、題名にセンスがありません。こんばんは。

さて、ようやくローンチしたモバゲーオープンプラットフォームですが、仕組み的にはmixiさんのモバイル版とほぼ同じアーキテクチャで Gadget Server がプロキシー的な役割をする感じになってます。

図面1

大人の事情がかなり反映された仕組みなのですが、この仕組みで非常に重要なのがGadget ServerからのリクエストをSAPがいかに信頼するかという部分です。いわゆる 2-legged OAuthでAuthorizationヘッダに含まれるOAuth Signatureの検証する部分。その部分のコードスニペットをご紹介。(mixi 用のは公開していいかどうかわかんないのでモバゲー向けだけ)

use OAuth::Lite::ServerUtil;
use OAuth::Lite::Util qw/parse_auth_header/;
use CGI;

my $consumer_secret = 'YOUR_CONSUMER_SECRET';

sub validate_signature {

    my $cgi = CGI->new;

    my ($realm, $params) = parse_auth_header($ENV{HTTP_AUTHORIZATION});

    for my $key ($cgi->url_param) {
        $params->{$key} = [$cgi->url_param($key)];
    }

    if (uc $cgi->request_method eq 'POST'
        && $cgi->content_type =~ m{^\Qapplication/x-www-form-urlencoded})
    {
        for my $key ($cgi->param) {
            $params->{$key} = [$cgi->param($key)];
        }
    }

    my $util = OAuth::Lite::ServerUtil->new(strict => 0);
    $util->support_signature_method('HMAC-SHA1');

    return $util->verify_signature(
        method          => $cgi->request_method,
        url             => $cgi->url,
        params          => $params,
        consumer_secret => $consumer_secret,
        token_secret    => $params->{oauth_token_secret},
    );
}

Apacheで動かす場合にはCGIからAuthorizationヘッダを取得することができないので mod_rewriteで

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP:Authorization}  ^(.*)
RewriteRule ^(.*)$ $1 [e=HTTP_AUTHORIZATION:%1]

こんな風にしないと環境変数からは取れない。

Net::OAuthっていうモジュールもあるけど個人的にはlyokato氏謹製のOAuth::Liteの方が圧倒的に使いやすいのでこっちをつかってます。

で、このままmixiさんで動くかというと、そうでもなく両者の間には若干差があって、mixiさんは純粋な 2-legged OAuth なんだけど、モバゲーの場合は若干パラノイア的で、Gadget Server がリクエストごとに発行する Access Tokenが含まれるため、それも含めて検証する必要があります。あとPOSTの場合の挙動がちょっと違うかも。

というか、この部分って毎回検証する必要があるのだから、WAFやApplicationというよりはmod_auth_*とかPlack::Middlewareとかで何とかするレイヤーな気がしてならないので、そのうち作りたいな。

プロフィール

このアーカイブについて

このページには、2010年2月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2010年1月です。

次のアーカイブは2010年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。