2010/10/23

GAEで、世界よこんにちは #3

今週はいよいよ、GAEにアプリケーションを登録します。
前回まで

11. GAEのユーザー登録を行う
GAEの管理サイトにアクセスしてログインします。
ログイン自体は、Gmailなどの他のGoogleのアカウントと共通です。

以下の画面が表示されたら「Create Application」ボタンをクリックします。

初回のみ(?)次のように認証が必要です。

12. SMSによるカウント認証をおこなう
以下のようなSMSによるアカウント認証画面が表示されます。

GAEにアプリケーションを登録するには認証コードが必要で、それを登録した携帯メールに送信されてくるということのようです。

選べる国は、カナダ、日本、合衆国の3つです。
日本を選ぶと、キャリア選択ドロップダウンが表示されます。
vodafoneのアドレスにも対応していてほっとしました。


日本を選ぶと携帯番号の入力欄が、ユーザー名称入力欄に変わります。
携帯メールの@より前を指定して「Send」ボタンをクリ~ック!
認証コード入力画面に遷移するとともに、すぐにポケットの携帯が震えました。
届いたのは至って簡素なメールです
============================
from     : noreply@google.com
subject : Google App Engine Code
text      : Google App Engine Cone:*******
============================


認証コードを入力して「Send」ボタンをクリックして、アカウント認証の完了です。

13. GAEにアプリケーションを登録する
アカウントの認証が終わると、以下の画面に遷移します。

一行目に、残アプリケーション数が「10」とでていますね。

まずは、アプリケーションIDを決めないといけません。トップレベルドメインを指定せずに無料のサービスでいく場合、「http://[アプリケーションID].appspot.com/」がURLになります。また作成後の変更はできませんので、本来は慎重に考えるべきところです。今回は適当に「helloworldongae」として「Check Availability」ボタンをクリック。すると
「Yes, "helloworldongae" is available!」とでましたので、これで行けそうです。なので、アプリケーションのタイトルも「Hello World on GAE」で決定です。
#こんな一般的な名前がまだ空いていたのですね...

認証オプションは「Edit」リンクをクリックして何があるかを確認します。

選択肢は以下の3つ。
1. 全グーグルアカウントユーザーに公開(デフォルト)
2. GoogleAppsの特定ドメインユーザー限定
3. OpenIDユーザーに公開するか(実験段階)
今回はデフォルトのまま、「全グーグルアカウントユーザーに公開」で行きます。

最後に約款を読みます。ほとんどが一般的な内容ですが、次の2点がちょっと目に止まりました。
1. 13歳未満はこのサービスを使用してはいけない
2. 複数アプリを単一アプリのように見せかけるアプリはNG
小学生とズルはお断りだそうです。
それでは「 I accept these terms.」にチェックを付けて、「Create Application」ボタンをクリックします。これでアプリケーションの登録が完了しました。


14. アプリケーションをGAEにアップロードする
GAEにアプリケーションは登録されましたが、中身はまだ空です。アクセスしてもページが見つかりませんと怒られます。ということで、先週作ったアプリをGAEにアップロードする必要がありますが、方法は簡単です。
まず「app.yaml」 ファイルを編集し、「application」項目の設定値を「helloworld」から先程登録した「helloworldongae」変更します。
次いでコマンドラインから「appcfg.py update helloworld/」を実行すれば終わりです。
SDKの新バージョンがリリースされているとか、SSLのモジュールがないのでセキュアでないとか警告がでますが、そのまま流れていってGmailアカウントによる認証入力待ちになります。
認証が通ると、GAEにアプリケーションがデプロイされてコマンドが終了します。
これでアップロードも完了です。早速ブラウザでアクセスしてみるとちゃんと画面が表示されました。ログイン画面も以下のように本物で、登録したアプリケーション名も表示されます。

