2011年1月28日金曜日

GAEでソーシャル・スタイル、web2pyで開発

アプリケーションをGAEで稼働させました。
URLは
https://masel-style.appspot.com

日本語になり切らない部分(中国語が残っている)もありますが、試しに訪問してみてください。
実はDjangoのregistrationが私にとっては、ひどくややこしくて苦労したのですが、web2pyではいとも簡単にできました。パスワード忘れや会員登録のメールアドレスの実在確認とか結構に面倒くさかったのが、すんなりでした。

アプリケーションはソーシャル・スタイルの学習をWebでやってしまおうという実験室です。
まだ無料ですから、今のうちに。

スタイル調査のサンプルの出力です。

web2py日本語

問題:login, password, emailなどのweb2pyで表示する基本的なフレーズを日本語にしたい。

内容:
基本的にTに渡された文字列は翻訳の対象になって、
各国語の利用ができるようにLanguageファイルが用意されている。
開発コンソールの「language」に各国語がリストされている。残念ながら日本語、ja.pyがない。ja.pyファイルはオリジナル文字列(Tで囲まれた文字列)と翻訳が対になったファイルである。
解決策:
そこでファイルja.pyを作成して、Languagesの下にある「update all languages」をクリックすれば、すべてのTで囲まれた文字列が出てくる想定であった。


想定違いの問題:
、Loginとかregisterのオリジナル文字列がこのファイルに現れない。どういう事の次第か、開発したアプリケーションのTの文字列が出現する。
たとえばコントローラーのdefault/indexで最後に、
return dict(message=T('ソーシャル・スタイル・クラブにようこそ'))
とやるとTの括弧内が言語ファイルに出てくる。ところがweb2pyのパッケージのAuthenticationにある筈のLogin,registerが出ないのである。
解決策:
中国語の言語ファイルを見るとloginなどが中国語になっている。
そこでこのファイルをja.pyに複写して、これを日本語に変換してOKになりました。

この投稿は
http://www.vimeo.com/7520812
が参考になりました。

このビデオのなかのdb.pyの次の2行も気になります。

2011年1月25日火曜日

Deploy 再び

開発中のシステムはソーシャルスタイルの診断システムをスタイルの学習システムです。
スタイル診断までをアカウントの登録、ログイン、質問紙の回答とかの一通りのアプリケーションを開発して、web2pyの開発環境で試験、コマンドライン、python2.5 web2py.pyでサーバーをスタートして滞りなく来ました。
そこでGAEにアップロード、deployしたのですが、internal errorの頻発でticketも閲覧できない。Googleのコンソールからデータベースのチケットを見ても何のことやら皆目分からない。
そこで何処かに書いてあったのはindex.yamlのこと。このファイルはこのアプリケーションが実行したデータベースアクセスを記録して、deployと同時にGAEのデータベースにインデックスを作成するということ。
探したができていない。

inde.yamlはdev_appserverを走らせないと作らない。dev_appserverはGAEの実行環境のサンドボックス(sandbox)であり、データベースをファイルシステムでシミュレートする。

ようするにweb2pyでサーバーを走らせたときはsqliteでデータベースを走らせる。dev_appserverはGAEのデータストレージを仮装してくれるというわけ。

dev_appserverはデバグ用のコンソールがあって
localhost:8080/_ah_adminで開きました。

dev_appserverで、実行してインデックスを作ったら

appcfg.py update_indexes web2py

でインデックスだけアップロードしてくれます。

役にたったURLは
開発については
http://code.google.com/intl/ja/appengine/docs/python/tools/devserver.html

アップロードと管理については
http://code.google.com/intl/ja/appengine/docs/python/tools/uploadinganapp.html
です。


結論
web2py.pyで開発して試験しても、dev_appserverで一通りのデータベースアクセスをしないとGAEでは動かないということ。

2011年1月2日日曜日

Google App Engine web2py アプリケーション

web2pyはアプリケーションをGoogle App Engine で動かせるように仕掛けが用意されているがなかなかうまく行かなかったのだが、Version 1.91.5 (2010-12-28 22:12:09)で簡単に動かせたのでログしておきます。私はマックで実行しましたが、Windowsもソースで実行すれば問題ないのではと推測します。


dev_appengine.pyやappcfg.pyを直接にいじる必要がなくなりました。


まず、環境を作ります。
http://wiki.web2py.com/Deploying_web2py_on_Google_App_Engine_GAE_からの引用です。

  1. http://code.google.com/appengine/downloads.htmlからpythonのSDK(Google App Engine SDK for Python)をダウンロードして/projectに解凍します。
  2. http://www.web2py.com/examples/static/web2py_src.zipからweb2pyのソース版をダウンロードして、/web2py に解凍します。
  3. ディレクトリは /project/google_engine と /project/web2py になります。web2pyの下にはpythonのソースプログラムがずらりと並びます。このなかにweb2py.pyがあります(windows版やMac版とはここが違います)。
  4. ディレクトリをweb2pyに移動して python2.5 web2py.py します。わたしはマックを使っているので、こんな具合になりました。


