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も併行して使う事にしました。



matplotlibの日本語表示

Macを使っています。
日本語の表示で苦労しました。例の白抜きの箱が表示されてしまう件です。
最初のトライは

    import os
    os.environ['VERSIONER_PYTHON_PREFER_32_BIT']='yes'
    #t = os.environ['VERSIONER_PYTHON_PREFER_32_BIT']
    import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    import numpy as np
    plt.plot([1,2,3,4])
    filename = 'myfig2.png'
    plt.savefig('media/some/charts/'+filename)

これで出力したファイルをDjangoで表示できました。
'VERSIONER_PYTHON_PREFER_32_BITの下りがないと64bitで動くようでimportエラーになります。

次のステップでタイトルやら軸のラベルを表示すると、文字が白抜きになります。


google groupで検索しました。ロシア語が白抜きになるというエントリで次のコードを見つけました。

import matplotlib
matplotlib.use('GTK')
from matplotlib.matlab import *
from matplotlib.font_manager import *
p = FontProperties()
font = {'fontname'   : 'Lucida',
        'color'      : 'r',
        'fontweight' : 'bold',
        'fontsize'   : 16}
plot([1,2,3])
xlabel(u'natê¿enie',font)
ylabel(u'napiêcie',font)
title(u'Wykres z polskimi literkami ±æê³ñ󶿼',font)
show()

ラベル毎にFontを指定しています。
matplotlib.use('GTK')をコメントアウトして、フォントをMacに搭載されているフォントに変更しました。

p = FontProperties()

#font = {'fontname'   : "serif", #dont work
#    font = {'fontname'   : 'sans-selif',   #dont work      
    font = {'fontname'   : 'Hiragino Sans GB',          
            'color'      : 'r',
            'fontweight' : 'bold',
            'fontsize'   : 12}
しかし、次でもOKでした。
    rcParams['font.family'] = 'Hiragino Sans GB'
これはプロセスの環境を変えているので軸毎にFontを指定しなくても良いようです。

さらにHOMEディレクトリに/.matplotlib/matplotlibrcファイルを作ればユーザーのdefaultにできます。
もっとも単純にコピーはできなくてterminalからsudoでコピーしないとだめ。
(この辺りがMacのすごいところでlinuxマシンになる)
さらにpythonのsite-packagesのmatplotlib/mpl-data/matplotlibrcの該当するエントリを編集すればOKでしょうが、ここはいじらないでおきました。