Google Developer Day 2009 と Android G2

Google Developer Day 2009

先日、パシフィコ横浜で開催された Google Developer Day に参加してきました。仕事の関係で午前中の基調講演しか聞くことができなかったのですが、Chrome、Android、OpenSocial そして話題の Wave など Google が擁するプロダクトについての話を聞くことができました。

しかし何と言っても今回一番の収穫はこれです。

Android G2 (HTC Magic)

近々ドコモから発売予定の Android 端末「HTC Magic」!!これをGDD参加者全員に配るというサプライズがありました。先だってサンフランシスコで開催された Google I/O でも配布されたのですが、あちらは参加費が $400 もします。無料のこのイベントで、ちゃんとTELECを通過した発売前の端末を専用カスタマイズして配るとは驚きました。
自分は今まで、エミュレータと Zaurus にインストールした Android しか触ったことがなかったのですが、やっぱり実機があるとないとでは雲泥の差ですね。少し使ってみて、Android がかなり気に入ってしまいました。

アプリを起動する度にいちいち待たされる iPhone と違って動作は軽快です。また、バックグラウンドでアプリケーションを動かせるので、例えば twitter アプリで自分宛ての tweet や direct message が届いた時だけブルブルと震えて通知することができます。ここ数日は、実際にそういう設定をして使っているわけですが、これはちょっとした革命ではないかと思います。

不満点を挙げるとすると、マルチタッチ機能がないのでピンチ操作で拡大したりとかができないのと、現時点で日本からは有料アプリが買えないことでしょうか。なので無料アプリしか試していませんが、まだ個々のアプリケーションのクオリティが低いものが多いです。同じ目的のソフトウェアが3種類くらいは出てこないとなかなか切磋琢磨して機能向上とはいかないですね。

しかしそこはオープンなプラットフォームなので、無いものは自分たちで作ればよいわけです。先週の金曜日には、さっそく社内の有志で会議室に集まって Android プチ開発合宿を行ってしまいました。Android Scripting Engine を使うと Python からハードウェア機能にアクセスできたりして、かなり楽しいです。このあたりは後ほど、別のエントリとしてまとめますが、位置情報の取得も数行書くだけでできちゃいます。

今まで Eclipse をインストールするのをためらってたくらいなのに開発を始めちゃうなんて、僕らは Google の思惑通りですよ。> 及川さん

OpenSocial Signed Request を Google App Engine で検証する

OpenSocial の Signed Request を Google App Engine で検証する方法についてです。Signed Request は、OpenSocial コンテナからのリクエストが正しいものであるかを検証するための仕組みです。OAuth Signature を検証することで、リクエストパラメータの不正な改ざんを検出することができます。この署名付きリクエストの検証方法については、mixi Developer Center に分かりやすいサンプルがあるのですが、PHP と Java と C# のみで Python がありません。ヽ(`Д´)ノ

そこで mixiアプリからのリクエストを検証するサンプルを書いてみました。

利用するためには、次の2つのライブラリが必要です。

これらを 次のように App Engine のプロジェクト直下に置いてください。

nantoka-project/
|-- Crypto/
|-- app.yaml
|-- index.py
|-- index.yaml
|-- oauth.py
|-- signed_request.py

Cryptoは、下のようにすると簡単に入手できます。

% svn export http://gdata-python-client.googlecode.com/svn/trunk/src/gdata/Crypto

準備ができたら、さっそく使ってみます。使い方は、モジュールをインポートして、署名を検証したいリクエスト・メソッドのデコレータとして指定します。動いているアプリケーションに下線部分を追加するだけです。

from google.appengine.ext import webapp
import wsgiref.handlers

from signed_request import signed_request

class Index(webapp.RequestHandler):
    @signed_request
    def get(self):
        # do something
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('OK')

def main():
    application = webapp.WSGIApplication(
        [('/', Index),],
        debug=True)
    wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
    main()

以上。

だけだと素っ気ないので、signed_request.py の中身を簡単に説明します。通常なら OAuth のクライアントライブラリを使って簡単にできそうなものですが、Google App Engine では openssl のライブラリが使えないので、多くのコンテナで採用されている RSA-SHA1 形式の署名を検証するには少し工夫する必要があります。外部サーバの呼び出し » mDCのページに記載されている公開鍵を mixi.cer という名前のテキストファイルに保存します。そして、この公開鍵を16進数表記に変換します。

% openssl x509 -modulus -noout < mixi.cer | sed s/Modulus=/0x/
0xC048F9DD595072FD561EF7D69533FE4F5957520F755BE6E0252B87003F3D3DD55FF548E78BDD
8491B8EA68B0F3038DFE53950B94AFF4E6344E9C6C050557484B150B81EBD2A624DF81B7C270A6
D15BB857AD34A68C5444A7B60EBDF953DEBAFBAAA36F8E6FB75C4D79EF3714DF74973081AF5F5B
901FF6387CDA44135A665FE5

signed_request.py 中の MIXI_CERT がこれに当たります。他のコンテナに対応させる場合も同様に変換すれば OK です。

関連リンク:
» Building an OpenSocial App with Google App Engine
» OpenSocial in the Cloud(日本語訳)

月の初めに

最近、ブログが更新されないですね、と何人かの人に言われました。

確かに、気づいたら前回のエントリから3週間も経ってしまっています。ブログを書く理由って、自分が学んだことを記録したり、社会(会社)に対して持っている不満の裏返しだったり、まぁいろいろあると思います。ところがここ最近、日々の小さな発見や質問、愚痴なんかは、twitterで間に合うようになってしまいました。おー、こんな便利な方法があったんだー、ということがブックマークして終わり、twitterで軽くつぶやいて終わりという風になってしまいました。習慣というのは怖いもので、最近は140字以上書けない体になっているような気がします。

もともと無い文章力が明らかに落ちていると感じる今日この頃。本当にこれでいいんでしょうか?Reblogは本当に簡単で楽しいけれど、それが何かを生み出しているのかというと疑問です。
そして今日、hirose31さんのこのエントリを見て、はっと我に返りました。

» readlineのマクロで解決 - (ひ)メモ

やっぱり文章に纏めることも大事なんだなぁ、と。今でもブログを書いている人は書いていますが、ここに来て創る人と消費する人の二極化が始まっている気がしてなりません。これは、1時間おきに「駐車戦争」で車を移動してる場合じゃないです。

ということで、今月の目標は、なるべくブログを書くことにしたいと思います。目指すは一日一エントリ。は大変そうなので、三日に一回くらいで無理せず頑張りたいと思います。


〜 Think positive. Learn creatively. Do something. 〜