タグ

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

  • CoCafeでのGoogle App Engine側の工夫

    年末に @aqubi と CoCAFE というアプリケーションをリリースしました。喫茶店のWiFi状況やらなんやらを共有するiPhone用のアプリケーションです(Android版も作ってます)。 このアプリケーションでは Google Places APIGoogle App Engineを使っていて、Google App Engine側では以下のような工夫をしてます。 Datastore(HRD) 地図のZoomに合わせた範囲検索をEqualityフィルタで実現するため、店の位置情報はGeoHashの先頭4文字,先頭5文字,先頭6文字,先頭7文字...とリストプロパティに保持→前方一致検索を使わずに済むので、別の条件で同時にInequeality Filterを使うこともできる。 利用ユーザ等の統計をとるためのアクセスログ的なデータは、必要な情報を全てKeyに詰め込んでいる→ Data

  • Google App Engineの新料金体系に向けた準備 #gaeja

    新料金体系について公開されている情報 2011-05-12: Google App Engine - ついに Preview 卒業です - Google Japan Developer Relations Blog 2011-07-06: App Engine の料金体系変更に関する FAQ - Google Japan Developer Relations Blog 2011-09-02: App Engine アプリケーションのリソースを管理する方法 - Kay's daddy 2011-09-07: App Engine のリソース管理 - TaskQueue の設定 - Kay's daddy 2011-09-09: Google App Engine Blog: A few adjustments to App Engine’s upcoming pricing changes

    Google App Engineの新料金体系に向けた準備 #gaeja
    bufferings
    bufferings 2011/09/16
    #gaeja 読んでいて気持ちのよい記事だなー
  • Hudsonを使ってみる

    HudsonでMavenとSubversionを使った管理をやってみるせっかくMaven2でレポート出力をやってるんだから、その履歴をとりたいなぁ、と。さらにTDDでやってるし、TestCaseの積み上げからそれらがGreenになっていく過程も見たい、と。んでHudsonでCIする事に。各種レポートを出力するためのMavenのpom.xmlの定義については過去のエントリを参考に。開発ページから最新モジュールをdownloadしてくる。「hudson.war」というファイル名。ついでにPlugin一覧から「Cobertura Plugin」「FindBugs Plugin」をdownloadしてくる。それぞれ「〜.hpi」というファイル名のはず。hudson.warをどこか適当なフォルダに配置する。ここから起動する。hudson.warを配置したフォルダで以下のコマンドを実行する。java

    Hudsonを使ってみる
    bufferings
    bufferings 2011/01/25
    これ。欲しかった情報。しんいちさん。ありがとうございます。
  • #slim3 1.0.6 のSimpleControllerを使った場合のテスト方法 #appengine

    先日、slim3-1.0.6がリリースされました。たくさん機能追加がありますが、最近の自分的に嬉しい機能のひとつにController内でInputStreamが使えるissue62への対応があります。 Support for Controller#createRequestHandler(): http://code.google.com/p/slim3/issues/detail?id=62 この機能を使用する際のテストケースの書き方の例を書いておこうと思います。あと、ついでにMetaクラスにJson->Model、Model->Jsonを行うユーティリティメソッドが追加されているのでそれも使っています。@takawitterさんの仕事です、ありがとうございます、便利です。 まずはController Httpメソッドとリクエストパラメータによって追加・修正・削除と1件返却、リスト返却

    bufferings
    bufferings 2010/12/29
    いつか使うときにちゃんと読む
  • #appengine でクエリの1000件超の結果件数を取得する方法

    先のエントリで書いた#appengine でクエリの結果件数を取得する方法(1000件超とか)の続きです。 どーしても動的な条件に対する結果件数を…ていうなら、最悪Low-level APIでsetKeysOnly()しつつページング(常に条件を変えつつoffset0~limit1000で)、で数えるという手もあるかもしれない。これもまた試してみよう。この方法なら1000件につき約110msなんで、7000件でも770msくらいで数えきれるはずだ。 気になって眠れないので引き続きこちらの方法も試してみた。 手法 AppEngineでのページング手法としてBest practices for writing scalable applicationsでも書かれているページング方法で、setKeysOnly()を使う場合、使わない場合のふたつのパターンを試してみた。どちらもasList()を使

  • Kindless Ancestor Queryをローカル環境で使用する #appengine

    AppEngineで実装されているQueryで、Kind指定なしで親キーのみ指定して、親キーに属するEntityGroupをKindをまたいでゴッソリ持ってくるという便利なクエリがあるのですが、開発環境で動かないという問題を抱えています。開発環境で動いてくれないって事はデプロイ前にテストできないって事で、結局プロダクトコードに含めることもできずまだ使えないカンジで勿体無いです。 makeSyncCallという仕組みで開発環境とProduction環境のDatastoreを直結するとテストできない事も無いですが、無理矢理過ぎるのでそれは考慮してません ApiProxy.Delegateの出番このブログを読んでくれている方はもう聞き飽きておられる事でしょうから詳しく説明しませんが、アレです、フックします。んでProtocolBufferをゴリゴリと触ります。 今回は、以下のようにいじってやる作

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

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

  • #appengine でスキーマ変更に対応するバッチ処理を行う

    2009/11/05追記ひがさんより指摘を頂いて、30秒制限に関する補足を文中に青字で追記しました。いつもありがとうございます、助かります>ひがさん ここから文 タイトルの処理について、いくつかノウハウを書いておきます。ポイントは以下の2点。 全てのエンティティにスキーマバージョンを保持する ローカル環境からデプロイ環境へ直結してバッチ処理を実行する事で、30秒制限なんて無視してしまう 実例をもとに説明してみます。最近、appengine java night用のまとめページとかに使おうとしているサイトを運営していて、そこに「TwitterでAppEngine関連についてつぶやかれた内容を収集する」という機能を実装しました。しかし、つぶやきを保存する際の投稿者の情報として「Name」を保持しているものの「ScreenName」を保持しておらず、投稿者のタイムラインページへのリンクを作成

  • #appengine java night #1( #ajn1 )に参加した

    楽観的排他制御にはBigTableの排他制御+独自のチェック(またはJDOのVersion管理+自前の更新前のバージョンチェック)を使うJDOを使う場合は自動でTransactionを開始する機能が邪魔なので止めておくPersistenceManagerを開くタイミング、閉じるタイミングLow-Level APIのパラレルGETは存在しないKeyをパラメタに渡してもエラーにならないスキーマのバージョンをEntityに持たせておくとマイグレーションが必要な場合に便利 感想実はひがさんも私も予定した事を全ては伝えきれなかったのですが、それでも問題なかったと思います。発表者の発表の合間合間に会場の皆さんを交えた色々な議論が交わされた分だけ、ひがさんも私も予定より押してしまった要因なのですが、個人的にこの進み方は良かったと感じました。おかげさまでより濃い内容になったんだと思います。appengin

  • 1