2011年12月8日木曜日

GAEの課金額の変更について

課金額の変更ですが、あんまりいっぱいGAEを使っていなかったので、だいぶ乗り遅れてました。

今更情報収集したのですが、
を整理すると、こんな感じですかね。
  • CPU利用時間ではなくインスタンス時間で課金。
    Front Endのインスタンスは、のべ28時間分OK。
    つまり1インスタンスだけなら、24時間無料枠でOK!
    BackEndは別に9時間分の無料枠がある。
  • 課金モードにすると、最低でも月9$かかる
  • データストアへのアクセスは高価。
    特に書込でインデックスがいっぱいあるとキツイ。
    エンティティのサイズはあんまり関係ないらしい。
  • 全体的に無料枠が激減。
    一人や家族くらいまでなら大丈夫だけど、一般に公開するとなると普通は課金が必要

無料で広告費を稼ごうかなぁとかおもっていた人(←私のことです)的には、残念な話ですね。

でもまあ、元々が安すぎたと思うので、仕方がないかなぁと思います。
特に、データストアへのアクセスは、インフラに負荷をかけていたと思うのでしかたないかなぁと。



考えられる対策としては、

データストアのチューニング:
  • Memcache をばりばり使う
  • なるべく大きいエンティティを使う (普通のDBみたいに正規化とかしない。親子は一つにまとめる)
  • インデックスは押さえる。なるべくキーを良く考えて設計し、そこに情報を詰め込む。
  • マスタ類は、コードにべた書きの辞書にする

インスタンス時間のチューニング:
  • Python 2.7 で スレッドセーフにして、1つのインスタンスで捌けるトランザクションを増やす
  • BackEndを有効活用する
  • 「Max Idle Instance」は「1(最小)」にする
  • 「Min Pending Latency」は「15s(最大)」にする

他にも良い方法を見つけたら思いついたら上に追記していきます。

Mercurialって日本語大丈夫になったのですね!

Sphinxで書いたドキュメントをバージョン管理していなかった理由は、使いたいと思ったツール(Mercurial)が、日本語のファイル・フォルダ名をうまく扱えなかったことが一番の理由でした。

(バザールは、日本語使えるようですが、シェルエクステンションがいまいちっていう評判を聞くので、おっさん的にきついので・・・)

 ですが、現在の最新バージョンは、日本語でも大丈夫みたいですね。
試しに入れてみた(tortoisehg-2.2.1-hg-2.0.1-x86.msi)のですが、以前はうまく認識できなかったファイルやフォルダも、ちゃんと認識されてますね。

よーし。これなら本格的に使えるぞ!
日本語のパスはダメとか、Windows上で仕事を進めてるとありえなかったんですよ。

本格的にチュートリアル(JapaneseTutorial)とかやってみることにします!


Mercurialを知らない人はこちら→Wikipedia


追記:

あれ? これって、win32mbcsのエクステンションがデフォルトで動くようになっているだけなんじゃ・・・

2011年12月7日水曜日

IE9 と localhost

GAE SDK 1.6.0 がリリースされ、Python2.7がちゃんと使えるようになったらしいので、環境を再構築してみました。

以下、ポイント
  • Python2.5をアンインストールして、Python2.7のみの環境にしてからGAE SDKを入れたら、警告らしきものが出た。 (でも動くらいしい)
  • 私はWindows7の64bit版を使っているので、Python 2.7 も64bit版をインストール。しかし、PILモジュールは、64bit版に対応していないらしい?(インストールしようとするとエラーになる・・・)
  • Eclipseは、Pleades3.7(32bit)の一番軽いやつに、pydevを追加。
  • Windows7(64bit) + Python 2.7(64bit) + Pleades3.7(32bit) 上で、webapp2のHello worldは普通に動いた
  • でもSDKのバージョンのチェックの際に404エラーになっている・・・なんでか不明。
  • IE9だと、localhostを開くときもsmartscanが動いてしまうらしい。そのせいで、Eclipseでgae sdkをテスト実行しているときに、IE9でなかなか開けないという現象が発生した。
    GAE SDKからIE9を起動すると、IEの設定を一部オフにするらしく、普通に開ける。
    1時間近く無駄にして、大変な憤りを感じてしまったので、Chromeをインストールした。
IE9でも、互換モードにしたりプライベートモードにすれば、localhostを普通に開けるようになるのかも知れないのですが・・・、いちいち調べるのが嫌になったので試してません。

Eclipseだけ64bit対応じゃないので、いつか64bitにしたい気もする。
あとは、MySQLのインストールか・・・。できれば今晩チャレンジしたいな。

Sphinxの同期

Sphinx、良いですね。


前にもちょっと書きましたが、テンプレートを自分用に修正して、
htmlからソースのrstファイルをテキストエディタで開くボタンと
htmlを再生成するバッチを起動するボタンを追加してみました。

おかげで、個人用wikiみたいに使えていて良い感じです。

 同じ職場のチーム内で共有したほうが良い資料は、
共有フォルダで公開してます。

rstの同期は、
分散バージョン管理とかでやるのが良いのでしょうが、
mercurialを 勉強するのが 面倒でやれてません。

なので、昔ながらのbatファイル&タスクスケジューラで同期をとっているのですが、
先日、ネットワークにつながっていない状態で不具合を起こしてしまい、
ローカルのrstファイルが削除されてしまいました。

1.共有フォルダにカレントを移す
2.ファイルを全部削除
3.XCOPY

ネットワークにつながっていなかったので、1が失敗し、
ローカルのファイルを削除してしまったわけです。

まぁ、元々の書き方に問題があったわけだし、
分散バージョン管理しろ、ってことなのでしょうが、
今更仕組みを再構築するのもだるいので、
robocopyを使って同期取ることにしました。
これだとファイルの削除も一緒にやってくれるので、安全です。

XPは、robocopyが無かったので、以下のサイトからリソースキットを落としてインストールしました。

WindowsServer2003の英語版リソースキット(XPの日本語でも動くらいしい)


追記:

本件、一生懸命作っていたファイルが削除されてしまった怒りから書いてみたのですが、
どうみても、自分が悪いだけですね。

2011年11月25日金曜日

Python:半角で文字数を数える

なんとなく必要になったので、いろいろ調べて以下に落ち着きました。



def hankaku_count(text, wide_type_letters='WFA'):
    u"""半角で何文字かを数えます

    あいまいな文字を1文字で数える時は、
    wide_type_letters='WF'でお願いします。
    (デフォルトは2文字です)

    Example:
    
    >>> hankaku_count(u'テストtest')
    10
    """
    import unicodedata
    return (len(text) + 
            sum(1 for char in text 
                if ord(char) >= 256 and 
                   unicodedata.east_asian_width(char)
                   in wide_type_letters
               )
           )

# EOF