gae アプリ 開発メモ

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

blogの引越しを考え中

なんつーか、使いづらい。 Hatena blog。 ソースのカラー表示をしたい でも、はてなダイアリーは好みじゃない だけで選んだんだけど、不満が募ってきた。http://toc-gae-memo.blogspot.jp/ に引越しを画策中。 シンプルで自由度も高いのが決め手のポイントに…

codecsはいろいろ変換してくれる

標準エンコーディングを見ると、各種文字コードの他に quopri_codec (MIME quoted printable 形式) base64_codec (MIME base64) zlib_codec (gzip, zip 圧縮) bz2_codec (bz2 圧縮) hex_codec (バイトあたり 2 桁の 16 進数の表現) なんかも対応してる。超お…

絵文字ありのテキストファイルを処理する

ケータイメールのデータを処理するのに便利かな。ポイントは codecs の encoding に 'shift_jis' ではなく 'mbcs' を指定する点。 #!/usr/bin/env python # -*- coding: utf-8 -*- import codecs def main(): # fin = codecs.open('sample.txt', 'r', 'shift…

python 2.7の日本語ヘルプを構築する

ウチの環境(Windows 7 SP1 x64)では、Pythonドキュメント日本語翻訳プロジェクトで配布されている htmlhelp(.chm) はエラーが表示されて正常に動作しない。 なので、ドキュメントソースから構築してみた。 以下、手順。 準備 sphinxが必要。 Mercurialが必要…

日本語はいろいろ大変そう

ウチの環境(windows 7 x64 SP1)では python 2.7 の htmlhelp はエラーが出て表示ができない。 エラーの原因は、ヘルプの html が jquery.js を使うように書かれているのに、jquery.js を読み込んでないため。 他の方はエラーが出てないんだろうか? そもそも…

ダイアモンド継承とsuper()の続きの続き

ずっと、どこかで super() は継承元への型変換みたいな仕組みを提供してる と思い込んでた。 これが大きな間違いのはじまり。道理で、super()の文章を何度読んでも釈然としないわけだ。 動的な実行環境下での複数の継承の共同をサポートすることです。 この…

ダイアモンド継承とsuper()の続き

ダイアモンド継承とsuper()の続き super()の理解がまだ足りない 先程、【super()で C.talk() が呼び出されるように指定してみる】で class D(B, C): def talk(self): super(C, self).talk() # C を明示する def main(): d = D() d.talk() の結果は This is A…

ダイアモンド継承とsuper()

python 2.7 の話。 まずはダイアモンド継承を書く class A(object): def talk(self): print 'This is A.' class B(A): def talk(self): print 'This is B' class C(A): pass class D(B, C): pass def main(): d = D() d.talk() if __name__ == '__main__': m…

printでstderrに出力する

今までしらなかったので。 import sys print >> sys.stderr, 'abc'

プロパティの作り方

下の書き方、どちらでもOK。 #!/usr/bin/env python # -*- coding: utf-8 -*- class A(object): def __init__(self): self._x = 0 def get_val(self): return self._x def set_val(self, value): self._x = value value = property(get_val, set_val) class …

デコレータ

なんの気なしに @classmethod とか @staticmethod とか使っていたけど、なかなかの仕組みらしい。 デコレータとは Pythonの用語集(decorator)より。 (デコレータ) 関数を返す関数。 通常、 @wrapper という文法によって関数を変換するのに利用されます。 デ…

ファイルの読み込みと for~in

当たり前といえば、当たり前なんだけど。ファイルの読み込みで for~in を途中で break して、また同じファイルに for~in すると続きを読むことができる。 with open(filename, 'r') as source: for line in source: out.write(line) # 1 行目を出力 break;…

Pythonで継承元のメソッドを呼び出すには

伝統的な書き方 どんなメソッドを読んでいるのかが明示的。 class C(B): def method(self, arg): B.method(self, arg) super() を使用する なんか便利らしい。 要勉強。 class C(B): def method(self, arg): super(C, self).method(arg) 一時的なクラスオブ…

Python は関数を呼ぶコストがハンパない

テキストファイルを1バイトずつ走査するテストコードを書いてみた。 テストするテキストファイルのサイズは 6,811,956 バイト。まずは元のソース。 def main(): buffer = '' filei = open('sample.txt', 'r') while True: read_buffer = filei.read(0x2000) …

Python の日本語ドキュメントをchromeで検索

pythonしたりjavascriptしたりで、どうにも言語を覚えきれない。http://code.google.com/p/python-doc-ja/downloads/list から日本語のヘルプ(.chm)はダウンロードできるけど、javascriptが無効になってるみたいでスクリプトエラーが出てまともに機能しない…

