gae アプリ 開発メモ

Google App Engine アプリの開発メモ / 言語: python, javascript / ビギナー

DataStoreの操作で発生する例外一覧

『DataStoreを操作すると、エラーが発生することはよくあること』というのは、いろんなところに書いてある。 発生する例外は、Google App Engine : 例外だけじゃないみたい。 と言っても、まだ1つしか見つかってないけど。 パッケージ クラス名 説明 google…

DataStoreのorder()のあり/なしで速度を比べてみた

gae

sortedとDataStoreのorder()の速度を比べてみたでは、order()しない読み取り速度を計測していなかった。 そんな調査結果で開発方針を判断しちゃマズいかな、と思い再度計測。ソース #!/usr/bin/env python # -*- coding: utf-8 -*- from google.appengine.ex…

map()

map(function, list, ...)の説明は以下の通り。 function を list の全ての要素に適用し、返された 値からなるリストを返します。 追加の list 引数を与えた場合、 function はそれらを引数として取らなければならず、関数は そのリストの全ての要素について…

isinstanceのtype一覧

isinstance() が True になる条件を列挙する。 value = 1 isinstance(value, int) value = 1L isinstance(value, long) value = 1.0 isinstance(value, float) value = True isinstance(value, bool) isinstance(value, int) value = 'abc' isinstance(value…

memcacheでCriticalSectionを書いてみた

gaeアプリケーションでいくつものリクエストを受けた時、相互に排他制御できる仕組みが欲しい。 memcache.incr(), decr()はアトミック操作できる。 ということで、こいつを使って CriticalSection を書いてみた。 from google.appengine.api import memcache…

sortedとDataStoreのorder()の速度を比べてみた

sorted()とDataStoreのorder()にどれくらい速度の違いがあるのか、ふと気になった。 で、計測。ソース #!/usr/bin/env python # -*- coding: utf-8 -*- from google.appengine.ext import webapp from google.appengine.ext import db from google.appengine…

辞書データをソートする

persons = { 'key1': { 'name': 'Taro', 'age': 16, }, 'key2': { 'name': 'Jiro', 'age': 14, }, 'key3': { 'name': 'Hanako', 'age': 18, }, 'key4': { 'name': 'Daddy', 'age': 40, }, 'key5': { 'name': 'Mammy', 'age': 38, }, } sorted_list = sorted(…

リスト表記 その2

辞書から条件にあう要素のみリストに抽出 dict = { 'abc': 'item1', 'def': 'item2', } list = [{key: value} for key, value in dict.iteritems() if value == 'item2'] print list # 結果 [{'def': 'item2'}]

リスト表記

どれもリストを生成する方法。 集合を1つ1つ処理するだけなら for 文が適切。 結果としてリストが欲しいときは便利。すべての値を加工したものをリストで返す result = [func(x) for x in list] 条件にあった値を部分リストとして取得する result = [x for…

リスト

基本 list = [0, 1, 2, 3] n番目の要素の参照 value = list[n] 部分リストの取得 # [first, last)の部分リストを取得する values = list[first:last] 追加 list = [] list.append(0) list1 += list2 更新 # n 番目の要素を更新する list[n] = value 削除 # n…

ジェネレータ式

ジェネレータとは for 文を使って1つ1つ値を返すもの。 for value in generator: foo(value) よく使う range() はジェネレータの一つ。 マジメにジェネレータを書くのはまた後述。 # 関係ないけど、「後述」って「こうじゅつ」って読むんだ。初めて知った……

辞書の使い方

備忘録。 ココが元ネタ。辞書オブジェクト dict = {key: value} 辞書オブジェクトから値を取得する # この書き方は key がないと KeyError 例外を送出する value = dict[key] # こっちは key がなければ default を返す value = dict.get(key, default = Non…

memcacheの用途(2) DataStoreのキーに対応するランダムな文字列を管理する

DataStoreのキーは文字列化できる。 けど、base64でデコードするとエンティティ名やら親子関係やらが簡単にわかっちゃうから、できるだけ外部に公開したくない。そこで 『DataStoreのキーに対応する'ランダムな文字列'』 を生成して、外部にはこれを公開する…

memcacheの用途(1) とあるQuery結果を保存する

王道な書き方。 Google App EngineのMemcache の使用方法より。 def get_data(): data = memcache.get("key") if data is not None: return data else: data = self.query_for_data() memcache.add("key", data, 60) return data

memcacheの概要

memcacheはメモリ上で管理される key-value 型のデータ管理システム。概要 キー文字列:値を管理できる。あくまでキャッシュなので、いつデータが失われるかわからないモノとして考える。 有効期限(秒)を指定すると、その時間後にはデータが失われる。値には…