ローカルなサーバーが起動して、次の画面が表示されますから、Choose Passwordに適当な管理者パスワードを設定します。このパスワードはサーバーが起動するたびに要求されます。

start serverボタンをクリックするとブラウザーにweb2pyのローカルなホームページが表示されます。
(default.py をすこしいじったのでメッセージはよけいな文字が出ています。)
Readmeの4行目click here for the administrative interfaceをクリックします。
先ほどの管理者パスワードの要求に応えると管理者画面が表示されます。
この画面でアプリケーションの開発をします。
画面の左下にDeploy on Google App Engineがあります。このdeployボタンをクリックします。
appcfg.pyのパスとdeployするアプリケーションを設定して、あとはGAE Emailと GAE Passwordを入力します。
このメールアドレスとパスワードをなんど入れてもinvalid mail addressになっていたのですが、なんとこの二つのフィールドにメールアドレスを入れると正しくアップロードできます。これがこのブログの味噌です。今のバージョンでたまたまなのでいずれ正しいパスワードが必要になるのかもしれません。
web2pyのユーザーグループで発見したものです。Deploying application on GAE using the deploy buttonでユーザーグループを検索してください。

それからapp.yamlを更新するのを忘れないようにしてください。
データベースがらみの試験は別の機会に。

2010年9月16日木曜日

Web2py, gae

web2py(http://www.web2py.com/)は興味のあるWebフレームワークです。
pythonで書かれています。
これをGoogle App Engineで動かそうと苦労した事があります。
macからアップフロードしても動かない。Invalid Requestになるのです。
最近のドキュメントで知らされた事があります。
1.Macのバイナリーコードでなく、ソースコードの版をインストールすること。
2.gaeのビッグテーブルで動かすにはローカルマシンで一通りのデータベース操作をしてインデックスを作っておくこと。

この2点です。
これは試してみる価値がありそうなので、すこし追跡する事にします。
中途半端で済みません。
(上の金魚のバナーはマウスを置くとそこに金魚が集まります。面白い)

2010年9月13日月曜日

さくらインターネットVPS、Plone4

さくらインターネットが新しいサービス、VPSをスタートさせた。
早速にエントリして使わせていただきました。
VPSコントロールパネルがメールで案内されたのでここにログイン。
最初のページに仮想サーバーの起動、停止、再起動があるのでこれで起動をします。
このページのスクリーンショットを見た方が分かりやすい。

あとは画面にあるリモートコンソールから作業できるのでしょうが、
SSHとFTPを確認したいので、割当のあったIPアドレスでMacのターミナルからrootユーザーをつかって、SSHでログイン、Transmitも同様にSFTPでログインできました。

これでplone.orgのサイトを見たらwgetでurlを指定すれば良さそうなので、早速にトライした。この段階ではシステムは空っぽなので何でも気兼ねなくできます。

port8080でアクセスするとWelcomeされて、Ploneサイトの初期化がいとも簡単にできました。admin管理者のパスワードもinstanceのフォルダーにあるのでそれでログインしました。

Ploneは様々なaddonがあります。これはbuildoutでできる筈なのですが、まだ成功していません。

2010年9月9日木曜日

Google Chartの日本語表示

続いてGoogle Chartです。
簡単な紹介をすると、Google chartはGET、POSTでリクエストを送るとグラフがダウンロードされる便利なツール。

ある調査のレポートでは便利に使わせていただきました。
同梱されているpygooglechart.pyを使って簡単にグラフをつくれます。

問題は私の場合はグラフに表示するデータのサイズが大きすぎて、GETでは送れないので、POSTに変更です。
オリジナルのdownload(self, file_name)、コードを修正して

    def download_post(self, file_name):
        url = self.BASE_URL[:-1]
        data = self.get_url_post()
        opener = urllib2.urlopen(url,data)
        if opener.headers['content-type'] != 'image/png':
            raise BadContentTypeException('Server responded with a ' \
                'content-type of %s' % opener.headers['content-type'])
        open(file_name, 'wb').write(opener.read())
とパッチしました。

次が日本語の表示です。
これもGoogle Groupで検索。

label,legendなど文字の表示を探し出して、utf-8エンコードに変更しました。
たとえば、チャートオブジェクトのlegendは
#            self.legend = [urllib.quote(a) for a in legend] 
            self.legend = [urllib.quote(a.encode("utf-8")) for a in legend]

フォントの色やサイズももちろんカストマイズ可能です。

すこし気になる事がありました。
  1. ビジネスグラフとしては十分な機能でしたが、非常にレスポンスが遅い。かなり混雑しているのでしょう。しかしその対策は用意されているようで、URLはいくつか用意されているようです。そちらを使えばもっと早くなるかも。
  2. これは私だけの経験かもしれませんが、linechart(線グラフ)で折れ線の数が少ないと前にリクエストされたイメージが帰ってくることがあります。この問題、どなたかご存知でしたら教えてください。
そんなこともあって、Google Chartの換わりにMatplotlibを、そして当然numpyも併行して使う事にしました。