以下を調べること。
djangoをSQLAlchemyで使う場合、
* djangoのsqlalchemyブランチとやらは必須なのか?
* model.pyをいきなりsqlalchemyの記述に差し替えて、影響範囲はどれぐらい?
* 認証とか大丈夫?
* 汎用ビューはあきらめる?
* adminツールもあきらめないといけないのか?
追記 ---
http://django.g.hatena.ne.jp/perezvon/20070211
この日記の記事が参考になる。
やっぱりユーザー認証は独自実装ですか、、、。
しかし、SQLAlchemyを使うことで、これほどまでに失うものが多いのであれば、いったいそもそもdjangoである必要があるのかどうかという疑問がでてきた。
sqlalchemyブランチを取ってきたがsqlalchemy使ってるかどうかさえ不明な感じ。(ひょっとしてただ本家をコピーしてきただけ?)
結局自分でなんとかしないといけないみたい。
2007-08-30
[メモ][TODO]Django+SQLAlchemy調べ物
2007-08-29
Directory Queue便利そう。
Directory Queue
ファイルベースのキュー実装。
ファイルベースなので、データはファイルの中に書く。
ファイルベースなので、途中でプログラムがクラッシュしても、キューの中身は残るんだろうか。(きっとそうだよね。。)
面白いのは「メタデータ」を別途持たせることができること。
これはJMSのMessageの仕様を参考にしているのかな?
こういうプロジェクトがきちんと育ってくれたら、自分が今の仕事で使っているJMS地獄からいくぶん解放されるんじゃないだろうか。
追記---
「ファイルベース」というよりは、「ディレクトリベース」というほうが適切か。
キュー内の1アイテムは、1ディレクトリで表されている。そのディレクトリの中に、データを表す"file.data"というファイルと、メタデータを表す"meta.data"というファイルを置くようだ。
キューからのアイテムの取得は、os.listdirでディレクトリ内の一覧を取得して、ディレクトリ名のソートで先頭を取得するようだ。
これはキュー内に大量のメッセージを格納したときにパフォーマンスが心配である。
とは言っても、メッセージが大量にならない場合には問題ないだろう。
[メモ]SQLAlchemyのPrecompiling a Query
Precompiling a Query
SQLAlchemyであらかじめSQLを構成しておいて引数だけを差し替える方法。
ループの内側でSQLをいちいち作り直す時間をはぶきたいときに使えそうだ。
2007-08-28
this.pyのソースは文字を巡回させているのに気づいたよ。
こんなふうに。
s = """Gur Mra bs Clguba, ol Gvz Crgref
Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""
d = {}
for c in (65, 97):
for i in range(26):
d[chr(i+c)] = chr((i+13) % 26 + c)
print "".join([d.get(c, c) for c in s])
2007-08-24
django一日目の感想
今日は数時間ほどユーザー登録周りのコードを書いていた。
こうしてチュートリアル以外で、まともにdjangoをさわるのはほぼ初めてです。
基本的にはdjango-registrationを、公式リリースであるdjango0.96で使えるように改造する作業。
いくつか気づいた点
* djangoのデフォルトのテーブルauth_userのフィールドemailはuniqueではない。なので、同じメールアドレスのユーザーをじゃんじゃん登録できる。
* ↑これは別にいいんじゃないと思うが、こうなっていると、複数ユーザーが同じemailアドレスを使っている場合パスワードのリセット機能が動かない。(これはすでに公式のバグレポートに上がっているようだ。)
* なので、登録時にemailの重複チェックを追加実装する必要がありました。初心者なので汚い実装方針でしたが一応チェックできるようになった。
* パスワードリセットフォームがadmin標準のものだったので、自分の用意したテンプレートに差し替えた。
* urls.pyの書き方が難しい、全てのリンクがうまくつながるようになるために、いろんな箇所を微調整。
* メールで送られてくるURLを正しいものにするには、siteテーブルを書き換える必要があることに気づくのにしばらくかかった。
djangoを使う人たちはこういうのは普通にすぐに自作してしまうんだろうか。
Turbogearsならこういうのはコマンド一発で完了してしまうのとは対照的。
しかしdjangoの勉強になったのでよかったと思う。
なんだかいろいろわかってきたよ。
[メモ]Intel Mac OSX 10.4でstackless pythonをビルド
stackless pythonのOSXバイナリもあるのですがインストール先を変えたりしたかったので、自分でビルドした。
途中1カ所つまずいたのでメモしておく。
(これが正しいのかはよくわからないですが。)
参考にしたのはこの記事。
./configure --prefix=/usr/local/stackless-python251 --enable-universalsdk --enable-framework
そして、できあがったMakefileにて -DSTACKLESS_FRHACK=0 という記述がある部分が1カ所あるので、そこを -DSTACKLESS_FRHACK=1 に書き換える。(←これがほんとにこれでいいのか自信ないのだが、上の参考記事と同様の効果を得るにはこのフラグの変更でいいようだ。)
そんで、
make
sudo make install
サンプルのfactorial.pyをダウンロードして、実行。
ayu@~% /usr/local/stackless-python251/bin/python factorial.py
0.0117838382721
ひとまずうまく動いたみたい。
2007-08-22
[メモ]django-registrationの疑問
django-registrationは、djangoのSVN最新版でないと動かないようだ。
みなさんどうしているんだろう。自作?それともみんなSVN最新版を使うのが普通なんだろうか。。。