タグ

ブックマーク / hidemon.hatenadiary.jp (23)

  • Google App Engine 1.3.6 のNamespace API - hidemonのブログ

    先日プレリリースされていたApp Engine 1.3.6が正式にリリースされた。今回の目玉は Namespace APIによるマルチテナント ブロブストア上の画像の高速サムネイル化 カスタムエラーページ データストアの1000エントリ制限の解除 小ネタとしては Java でもapp.yamlが使えるように 管理コンソールからタスクキューが停止できるように 管理コンソールのダッシュボードのグラフが30日分表示されるようになった ブロブストアでContent-Rangeヘッダが利用可能に とりあえず、今回はNamespaceによるマルチテナント化についてだけ。 NamespaceManager API 一つのアプリケーションを、異なるデータセットに対して動作させることを簡単にできるようにするAPIです。つまり名前空間Aと名前空間Bに対して異なるデータセットを用意し、それぞれ独立に動作させるこ

    Google App Engine 1.3.6 のNamespace API - hidemonのブログ
  • オープンソース徹底活用 Slim3 on Google App Engine for Java - hidemonのブログ

    ひがやすをさんと小川信一さんによる。Slim3は、App Engine上で動くウェブアプリケーションフレームワーク。タイトルに反してSlim3の話は結構少なく、全7章のうち、2章と6章のみがSlim3関連。ページ数にすると1/3程度。Slim3はフルスタックのウェブアプリケーションフレームワークなのに、Slim3のデータストア関連機能にしか触れていない。それでいいのか!という気もしないでもないけど、その割り切りのおかげで7月末の発売が可能になったということで。 こののすごいところは、App Engineのキモであるデータストアまわりを、ほぼ完全に解説しているところ。私のでは、分量やターゲットの関係で踏み込めなかったあたりを網羅している。さすが。そのかわりApp Engineの他のAPIには全く触れていない。このあたりも見切りがいい。 これまでは、google IOのビデオをネチネチ何

    オープンソース徹底活用 Slim3 on Google App Engine for Java - hidemonのブログ
  • すっきりわかるGoogle App Engine for Javaクラウドプログラミング - hidemonのブログ

    宣伝です。拙著がようやく形になりました。AppEngineのはすでにたくさんあるのですが、1.3.4までをカバーしているものは、(まだ)ないのではないかと思います。 各APIに関してはなるべくそのまま利用できるサンプルを多く含むようにしたつもりです。サンプルは、サポートページからダウンロードできるようになっています。今後のバージョンアップにも追従していく予定です。 このブログで書いていたことと一部重複していますが、どうかひとつ。 すっきりわかるGoogle App Engine for Java クラウドプログラミングposted with amazlet at 10.06.30中田 秀基 ソフトバンククリエイティブ 売り上げランキング: 33083 Amazon.co.jp で詳細を見る

    すっきりわかるGoogle App Engine for Javaクラウドプログラミング - hidemonのブログ
  • App Engine 1.3.4 のOpenID 認証 - hidemonのブログ

    月刊 App Engine SDK の6月号は1.3.4。Google I/Oではfor business とか、VMware との協業とか、mapper APIとかchannel APIとかもっと面白い話しがあったようだけど、SDK 1.3.4の最大の売りは、OAuth対応とOpenID対応の二つのユーザ認証機構。ここではOpenIDでの認証のしかたを書いてみる。 リクエストを送るには3rd partyのライブラリかなんかが必要なんだろうと思って、いろいろ調べたり試したりして、数時間を無駄にしたのだけど結局わからず、twitterでつぶやいたら @shin1ogawa さんに1分後に教えていただいた。 ありがとうございました@shin1ogawaさん!そして、おそるべしtwitter。。。 OpenID の動作 OpenID はFederated Identity と呼ばれるものの一つで

    App Engine 1.3.4 のOpenID 認証 - hidemonのブログ
  • 1.3.3 pre release - hidemonのブログ

    数日前に1.3.3 prereleaseが発表された。来週にはリリースということだろう。当に月刊 Google App Engine という感じになってきた。 今回はバグフィックスという感じであまり大きな変更はないようだ データストアでidを自動的に採番する際の、idのレンジを指定するallocateIdRange()メソッドが追加。いまいち使いどころがわからない。。。 システムプロパティで、アプリケーションIDとバージョンが取れるように。これは、結構うれしいかもしれない。メイルアドレスやXMPPのアドレスはアプリケーションIDと連動するので、いままでは、URLから無理矢理アプリケーションIDを切り出していた。それをしなくて済むのはありがたい。 30秒ルールを破ってしまった場合、DeadlineExceededExceptionが発生したあと、HardDeadlineExceededE

    1.3.3 pre release - hidemonのブログ
  • Blobstore fetchData - hidemonのブログ

    App Engine には通常のデータベース的に利用するDatastoreの他に、Blobstore と呼ばれるストレージがある。このストレージに対しては、サーブレットを仲介せずに直接アップロード、ダウンロードができる。 Blobstoreに格納されたデータに対するアクセスは限定されている。導入当初はImageへの変換のみがサポートされており、読み出すことも書き込む事もできなかったのだが、1.3.2で限定的な読み出しメソッドとしてfetchDataが追加された。 このメソッドがちょっと変だ、というのが今日のお題。 fetchData メソッド fetchData メソッドはBlobstoreServiceのメソッドで、 次のように定義されている。 byte[] fetchData(BlobKey blobKey, long startIndex, long endIndex)開始インデック

    Blobstore fetchData - hidemonのブログ
  • App Stats for Java - hidemonのブログ

    これまでPython版にしかなかった App Stats が1.3.2でJavaに導入されたので試してみた. App Statsとは App Stats は各リクエストごとにApp EngineのAPIサービスの利用状況をモニタリングする仕掛け.どのAPIをどれだけ使ったか,個々のAPI呼び出しにどれだけ時間がかかったかを表示してくれる. セットアップ App Statsはそれぞれのアプリケーションに対して設定する必要がある.作業は次の2つ. 統計情報を取得するためのフィルタの設置 取得した情報を表示するためのサーブレットの設置 フィルタの設置 次のフラグメントをWEB-INF/web.xmlに追加する. init-paramでlogMessage を登録しているが,これはログにそのリクエストの参照用IDを表示させるためのもの. <filter> <filter-name>appstats

    App Stats for Java - hidemonのブログ
  • App Engine 1.3.2 のeventually consistency read - hidemonのブログ

    forumのほうでRyanさん(中の人)が解説してくれたのでちょっとわかった. write の際にはprimary replica に書き出し,それがsecondary以降に伝わるようになっている. strong consistency readでは常にprimary replica から読み出す.secondary 以降には伝播していないかもしれないのでprimaryから読み出さないと内容が最新である保証がないから.primaryがこけていた場合には,読み出しは失敗する. eventually consistency readではprimary がこけていた場合に,secondary 以降のreplicaからの読みだしを許す.この場合内容が最新であることは保証されない.また,読み出し自体も遅くなる.なぜならsecondary replicaは遠くにあるので. つまり,eventually

    App Engine 1.3.2 のeventually consistency read - hidemonのブログ
  • App Engine 1.3.2 pre - hidemonのブログ

    最近,すっかり月一ペースのApp Engineに,1.3.2 pre-releaseがでた.いつもの例に習うと,来週あたりに正式リリースになるのだろう.速いペースで更新されるのはうれしいが,watcherとしては追うのが大変. Blobstore 1.3.1で追加されたBlobstoreは,大容量のデータをサーブレットを介さずに,アップロード,ダウンロードする仕掛け.これまではサーブレットからは全く触ることができなかったのだけど,範囲を指定して読み出すメソッドが追加された. 具体的には,BlobstoreServiceに byte[] fetchData(BlobKey blobKey, long startIndex, long endIndex)と言うメソッドが追加されている.一部だけ読み出す形.いまのところ書き込む事はできないようだ. URLFetch のポート縛りが緩和 これまで,

    App Engine 1.3.2 pre - hidemonのブログ
  • App Engine アカウントの認証 - hidemonのブログ

    App Engineのユーザ登録過程には,簡単なユーザ認証がある. メッセージをユーザに送り,メッセージに書かれた番号を入力させるというもの.App Engine相当はいろいろなことができるので,ユーザをある程度トラッキングできるようにしておくというのは当然だろう. SMSから携帯メイルへ で,以前はこのメッセージの送信にSMSが用いられていた.SMSは携帯電話の番号に対してメッセージを送るので,事実上携帯電話番号をApp Engineのアカウントひも付けていたわけだ.携帯番号はメイルアドレスほど取得するのが簡単ではないので,1人のユーザが多数のアカウントを取得することを,ある程度防ぐことができる. ところが,いつの間にか,メッセージの送信方法が,SMSから携帯メイルに変わってしまっていた.おそらくは日だけ.しかもなんだか知らんが,未だにSoftbankはVodafone扱いだ (^_^

    App Engine アカウントの認証 - hidemonのブログ
  • App Engine おちた - hidemonのブログ

    時間の25日未明,App Engine が落ちた.しばらくread-onlyになっていたのだけど,その後アクセスできなくなった. ここによると,日時間で0:53にトラブル発生,2:48分にread-onlyで復旧,3:09 に復旧した,とのこと. 詳しい原因はまだわからないけど,バックアップデータセンターにもトラブルがあったとのこと.稼働中のデータセンターに障害があり,さらに,バックアップデータセンターへの移行がうまくいかなかったと言うことなんだろう. ここのところ,かなり安定していた印象だっただけに,残念.ここまで大きい障害は,昨年6月のこれ以来ではないだろうか. 所感 2時間強での復旧は,素晴らしいと思う.が,広報体制はもうすこしなんとかならないのか.Downtime Notifyに一報があがったのは,障害発生の43分後の1:36.昨年6月とは比べものにならないほど多くの人がプロ

    App Engine おちた - hidemonのブログ
  • はじめてのSlim3 - hidemonのブログ

    AppEngine Ja Night 5 お疲れ様でした. こんなイベントをボランティアで開催くださる皆様には当に頭が下がります.また,会場をご提供いただいたGree様,ありがとうございました. というわけで,今回のひがさんのトークはSlim3のGlobal Transaction. いかにも力業だけど.この力業をちゃんと実装しちゃうのは,さすが,としかいいようがない.コードもきれいだ. にもかかわらず,実は私は,これまでSlim3を使ってみたことが無い.ホームページを見ると,'Full Stack' とか書かれていて正直ちょっとびびっていた.でも今日お聞きしたら,データストア層だけでも使えるということだったので,試してみた. 意外に簡単だった. インストール 基的にここに書いてある通りなのだけど,私が混乱したところを整理しておく. このページには,ブランクプロジェクトをダウンロードす

    はじめてのSlim3 - hidemonのブログ
  • Cursorをつかったページング - hidemonのブログ

    1.3.1までは,データストアからの読み出し個数が1000個以下に限られていた.なので,1000個以上のデータを取り出すときに,rangeを使ってやろうとするとうまく動かなかった.というのは,range(990, 1010) とやると,0から1100までのキーをとりだして,その後,990から1010までの中身を取りに行く,という実装なので,0から1100までのキーを取りだすという時点で,落ちてしまうからだ.また,そもそも20個だけ読みたいのに,1100個キーを取りだしてしまうので非効率. これまでの方法 そこでよく知られているテクが,これ.条件式を組み合わせることで,rangeのオフセットを常に0にしたままスキャンする方法.このサンプルはPythonだけど,JDOで書いてもそのまま動く. 1.3.1 ところが,1.3.1になって事情が変わった.1000個の制約が無くなったので,とりあえず性

    Cursorをつかったページング - hidemonのブログ
  • App Engine 1.3.1 - hidemonのブログ

    でた.プレリリースが先週出ていて,その1週間後に予定通りリリース.データストア周りが結構変わっていて,これまで苦労していた部分で苦労しなくて済みそうな感じ. Query Cursor いわゆるカーソルが導入された.RDBだと普通にあるのだけど,データストアからの読み出しにrangeで制約をつけておき,結果からカーソルを取得しておくと,次に同じキュエリをだすときに,カーソルを指定して,そのつづきから,という形で検索ができる. これまでだと,ソートのキーになっているプロパティの値を取っておいて,それを条件に加えて検索していたのだけど,そんなテクは不要に. No more 1000 result limit これまで,データストアには,1000個以上の値を返せない,という結構きつい縛りがあった.rangeで指定しても,たとえば 900-1100 みたいな検索ができなかった.この制約が無くなった

    App Engine 1.3.1 - hidemonのブログ
  • App Engine の禁止クラス - hidemonのブログ

    App Engine ではJREに含まれているクラスであっても,white listに登録されているクラス以外は利用できない.Eclipseのプラグインを使っていると,書いているうちから赤バッテンがでて教えてくれる. それでも,無理矢理デプロイすれば出来てしまう.しかもクラス名を触るぐらいの操作なら別に落ちたりはしないのだった. import javax.swing.Box; ... Class b = Box.class; logger.warning(b.getName());のようにしてみたら,ログにはこんな風に出た. Test doGet: com.google.apphosting.runtime.security.shared.stub.javax.swing.Boxjavax.swing.Box への参照が,こんな風に別のクラスへの参照に置き換えられているようだ.ロード時にバ

    App Engine の禁止クラス - hidemonのブログ
  • Scala で Google App Engine の続き - hidemonのブログ

    先日のブログには,Eclipse だけではエンハンスがとおらないので,外のbuild.xmlを使う必要がある,なんてことを書いた.が,いろいろいじっていたら,そんな必要は無いことがわかった...エンハンスに失敗するのは,scala関係のjarがビルドパスに登録されていないから,というだけの理由だった... まとめ まとめると.. EclipseにApp Engine のプラグインとScalaのプラグインを入れる. App Engineのプロジェクトを作成. Scalaのネイチャーを追加 Scalaのjar がプラグインのディレクトリのどこかにあるので,それを取ってきて,war/WEB-INF/lib に入れる.scala-XX.jarが3つあるはず. war/WEB-INF/lib/scala-XX.jar にビルドパスを通す. 以上.不必要にはまったが結論としては簡単,ということでよかっ

    Scala で Google App Engine の続き - hidemonのブログ
  • App Engine の負荷とインスタンス数 - hidemonのブログ

    先日インスタンスとスレッドの関係を調べるために,いくつも同時にリクエストを発行してみたのだけど,4つしかインスタンスができなかった.エラーが起きるほどリクエストがたまっているにもかかわらず,インスタンスが増えてくれない. どういう理屈でインスタンスが増えるのか,調べてみた. 結論 先に書いておくと,たぶんこんな感じ. リクエストの頻度でインスタンスを増やしている. ロードバランサーで棄却されるジョブの数は寄与しない. 最大30 (20と書いていたのは間違い) App Engine の挙動 App Engineでは,リクエストが到着すると,いったんそれをプールしておき,空いたインスタンスに投げるロードバランサーが入っている.このロードバランサーの中に10秒以上滞留すると,エラーになる. 実験 ほぼ等間隔でリクエストを出すプログラムを書いて実験した.Java で100スレッドのスレッドプールを

    App Engine の負荷とインスタンス数 - hidemonのブログ
  • Scala で Google App Engine - hidemonのブログ

    以前ScalaGoogle App Engineが使えないかと思って,試してみた.そのときには,サーブレットは普通に動くけど,JDOのエンハンサが動いてくれなくて,JDOが使えなかった.今回,ちょっといじってみたらJDOを含めて動かすことができたので書いておく. コマンドラインでの操作 要するに,Eclipseの外でエンハンサだけ動かせばよい.それには,SDKに含まれているbuild.xmlを使うと簡単. SDKが1.3.0だとすると, appengine-java-sdk-1.3.0/demos/jdoexamples/build.xml にbuild.xmlがある.これをEclipseのプロジェクトホームディレクトリ(warとかsrcがあるディレクトリ)にコピーしてくる.で,このファイルの冒頭にある <property name="sdk.dir" location="../.."

    Scala で Google App Engine - hidemonのブログ
  • Google App Engine はマルチスレッドで動いているのか? - hidemonのブログ

    Programming Google App Engine の93ページ上のあたりに,App Engine の一つのインスタンス上で同時に複数のリクエストをそれぞれのスレッドで処理する「かもしれない (may) 」,だからちゃんとスレッドセーフに書く様に,という趣旨のことが書いてある.実際のところどうなのか,調べてみた. テストプログラム いたって簡単.static で乱数値を生成して保持しておく.これがインスタンスのIDの代わりになる.で,10秒休む.開始時刻と終了時刻とIDを出力する. public class UpTest extends HttpServlet { static double val = Math.random(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse

    Google App Engine はマルチスレッドで動いているのか? - hidemonのブログ
  • App Engine deferred for Java - hidemonのブログ

    Task Queue App Engineでは,一つのサーブレットは30秒しか実行出来ない上,スレッドを使うことができない.このため普通の方法では,長時間かかるようなタスクを実行することができない.これを補う機能としてTask Queueがある. Task Queueでは,サーブレットとそれに渡す引数をタスクとして考える.このタスクをキューに積んでおくと,システムが自動的にサーブレットを引数をセットして呼び出してくれる. defered for python Task Queueは機能的には十分なのだがちょっと使いづらい. サーブレットを書かなければならない. 引数をパラメータとして与え,サーブレットの側でも取り出さなければならない. サーブレットとURLのマッピングも書かなければならない. これを解決するために,Python版では,deferredというライブラリが提供されている.これを

    App Engine deferred for Java - hidemonのブログ