2010年4月24日土曜日

#appengine ja night #7( #ajn7 )に参加した

4/23(金)にappengine ja night #7が開催されました。ATNDを見るとshin1ogawa ja nightとか書かれていてこっぱずかしいような嬉しいような…。今回の目玉は以下でした。

  • ライブコーディングを使って、appengine/javaがいかにテストしやすいか?をお伝えする
  • 事前にGoogle Moderatorで議題・質問を募集し、それをネタに会場で議論する
  • イベント開催中は京都のサテライト会場とつなぎ、双方向のやりとりもする

@kazunori_279さんがUstしつつ録画してくださっています。

appengineアプリケーションの自動テスト -最新java sdk版-

一番伝えたかったことは、通常のWebアプリケーションと比較して、AppEngineアプリケーションはとてもテストがやりやすいという事です。

  • データベースなどについての考慮も少なく済むし、高速に実行できる
  • 外部サービスから例外が投げられるようなケースも簡単にテストできる
  • Memcache, Queue等の外部サービスを利用する機能のテストもラク

以下はこれをライブコーディングした側から見た感想です。

自分が実装を間違えてそのまま進みそうな点について、リアルタイムにツッコミを頂くことで無駄なハマリ時間を回避することができた点がいくつかありました。指摘してくださった方ありがとうございます。これがソースコードレビューやペアプロのパワーですね。また、TDD的な観点では @t_wadaさんからのフィードバックを直接頂くこともできたため、今後 appengine ja night ハンズオンなどをする際により良い内容ができそうです。またslim3 作者のひがさんからも、slim3的にもっと便利にテストする方法などを教えていただけました。やっぱ人前に自分のコーディングを晒すのは大変良いことですね、質の良いフィードバックをたくさん頂戴しました。

eclipseの操作についていくつか質問がありましたが、自分のeclipseは以下の仕様です。

  • quick-junitプラグインを導入。
  • favoritesにJunitのAssertとhamcrestのMatchersを登録してある
  • Launchingの設定で「always lanch the previously ...」を設定してる

キーバインドとかは全く設定していないドノーマルな状態だし、自分もまだ無駄が多いのでeclipseのフルパワーは引き出せていません。eclipseたんが本気出せばもっとスゴイです。プロジェクトごとに細やかにカスタマイズしたテンプレートとかを導入しはじめるともっとえぐい事がになります。

appengine QA大会

java組代表として@higayasuoさん、python組代表として@najeiraさんに色々意見を披露していただき、その後会場から意見を募るといった形式となりました。かなり濃いめの内容になったんじゃないか?と思いました。会場にてメモを取っていた内容を書いておきます。

