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 の思惑通りですよ。> 及川さん

『10日でおぼえる Python 入門教室』

最近は、Google App Engine や Django などが話題ですが、Python が分からないからと躊躇している人も多いのではないでしょうか?そんな人にお勧めなのが、この『10日でおぼえる Python 入門教室』です。

10日でおぼえる Python 入門教室
穂苅 実紀夫 寺田 学 中西 直樹
堀田 直孝 永井 孝
翔泳社

こういう本には、教科書的なものとハウツー的なものがありますが、この本は後者です。より実践的に Python を学んで行くことができます。内容も Amazon や Livedoor天気予報, Yahoo!翻訳などの API を使ってデータを取得したり、GUI の RSSリーダーを作ったりと、実際に動くものを作ることでプログラミングの楽しさを学べるようになっています。また、最後の10日目では流行の Google App Engine を使ってアプリケーションを作成することがテーマになっていて、この本を最後まで読み進めていけば、一気に最先端の領域まで駆け上がることができます。実際には、プロダクションレベルのアプリケーションを構築するには、データモデルの設計やセキュリティ対策、パフォーマンス改善などもっと体系的な知識が必要になってきますが、入門用としてはこれで充分です。Python で一通りのことが出来るようになることでしょう。

目次
第0日 オリエンテーション
第1日 Pythonはじめの一歩
第2日 Pythonを本格的に使ってみよう
第3日 Web APIを使ってみよう
第4日 日本語とファイルの扱いを学ぼう
第5日 便利なツールを作ってみよう
第6日 デスクトップアプリを作ろう
第7日 エラーとテストを学ぼう
第8日 データベースを操作しよう
第9日 Webフレームワークを使ってフォトログを作ろう
第10日 Google App Engineを使ってフォトログを作ろう

少し個人的な感想を書かせてもらうと、バージョンは Python 2.6を中心に扱っていて、現時点ではまだあまり一般的ではない 3.0 を参考程度にとどめている点に好感を持ちました。ちょっと残念な点としては、初学者には SQLAlchemy や Pylons の章が若干難し過ぎる印象を受けました。テンポ良くここまで進んできて、ここで躓いてしまう人がいないかどうかが心配になります。ちょっと難しいなと思ったら、第8日,第9日は飛ばしてしまっても構わないと思います。

それからもう一点、第3日目の Amazon API ですが、8月15日からはリクエストに署名を付けることが必須となるため、このサンプルは動かなくなるので注意が必要です。これは、執筆の時期の関係で仕方がないのかもしれませんが。

以上、この辺りを考慮しても『10日でおぼえる Python 入門教室』は自信を持ってお勧めできます。より体系的に学びたくなった場合は、教科書的な『みんなのPython』『初めてのPython 第3版』を手元に置いておくと完璧です。

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. 〜