シンボル系フォントを表示する方法

こんなことでハマってしまったので、メモっておく。 シンボル系フォントの一部を表示できない Webdings や Wingdings などのシンボル系フォントで 0x21~0xff を表示する html を書いてみたら。 0x80~0xa0, 0xad が表示されない。 解決策 0xf021~0xf0ffを…

Inkscapeでepsを読む

Inkscapeネタついでに。 以下、Windows な話。ghostscriptを利用すると eps ファイルの読み込む extension が有効になります。 準備 ghostscript をインストールする。(2012/03/19 時点で 9.05)以下、C:\Program Files (x86)\gs\gs9.05にインストールしたこ…

Inkscapeが0xc0000005エラーを出して起動しない

昨夜、突然Inkscapeが起動しなくなって慌てた。 google先生に『inkscape 0xc0000005』を尋ねると、こうした症状は多いみたい。私も個人データを削除したり、インストールし直したり…。ちなみに私の環境は Windows 7 Pro x64 Inkscape 0.48.2-1 win32 です。…

jqMobiがversion1.0をリリースしました

2012/03/11 に jq.Mobi の version1.0 リリースされました。で、つい先程パッチがあたりましたね。 パッチの内容はこちら。

コードの構文解析ツールを作ってみた

この世にコードの構文解析ツールなんぞたくさんあるけど、javascriptやら正規表現やらの勉強がてら作ってみた。 ソースコードをいくつかの正規表現に掛けて、 該当する部分 該当しない部分 で振り分けしていく方法をとってみた。 これで意外とうまくいっちゃ…

jqMobiがいいかも

今さら感満載だけど。コアだけ見れば jQuery を HTML5専用に限定 機能を限定 することでコンパクト化、高速化したライブラリ。UIのコンポーネントはモバイル専用にできてるので、Desktop用のUIを作るには不向き。このjqMobiのコアだけ使って、業務アプリ用の…

gaeをただのwebサーバとして使うには

gae

gaeをscriptなしで使うためのapp.yaml。 UIのデザイン確認には便利。 application: sample-application version: 1 runtime: python api_version: 1 handlers: - url: / static_files: index.html upload: index.html - url: /css static_dir: css - url: /s…

htmlのnameトークンに使える文字

出典:HTMLの基本データ形式 IDトークンとNAMEトークンは、アルファベット([A-Za-z])で開始し、任意の数のアルファベット、数字、([0-9])、ハイフン(-)、アンダースコア(_)、コロン、(:)、ピリオド(.)のみで記述する必要がある。

キーの範囲検索

Model: Abc の中から key_name 'abc-key:00000'~'abc-key:99999'を探したい時 key_first = db.Key.from_path('Abc', 'abc-key:') key_last = db.Key.from_path('Abc', 'abc-key;') # ASCIIコードで ':' の次 ';' fields = Abc.all().filter('__key__ >', ke…

db.Expandoの動的プロパティは必ずindexed=True

setattr() で indexed = False なプロパティを突っ込めばイケるか? なんて期待は簡単に裏切られた。 from google.appengine.ext import db class Person(db.Expando): pass person = Person() name_value = db.StringProperty(required = True, indexed = F…

sordted()は安定ソート

安定ソートか確認 import random import operator def test_list_sort(): class Person(object): def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return repr((self.name, self.age)) persons = [] for n in range(10…

memcacheの速度計測

ボチボチのデータの読み書き memcacheに対して、1つのkeyに辞書をぶら下げたときの get/set の速度を計測。 辞書は 1000 件。 サイズは 3.7KBらしい。(Memcache Viewer がそう言ってるので) #!/usr/bin/env python # -*- coding: utf-8 -*- from google.appe…

HTML用に文字をescapeする

ネット上には こんな感じで載ってる。 from xml.sax import saxutils # 文字列をHTML(XML)用にエスケープする escaped_string = saxutils.escape(string) # HTML(XML)用にエスケープされた文字列を元に戻す string = saxutils.unescape(escaped_string) '&',…

モジュールのコードはいつ実行される?

正規表現のコードを書いていて、正規表現のコンパイルっていつすべき?と思ったのでエントリー。テストコード こんなモジュールを書いてみる。 #!/usr/bin/env python # -*- coding: utf-8 -*- # file: mylib print 'global.' class A(object): print 'in cl…

google.appengine.runtime.apiproxy_errorsの例外一覧

gae

google.appengine.runtime.apiproxy_errors は gae の API 全体で発生する例外クラス。 クラス名 説明 RPCFailedError アプリケーションサーバーへのRPCが失敗した CallNotFoundError 要求されたメソッドが見つからない ArgumentError 引数の構文解析でエラ…