2010年2月26日金曜日

slim3と素のJavaで #appengine のspinupを比較してみた

ひがさんの発言で「slim3:1100cpu_ms servlet:720cpu_ms 」ってのがあって、自分のアプリではslim3は大体700-1100cpu_msだったから気になって調べた。

同じApplicationIDで、それぞれ違うバージョンにデプロイし、クライアントから3分おきにcurlしてみた。結果、どちらもspinupは11回、しかも同じタイミングで発生。バージョンが異なれば違うアプリケーションとして動作するけど、同じタイミングでspinupしてるのは偶然…?それは置いといて、肝心のspinup平均はslim3が960cpu_ms, 素Javaが694cpu_msとなった。なんか遅いよな?とか思ったけど、700ms程度で起動しているアプリも今は900ms程度に落ち着いていた。というわけで、slim3と素Javaのspinup時間差はおよそ250-300cpu_ms程度と見ればよさそうですね。ひがさんが書いてたとおりだ、いちいち調査した意味がねぇw

  • slim3
  • 素Java

それよりも、バージョンが違っても同じApplicationIDなら同じ傾向になる…というか同じインスタンスで動作しているのかね?偶然?

2010年2月23日火曜日

第1回プログラマーズカフェナイト@原宿に参加した #pgcafe

Programmers Beer Night に引き続き、2celebさんから声をかけて頂いて、LTも参加することができました。2celebさんほんっとお世話になってます、感謝感謝。

LTで興味を持ったのは、jishihaさんの「webプログラマが楽にiPhoneアプリを開発する方法」。PhoneGapという、HTMLベースのアプリ(?)をネイティブアプリに変換するツールの話。ガッツリ組むなら普通にネイティブアプリとして組めばいいけど、リリースまでのスピードの方を重視して機能などは割りきって考える覚悟があるようなアプリには十分使えると思ってかなり興味が湧きました。

あとbluerabbit777jpさんのAppEngineを静的なサイトを公開するプラットフォームとして使用する話。この使い方はAppEngineがローンチされた当初からあって、最近も一度大きな話題を読んだエントリを書いた方も居られた話。私が福岡でJavaのイベントに参加した際、「福岡のコミュニティは、カバーする範囲が全然違う人同士のつながりが濃いなー、アツイなー」という事を感じていたので、こういったプログラムから離れた使い方も進めてデザイナの方とかとコラボできたら良いなーとか考えながら聞いていた。このProgrammers Cafe Nightというイベント自体、Javaとは限らない良いイベントでしたしね!

自分のLTはデモがメインだったので資料のうpはしませんが、mavenのpluginの使い方はGoogle CodeのWikiに書いてあります。自作mavenプラグインの紹介を2分、それのデモを3分、の予定で無理やり詰め込むコースだったので、早口気味になってしまい申し訳なかったです。…しかも「どうやら5分超えて10分近くまで大丈夫…?」と勝手に把握して、予定には無かったslim3の動作確認まで追加でやらせて頂きました。自重知らずですいません。

感謝

会場を提供してくださった株式会社フラッツさん、面白い話を聞かせて頂いたスピーカーの方々ありがとうございましたー。

関連リンク

2010年2月22日月曜日

#appengine コードラボを開催しました

2/21(日)、クラウドで変わるJava開発 – Java Cloud Meeting Fukuoka 2010 というイベントのおまけイベントとして、BacklogCacooで有名なヌーラボさんの本社をお借りしてAppEngineコードラボを開催しました。

普段東京でやるようなガッツリするかんじのコーディングではなく、8人ほどの参加者の方とまったりのんびりなカンジで作業しました。特徴的だったと思うのは、Google のチュートリアルっぽい事は完全に無視して、HelloWorldをやった後はLowLevelAPIを使った保存・取得を行った事。さらに、その次にslim3-blankをダウンロードしてslim3らしい*-genを使った手順を行う…と見せかけて、slim3-blankはslim3-genとslim3のjarをコピーするだけに使って、Google Plugins for Eclipseで生成したプロジェクトに手動でslim3に必要な設定を行い、slim3-datastoreだけを使ってみたり。

