アニソンの歌えないCメロの有無を共有するやつ(α)開発メモ

随時更新予定の公開メモ帳
そのうち充実する(予定)

環境(フレームワーク編)

python2.7+webapp2フレームワーク+jinja2テンプレートエンジン(など)を使用して作成しています。
https://www.python.org/
http://webapp-improved.appspot.com/
http://jinja.pocoo.org/
Djangoとかでよかったんじゃという気もしたけど前にGoogle Apps Engine使ったときにWebapp2使ったからWebapp2を使いました。

環境(サーバー編)

サーバーはさくらインターネットの一番安いレンタルサーバー( http://www.sakura.ne.jp/lite.html )です。
GAEやherokuなどPaaSやDigital OceanやさくらなどのVPS、Amazon EC2とかAzureも検討しましたが、クレカ番号預けたくないとか安い方がいいとか
説明が日本語とかで昔ながら(?)のレンタルサーバーを選択しました。

「さくらのレンタルサーバライト」のいいところ

・割とマシンパワーある(今使っているのはSandy BridgeなXeonでメモリ18GBあるマシンのようです)
・日本国内(経路的な意味でも言語的な意味でも支払的な意味でも)
・SQLite3が使える(開発中からSQLite3を使ってたからそのまま)
・今のところ安定
・専用クライアントとかを必要としない。FTPクライアントがあればアップロード出来る
・.htaccessとかをブラウザから編集できる

「さくらのレンタルサーバライト」のあんまり…なところ

・普通のCGIだからちょっと(400msぐらい?)応答に時間がかかる
・よくも悪くも昔ながらのレンタルサーバーだから「今ドキ」感あんまりない
Apacheでgzip圧縮してくれない今はやってくれるようです

レンタルサーバーでwebapp2製WSGIアプリケーションを動かす

from wsgiref.handlers import CGIHandler
CGIHandler().run(app)
ってやればいいんじゃないかなぁって思ってたんですが、これだとWebObがエラーを起こしたりします。
WSGI(PEP 333 http://legacy.python.org/dev/peps/pep-0333/ )にはあってCGI(http://www.tohoho-web.com/wwwcgi3.htm#CgiEnvironment )にないあったりなかったりする(Webサーバの設定に依るようです)'PATH_INFO'っていう
環境変数をてきとーに作ることで解決しましたがこれで本当にいいんですかねぇ
(参考:http://edward.oconnor.cx/2006/10/selector-shim ただし僕はBaseCGIHandlerの引数に加工した環境変数を設定するようにしました。)。

Wikipediaのxmlファイルからデータベースの中身を作る

http://ja.wikipedia.org/wiki/Wikipedia:データベースダウンロード を見ればわかりますが、Wikipediaから記事をたくさん取得するのにはクローラは使えませんので、
「pages-articles.xml.bz2」みたいなファイルをダウンロードして実行します。
解凍しても大きすぎて普通のテキストエディタではどうせ読めないしディスク容量を消費するので、
解凍せずにpythonでbz2.BZ2Fileを使って処理しています(もしかしたらその分遅くなっているかもしれないですけど)。
DOMにしようとすると(少なくてもpythonでは)メモリを食いつくして死ぬんで各記事は兎も角全体をDOMとして処理してはいけません。
今回はhttp://www.ibm.com/developerworks/jp/xml/library/x-hiperfparse/ のリスト 5を参考にさせていただきました。
あとは正規表現との戦いです。戦ったあとは仲間になります(多分)。

作るのに買った本とか


DBの設計するのにとっても参考になりました。

最新の総集編はこっちね

おまけ

http://www.amazon.co.jp/registry/wishlist/1R9PYQBAF58WA

何か買って頂けるととっても喜びます。
定職を頂けるともっと喜びます。