Google App Engine

Google App Engine の値上げについて

参考:開発者にショックなGoogle App Engineの値上げ App Engine フレームワークの学習コストを差し引いても、価格高騰で Google を見限る開発者が増えそうです。 これが特定企業にインフラを依存するリスクなのでしょう。 Amazon EC2 に移行したとしても、…

Go 言語で GoogleAppEngine が開発できるようになりました

開発環境 (SDK) は Linux と MacOSX のみですが、Google Go 言語で AppEngine を構築できるようになりました。 Python や Java の開発者が移行するメリットは少ないようですが、Google が Go を見捨てていなかったということが分かりました。 ダウンロード:…

ReferenceProperty で参照しているエンティティ群は「後方参照」で逆参照できる

後方参照を使えば、よりシンプルなプログラムを書くことができるようです。 次のような ReferenceProperty を用いたモデルが定義されているとします。 # # models.py # from google.appengine.ext import db class Site(db.Model): name = db.StringProperty…

グローバル変数は開放されます

アキノチューブ では、10分間隔で各カテゴリを巡回し、新しいエントリがアップロードされていないか確認する CronJob が動作しています。 ここで、更新したカテゴリのインデックス番号を保持するのにグローバル変数を使ってみたのですが・・・ # This is bad…

データストアはインデックスが構築されたクエリしか受け付けません

開発用サーバでは index.yaml で未定義のインデックスが使用されると自動的に定義を追加して対処しますが、本サーバでは未定義のインデックス・クエリが実行されるとエラーになります。 一方、インデックスはプロパティの組み合わせ数が多いほど、本サーバ上…

今から数時間前・数日前のエンティティをまとめて削除するクエリ

datetime モジュールの timedelta を有効活用します。 まず、次のようなモデルクラスの定義を仮定します。 # # models.py # from google.appengine.ext import db # データストア定義 class Entry(db.Model): published = db.DateTimeProperty() timedelta([…

GoogleAppEngine の Xcode プロジェクトを PyChecker でエラーチェックする

私の使っている MacOSX 10.6 はデフォルトで python2.6 を使用するため、GoogleAppEngine の python2.5 準拠のプロジェクトで問題なく動作させるために設定した項目をいくつか書きます。 PyChecker について Google Python スタイルガイド で以下のように記…

ImportError がなかなか解決できないときは、相互インポート状態を疑う

ImportError: cannot import name xxxxHandler がなかなか解決できなかったのですが、よく確認すると継承元クラスのモジュールと継承先クラスのモジュールが互いに import し合っていました。 # # module_a.py # import module_b # # module_b.py # import m…

少し RSS コンテンツを豊富にしてみました

