2010年7月28日水曜日

#appengine #slim3 本を執筆しました

Slim3本?データストア本?

Google App Engineのデータストアに特化した内容の書籍(Slim3本)を執筆し、本日刊行されました。

Seasarで有名なひがやすをさんが作っている Slim3 の書籍で、ひがさん本人から執筆の機会を頂くことができたのがきっかけです。色々とあって執筆する時間が取れないから書いてみない?というおはなしで、しかも方針は「データストアだけに特化した書籍にしたい」というお話だったので驚きました。私はSlim3のテストサポート機能がとても気に入っているので、Controller周りとそのテストとか、どさくさに紛れてLowerな話も含めたりとか考えたのですが、書き上げてみて納得しました。データストア以外はそんなに深いハマリも無いし、他にも書籍がありますし、データストアだけに特化するというのも集中した内容になってよかったと思っています。

右にAmazonへのリンクを貼ってみましたが、表紙画像がまだみえてませんね(7/28現在)。表紙画像や目次が秀和システムさんのサイトで公開されていますので、購入する前に確認することもできます。ひがさんが監修と1章2章の執筆を、私は3章〜7章を担当しています。

ひがさんが既にこの書籍の紹介をされていて、シンプルにまとめられています。その中では次のような事が書いてあります。

  • データストアを理解し使いこなすことに特化している
  • データストアに関するひがさんや私が持っているありったけの知識と経験が詰められている
  • 初心者向けではないが、初心者でも理解できるよう書いている

初心者向けではないが…の点について。たしかにターゲットは中級者〜上級者向けです。しかしひがさんも書いておられるように初心者でも読めるようかなり噛み砕いて書いてありますし、私の考えとしてはGoogleの公式ドキュメントを読む前にぜひとも読んで欲しいと思っています。

データストア以外も学習するには?

中田先生の「すっきりわかるGoogle App Engine for Javaクラウドプログラミング」が一番新しく、各機能について網羅されているのでオススメです。

書籍以外では、9月末ごろに開催されるGoogle Developers Day Bootcampで初心者向けのSlim3のハンズオンも開催しますし、appengine ja hands-onも開催したいと考えています。
それとこれは営業になってしまいますが、株式会社トップゲートでは有料のGoogle App Engineみっちりセミナーも定期的に開催していく予定です。まぁこちらは企業からの参加を想定していますので個人では参加できそうにない価格設定ですけれども(それでも前回開催時は個人での参加者が3人ほどおられて仰天しました)。

そんなワケで、皆様おまたせいたしました&ひがさんエキス100%じゃなくて申し訳ない。でもひがさんが監修してくださっていて、全体的な構成やらの監修はひがさんがやってくれていますよ!

2010年7月23日金曜日

PubSubHubBubを経由してBuzzのFirehoseを #appengine で使ってみる

ちょっと前に BuzzでFirehoseが使えるようになりました。

今の空うさぎでは、FriendFeedはリアルタイム(FriendsがPostした瞬間にクライアントに通知される)になっていますし、TwitterもUserStreamを使うことでFirendFeed同様にリアルタイムになっています(Twitter側の制限のために、リリース版ではTwitterのリアルタイムはオフになってますが)。さらに開発版ではGoogle Buzzも利用可能になっています。であればBuzzもリアルタイムに…!と思うんですが、これがTwitterやFriendFeedとはちょっと仕組みが違う。Webアプリでしか使えないようです。なので、AppEngineで受けてXMPP経由で空うさぎに送ってしまえないか?という事でPubSubHubBub を使ってAppEngine/JavaでBuzzのFirehoseを使ってみようかと、そんな流れです。
ここではまずはリアルタイムに取得されるBuzzのActivityをデータストアにどんどん保存するアプリを作ってみます。

まずAppEngine/Javaのプロジェクトを作る

slim3のarchetype-pluginを使って簡単にプロジェクトを構築します。

  1. $ mvn archetype:generate -DarchetypeCatalog=http://slim3.googlecode.com/svn/trunk/repository
  2. Projectの生成が対話形式で進むので、質問に従ってプロジェクト名などを入力
  3. $ cd ${プロジェクト名}
  4. $ mvn eclipse:eclipse
  5. Eclipseでインポートします。

BuzzのActivityを保存するモデルクラスを作成

今回はお試し程度なので、Atomの解析はせずにそのまま格納するようにします。

PubSubHubBub用のコントローラを作成

http://myapp.appspot.com/subscriberというURLでPubSubHubBubをSubscribeすると想定して、それをハンドルするようにします。ここではSlim3のControllerを使います。

PubSubHubBubでSubscriberの登録をする

  1. 先の手順で作成したアプリケーションをデプロイします。
  2. http://pubsubhubbub.appspot.com/subscribeを開きます。
  3. Callback: (the subscriber URL)に、先に作成したSubscriberのURLを入力します。例えばhttp://myapp.appspot.com/subscriberのようなURLになるはずです。
  4. Topic: (the feed URL)に、https://www.googleapis.com/buzz/v1/activities/@all/@publicを入力します。
  5. Do itをクリックします。

登録処理が問題なくAppEngineの管理コンソールのINFOレベルのログを見ると、subscribe: hub.challenge=...のようなログが出力されるはずです。

どんどん流れてきます

AppEngineの管理コンソールでall requestログを見るとどんどんリクエストが飛んできている事が確認できます。DatastoreViewerの"buzz"カインドにはどんどんエンティティが増えていきます。こんなカンジでfirehoseが使えます。が、恐ろしい勢いでデータがたまっていくのでちょっと怖いですね。

PubSubHubBubからSubscriberの登録を解除する

登録した時の手順と同様に、Callback: (the subscriber URL)Topic: (the feed URL)を入力して、Mode:Unsubscribeを設定して、Do itをクリックします。問題なくUnsubscribeができればAppEngineの管理コンソールのINFOレベルのログを見ると、unsubscribe: hub.challenge=...のようなログが出力されるはずです。