タグ

Google App Engineに関するmaganebaのブックマーク (18)

  • Twitterのステータスを見る·TwitterRecorder MOONGIFT

    TwitterRecorderはPython製/Google App Engine用のフリーウェア(ソースコードは公開されている)。ソーシャルなサービスではつい自分に対するコネクション数が変わっているかどうか気になってしまう。時々見ては増えた、減ったと一優してしまうことだろう。 ユーザの情報 だが毎日見ていてもあまり変わるものではない。変わるとすればブログで紹介されたとか、人気の集まる発言をしたなど何らかの要因があるものだろう。そうした毎日の変化を記録し、後から追いかけられるのがTwitterRecorderだ。 TwitterRecorderは指定したTwitterユーザのフォロー/フォロワー/ツイート数/お気に入り数を記録し、グラフ化するWebアプリケーションだ。特に認証などは無用で、ユーザ名を入力しておくだけで良い。後は定期的に情報を取得してアップデートしてくれる。 一日では分からな

    Twitterのステータスを見る·TwitterRecorder MOONGIFT
  • App EngineのEntityGroupを理解しよう - ひがやすを技術ブログ

    App EngineのEntitiGroupは、Keyの親子関係を利用して組み立てられたEntityの集まりです。 Entityとは、Bigtable上の1つの行で、ユニークに識別するためのKeyを持っています。 Keyは、種類をあらわすkindとAppEngineから自動的に採番されるidもしくはアプリケーション側で自由に決めることのできるnameで構成されます。 通常は、AppEngineの自動採番に任せますが、Emailのアドレスをキーに使いたい場合などは、nameを使います。kindはテーブル名のようなものだと思ってください。 Keyの親子関係は次のようにして作ります。 Key grandparentKey = KeyFactory.createKey("Grandparent", "しげお"); Key parentKey = KeyFactory.createKey(grand

    App EngineのEntityGroupを理解しよう - ひがやすを技術ブログ
  • App Engineのユニーク制限を正しく理解しよう - ひがやすを技術ブログ

    Google App EngineではRDBMSのようなUnique Indexをサポートしていません。ユニーク制限を実現する場合は、トランザクション中でKeyを使ったgetとputを組み合わせる必要があります。 ここでは、email addressがユニークだったらそれを確定してtrueを返し、そうでない場合にはfalseを返すコードを考えます。 最初にトランザクションを使わないコードを見てみましょう。KeyFactory.createKeyの最初に引数は、kindといってテーブル名みたいなものです。 public boolean putUniqueEmailAddress(String value) { DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); Key key = KeyFactory.cr

    App Engineのユニーク制限を正しく理解しよう - ひがやすを技術ブログ
  • Slim3 Preview release - ひがやすを技術ブログ

    Slim3の正式リリースは、来年の一月くらいになりそうですが、ドキュメントも最低限のものはそろったので、今の段階のものをPreview版として紹介しておきます。 サイトへは、http://slim3.org でアクセスしてください。 Getting Startedをやり、Slim3 Datastoreのドキュメントを読み、Online demoをみれば、Slim3のことは把握できるようになっています。 Oneline demoからソースも見れるようになっているので、動かしながらソースを確認することができます。Online demoは、IE6で見るとレイアウトが崩れていますが、これはIE6を使うなというメッセージということで。(IE7,8では未確認) Slim3は、Google App Engineに対して最適化されています。 例えば、最近、App Engineで問題になっているのは、spi

    Slim3 Preview release - ひがやすを技術ブログ
  • Google App Engine/Paste用Pythonフレームワーク·Pyxer MOONGIFT

    PyxerはPython製のオープンソース・ソフトウェア。最近のプログラミング言語には様々なフレームワークが存在する。汎用的なものを使うのも良いが、環境に応じて特化したものを利用するというのも良さそうだ。環境に合わせることでよりスムーズな開発ができるようになる。 Google App Engine向けに使えるPythonフレームワーク Googleのクラウド環境であるGoogle App Engineは仕組みが一般的な専用サーバ等と大きく異なる。既存のフレームワークをApp Engineに合わせるのではなく、特化したものを選んでみるという選択はどうだろう。Pyxerはまさにそのためのフレームワークだ。 Pyxerはeasy_installを使ってインストールするフレームワークで、コントロール、テンプレート、モデルと分けて開発ができる。モデルはDataStoreを使うのだがElixirがライ

    Google App Engine/Paste用Pythonフレームワーク·Pyxer MOONGIFT
  • Google App Engine入門:Entity Groupとトランザクション処理

    今週に入ってから、ようやく少し気でGoogle App Engineでプログラムを書き始めている私だが、ようやく Entity Group の使い方が分かって来たので簡単に解説してみる。 Entity Groupとは、一口で言えば「トランザクションを使ったアトミックな読み書きの対象となるEntity(=データベース上のオブジェクト)の集まり」である。 イメージとしては、まず「一つのハノイの塔を三人で同時に遊んでいる姿」を思い浮かべると分かりやすいかも知れない。全くのルールなしで皆で同時に遊ぼうとすると、腕が交錯してぐちゃぐちゃになってしまう。 そこで、「ある時点でハノイの塔ボード(三つの棒を支えている水平に置かれた板)に触ることが出来る人は常に一人。一度ボードに触った人はすべての円盤をいずれかの棒の位置に置いた状態にしてからしか手を離してはいけない。もし自分がハノイの塔に触りたい時に、す

  • Google App Engine入門:Datastore上で「ユニーク制限」を実現する方法

    Google App Engine のDatastoreには、通常のリレーショナルデータベースと比べた時にいくつかの制限があるが、その一つが「このプロパティの値は常にユニークでなければならない」という指定(ユニーク制限)ができないことである。 Invoice IDのように自動生成するものであれば、アプリケーション側でなんとかすることも簡単だが、メールアドレスやハンドル名など、ユーザーが入力するものになると、ユニークであることをきちんと判定した上でEntityを作ることが必要になる。 もちろん、単純に「有無をチェックして、なければ作る」というプログラムではスレッド間の競合に対応できないので、そこはトランザクションを使ってアトミックに処理をする必要がある。 App Engine上でトランザクションを実現するには、エンティティグループという仕組みを使って行うが、気をつけなければいけないのは、エン

  • Song of Cloud: 送金のトランザクション処理パターン

    App Engineで現実的な送金処理について考え中です。 ドラフト版なので、怪しい点があればご指摘いただければ幸いです。 コメントで情報いただきました。 Distributed Transactions on App Engineで紹介されてる方法と基的に同じなので、おそらく問題なく動きそうです。ありがとうございました。 今回はこんな図を使います。 この図の読み方は、矢印の方向にユースケースの一連の処理(またはリクエストの処理)が流れていて、右に行くほど時間が経過しています。そして、矢印がくし刺しにしている四角形は、そのユースケース中で操作するエンティティを表しています。 また、左右の位置が同じ矢印は、基的には同じ時刻に発生したイベントを表しています。上記の図では、A, B, Cがそれぞれの口座エンティティを同時に操作している感じです。 並行性制御(おさらい) 最初の図のように、それ

  • AppEngineのDatastoreの学び方 - ひがやすを技術ブログ

    Google AppEngineではBigtableの上にDatastore Serviceが構築されていて、開発者は、このDatastore Serviceを利用してBigtableにアクセスすることになります。このDatastore ServiceはPython版もJava版も機能はほとんど同じです。もしかすると、全く同じものかもしれません。 GAE/Jの場合、JDOを通じて、Datastore Serviceを利用するのが推奨されていますが、実はこれが嵌りポイント。 JDOは汎用的なインターフェースなので、Datastore Serviceを理解するのには向いていません。Datastore ServiceがRDBMSのような高機能なら、JDOを通じて抽象化し、Datastore Serviceのことは知らなくても済すのもぜんぜんありなのですが、残念ながら、そうなってはいません。 Da

    AppEngineのDatastoreの学び方 - ひがやすを技術ブログ
  • Google App Engine入門:実行効率を犠牲にせずに開発効率だけを上げるテクニック

    一つ前の富豪プログラミングのエントリーともつながる話だが、Google App Engineは「ちゃんとスケーラビリティを考慮してアプリケーションを作るには何に気をつけなければならないか」を勉強するには絶好の環境だ。そこで今回は、その「ケチな大富豪的なプログラミング」の実践編。 Google App Engine上のアプリをいくつか書いているうちに、必要に迫られて自然発生的にできてきたのが、gdispatchという数十行のコードからなる小さなモジュール(ソースコードはgithubに置いてある)。これをGoogle App Engineに標準で付いて来るwebappと組み合わせてフレームワークとして使っている。 gdispatchを設計する上で重視したのは、 (1)Google App Engine上でのアプリの開発を効率化する上で「明らかにこれがあると開発効率が格段に向上する」というもの以

  • GoogleAppEngine + JRubyでクリスマスまでに彼女をつくる方法 - KAYAC engineers' blog

    こんにちは。typesterの陰謀によりVimmerはモテないというデマが流れておりますが、残念ながらそれがデマだということを身をもって証明できないでいるVimmerの外村です。 先日、お悩み相談の記事がホットエントリーに入ったら彼女ができるという噂が立ち、何を間違えたかホットエントリーに入ってしまったのでどうしようかと思ったのですが、プログラマたるもの問題があればプログラムで解決すべきだろうと考えました。 というわけで彼女を作ってみました。どういうものかというと、 僕だけに定期的につぶやく 僕のリプライだけに反応してリプライを返してくれる まさに僕だけのボット彼女です。今回はこれをGoogleAppEngine+JRubyで実装したので、環境をつくるところか実際に動かすところまで説明します。 1. 環境をつくる まずはGoogleAppEngineのアカウントがないと始まらないので以下か

    GoogleAppEngine + JRubyでクリスマスまでに彼女をつくる方法 - KAYAC engineers' blog
  • Yahoo! BOSS + クラスタリング + GAEの検索システム·Clustsrch MOONGIFT

    ClustsrchはPython製のフリーウェア(ソースコードは公開されている)。Yahoo! BOSSとはBuild your Own Search Serviceの略で、カスタマイズ性の高い検索システムを構築できるWeb APIだ。自サイトのサイト内検索として使ったり、そこから得られるデータを使って様々なマッシュアップを構築したりするのに使われる。 Yahoo! BOSSを使った検索システム そんなYahoo! BOSSを検索システムとして使ったのがClustsrchだ。ただそのまま使うのではなく、階層型クラスタリングと呼ばれる手法を盛り込んでいる。結果から得られる単語を取り出して、グループ化していく手法だ。 Clustsrchで検索を行うと検索結果とは別にグルーピングされた情報が表示される。それをクリックすると検索結果が絞り込まれる仕組みだ。Googleのサジェストに似ているが、さら

    Yahoo! BOSS + クラスタリング + GAEの検索システム·Clustsrch MOONGIFT
  • 1対多の所有関係にあるデータを記録するサンプル - うなの日記

    Google App EngineのDatastoreで1対多の所有関係にあるデータを相互参照できる形で記録するサンプルです。 1対多 1つの親が、複数の子を持つような関係です。 親(Parent.class) ├子1(Child.class) ├子2(Child.class) └子3(Child.class) 所有関係 オブジェクトの所有される側(子)は所有者(親)を必ず必要とする強い関係?です。 もうひとつ、非所有関係というのもあり、 これであれば「どちらのオブジェクトもお互いの関係から独立して存在することができる」とのこと。 多対多の関係を構築する場合は、非所有関係を使うらしい。 なお、非所有関係のデータは1トランザクションでは保存できない、という制約があります。 相互参照 親/子の双方で検索できるようにします。具体的には以下の両方ができる、ということです。 親Aが保持する子の一覧を

    1対多の所有関係にあるデータを記録するサンプル - うなの日記
  • Google App Engineで他サービスの認証を用いる·gaema MOONGIFT

    gaemaはPython製/Google App Engine用のオープンソース・ソフトウェア。Google App EngineではGoogleの認証システムが容易に使えるようになっている。とは言えOpenIDが多数のサイトで対応している現在、認証としては他のサービスを使いたい場合も多い。 OpenIDでログインするサンプル 類似のサービスとしてはTwitterやFacebookが挙げられるだろう。この手のサービスならば通知も兼ね備えるので、さらに使い勝手が良い場合もありそうだ。そんな多彩な認証ニーズに応えるのがgaemaだ。 gaemaは認証統合ライブラリとも言うべきソフトウェアで、OpenID認証の他、OAuth、Googleアカウント、Facebook、FriendFeed、Twitterといったサービスに対応している。デモ版ではGoogleアカウントに対応したものが試せる。 ログ

    Google App Engineで他サービスの認証を用いる·gaema MOONGIFT
  • Webサイトをミラーリングする·Mirrorrr MOONGIFT

    MirrorrrはPython製/Google App Engine用のオープンソース・ソフトウェア。かつて言われていたSlashdottedや最近だとDiggに掲載されることでサーバへのアクセスが集中し、最悪サーバが落ちてしまう現象。そんな時に一時的にコンテンツをミラーリングし、アクセスを逃がすサービスが幾つか存在する。 外部コンテンツのミラーに 全くの外部コンテンツにアクセスが流出してしまうと何のためにアクセスが増えたのか分からなくなってしまう。そこで少しでもコントロールできるようにMirrorrrを使ってみよう。Google App Engineを使うので自分でもサーバを立てることが出来る。 MirrorrrはURLを指定して、コンテンツをミラーリングしてくれるサービスだ。Google App Engineを使うというのがミソで、アクセスがこない時には全く金額もかからず、一時的なアク

    Webサイトをミラーリングする·Mirrorrr MOONGIFT
  • Google App Engineを使って無料でサイトを立ち上げる方法 - EC studio 技術ブログ

    Googleが提供する、Google App Engineというサービスを知っていますか? Amazon EC2などと同じで、Googleが用意するクラウドサーバー環境で アプリケーション開発ができるというサービスです。 (レンタルサーバーのようなもの) その大きな特徴は、なんといっても月間500万PV相当まで"無料"ということです。 ※有料で制限を拡張することも可能 ※2011/09/07 注 Google App Engineの新料金体系が発表されました。 新料金体系では無料で使える枠が大幅に削減されています。 この記事の無料での使用制限に関する記述は、新料金体系では 正しくありませんのでご注意ください。 「App Engine は無料で始めることができます。最大 500 MB の永続性ストレージに加え、月間約 500 万ページ ビューに対応できる十分な CPU と帯域幅を、すべてのア

  • このcronサービスは凄すぎて紹介せずにはいられない - ある日のほしみつの(まわりの?)おしゃべり

    twitterのbot制作で困る点の一つに定期実行がある。 多くはcronって言うのを使って定期的に実行する。 けど、それが出来るレンタルサーバーやウェブサービスは珍しい。 あっても有料だったりして面倒だ。 で、 『GAE-Cron』のソース&サービス登録サイト公開 がすごい。 『Google App Engine(以下 GAE)』を使って自前のcronサービスが作れる。 botのcron管理が便利になりそう。 GAE自体は一定量の負荷まで無料で提供されているのでお試し程度の気持ちでも試せる。 リンク先では既に 『GAE-Cron Club - プロバイダ一覧』 としていくつかの公開サービスが出来ていた。 バナーがダジャレ効いてて良いね。 そして自前でGAEにデプロイする方法なんだけど一点詰まったところが。 どうやらデプロイするのにpythonが必須らしい。 readmeにはテストする時は

  • データストアの単体テストを書く手順 - うなの日記

    追記:2010-05-01 以下は1.3.0の頃のテスト手順です。最新のSDKではテストケースの書き方が変わっています。1.3.3でのテスト手順はこちらを参照。 いまさらですが、データストアの単体テストを書く手順のメモです。単体テストでは、 ローカルでGoogle App Engineのサーバーを起動することなしに、 データストアにアクセスするモジュールのテストを記述できます。 なお、公式なドキュメントはこちらにあるので、あわせて参照ください。 概要 必要なモジュールをプロジェクトに追加 Environmentクラスを作成 テストケースのsetUpでApiProxyの設定を行う 1.必要なモジュールをプロジェクトに追加 単体テストの作成に必要な以下のモジュールをプロジェクトに追加します。 appengine-api-stubs.jar appengine-local-runtime.jar

    データストアの単体テストを書く手順 - うなの日記
  • 1