2011年12月10日土曜日

開発進捗(12/10)

Pytho2.5のままだと将来的にきつそうなので、Python 2.7で頑張ることにしました。
(OrderdDictも欲しかったし)

Python2.5のときは、フルスクラッチで フレームワークを作ってました。今回はまた1から作り直しますが、前回とは違って、なるべくwebapp2を利用することにします。
あんまり開発に時間をとれないんだから、些細なことには拘らずに、手早く作ることをめざします。

今のところwebapp2で気にくわないのは、routerのところと、そこから先のハンドラの部分なので、そこをいじればいけるかなと。

htmlのレンダは、昔は日本語のドキュメントがあるフレームワークがみあたらなくてきつかったので、自作してました。でも今はjinja2の日本語のドキュメントあるので、jinja2で良いかな。Sphinxでもjinja2が標準ですしね。
本当は、前の自作のと比べるとimport が重くなりそうなので、jinja2を使うのはちょっと嫌です。でも、動的な遅延インポート+ハンドラのキャッシュで、レンダリングには ほとんどパフォーマンスは要求されないはずなので、手を抜くことにしました。

環境の再構築はだいたい完了。
当面の目標は検索画面の作成ですね。

タスク1:検索先のマスタの作成
  1. Mechanizeで とりこみたいデータを取り込むようにする
    →例外的なところを除けば取り込めるようになった。例外部分は後回しにしよう
  2. 取り込んだデータをもとに、辞書を定義するpythonスクリプトを出力するモジュールを作る
    →これから着手
タスク2: 検索用のフォームの作成

そういや、webapp2 についての記事が微妙に人気みたいですね。
googleの検索でひっかかりやすいので、一番ページビューがあります。
webapp2については、googleの公式には日本語のドキュメントがないので、困っている人もおおいのかな?
でも英語わからなくても、Python語がわかるなら、webapp2は頑張れば使えますよ!

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の日本語でも動くらいしい)


追記:

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