タグ

ブックマーク / shin1o.blogspot.com (32)

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

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

    #appengine #slim3 本を執筆しました
  • PubSubHubBubを経由してBuzzのFirehoseを #appengine で使ってみる

    ちょっと前に BuzzでFirehoseが使えるようになりました。 Activity firehose - Developer's Guide (v1): Using REST - Google Buzz API - Google Code Working with real-time updates - Developer's Guide (v1): Using REST - Google Buzz API - Google Code 今の空うさぎでは、FriendFeedはリアルタイム(FriendsがPostした瞬間にクライアントに通知される)になっていますし、TwitterもUserStreamを使うことでFirendFeed同様にリアルタイムになっています(Twitter側の制限のために、リリース版ではTwitterのリアルタイムはオフになってますが)。さらに開発版ではGoogl

  • #appengine ja night #8( #ajn8 )に参加した

    6/4(金)に appengine ja night #8が開催されました。今回の目玉は以下でした。 @najeiraさんトコで構築されたスポーツSNS Labolaの事例紹介ajn7の時のランキング問題をやっつけるために京都より@koherさんがskip list片手に参加北海道より@shuji_w6eさんが参加名古屋より@zetta1985さんが参加skip listと聞いて(ガタッ、ってかんじで大阪より@kibayos先生が参戦当は@kazunori_279さんのIO2010報告もあるはずだったのですが、上記の通り盛りだくさんでしたし、発表は必ず時間通りに終わらないajnの伝統が継承されてIO2010報告は次回持越しとなりました。 また、今回は以前と比べて女子率が3倍ほどにアップしました!…新規参加者と言うより、リピーターの方のお情け(同僚の方を連行してきてくださった模様w)という

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

    4/23(金)にappengine ja night #7が開催されました。ATNDを見るとshin1ogawa ja nightとか書かれていてこっぱずかしいような嬉しいような…。今回の目玉は以下でした。 ライブコーディングを使って、appengine/javaがいかにテストしやすいか?をお伝えする事前にGoogle Moderatorで議題・質問を募集し、それをネタに会場で議論するイベント開催中は京都のサテライト会場とつなぎ、双方向のやりとりもする@kazunori_279さんがUstしつつ録画してくださっています。 shin1ogawaのライブコーディングQA大会BeerTalk appengineアプリケーションの自動テスト -最新java sdk版-一番伝えたかったことは、通常のWebアプリケーションと比較して、AppEngineアプリケーションはとてもテストがやりやすいという事

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

    最近Apps MarketplaceというプラットフォームがGoogleから公開されました。B|CtoB なアプリケーションを登録できるプラットフォームです。アプリケーションの登録・公開方法については@ITさんに記事がありますので、そちらを参考にして下さい。今はまだ開発ベンダ向けのGoogleによる課金のサービスが提供されていませんが、これが開始される時までにそれなりにMarketplace向けのアプリの構築に慣れておきたいものです。私の場合は、モチロン AppEngine を使うことにします。 Google Apps Marketplace企業向けアプリ出店入門(1/2) ─ @IT 注意が必要な点として、登録できるアプリケーションには2種類あるって事です。アプリケーションの登録時に「directly installed into Google Apps domains」という選択肢をオ

    marketplace用の #appengine javaアプリの雛形を作ってみました
  • #appengine の「データストアの読み込み専用状態」をエミュレートする

    先日もメンテナンスがあり、AppEngineのデータストアが読み込み専用状態になってましたね。データストアへの書き込みを行うアプリケーションではこの「読み込み専用状態」時の対策をする必要があるのですが、「読み込み専用状態」の時の振る舞いをテストする方法を書いておきます。自動テストができる範囲は広ければ広い程よいですもんね。 ApiProxy.Delegateを実装・適用するだけApiProxy.Delegateを実装して、makeSyncCall()メソッド内で「Datastoreへの書き込み」の時に ApiProxy.CapabilityDisabledException( )を投げてやるだけ。私は下記のようなユーティリティを作ってテストしてます。 static <R>R runOnReadOnlyMode(Callable<R> callable) throws Exception {

  • #appengine javaでcapability serviceを利用する

    capabilityサービスを使用すること自体は、今回作ったモジュール(ProtocolBufferの定義、それを使用するサンプル)をそのままコピーするなどして使えば簡単にできます。このエントリは、普段JavaでAppEngineを使う人も、Pythonコードを読むと色々役に立つよ、というような内容になってますので、そのあたりに興味が無い人は読んでもあんまり面白くないと思います。Java, Pythonの関係だとその逆も言えるんですけどね。AppEngineは今のところJavaPythonがありますが、どちらかだけじゃなくて両方触っておくのが一番です。AppEngineJavaを深く触っている人にはSDKのpythonコードもよく参照している人が多いです。 題App Engineのサービスがメンテナンスモードの時に、例えばデータストアが読み込み専用になったりします。この時、データストア

  • 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程度と見れ

    slim3と素のJavaで #appengine のspinupを比較してみた
  • 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」どれを選ぶかは好

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

    2/21(日)、クラウドで変わるJava開発 – Java Cloud Meeting Fukuoka 2010 というイベントのおまけイベントとして、BacklogやCacooで有名なヌーラボさんの社をお借りしてAppEngineコードラボを開催しました。 普段東京でやるようなガッツリするかんじのコーディングではなく、8人ほどの参加者の方とまったりのんびりなカンジで作業しました。特徴的だったと思うのは、Google のチュートリアルっぽい事は完全に無視して、HelloWorldをやった後はLowLevelAPIを使った保存・取得を行った事。さらに、その次にslim3-blankをダウンロードしてslim3らしい*-genを使った手順を行う…と見せかけて、slim3-blankはslim3-genとslim3のjarをコピーするだけに使って、Google Plugins for Ecli

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

    ちょっと前のエントリでSeasarファンデーションよりJava Cloud Meeting Fukuoka 2010が開催されますというのを書きましたが、その翌日に、福岡のヌーラボさんのオフィスをお借りしてGoogle App Engine Javaのコードラボを開催させていただくことになりました。 私が説明した内容を参加者の方が実際にコードを書いて試す、といった形式で進めていく形式の入門コースとなっています。 コードラボのお知らせ上記リンク先がコードラボの申し込みページになっています。また、Java Cloud Meeting Fukuoka 2010も合わせて参加申し込み(学割もあります)していただくと、このイベントで概要を学び、その翌日コードラーボで実践できる、と充実した週末を過ごしていただけるんじゃないかなーと思います!

  • #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慣れしていない方にはサッパリ面白くないんじゃないかな、という内容もかなり多

  • #appengine ja night #4( #ajn4 )に参加した

    1/22(金)にappengine java night #4が開催され、今回も参加してきました。今回からは、javaに拘らないappengineネタを!という事で、appengine ja nightという名称に変えて開催されることになりました。また今回はajn恒例の「LTを肴に懇親会」については、交流メインでTalk少なめ!という方向で参加者同士の交流もしやすかったです。 ゲットしたノウハウモデルのリファクタを可能にするための、トレーサビリティは重要最も説明したい内容の理解を進めていくために、超簡単な内容から始めて少しづつ変化するステップアップを徐々に積み重ねて説明する事はとても良いappengineのデータストアのメンテナンスに、コンソール形式のインタプリタはかなり便利御座候のあんこは甘さひかえめ 浅海智晴さん(@asami224): DSL駆動開発×AppEngineどこにappe

  • MightyMeetingが面白い

    MightyMeetingというサービス&アプリが面白いので紹介を。TechCrunchで紹介されているのを見て、試してみた。 スマートフォンからPowerPointプレゼンテーションができる何ができるかというと、サービス上にアップロードしたPDF等を、他の複数のPCから見る/見せることができる。これだけなら大概のストレージサービスと変わらないわけで、正確に表現すると「アップロードしたファイルの再生中のセッションを複数のPCから見る/見せることができる」というコト。再生は、iPhoneアプリから行うことができる。 手順iPhoneからスライドを操作し、PCを使っている人にその再生状況を見せる、という手順を試してみる。 PCからMightyMeetingのWebページを開き、SignUpする。 動作を試すために、Webページでログイン後に表示される画面で、適当なPDFをUploadしておく。

    MightyMeetingが面白い
  • #AppEngine 用のアプリケーションの自動テストについて(3) - メール送信に関するテスト

    第一回目、第二回目に続く、 テストシリーズ第三回です。 開発環境ではメールは送信されない 見出しに書いた通り、AppEngineの開発環境ではメール送信サービスを使ってメールを送信しても実際にはメールは送信されません。 メールが送信されたところで自動テストでそれを判断するのは面倒そうですが、 AppEngine環境のサービス実行の仕組みを利用する事でメール送信の成否を自動テストできるようにする方法を説明します。 前回のDatastoreのExceptionをシミュレートする仕組みと同様に、 ApiProxy#setDelegate()を使ってサービスの実行をフックする方法を使います。 前回と比べるとフックを行う対象となるサービスとメソッドがデータストアサービスからメール送信サービスになるという当たり前の違いがあるのですが、 それ以上に違う点として「前回はサービスとそのメソッド名を判断するだ

  • #AppEngine 用のアプリケーションの自動テストについて(5) - URLFetchに関するテスト

    下記のAppEngineアプリケーションの自動テストシリーズに続く、第五回目です。 AppEngine用のアプリケーションの自動テストについて(1) #AppEngine 用のアプリケーションの自動テストについて(2) - Datastoreに関するテスト #AppEngine 用のアプリケーションの自動テストについて(3) - メール送信に関するテスト #AppEngine 用のアプリケーションの自動テストについて(4) - TaskQueueに関するテスト URLFetchサービスのテスト?シミュレート? URLFetchのテストと言っても、目的は2種類分かれると思います。 ひとつは「想定通りのリクエストが組み立てられているか」という事です。 こちらはこれまで説明してきた通りの 「サービスをフックしてサービスへリクエストとして送信されるバイト配列をJavaオブジェクトとして組立て直す」

  • 「これなしでは生きていけない」ウェブ・サービスやガジェット

    今年もTechCruchに新春吉例第5回:私が毎日使うお気に入りのサービスとガジェット2010年版 という記事が上がっていたので、影響されて自分なりの物も書いてみる。ちなみに去年の年始にもtechcrunchに影響されて書いた。 Slimtimer 去年に引き続き登場。Time Trackをするサービスで、ASlimTimerという、嫁ちゃんが作ってくれた専用クライアントを使っている。 去年はSlimTimerの紹介と同時に次のような事を書いていた。 これが全ての行動のフロントとなる…なるべき!と考えている。こいつでの操作を全てFriendFeedやTwitterに流す事で自分の行動を細かく記録できる…特に社内での行動はそうすべき!と考えている。行動を見せる事からやらないと、社内の可視化や透明化の根的な部分が実現できないと思う。 これについてはまだ実現できていない。今年は去年開始されたG

  • #AppEngine 用のアプリケーションの自動テストについて(4) - TaskQueueに関するテスト

    下記のAppEngineアプリケーションの自動テストシリーズに続く、第四回目です。 AppEngine用のアプリケーションの自動テストについて(1) #AppEngine 用のアプリケーションの自動テストについて(2) - Datastoreに関するテスト #AppEngine 用のアプリケーションの自動テストについて(3) - メール送信に関するテスト Taskの「投入」をテストする TaskQueueのテストといっても「Taskの投入」をテストするのか「Taskの実行」をテストするのか、といった2種類のテスト対象が考えられます。 今回は「Taskの投入」をテストする説明をします。「WebHandlerによるTask実行」については、例えば私はテストしやすいように以下のような手法で実装しています。 何らかの機能で、Taskを投入する 投入されたTaskはWebHandler内で実行するこ

  • #AppEngine 用のアプリケーションの自動テストについて(2) - Datastoreに関するテスト

    前回に続く、テストシリーズ第二回です。 テストに必要な初期テストデータ Datastoreの操作をテストする際に初期データを必要としないものは特に準備は必要ありませんが、初期データを投入済みの状態でテストを開始したい場合もよくあります。 そういった時にsetUp()やsetUpBeforeClass()メソッドで初期データを投入する方法がありますが、 その方法だと初期データが大きい時にテストに時間がかかってしまうという問題があり、スローテストと呼ばれる問題を引き起こしてしまいます。 そこでAppEngineの開発環境でのDatastoreの特徴を確認すると、メモリ上で実行するオプションを指定しない限りは テストフォルダ配下の"WEB-INF/appengine-generated/local_db.bin" というファイルにデータが書き込まれます。 一度local_db.binに書き込まれ

  • AppEngine用のアプリケーションの自動テストについて(1)

    AppEngine用のアプリケーションのテストの手法について、公式ドキュメントがあまりにも貧弱なためそれを補足する資料を作ろうと思います。 DatastoreはもちろんMail送信やQueueへのTask投入等のテストを行う説明まで何回かに分けて徐々に書いていき、 最終的にはそれらのエントリを清書してWikiにまとめたいと思います。これはその第一回目で、テストのための仕組みの説明と基的なテストの手順について説明します。 文中でApiProxyと書かれているクラスはcom.google.apphosting.api.ApiProxyの事です。 この説明での「AppEngine環境」とは、データストアサービスなどのAppEngineで提供されている各種サービス群を利用するための環境のことをさします。 テストのためにAppEngine環境を起動するには、大きくわけると ApiProxy.set