でちょっと焦ったのが、このHelloWorldアプリ、チュートリアルのまま使用すると危険です。ログイン後にメッセージを登録すると、他の人にもメールアドレスが丸分かりになってしまいます。慌てて修正して再アップロードしました。∑(; ̄□ ̄A アセアセ

ということで、これで「GAEで、世界よこんにちは」は完結です。
Access ---> 'Hello World on GAE'

2010/10/16

GAEで、世界よこんにちは #2

先週に引き続き、GAEのスタートガイド(Python)に従って、「Hello World」 に挑戦します。
今週はGAEの機能を使用してアプリケーションのブラッシュアップを行ないます。

6. ユーザーからの入力を受け付ける
webapp を使ったウェブ フォームの処理。チュートリアル通りに、「helloworld.py」 のコードをコピー&ペースト。
1. Mainページでテキストエリアに文字列を入力。
2. ボタンクリックで /sign ページにPostする。
とはいえ、Mainページとかsignページとかが物理的に存在するわけではない。
ハンドラは「helloworld.py」だけなので、Request中のURIで実行処理を分けているだけ。

7. データを永続化する
データストアの使用。世界中での分散処理によるデータアクセス処理が隠蔽されるので、どこからでもどのセッションからでも同じデータにアクセス可能。



[データ構造の定義(CRUD共通)]
1. モデルクラスを定義する(RDBのテーブルのカラムを決めるようなもの) 

[データの追加(C)]
1. モデルクラスのインスタンスを生成する
2. モデルインスタンスに値を詰める
3. モデルインスタンスの put() メソッドを呼ぶ

[データの取得(R)]
1. GQL(SQLのSELECT文。必ずSELECT * FROM model になる)オブジェクトを作成する
2. GQLオブジェクトをイテレーターとしてモデルインスタンスにアクセスする

[データの更新(U)]
1. モデルインスタンスに値を変更する
2. モデルインスタンスの put() メソッドを呼ぶ(i.e. 追加時と同じ) 

[データの削除(D)] 何故かスタートガイドには記述がありませんが...
1. モデルインスタンスの delete() メソッドを呼ぶ
あるいは
2. GQLオブジェクトを指定してdbクラスのdelete()メソッドを呼ぶ


8. コードとHTMLを分離する(Djangoテンプレートの使用)
Djangoのテンプレート エンジンはApp Engineの一部であり、 SDK にも含まれているとのこと。
前回、WebアプリケーションのフレームワークではDjangoの使用を諦めてwebappにしましたが、そのwebapp内Djangoのテンプレート機能が取り込まれてるようです。

HTMLテンプレート「index.html」を作成して画面デザインを持たせる。
「helloworld.py」 は以下の修正を行う。
1. 「index.html」で使用するデータを用意する
2. 「index.html」とデータをバインドしてレンダリングする
GQLオブジェクトへのイテレータ的アクセスも、HTML側のDjangoテンプレートに任せる。
3. 結果を Responseに出力する

9. 画像、CSS、JavaScript等の静的ファイルをWebサーバーで公開する
(通常)GAEでは、アプリケーションのディレクトリにファイルを置いても「URL/ファイル名」で自動的にアクセスできるわけではないとのこと。確かに、「8. コードとHTMLを分離する」でも直接「index.html」にアクセスせずに、「helloworld.py」で「index.html」を読み込んでいました。
Webへの公開は「app.yaml」にハンドラを追加することで可能になります。ハンドラは上から順にURIを正規表現でマッチングしていき、最初に見つかったもので終了。

スタートガイドに従ってスタイルシートを追加しました。

これでアプリケーションは完成です。
次はいよいよGAEへのアップですが、本日はここまで。ビールと餃子が呼んでいるので、続きはまた来週です。

10. おまけ
CMD.exeで立ち上げているWebサーバーですが、アクセス毎にログが出力されます。ブラウザからの HTTP-GET が 以下の順で呼ばれていることがよく分かります。
1. デフォルトのページ(成功)
2. スタイルシート(成功)
3. ファビコン(失敗:404 Not Found。そりゃ作ってないですから)
あと、Ctrl + C でWebサーバーを終了させるときに、ちょっと時間がかかるようです。慌てないでゆっくり待ちましょう。

See you next Saturday!

Ze Frank's web playroom が面白い

TEDをながら見していて面白かったのでメモ的エントリー。
英語で20分程度ですが、最初のころの young me now me の写真だけ見ても面白いです。
Ze Frank's web playroom @ TED


地球サンドイッチなどもそうですが、ネットワークを利用した遊びを編み出し続けているのはすごいですね。ビデオで紹介されているもの、されていないものも以下のサイトで視聴できます。参加も可能です。

zefrank.com
http://www.zefrank.com/

2010/10/11

GAEで、世界よこんにちは #1

Google App Engine で、'Hello, World!' に挑戦してみました。
開発環境は Windows(Vista Home Premium) + Python です。

1. Python をインストールする
ガイドラインに「Python 2.5 をダウンロードしてインストールしてください」とあるので
Python Official Website へのリンクをクリック。普通にリンクを辿るとPython 2.5.5 のダウンロード画面に遷移するが、ソースコードしかダウンロード出来ない模様。

Pythonのバイナリモジュール自体をビルドする環境がない(というか構築が面倒な)ので、URLの「2.5.5」を「2.5.4」に書き換えてトライしてみる。まんまと「msi」のダウンロードリンクを発見できました。


ということで、今回使用するPythonのバージョンは 2.5.4 に決定です。「msi」をダウンロードしてインストール。Twitterを見ている間に終わりました。

2. App Engine SDK for Python をインストールする
特に問題なく、リンク先から「msi」を取得できました。

これもTwitterを見ている間にインストール完了です。

3. ローカルで「こんにちは」する。
「Hello, World!」のチュートリアルに従って、リクエストハンドラ(helloworld.py)と設定ファイル(app.yml)を作成します。今回はCドライブ直下に「helloworld」フォルダを作成してその中に作りました。
次に「Web サーバーを起動します」とあります。SDKには、Webサーバーまで含まれているのですね。コマンドは「google_appengine/dev_appserver.py helloworld/」とありますが、Windowsの場合「google_appengine」までのパスは通っているので「google_appengine」は不要です。むしろ、「helloworld」の前にパスを指定してあげる必要があります。

  • 前:google_appengine/dev_appserver.py helloworld/
  • 後:dev_appserver.py C:\helloworld\

「Allow dev_appserver to check for updates on startup? (Y/n):」と聞かれたので「y」と答えると以下のように表示されました。警告が2件(datastoreからデータが読めない、images APIの初期化失敗)でていますが、とりあえず「http://localhost:8080」 で helloworldアプリが起動しているとのこと。

早速ブラウザでアクセスしてみると、予想通り左上に小さく「Hello, world!」と表示されました。チュートリアルにある通り、Webサーバーを起動中のまま「helloworld.py」での出力を「Hello, world! Hello, everyone!」に書き換えてブラウザをリロードすると、表示も変わりました。なかなか優れものです。

4. Webアプリケーションのフレームワークを導入する(webapp)
Djangoを使ってみたいところですが、最初なので欲張らずにチュートリアル通りにGoogle独自のフレームワーク webapp を使用することにします。インストール自体はSDKに含まれているので、「helloworld.py」をチュートリアルに従って書き換えるだけです。ブラウザをリロードすれば、「Hello, webapp World!」に早変わりです。


5. SDKを通じてGoogleのサービスを利用する(ユーザーサービス)
チュートリアルでは、Googleアカウントでのログイン状態を確認しています。
ログインしていなければ、デフォルトのログインページにリダイレクトさせます。このときログイン後の戻りURLを指定することで、自アプリへ制御を戻せます。

ログイン後は、ユーザーのニックネームを取得して、動的に表示メッセージを切り替えることが可能になります。

そろそろ食事の時間なので、本日はここまでです。See you next Saturday!

2010/10/10

トノサマバッタ、ヒメアカタテハ、何かのタマゴ

本日のお散歩の結果です。
まずはトノサマバッタ
 茶色いやつが一杯いました。群生相・大群での移動が「飛蝗」です。字面からイナゴと思われる向きもありますが、トノサマバッタです。

次は、ヒメアカタテハ
漢字で書くと姫赤立羽。英名が、Painted Lady という、ちょっと立派な名前です。世界中に広く分布しているとのこと。もちょっと近づいて撮ろうとしたら、逃げられてしまいました。

で、最後は逃げられないタマゴ。

何のタマゴかよく分かりません。昆虫のタマゴのだとは思いますが... 右の写真ではカラが破られていますね。孵ったのたか、捕食されたのか...

エクソコーテクス(Exocortex)

Exocortex/エクソコーテクス/外大脳皮質。灰色の脳細胞の外にある人工情報処理システムで、脳の認知能力を拡大するものを言うようです。
「リファクタリング・ウェットウェア 達人プログラマーの思考法と学習法」Andy Hunt を読んでいて出てきた言葉です。耳慣れなかったのでメモ的にエントリー。

よく言われることですが、自動車は運動能力を、携帯電話は(視)聴覚能力を拡張し、コンピュータ(とインターネット)は脳機能を拡張します。

自動車の運転に熟達すると、運転中はあたかも車が自分自身であるかのような感覚になる時があります。脳が車を自らの身体として使いこなしているのでしょう。携帯電話は、なかった頃の生活が想像し難いほどです。みんな何の疑いもなく、毎日テレパシーを使っています。

このように身体機能の拡張については余り疑問もありません。
しかし、脳機能はどこまで拡張されているといえるのでしょうか。

いまでも、複雑で単調な計算をコンピュータにさせたり、大量のデータをハードディスクに保存したりしています。しかし車が自分の体の一部だと感じられるほどには、まだコンピュータは自分の脳の一部には思えません。今後はハードウェアとマンマシーンインタフェースの改善が進み、より脳と一体化していくのだと思います。
ことの善悪の判断は難しいですが、テクノロジーの発展を押しとどめることは無理でしょう。従って、賢く付き合っていく方法を学ぶ必要があります。

コンピュータを使え。コンピュータに使われるな。

2010/10/03

レビューチェックリストへのフィードバック

ソフトウェアの開発では、障害をDBに蓄積したり、レビュー時にレビューレポートを残すことも多いです。欠陥を記録し、修正が完了すると、ほっと一息つけますね。そこで忘れがちなのが、次の開発へのフィードバックです。定期的に蓄積した記録を分析して、レビュー用のチェックリスト等にフィードバックしていけると嬉しいですね。

2010/10/02

複雑をもって複雑を制する

母なる自然は非常に複雑で、対応が難しいことで有名です。人類は原始時代からその自然の中で生き延び、さらにはより豊かに生活するために、社会を作ってきました。当初はシンプルだった(かもしれない)社会も、時間の経過と共に発展し、複雑になってきました。そして社会が複雑になればなるほど、人類は自然に対抗できるようになり、より豊かな生活ができるようになってきました。

しかし現代社会においては、日々自然の脅威に怯えることはなくなりましたが、複雑な人間関係や利害関係のなか上手に世渡するのが難しいのも事実です。社会科学にも複雑系の考え方が導入されることから、その複雑さは推して知るべしです。かと言って、いまさら自然に怯える生活に逆戻りもできません。というか、したくはありません。つまり、自然という複雑な問題を社会という複雑な問題で制した、とも言えなくないでしょう。

もちろん、複雑な問題をシンプルに解決できるにこしたことはありません。しかし、必ずしも単純な解法が得られるとは限りません。かと言って複雑な問題に直接対峙すれば、敗れ去る可能性が高くなります。そこで次善の策として、苦手な複雑性を別の(比較的)得意な複雑性に置き換えて対応するということになります。

ここまで書いて、この話は4月に書いた「問題を解きやすいように変形する」の1ケースだと思い当たりました。う~む。この半年間で、あまり思考に進歩が見られませんな。

なお、時として複雑な解法は元の問題よりも厄介な問題を持たらします。そのことは忘れないようにしたいですね。