反省点

  • HTMLやらJSPといった、AppEngineとは関係ないところで時間を食いたくないので text/plain をメインにしてやっていた事。やっぱり、地味すぎるし、リンクを置けないなどが不便w 次からはJSPか何かテンプレートをまるっとコピーする方式にしようかな…うーん。
  • MemcacheかURLFetchのどちらかをやっておきたかった。が、15分しか時間が残っておらず断念した。
  • のんびりだったため、がんがんやりたい人にはちょっと間延びしたカンジになってしまったと思う。色々細かいカスタマイズをして時間をうまく使ってくれていたようで、助かりました。うまく立ちまわってくれてありがとうございます。

前日のJava Clound Meetingのために岡山から来て、さらにコードラボにも参加してくださった方もおられて、嬉しかったです。ちょっとゆるめのコードラボもなかなか良いなーと思ったので、またどこかでやる事にします。

2010年2月21日日曜日

Java Cloud Meeting Fukuoka2010に参加してきた

2/20(土)に クラウドで変わるJava開発 – Java Cloud Meeting Fukuoka 2010 というイベントがSeasarFoundationより開催されました。 今回はGoogle App Engine Javaがメイン、という事でスピーカーとして声をかけていただけたのでスピーカーとして参加してきました。

私は「Google App Engine Java プラットーフォームの勘所」と言うことで、「プラットフォームの説明」「各サービス(機能)の説明」、サービスに付いてはDatastoreサービスを重点的に説明するという事を目的にしました。さらに、Datastoreサービスでは「そろそろJDOを公にDISっても言い時期かな」という判断で、思いっ切りDISる事にしました。今まで勉強会などで発表をするときは、できるだけ「LLAPI, JDO, Slim3」どれを選ぶかは好みで…という説明でJDOについてはフォローも入れたりしつつ説明してました。しかし最近はTL上でもAppEgnineのJDO実装は使わない人が相当増えてきているし、@eiichirouchiumiさんという、ずっとJDO上で動作するフレームワーク「Acid House」を作っておられた方がJDOを捨てた、という事件も起こって、さすがにもうJDOはいい加減無理に説明しなくてもいいんじゃないか?という考えになったのが一番大きい影響かもしれません。
発表に使用したスライドはアップロードしておきました。当日は発表しなかった、予備のスライド(よねさんには少し見せちゃったけど)も最後に含まれています。

個人的に一番印象に残ったのは、ひがやすをさんのセッション…の前半部分。「10の法則」「規模の経済性」「等価交換の法則」と始まったときは、出社が楽しい経済学でも始まるのか?と思ってしまったが、今までAppEngineの制約について頭の中で、なんとなくわかっているんだけどモヤモヤしてまとまらなかった考えがキレイに整理できた。このセッションは熱かったと思いました。各地でもっとお金を取って2時間くらいで単独セッションをやってもいいんじゃないかな?と思う素晴らしいセッションだったし、どんな内容だったかはここには書きませんw たぶん今後どこかでまたあのセッションをやってくださると思いますし、興味がある方はその時に参加すると良いと思います。すごい価値があるセッションだったと思います。

追記

トゥギャッターに、ハッシュタグを抽出しただけの簡単なまとめを作っておきました。

2010年2月15日月曜日

#appengine コードラボを開催します

ちょっと前のエントリでSeasarファンデーションよりJava Cloud Meeting Fukuoka 2010が開催されますというのを書きましたが、その翌日に、福岡のヌーラボさんのオフィスをお借りしてGoogle App Engine Javaのコードラボを開催させていただくことになりました。

私が説明した内容を参加者の方が実際にコードを書いて試す、といった形式で進めていく形式の入門コースとなっています。

