buildoutの練習も兼ねてflask-gae-templateをpython2.7に対応させてみている

buildoutを使えるようになりたいとflask-gae-templateをpython2.7に対応させてみている。

これで、まぁ動くことは動くんだけど色々とwarningが出る。

特に

WARNING  2011-12-02 11:23:39,704 py_zipimport.py:139] 
Can't open zipfile /opt/local/Library/Frameworks/Python.framework/Versions/2.7/
lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info: IOError: [Errno 13] 
file not accessible: '/opt/local/Library/Frameworks/Python.framework/Versions/2.7/
lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info'

は、なんで出るんだろうか?

GAEでpython2.7を使うためのメモ

app.yamlでpython27を指定して、WSGIハンドラを直接呼び出すようにする。

公式のドキュメントも読んでおくとよい

ProductName プログラミング Google App Engine
Dan Sanderson
オライリージャパン / 3570円 ( 2011-01-24 )


Probable cause: too many IN/!= filters in query

GAE/Pythonで。

too many subqueries (max: 30, got 81)

ってことなので、INフィルターには最大30要素までしか入れられない。

リストを30づつに分割して3回クエリを投げて集めるようにしたけど、自動でやってくんないかな。

ProductName プログラミング Google App Engine
Dan Sanderson
オライリージャパン / 3570円 ( 2011-01-24 )


GAE / PythonでURL fetchしたりJSON parseする

JSONのほうはPythonのバージョンを2.6にあげればいいらしいんだけど2.5を使っているのでsimplejsonをGAEプロジェクトの下に配置して

import simplejson as json

ってやる。

URL fetchのほうはGAEで用意されているのでそれを使う

from google.appengine.api import urlfetch

これでjsonを返すweb apiにアクセスしてparseできるので、xooqで同じイベントに登録しているユーザーを探せるようにしておいた。

GAE楽しい。

ProductName プログラミング Google App Engine
Dan Sanderson
オライリージャパン / 3570円 ( 2011-01-24 )


本譲ります的なサイトをGAE+Flaskで作ってみた

昨日作ったものだけど、成果発表をしていないのでこのエントリでしてみたいと思う。

こんな感じのサイトで、認証はTwitterのOAuth、本の管理はbooklogの本棚APIを使ってます。

譲れる本の一覧を表示して、欲しい本があったらreplyしてもらって、手渡しで渡すと。

そんだけ。

まぁ、譲るぜオーラを漂わせるわけではなくて、あくまでイベントのついでに、物々交換的な機能があれば便利なんじゃないかと常々考えてたのでShizuDevつくる会で作ってみたと。

それからGAEも触りたかったしね。

xooqってどっからつけたかというと、はじめに本の交換だからbooxって名づけようと思っていたのだけど、やはりいありがちすぎて既に存在していたので、ひっくり返したらまぁOKだったという(一意性を担保するにはひっくり返せという教えが役に立った)。

前回ちょっと書いて放置してたら半年ほど経過してしまったが、今回みんなで集まったおかげで集中して作業できてよかった。

以下、自分で考えたオススメポイント。

住所バレしない

郵送だと住所書かないといけないのでちょっと嫌ですよね。なので会って渡す、コレ基本。イベントに行くついでにちょっと渡してくるというお手軽感。

Androidのbooklogアプリ便利

読み終わったらAndroidのアプリでスキャンして既読管理しているので、ついでにもう読まないであろう本は「交換してもいい本」カテゴリに入れてしまう、そんだけでOK。パソコン開いて作業しなくてよいので楽ちんですね。

ATNDでどのイベントに参加するかわかるようになってる

とりあえず表示するようにしただけ。やっつけ仕事っぽいがそのうちどうにかする。

Flask + GAE + Twitter OAuth

18日にやろっかなーと思っていたのだけど、今日時間があったのでOAuth認証を実装してみた。

ProductName プログラミング Google App Engine
Dan Sanderson
オライリージャパン / 3570円 ( 2011-01-24 )


というわけで、18日はなにしようかなぁ。jQMobileで血圧管理システムをつくってみようか、中断してる文献管理システムの構築再開しようか。