サムネイル画像やキーワード等を追加しました。 RSS 用の HTML テンプレートとして、以下を作成しました。 ここではテンプレート値として article エンティティを利用しています。 <img src="/static/images/thumbnail/{{ article.site.thumbnail }}" alt="thumbnail" align="left" hspace="15"/> <h3>{{ article.site.name }}</h3> <p>更新日:{{ artic…</p>

JSONP にはコールバック用のパラメータが必要です

JSON では、異なるドメインのサーバからデータを取得することができないません。 また、現在の URL かそのサブドメインからしかデータを取得することができません。 従って、同じサーバであっても、/ranking から /json の JSON データを取得することはでき…

Xcode で Google App Engine 開発する場合の「ターゲット」設定

以前は Eclipse も使っていたのですが、どうも挙動が気に入らなくてプログラム開発は意地でも Xcode を使うようにしています。 さて、Google App Engine を Xcode で開発する際、基本的なことは変わりませんが、エラーチェックやテストケースの実行スクリプ…

クエリは複数の不等式フィルタをかけることができない

Google App Engine のデータストアを利用していると、次のようなフィルタに関するエラーに直面することがあります。 BadFilterError: BadFilterError: invalid filter: Only one property per query may have inequality filters (=, ).. これはあるクエリオ…

locale に依存しないプログラムにする

import locale locale.setlocale(locale.LC_ALL, 'ja_JP') このように Google App Engine で locale の設定を試みると、 locale.Error('locale emulation only supports "C" locale') の例外を目にします。Google App Engine では locale による日本時間の取…

Google App Engine で Twitter に投稿する

認証とか難しいことなしに、データベースが更新された旨などを Twitter に投稿するための方法です。 はじめに、Twitter の開発者ページで Web サイトを登録してください。 今回、使用するのは Consumer key, Consumer secret と My Access Token ページにあ…

テストランナーのサンプル

Google App Engine で Django を利用していない場合のテストについて。 http://appengine-cookbook.appspot.com/recipe/app-engine-test-runner/ urlfetch の結果を評価するだけのようです。 データストアの入出力をテストしたいのですが、何ともうまく行か…

Google App Engine のチートシート

以下よりダウンロードできます。 ログイン - Google アカウント英語版ですが、ネットのリファレンスページを漁るより高速に調べられます。

BaseRequestHandler はいかがでしょう?

テンプレートエンジンで扱う HTML ファイル群は、一つのディレクトリ内にまとめて格納しておきたい。 その場合、webapp.RequestHandler のサブクラスとして BaseRequestHandler が提案されています。 以下では、templates ディレクトリを作成して HTML ファ…

ListProperty はただの Property にあらず

ListProperty クエリの比較演算子は、他の Property クエリとは異なる振る舞いを示します。 クエリでは、リスト プロパティと値を比較してリスト メンバーを照合します。たとえば、list_property = value は値がリスト内に存在するかどうかを調べ、list_prop…

開発サーバにデータをリストア(復元)する

Web サーバのデータをローカル開発サーバで利用したい場合の対処 ここの説明は、基本的に Loader クラスを自前で用意しなくて済む方法です。 まず、remote_api へアクセスできるように app.yaml の handlers に以下を追加しておきます。 # # app.yaml # hand…

null オブジェクトは直接、データストアに入らない

Python では Null という便利なクラスが提唱されています。 # # null.py # class Null(object): """ Null objects always and reliably "do nothing." """ # optional optimization: ensure only one instance per subclass # (essentially just to save mem…

【2ch】キーワードあんてな ( ゚д゚ v) のレポート

【2ch】キーワードあんてな ( ゚д゚ v)の AppEngine ダッシュボードです。 そろそろ古いエントリーとキーワードを削除する準備をしておこう。 ちなみにアップデートは更新頻度から Top/High/Middle/Low の 4 段階に分けて Cron Jobs を設定してあります。 こう…

サイトマップを作ろう

Google ウェブマスターセントラルから引用すれば、 サイトマップは、検出が難しいサイトのページの情報を Google に提供する手段です。 (中略) サイトマップを作成して送信すると、Google の通常のクロール処理(検索エンジン)では検出できない可能性のあ…

データストアの list プロパティは Dashboard で編集できない?

ListProperty や StringListProperty といった list 型のデータストア・モデル値は、SDK Console であれば以下のように編集することが可能です。 しかし、Dashboard では以下のように、直接 値を編集することはできません。 やはり、bulk uploader の利用を…

DateTimeProperty の取扱い

データストアのモデル値型として DateTimeProperty(日付と時刻プロパティ)があります。当方ホームページ(Test Web Frames)では、トップページの更新情報で DateTimeProperty の値を表示させています。 このモデルクラスは以下のように定義してあります。 c…

ホームページ(Test Web Frames)のページ構成

まだ初期段階ですが、ホームページのページ構成は以下のようになっています。 トップページ 検索(開発中) 一覧 プレビューページ 各URLへのアクセスに関しては、GAE の app.yaml 設定ファイルで最初の割り当て先を決定します。 ここでは以下のように記述し…