上記リンク先がコードラボの申し込みページになっています。また、Java Cloud Meeting Fukuoka 2010合わせて参加申し込み(学割もあります)していただくと、このイベントで概要を学び、その翌日コードラーボで実践できる、と充実した週末を過ごしていただけるんじゃないかなーと思います!

2010年2月13日土曜日

#appengine ja night #5( #ajn5 )に参加した

2/12(金)にappengine ja night #5が開催されました。今回の目玉は以下のみっつ。

  • Google App Engine Expretの@tmatsuoさんの「AppEngineのアンチパターン」
  • @higayasuoさんの「Slim3のGlobal Transaction」
  • slim3のドキュメントを日本語訳した@bufferingsさんが京都から参加

途中でスピーカーの方から参加者の皆さんにいくつか質問があって判明した参加者の傾向として、pythonユーザ→2割、appengien ja nightリピーター(ajn4にも参加した方)→8割、という事だった。pythonユーザの方の割合がもっと増えるといいな、という事と、リピーターが思ったより多くて嬉しいなぁ、という感想。あまりappengine慣れしていない方にはサッパリ面白くないんじゃないかな、という内容もかなり多い集いなのでいつも「楽しめない人もたくさんいるだろな」と心配なんだけど、思ってるより楽しんでおられる方が多いのかもしれない。そうだとしたら嬉しいです。

@tmatsuoさん:App Engine Anti Pattern

代表的なアンチパターンを紹介。よくある、エントリにつけるタグを正規化せずに文字列のListPropertyで保持、ListPropertyのfilterの話。IndexExplosionの話…。で、自分がある罠にハマっているかもしれない事に気づいた。appengineプラットフォームは初期の頃と比べてかなりパフォーマンスが改善されていて、今までアンチパターンだったパターンも実は初期の頃程の悪いパターンではなくなってる、という事もあるのかもしれない。改善点とかはちゃんと追いかけているからわかってるんだけど、「これはこうしちゃいけないパターン」ってのが頭にこびりついていて、考えること無く設計している点があるかもしれない。

アンチパターンの話以外では、1.3.1の新機能について。カーソルの話がメインだったと思うけど、自分が食いついたのはAppStats…ではなくて、管理コンソールのカスタマイズの機能。機能自体はリリースノートで見ていたがノーマークだったので、tmatsuoさんの紹介を見た瞬間「これはアレか管理コンソール領域の権限でサービスを実行出来るのかとうとうこれが来たのか俺なんかやっちゃうけどいいのかな」とえらい勢いで質問した。たぶんその時の自分は目がキラキラしていてtmatsuoも引いたんじゃないかと思うが、期待とはちょっと違ったようで少し残念。

AppStatsはJava版が提供されていないのですが、@marblejenkaさんが作りそうなふいんきです。

@higayasuoさん:Global Transaction

いきなり2PCの話から始まり、そこだけで時間枠の半分を使い切るという…。その後ようやくGlobalTransaction(gtx)のお話。前半の2PCの説明があったからかなりわかりやすい説明だった。個人的に「これはスゴイ」と思ったのは、slim3のgtxのソースリーディングのためのエントリポイントの説明、そこから追うべき道筋をひがさんの解説付きで聞けたこと。これを無料で聞けるってスゴイ事じゃないかな、お得だな!とかw

一番気になっていた「各フェーズでの異常発生時の振る舞い」については今回は時間の都合で説明されなかった。でも、@kazunori_279さんがひがさんをTaskQueueに突っ込んだようなので、次回のajnに持ち越されそう。

とはいえ、このTaskでは冪等は保証されませんね。その頃にはソースも随分変わっているだろうし、また楽しみです。

Beer Talk - @urekatさん: jruby で BASE tx(注:正式なタイトルを覚えていませんので想像でタイトルを付けてみました)

すいません、rubyは読めないのでよくわかりませんでした。たぶんJRubyを使って、前回のajn4で@ashigeruさんが解説したオレオレDSLをそのまま実装した紹介だったんじゃないでしょうか。あまりよく覚えていません、すいません。ビールも入りすぎてちょっとぐだぐだした雰囲気の中BeerTalk開始となり、当の@urekatさんも哀愁ただようエントリを残されています。必見。