jQuery Form Pluginを使えば簡単にAjaxなformを導入できる

今、欲しい物はこういうモノです。

Real World Haskellのように、文書のパラグラフ毎にコメントが入れられるようなシステム。それをSphinxでやりたい。つまりSphinxで文書を書いてmake htmlをするとパラグラフ毎にtwitterのOAuthかGoogleの認証使ってコメントが入れられるようなHTMLが出力されるナイスなドキュメント

実際にReal World Haskellのソースを追いかけてみると、jQuery Form Pluginを使っていてAjax化が簡単にできそうなので、別の題材で試してみる。もちろんflaskr

  • statisticsにjqueryとjquery.form.jsを配置
  • show_entries.htmlのformにid属性をつける(id='flaskr_form'っていう属性をつけた)
  • layout.htmlにjsの設定を追加

layout.html

<script type="text/javascript" src="{{ url_for('static', filename='jquery-1.6.min.js') }}"></script> 
<script type="text/javascript" src="{{ url_for('static', filename='jquery.form.js') }}"></script> 
<script type="text/javascript"> 
        // wait for the DOM to be loaded 
        $(document).ready(function() { 
            // bind 'myForm' and provide a simple callback function 
            $('#flaskr_form').ajaxForm(function() { 
            $(document.body).load("/");
                alert("Thank you for your comment!"); 
            }); 
        }); 
    </script>

これでsubmitしたときにアラート画面が出るようになります。今回書いたコードはここからダウンロードできます。

flaskr_form

というわけで、flaskかGAEでパラグラフのidをクエリとしてコメントをjsonで返すサービスを用意しておいて、SphinxにjQuery埋め込んでコメントサービスと連携させれば望みのものはできそうな気がするんだけど、Sphinxのパラグラフに固有のIDを付加する方法がわからない。

どうやるのがいいのかなぁ

ProductName エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス / 3780円 ( 2010-05-28 )


「プログラミング Google App Engine」を読んだ

入門書ではないので、まったくの初心者向けではないですね。JavaとPythonどっちの説明も載っているけど、Python使いのほうがよりお役立ちだと思う(PythonでGAEの書籍ほとんどないし)。ちなみにJavaのGAE本は知らない。

ProductName プログラミング Google App Engine
Dan Sanderson
オライリージャパン / 3570円 ( 2011-01-24 )


Pythonのフレームワーク幾つか習得した状態でGAEやると「モデル操作わからんというかデータストア怖い」みたいな苦手意識が芽生えるんだけど、4,5,6,7と4章分がデータストアの説明に費やされているので非常に良い。

  • 4章 データストアのエンティティ
  • 5章 データストアのクエリ
  • 6章 データストアのトランザクション
  • 7章 Pythonでのデータモデリング

Flask+データストアでコード書くとき重宝しそう

あとメール、バルクデータ操作、スケジュールタスクなんかもそのうち使いそうなのでさらっと眺めておいた。

  • 11章 メールとインスタントメッセージの送受信
  • 12章 バルクデータ操作とリモートアクセス
  • 13章 タスクキューとスケジュールタスク

息子の嘔吐下痢の直撃を受けてぐったりしながらエントリ書いた。元気になったらGAEでなんかつくろう。

プログラミング Google App Engineを予約した

欲しかったので即予約。

ProductName プログラミング Google App Engine
Dan Sanderson
オライリージャパン / 3570円 ( 2011-01-24 )


今年はGAEで幾つかつくろうと思っている。

googlemapに円を描き入れる

入れてみた。ついでに常に地図の中心から5kmの範囲を示すようにした(twitterで地図の中心から5kmの範囲のtweetをサーチしているので)

最近毎朝アクセスして、昨晩雪が降って道路が凍結してないか確認している。富士と御殿場は天気がかなり違うのでこっちが晴れててもあっちは雪降ってるとかよくある。

Google Maps APIがなかなか楽しい。

ProductName Google Maps APIプログラミング入門
勝又 雅史
アスキー・メディアワークス / 3570円 ( 2010-03-30 )