appengine 向きのアプリケーションってどんなアプリケーションでしょうか?またappengine に向かないアプリケーションってどんなアプリケーションでしょうか?
自分たちでサービスを作りたい、など作りたい人が作るには向いてる。受託とか、誰かに作らせると言うタイプは向いていない / 業務系の性能要件とかも自分たちで決められない状況ではキツイ / 課金の見積がしづらい(主にCPU使用量について)
ランキング問題みたいに、逆にどんなケースで困っちゃってるか聞きたいです。必勝パターンを確立したい! / 業務系システムで使用するためにクリアするべき課題はなんですか?
ランキングはトップ10だけ正確にするなどする / mixiに限定した場合、マイミクを対象にすれば1000人で済むからできるね / twitterも最初の数千件は正確に処理できるけど、それ以降は無理だね
ページングどーやりますか。特定のページにリンクするとか → 各ページの先頭のKeyを覚えておけば良い / とはいえ、ページ内の件数が多いとかもあるだろし、最初からなんページ目かまでしか保存できない(shin1ogawa補足:これは1000件以上も考えた話です) / twitterとかもカーソルを使うようになってますね
csvダウンロード、大量データ処理など、主にタイムアウトを乗り越えるのに苦労する
必勝パターンというなら、全体の正確さを求めない事が勝ちパターンというか、全体の正確さを求めるのは負けパターンにつながるね
[アンケート]どういう目的でappengineを触ってますか?(1)趣味、知的好奇心など、探求目的 (2)お仕事、あわよくば仕事に使いたいなど、実用目的 (3)ビール祭りに参加できると聞いて
(1)はかなり多かったというかほぼ全員。京都会場の人も多数が手を上げていた / (2)もかなり多かった。shin1ogawa個人的には1/4もいないと思っていたが、2/3くらいいたような / (2')んじゃ実際仕事で使った経験がある人は?→東京会場で15人くらい、京都会場ではひとりだっけ? / (3)東京会場で3人くらい。というか選択肢として意味がわからないww
[アンケート]MapReduceサポートされたら、どんなことができますか?どんなことをしたいですか?
ログ解析等の大量データ処理 / リモートセンシング。複数のセンサーからのインプットを計算するプラットフォームとして使えないか / Twitterのストリーム等を自然言語処理
[余裕があればアンケート]appengineを使って運用されているサイトってどんな事例がありますか?
やっぱmixiアプリかな? / Xmaxのイベントとか / 衆院選でも / バックグラウンドという意味ならエコポイントのメール配信、TweetdeckのTaskQueue / 海外は結構多いよねー

ビール祭り云々についてないがしろにして申し訳ありませんでした。問題の議題を提供してくださった@marblejenkaさんは、製造終了日ギリギリに製造された、おそらく最後のキリンプレミアム無濾過をajn7会場に4本も持ち込んでくれていました。ビール祭りも重要です、このエントリにて訂正させていただきます。

BeerTalk

前回のなうまぴおんに続き、事例紹介が多かったのはとても良かったんじゃないかと。やっぱり実例を元にしたTalkはウケもよく、盛り上がりますね〜。次回以降も最低ひとつは事例の紹介Talkがあるといいっすねぇ。個人的にはふにゃもらけさんのmixiアプリの件に興味を引かれました。S3+CloudFrontは転送量が多いと結構お金もかかるんですね(appengineと比較して、ですけど)。mixiのモバイル向けCDNはPCアプリ用には支えないのかな?とか思いました。

反省

  • Ust, サテライト会場との接続…と、東京会場以外への発信も行う事が目標の一つだったんだけど、録画を確認する限り東京会場内での意見をUstやサテライト会場へ伝えるための復唱が甘い、拾いきれていない。これは前回もフィードバックいただいたことなので、意識したつもりだけど、意識しつつも復唱のタイミングを失ったと判断して何回かスルーしたのがよくない。割り込んででも「会場で〜という質問・ツッコミが」とイチイチ復唱すべき。後から録画を見る時の事を想定すりゃわかる事なのにぃ。次回はもっとこまめに動きます。
  • keycastr起動し忘れてた。ahack3でUstの確認した時は起動して確認したのにw
  • タイムマネジメント。BeerTalkにかかる時間見積もりを完全に見誤ってしまった。いつも見誤っていると言われればそーなんですが、当日会場でのそれへの対応が足りなかったと思います。事前の「15分をめどに」のアナウンスを怠ったのと、一本は最悪次回に回させてもらうという、BT提供者との打ち合わせができていなかったなーと。いちいさん、ほんと申し訳ありませんでした。
  • 京都会場とリアルタイムにつないでいたのですが、あまり頻繁なやりとりができなかった。こちらからは京都会場のスピーカ付近以外の声が確認できなかったので、京都会場内でどのような雰囲気だったか気になりました。

感謝

100人も入れる広い会場を提供してくださったグリー株式会社様、大変お世話になりました。BeerTalkの大幅な時間オーバーにも対応して面倒を見てくださったグリー株式会社のいちいさん、大変ありがとうございました。
京都のサテライト会場を提供してくださった京都リサーチパーク株式会社様、ありがとうございました。またその手配、準備などで協力してくださった京都GTUGの方々、@bufferingsさん、お疲れ様です!
今回も開催に関するしきり、Ustやサテライト会場とつなぐための機材や仕組みなどもろもろを準備してくださったスティルハウス佐藤さん、お疲れ様でした。いまだにどんな仕組みで実施したのかわかってません。あまり理解できない自分への説明は必要ないので、次回からもまた頼りにさせていただきます。
BTにて有益な話を聴かせてくださったスピーカーの皆様、QAにて各質問に意見をくださった@higayasuoさん、@najeiraさん、事前に議題やそれへの投票を行ってくださった皆様、会場やTwitterのTLを盛り上げてくださった参加者の皆様、ありがとうございました!次回もよろしくお願いします。

参考資料:過去の参加報告

ajn6の報告を書き忘れてますね…><

2010年4月13日火曜日

marketplace用の #appengine javaアプリの雛形を作ってみました

最近Apps MarketplaceというプラットフォームがGoogleから公開されました。B|CtoB なアプリケーションを登録できるプラットフォームです。アプリケーションの登録・公開方法については@ITさんに記事がありますので、そちらを参考にして下さい。今はまだ開発ベンダ向けのGoogleによる課金のサービスが提供されていませんが、これが開始される時までにそれなりにMarketplace向けのアプリの構築に慣れておきたいものです。私の場合は、モチロン AppEngine を使うことにします。

注意が必要な点として、登録できるアプリケーションには2種類あるって事です。アプリケーションの登録時に「directly installed into Google Apps domains」という選択肢をオンにするかしないか、という違いです。これをオンにすると、GoogleApps使用中のグローバルナビゲーション部分に統合されるアプリケーションを作成することができます。

こうやって統合されている方がユーザとしては使い易いと思われるので、たくさんのユーザに使ってもらうためにもこのタイプのアプリケーションを構築できるようにしておきたいところです。このタイプのアプリとして登録するには OpenIDによるSSO が可能なアプリケーション、という条件があります。しかし、現在のGoogle App EngineのUserServiceでは特定のGoogleアカウントドメインに固定した認証しか対応出来ていません。でも大丈夫です、Marketplace公開日にはSSOアプリとしてのチュートリアルはPHPバージョンしか存在していなかったのですが、いつの間にかAppEngineJavaによるチュートリアルが追加されています。

このサンプルをjarにして依存し、slim3で構築し直した雛形を作成して公開してみました。ライセンスはNYSLで扱って下さい。

使い方

  1. 上記プロジェクトをsvn checkoutやgit svn cloneします。
  2. eclipseを使う方は、checkoutされたフォルダに移動して mvn eclipse:eclipse を実行します。
    • maven-eclipseを連携させるために、eclipse側でM2_REPO変数にmavenのローカルリポジトリを設定しておく必要があります
  3. war/WEB-INF/appengine-web.xml内のそれっぽい変数をそれっぽく編集します。marketplace-sampleって文字を検索すると良いです。
  4. 自分のアプリの本体を実装します
  5. Marketplace用のManifest.xmlのサンプルも一緒にコミットされているので、コメントを参考に適宜いじると良いです。ここでもmarketplace-sampleって箇所を弄りましょう。
  6. デプロイします
  7. marketplaceに登録します

すごい大雑把に書いてしまいましたが、なんとしても appengine で marketplace 向けにアプリを…!って人には手抜きできて良いと思います。また、雛形の中にはOpenIDによるセットアップに続いて実行できるOAuthでの承認も含めていますが、これは本来はOpenIDによる認証とOAuthによる承認を同時に行うべきですので、とりあえずはコメントアウトしています。動作はしますので、誰かHybridに実装し直してくれると大変嬉しいな、とか思ってます。