Beer Talk - @bufferingsさん: Production環境でのテストについてでは無い何か(注:正式なタイトルを覚えていませんので想像でタイトルを付けてみました)

Production環境でのテストの話と思いきや、そうではなくて少しがっかりしたため、すいません、あまり覚えていません…。Twitterに関するツールを何か作ろうみたいな話だったと思います。ツッコミをぽろぽろ受けて素直に「そのようにします」的な回答をしていたので、bufferingsさんのアプリの、設計のレビュー大会だったのかもしれません。

Beer Talk - @bluerabbit777jpさん:schemaversion大事(注:正式なタイトルを覚えていませんので想像でタイトルを付けてみました)

このあたりではピザをくい漁っていたのであまり聞けていませんが、かなり評判がヨカッタように思います。appengineのスキーマ設計において重要なノウハウ(というか必須テク)のひとつです。

ajn5のトゥギャッターまとめ

たまには自分でまとめてみようか…と思って適当に作ってみたら、既に@yositosiさんが作っておられたようで重複しちゃいました、すいません!でもそれぞれまとめ具合に特徴があるので両方見ると良いと思います。

感謝

100人も入れる広い会場を提供してくださったグリー株式会社様、大変お世話になりました。特に夜遅くまで面倒を見てくださったグリーいちいさん、大変ありがとうございました。また今回も開催に関するしきりをしてくださったスティルハウス佐藤さん、有益な話を聴かせてくださったスピーカーの皆様、会場やTwitterのTLを盛り上げてくださった参加者の皆様、リありがとうございました!次回もよろしくお願いします。

個人的な話

ご挨拶できた - TL上では長くおつきあいさせていただいている方で、@bongoleさん@tatsuya6502さんとようやくご挨拶できた。これまでもajn会場で何度もおあいしていると思うのに、なかなか挨拶できない方が結構多い。これまでのajnの懇親会はほとんどLT大会だったし(懇親会中にLTやろうってのは自分が言い出しっぺなので自爆なんですが)、おあいしているはずなのに挨拶できていない方はまだまだ多いw
また、ちょっと経緯はわからないんだけど、ぼっつくの時の@tetsunosukeさんの紹介なのかな?でfollowして頂いた@hontoさんともご挨拶させて頂いた。ぼっつくは最初の頃に参加して、その後は全く参加していない(maven pluginだけ作って置いてある…来週のイベントが終わって時間ができたら1.3.1対応しなきゃね)コミュニティだけど、どなたかの記憶に残っていてこういう風にご挨拶させていただけるって素晴らしいですね。

ウケた - ajn5がらみのつぶやきで一番インパクトが大きかったものを紹介したいです。判断が難しいのが一匹混じっているように思いますが、すごいタイミングですね!うけました。

懇親会2次会 - 今回はbufferingsさんがわざわざ京都から来てくれたという事で、懇親会終了後に懇親会の2次会の実施が急遽決定されました。スゴイ濃いメンバが集結し、楽しい時間を過ごさせていただきました。色々と勉強になったり刺激を受けたりできました。こちらの参加者の皆様もありがとうございました!

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

2010年2月3日水曜日

SeasarファンデーションよりJava Cloud Meeting Fukuoka 2010が開催されます #appengine

2月20日に福岡にて開催されます。

クラウド関連についての第一弾という事で、今回は主に Google App Engine に特化した内容となります。GWT、Android、Slim3や、その他Seasarプロジェクトのプロダクトについての紹介があり、私もスピーカーとして参加させていただく予定です。私の方からは、技術者の方に興味を持ってもらえるような、少し踏み込んだ内容でGoogle App Engineの紹介をする予定です。

先にリンクを書いた告知ページ内から申し込みが可能で、参加費用2,000円となっています。福岡が圏内の方で Google App Engineに興味がある方はどしどし申込んでください!懇親会もありますよ!