Recent Entries
Recent Comments
OZACC.blog: Python Category Archive

2008年09月10日

Python | Djangoのテンプレートシステム

Django | The Django template language | Django Documentation

Djangoのテンプレートシステムが僕にはとても使いにくい。
DjangoでHTMLを出力させることは今まであまりなく、あってもシンプルなものだったので、今日までこのことに気付かなかった。

設計思想は分かるけど、HTMLレベルのデザインもプログラムも両方やる自分にとっては、ifタグで >= などの演算子も指定できなければ、and や or で繋ぐことも出来ないなんて我慢ならない(これを実現するカスタムタグは既に存在するけど)。
ロジックは全部カスタムタグでやれってことなんだろうけど、カスタムタグを作るのもやたらとややこしいコードが必要で、直感的とは言いづらい。JSPのTaglib作る方がシンプル。
しかもタグの出力結果にフィルタを掛けることもできないので、再利用しにくいカスタムタグを作らざるを得ない。尽く柔軟性に欠ける。
何か使い方を間違っているのか?

Pylonsみたいにテンプレートエンジンが選べればいいのだが。他のテンプレートエンジンに詳しいわけではないので、似たり寄ったりなのかも知れないけど。

Posted by otsuka : 22:40 | Comment (0) | Trackback (0)

2008年09月05日

Python | Django 1.0

Django | Weblog | Django 1.0 released!

ようやく1.0 Finalがリリースされました。露木さんによるリリースノートの翻訳も公開されています。

Django AMFも開発はほとんど進んでいませんが、現行のバージョンは1.0 Finalでも稼働します。
早速本日、Django 1.0 Final + Django AMFを使った、あるメーカーのキャンペーンサイトを公開します。

Posted by otsuka : 14:23 | Comment (0) | Trackback (0)

2008年08月09日

Python | trac 0.11.ja1のチケットメール

tracのチケットメールをiso-2022-jpで送る方法を書いたエントリーへのアクセスが以前から多かったのだけど、あの時のパッチに変更を加えた方がいい点があります。

body = unicode(body, 'utf-8').replace(u'\uff5e', u'\u301c')
body = body.encode('iso-2022-jp')

こうなってる箇所は

body = unicode(body, 'utf-8', 'replace').replace(u'\uff5e', u'\u301c')
body = body.encode('iso-2022-jp', 'replace')

こうした方がいいです。こうすると、本文に文字コード変換できない文字が含まれるときでもエラーになりません。

trac 0.11.ja1上で使っているnotification.pyをアップしておきます。
notification.py.zip
ストリッパーズの環境では、/usr/local/lib/python2.5/site-packages/Trac-0.11.ja1-py2.5.egg/trac に置いてます。

Posted by otsuka : 14:18 | Comment (0) | Trackback (0)

2008年08月08日

Python | 色体系変換

TekTekBlog -- PythonでHSV←→RGB変換 HSVとRGBを変換する機能が、なんと驚くべきことにPython標準モジュールに存在する。

14.7 colorsys -- 色体系間の変換

知らなかった。標準モジュールにそんな機能があるとは、さすがはPython。

Posted by otsuka : 19:47 | Comment (2) | Trackback (0)

2008年05月23日

Python | CronでDjango

"cron jobからDjangoフレームワークを利用する" 再び - nemolog
import MyApp.settings as settings
from django.core import management
management.setup_environ(settings)

from MyApp.foo.bar import buz

x = buz()

なるほど、なるほど。

Posted by otsuka : 00:33 | Comment (0) | Trackback (0)

2008年05月21日

Python | パイ

半年以上ぶりにDjango(Django AMF)を実戦投入。0.96からは大分時間が経っているので今回はSVN版で。

1.0という区切りをなかなか迎えられないせいか、国内のDjangoコミュニティがおとなしくなってきているような気もする。どちらかというと流れはPylonsなのかな?
勉強会があればまた参加したいが。

jythonの本を買った。まだちょっとしか読んでないけど面白い。

Posted by otsuka : 00:39 | Comment (0) | Trackback (0)

2008年01月03日

Python | Django AMF 0.6 リリース

Django AMF 0.6をリリースしました。
新機能に伴う日本語ドキュメントは半分くらい書いた。英語はまだ全然。
僕としてはドキュメントをちゃんと書いてるつもりなんだけど、外国からの反応はドキュメントがほとんどないだの何だのなかなかシビアです。

まだバグは残ってるし、logging周りも書き直したい。そろそろFlexのRemoteObjectにも対応させたいし、サンプルアプリももうちょっと複雑なものを作りたい。Flash CS3用のコンポーネントもちゃんとまとめてリリースしなければ・・・と、やるべきことが一杯。
また実プロジェクトに投入すれば一気に開発が進むのだけど、当分はなさそう。

Posted by otsuka : 01:13 | Comment (0) | Trackback (0)

2007年12月01日

Python | powered by Django

HONDA CROSSROAD MESSAGES
STEP WGN ポスターつくろうコンテスト

一ヶ月ほど前に立て続けにリリースしたHONDAのクロスロードとステップワゴンのスペシャルサイト。両方ともサーバサイドではDjangoを採用しました。

ステップワゴンの方はDjango AMF。お陰でFlashとの連携はスムーズに開発できた。自画自賛。

管理用サイトを作るのに初めてnewformsの機能を使用。Django 0.96だったのでまだいろいろとバグが残っていて、SVN trunkのバージョンと比較しながらソースを修正することもあって、使えるようになるまでに結構時間が掛かった。

因みに、tohsakiがこのエントリーで書いている「更新系のユーティリティシステム」もDjangoを採用しました。

これらの小さな規模のシステムに現状のDjangoを実戦投入してみた感想としては、Webフレームワーク使うんならDjangoよりRailsを使った方がいいんじゃないかな、ということ。

そんな僕だが、今携わっているプロジェクトでRailsを提案するもPHPでやってちょーだい的な流れになってしまい、久々にPHPで開発。あと三週間後にはリリースされているはず。

Posted by otsuka : 03:20 | Comment (0) | Trackback (0)

2007年10月30日

Python | Djangoのイベント処理

django.dispatchを使ってイベントを捕捉する - perezvonの日記

Djangoのソースを追ってたら、

receivers = dispatcher.send(signal=signals.got_request_exception)
というイベントを投げているようなコードに出くわした。この行の後に receivers は参照されてないし、何のためのものなんだ?と思って調べてたら、上の記事に辿り着いた。
Djangoにこんなイベント処理の仕組みが備わっていたなんて知らなかった。

Using Django Signals to Ping Sites on An Update
(via Django Dispatcher - UeblogWiki)
こういう使い方ができれば、すこぶる有用だ。

ドキュメントは→ What Are Signals?

Posted by otsuka : 23:42 | Comment (0) | Trackback (0)

Python | Python @deprecated

西尾泰和のブログ @ Cybozu Labs: Pythonで関数名を安全に変更する

これはいいアイデア。

Posted by otsuka : 15:25 | Comment (0) | Trackback (0)

2007年10月28日

Python | PILでサムネイル生成

Python Imaging Library Handbook

PILで画像のサムネイルを生成するときメモ。

image.thumbnail((100, 100), Image.ANTIALIAS)
image.filter(ImageFilter.DETAIL) # または、image.filter(ImageFilter.SHARPEN)
image.save('/path/to/thumbnail.jpg', 'JPEG', quality=95)

サイズにも因るけど縮小しただけではねむい画像になってしまうので、シャープフィルターを掛ける。が、PILのSHARPENフィルターでは度合いを調整できず、ちょっとシャープが掛かり過ぎてる感じ。フィルターをいくつか比べてみたが、DETAILフィルターが妥協できるレベル。

最後に保存する際に、qualityオプションで大きな値を指定しないとこれまた劣化の原因となる。デフォルトの値は75。ドキュメントによると、95より大きな値は指定すべきではないとのこと。

サムネイル生成に丁度いいフィルターを自作したいところ。PILのカスタムフィルターがどこかに公開されてないかな?

Posted by otsuka : 21:28 | Comment (0) | Trackback (0)

2007年10月17日

Linux, Python | 共有ライブラリの認識

共有ライブラリをシステムに認識させるには

Linux上で、PostgreSQL + psycopg2 + Django on Apache with mod_python な環境で次のようなエラーが起こっていたら、Apacheの実行ユーザがPostgreSQLのライブラリを認識できていないということが原因。

Error loading psycopg2 module: libpq.so.5: cannot open shared object file: No such file or directory
/etc/ld.so.conf に /usr/local/pgsql/lib を加えて、ldconfig コマンドを実行してシステムにPostgreSQLのライブラリを認識させればOK。

前もこの問題にはまったのに、記憶力が悪いせいでまたはまってしまったのでメモしておく。

Posted by otsuka : 19:41 | Comment (2) | Trackback (0)

2007年10月12日

Python | Django AMF 数値型の変換

Django AMFでActionScriptのNumber型の数値はPythonのfloat型になる。例えばFlashでRPCメソッドの引数に整数を渡した場合、Python側のint型を必要とするプログラムでは受け取ったfloat型の数値をいちいちint()関数で変換しなくてはならない。AS3でAMF3の場合はint型があるから特に問題はないのだが、int型のないAS2でAMF0の場合の話。

Javaだったら引数の型を指定できint型に変換されるけど、Pythonでは明示的に変換しないといけないから面倒くさい。

個人的には浮動小数点数やそれを含むオブジェクトをサーバに送ることは滅多にないので、ASのNumber型はPythonのint型に変換された方が都合がいいケースが多い。
どうしたものかと考え、次の三つの条件が揃っている場合にASのNumber型をPythonのfloat型として受け取った後、int型に自動変換するようにした。
これもDjango AMF 0.6の新機能。

1. settings.pyに AMF_NUMBER_TO_INT = True という設定がある。
2. AMF0を使っている。
3. 受け取ったfloat型数値が int(float_value) == float_value の条件を満たす。

float型を滅多に使わないのであれば、AMF_NUMBER_TO_INTを有効にしておいて、必要なところでint型の値をfloat型に変換すればいい。

Posted by otsuka : 04:34 | Comment (0) | Trackback (0)

2007年10月11日

Python | Djangoの開発サーバとFlash Player

Django付属の開発サーバを使ってDjango AMFアプリの開発を進めていたが、どうも挙動がおかしい。サーバからレスポンスを返しているにも関わらず、Flash側でそれを受け取れないケースがある。それも特定のRPCメソッドでだけ。
IEやFlash IDEのFlash Playerからだとこの問題が発生して、Firefoxからだと問題はない。IEからでもCharlesを間に挟むとこの問題は発生しなくなる。

Djangoの開発サーバではなく、Apache + mod_pythonで動かすとこの問題はどの環境のFlash Playerからでも問題は起こらない。

今はちゃんと調べる時間がないが、Djangoの開発サーバが返すレスポンスのHTTPヘッダに原因が隠れていそうな気がする。

Posted by otsuka : 19:50 | Comment (0) | Trackback (0)

2007年10月10日

Python | Django AMF 0.6 新機能

Django AMFの実戦投入を控えて、新機能が追加されている。0.6のリリースはまだ先だけど、自分用のメモも兼ねて簡単に内容をまとめておく。

  1. 任意のAMFヘッダをレスポンスのAMFメッセージに設定可能
  2. @amf_cache デコレータ
  3. _amf_no_return_attrs クラス変数
  4. amf.django.flash モジュール
  5. amf.django.test.RemotingService クラス
  6. Python → AMFの型変換で decimal.Decimal クラスに対応

3番目の _amf_no_return_attrs クラス変数には、Modelクラスの属性の中でFlashに返したくないもののリストを指定する。属性名の文字列でも、django.db.models.fields モジュールに含まれるクラスのオブジェクトでもいい。ここで指定された属性は、レスポンスのAMFメッセージには含まれない。
今のところAMF0の場合のみ対応。(追記: AMF3の場合も対応)

amf.django.flash モジュールには、Djangoのリクエストオブジェクトを渡せばFlashの FileReference クラスからアップロードされた画像ファイルを PIL Image オブジェクトに変換して返してくれる関数や、XMLデータを ElementTree オブジェクトにして返してくれる関数などが含まれている。

amf.django.test.RemotingService クラスは、内部でDjangoのテスト用クライアントを 使ったAMFクライアント。なので、ネットワークにリクエストは飛ばない。Djangoで実行するユニットテストの中で使う用。
この導入に当たって、これまでの amf.RemotingService クラスは構造を変更し、amf.client.RemotingService に移動。

追加。

  • レスポンスのHTTPヘッダにContent-Lengthをセット
  • メソッド実行時の例外をキャッチした場合、DEBUG時でなければADMINSにエラーメールを送信
Posted by otsuka : 17:53 | Comment (0) | Trackback (0)

2007年10月05日

Python | Django カスタムSQLとトランザクション

モデル API リファレンス : Django 0.96 オンラインドキュメント和訳

カスタムSQLの実行

connection や cursor は標準の Python DB-API を使っています.

PostgreSQL + psycopg2 + Djangoの組み合わせで、カスタムSQLで更新処理を行ってもオートコミットされていなかったので、手動でコミットしようとDBAPIで定義されている connection.commit() を実行してみたが、django.db.connectionにcommitなんて属性はないッスとエラーが出た。

カスタムSQLを使っても、トランザクション管理はDjangoで統一して行われるということだね。確かにその方がベターだ。
データベーストランザクションの管理
とりあえずview関数にautocommitデコレータを付けて解決。

一般的なWebアプリの場合はTransactionMiddlewareを入れておけば良さそうだ。

Posted by otsuka : 21:00 | Comment (0) | Trackback (0)

2007年10月04日

Python | Django エラー通知とsettings.py

Django の設定 : Django 0.96 オンラインドキュメント和訳

電子メールによるエラー通知

サーバのエラー
DEBUG を False にすると,コードが例外を送出し,その例外が捕捉されず,結果的に 500 エラーになった場合に, Django は ADMINS 設定にリストされている全てのユーザにメールを送信します.これは,管理者が何らかのエラーにすぐに気づけるようにするためです.

Djangoで稼働するサイトを運用環境下において初めてこの機能を知った。これは便利。

settings.pyについてperezvonさんが書いていたけど、僕のやり方は環境変数に「DJANGO_RUN_MODE」を指定して、settings.pyの中で環境別に差分のsettings.pyを読み込む形です。ちょっとRailsを意識したんだけど、無駄に複雑な気もする。このsettings.pyの管理方法はまだ模索中。

RUN_MODE = os.getenv('DJANGO_RUN_MODE', 'local').lower()

if RUN_MODE == 'local':
    DEBUG = True
    TEMPLATE_DEBUG = DEBUG
else:
    DEBUG = False

# (省略) 環境に共通の設定

# 環境別のsettings.pyをインポート
if RUN_MODE == 'development': from config.development.settings import *
elif RUN_MODE == 'production': from config.development.settings import *
else: from config.local.settings import *

大元のsettings.pyの設定値は後からインポートした環境別のsettings.pyで定義された同名変数の値で上書きされないことに注意。

Apache + mod_python環境ではSetEnvで環境変数を設定。

<Location />
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE project.settings
    ... 省略
    SetEnv DJANGO_RUN_MODE development
</Location>
Posted by otsuka : 23:10 | Comment (0) | Trackback (0)

2007年09月18日

Python | UnboundLocalError

octech - スコープ定義

参考になるのは、p.286の「変数がローカルスコープに属するかどうかはスタティックに決定される」という項目です。
(省略)
また、この参照先の処理はスタティックに処理されるので、以下のコードはエラーになります。

何故この最後の例がエラーになってしまうのか理解できない。

例えば X が 99 じゃなかったら、X=10 にしたい場合はどうすればいいの? 関数の最初に global X を加えればいいんだけど、納得がいかない。

Posted by otsuka : 23:22 | Comment (2) | Trackback (0)

2007年09月04日

Flash, Python | Django与Flash的結合

DjangoFlash - Woodpecker.org.cn Wiki for CPUG

via 常山日記

Django AMFについて中国語で書かれたページ。

Posted by otsuka : 15:51 | Comment (0) | Trackback (0)

2007年08月31日

Flash, Python | Django AMF 0.5.1でやること

1番目のはもう実装済み。3番目のgettextモジュールは使ったことがないので、これから調べてみないと。

あー、なるほど。Djangoで国際化機能がサポートされているのか。

追記 2007/9/3
全部対応した。しばらく様子を見てリリース。

Posted by otsuka : 16:40 | Comment (0) | Trackback (0)

2007年08月30日

Flash, Python | Django AMF 0.5リリース

先日告知した機能を実装したDjango AMF 0.5をリリースしました。

AMFのRPCサービスメソッドを実行するだけなら、Flash/Flexよりも簡単にできる手段だと思います。S2Flex2AMFPHPWebORBRubyAMF、そして純正Flash Remoting MXと、サーバ側のプロダクトが何であろうと関係はありません。ちゃちゃっとネットワーク越しにサービスメソッドを実行したい場合に便利かも知れませんよと。

まずは日本語ドキュメントは書きました。
Django AMF
amf.RemotingServiceクラス リファレンス

Posted by otsuka : 04:16 | Comment (0) | Trackback (0)

2007年08月21日

Python | BooleanはIntTypeでもある

どうも動作がおかしいと思ったら。知らなかったよ。

>>>from types import *
>>> isinstance(True, IntType)
True
>>> isinstance(False, IntType)
True
>>> isinstance(1, BooleanType)
False
>>> isinstance(0, BooleanType)
False
Posted by otsuka : 18:42 | Comment (0) | Trackback (0)

Python | Django AMF 0.5の新機能

DjangoのUnicodeブランチで動かないというメールをもらったりもしてるんだけど、SVN版を追っかけたりはしないので放置して、Djangoと直接関連しない機能の開発に取り組んでいます。

Django AMFっていうネーミングがアレなんだけど、amfモジュールはDjangoと切り離しても使えるように設計しています。なので、AMFリクエストのPOSTデータをamfモジュールに通せば、Pythonオブジェクトに変換できます。その逆も然りでPythonオブジェクトをAMFリクエストデータに変換することもできます。

で、今開発している新機能がFlash RemotingコンポーネントのPython版。まだAPIを固めてないけど、以下のようなPythonコードでRPCサービスメソッドを実行できます。Flash/Flexからだと非同期での実行になるけど、これは同期呼び出しになります。

import amf
service = amf.RemotingService('http://127.0.0.1/gateway/', 'addressBookService')
results = service.getCards()

AMFの実装と言うとFlashからデータを受け取ってレスポンスを返すものが中心だったけど、リクエストを送るクライアント実装があってもいいんじゃないかと。
AMFサービスのHTTPUnit的なテストコード作る際にも使えるし、プロキシ的にも使えるんじゃないかなと。

0.5は月末辺りにリリース予定。

Posted by otsuka : 00:06 | Comment (0) | Trackback (0)

2007年08月20日

Python | 存在しないメソッドの呼び出し

PHP: オーバーロード - Manual

特別なメソッド __call() を使用すると、存在しないメソッドの呼び出しを捕捉することができます。

PythonでこのPHPの_call()に該当する特殊メソッドはなかったっけ?

PHPマニュアルの「__call を使ったオーバーロードの例」をPythonで書いてみた。サクッと書いた分にはこんなやり方しか思いつかなかったけど、これだとCallerインスタンスのメソッドが呼ばれたのか属性にアクセスしようとしたのか分からない。他に定石なやり方がありそうな気がする。

class Caller(object):
        
    def __getattribute__(self, name):

        def missing_method_call(*args):
            print "Method %s called:" % (name,)
            print args
            return (1, 2, 3)

        return missing_method_call

foo = Caller()
a = foo.test(1, "2", 3.4, True)
print a

追記

ちょっと冗長になるけれど、クロージャを使わずにやる方法も。

class MissingMethodCall(object):

    def __init__(self, name):
        self.name = name

    def __call__(self, *args):
        print "Method %s called:" % (self.name,)
        print args
        return (1, 2, 3)

class Caller(object):
        
    def __getattribute__(self, name):
        return MissingMethodCall(name)

foo = Caller()
a = foo.test(1, "2", 3.4, True)
print a
Posted by otsuka : 01:37 | Comment (2) | Trackback (0)

2007年06月15日

Python | 何語?

Flex 2: Python, Django a Flash Remoting

いよいよ何語かも分からない言語でDjango AMFが紹介されています。
文章の中でストリッパーズサイトやWEB+DB PRESSへのリンクが張られているので、書いている人は日本語が読めるのかも。

調べた結果、この言語はPolish(ポーランド語)だった。いくつかの自動翻訳を使って、何となく書いてあることは分かったような分からないような。

Posted by otsuka : 03:10 | Comment (2) | Trackback (0)

2007年05月09日

Python | Django AMF 0.4.2

Django AMF

バグ修正版です。

リモートサービスメソッドからの戻り値がDjangoのQuerySet(やそのサブクラス)オブジェクトだった場合、list配列に変換してAMFにシリアライズされます。が、戻り値のオブジェクト(例えばlistやdict)にQuerySetオブジェクトが含まれる場合は、そのQuerySetがlist配列に変換されずAMFにシリアライズするときにエラーが起こっていました。
そんなバグを直しました。

あと、ドキュメントには書いていませんが、Djangoの認証システムと連携する場合に @login_required デコレータが使えるようになっています。

Posted by otsuka : 22:23 | Comment (0) | Trackback (0)

2007年05月07日

Python | Django amf service, once installed is a beauty to behold

Ben Cooper's Weblog | Django AMF service

Django AMFを紹介してくれてます。S2Flex2-componentsも。

Django amf service, once installed is a beauty to behold
何かかっこいいことを言ってくれてるようなんだけど、うまく日本語に訳せません。


Django AMFの開発は小休止中だけど、ちょこっと追加したい機能があるのでDjango 1.0 Final Release待ちの間にもう一回アップデートするかも。
あとS2Flex2-componentsはFlex2用なので、Flash CS3用のRemotingコンポーネントをもうすぐリリース予定。

Posted by otsuka : 01:20 | Comment (0) | Trackback (0)

2007年04月04日

Flash, Python | Django AMF 0.4.1

一日でバージョンアップ。認証システムとしてDjangoのユーザ認証機能をそのまま使える関数を追加しました。かなりオシャレな仕上がりになりました。 http://sourceforge.jp/projects/djangoamf/

ActionScript側でDjangoユーザアカウントのユーザ名とパスワードをセットして、パーミッション制限が掛かっているRPCメソッドを呼び出せば、勝手に認証・ログインを行い、そのセッションクッキーをセットしてくれます。ユーザがDjangoのスーパーユーザーならば、存在するすべてのパーミッションに対して有効になります。
自分で認証の処理とか書かなくていいので、この楽チンっぷりはやばいよ。

・ActionScript
var service:RemotingService = new RemotingService();
# アクセスユーザのユーザ名とパスワードを設定します。
service.setCredentials("username", "password");
service.do_something();
・settings.py
# 設定ファイルに次の一行を加える。
AMF_AUTH_FUNC = 'amf.django.authenticate'
・sample/view.py
from amf.django import permission_required

# このview関数を実行するのに必要なパーミッションを
# デコレータの引数に指定します。
@permission_required('add_user')
def do_something(request):
    return 'This function can be invoked by authenticated user.'
ここまでやったら @login_required デコレータもサポートしたいなあ。
Posted by otsuka : 17:10 | Comment (0) | Trackback (0)

2007年04月03日

Flash, Python | Django AMF 0.4

先月末からいくつかリリースが続いてますが、今度はDjango AMFの新バージョン。ようやく認証システムを実装しました。これで実際のお仕事にも使っていただけると思います。
http://sourceforge.jp/projects/djangoamf/

Djangoのユーザ認証システムをDjango AMFでもそのまま使おうかと思ったのだけど、もっと柔軟にできるような仕組みにしました。したつもりです。
まだドキュメントをWikiにまとめてないのだけど、コードにするとこんな感じ。

・ActionScript
var service:RemotingService = new RemotingService();
# アクセスユーザのユーザ名とパスワードを設定します。
service.setCredentials("username", "password");
service.do_something();
・settings.py
# 設定ファイルにアクセスユーザのパーミッションを取得する
# 関数を指定します。文字列または関数オブジェクト。
AMF_AUTH_FUNC = 'sample.views._get_user_perms'
・sample/view.py
from amf.django import permission_required

# このview関数を実行するのに必要なパーミッションを
# デコレータの引数に指定します。
@permission_required('admin')
def do_something(request):
    return 'This function can be invoked by admin user.'

def _get_user_perms(request, username, password):
    """
    settings.pyで指定した関数。Django AMFが認証時に実行します。
    指定されたusernameとpasswordから、ユーザが所持している
    パーミッション(ロール)の文字列を返します。
    複数パーミッションを所持している場合はリストかタプルで返します。
    """
    if username == 'username' and password == 'password':
        return 'admin'
    return None

認証に失敗するとFlashにはFaultEventが返ります。FaultEvent#typeの値は「AMFAuthenticatinError」、#codeの値は「401」です。

次のバージョンではDjangoの認証システムをそのまま使える便利関数を提供する予定です。

Posted by otsuka : 17:18 | Comment (0) | Trackback (0)

2007年04月02日

Python | デコレータ

KoshigoeBLOG: Pythonのデコレータ構文について

初めて引数を取るデコレータを書こうとして、幾重にも関数をネストしなければならないことに気付いた。これは言語仕様としてはどうなのよ?と言いたくなる程。

Pythonのクラスのインスタンスメソッド第一引数と、このデコレータは嫌いだ。

Posted by otsuka : 16:13 | Comment (0) | Trackback (0)

2007年03月18日

Python | Django AMFサンプルアプリ

WEB+DB PRESS Vol.37でWebORB for PHPを使って実装したFlex Address BookのDjango AMF版をようやくリリースしました。コンパイルしたSWFも含まれているので、DjangoとFlashPlayer 9がインストールされていれば動かせるはずです。
djangoamf-samples.zip

他人様の環境で動くのか不安なところです。なので、もしこのエントリーを読んでサンプルを動かしてみた方がいれば、ご報告いただけると助かりますデス。

Posted by otsuka : 01:25 | Comment (2) | Trackback (0)

2007年03月16日

Python | Django AMF 0.3.3

[flex / django] communications with djangoamf « galactivision

via 常山

Django AMFのバグが報告されていたので、修正したバージョンをリリースしました。

バイトオーダーとかよく分かってないんですが、バージョン0.1を作っているときに試行錯誤で何とか自分のマシンで動いたのでそれで満足してました。僕とは縁がないCPUで引っかかるだけだろうと思っていたら、PowerPCでもダメだったようです。上記ブログで書かれていたコードは、バイトオーダーをマシンに合わせて自動変換するモジュールの関数を使ってスマートに解決してました。ので、即採用、即リリース。

ByteArrayデータをMEDIA_ROOTディレクトリ配下に一発で保存、削除できるユーティリティメソッドも追加してます。

Posted by otsuka : 21:02 | Comment (0) | Trackback (0)

2007年03月01日

Python | tempfile.gettempdir()

DjangoアプリをWindows上のDjango Development ServerとApache+mod_pythonでそれぞれ動作確認しててハマった問題。

Django Development Serverの場合、

import tempfile
tempfile.gettempdir()
は起動ユーザのTempディレクトリ、つまり"C:\Documents and Settings\username\Local Settings\Temp"を指す。
一方、Apache+mod_pythonの場合、"C:\WINDOWS\Temp"を指す。

Windowsの場合はややこしい。

Posted by otsuka : 04:30 | Comment (0) | Trackback (0)

2007年02月27日

Python | Django AMFで検索してみた

久しぶりに「Django AMF」でググってみたら、気になる結果がいくつか。
最近は海外からの問い合わせメールがちらほら届くようになったので、ちょっとは広まっているのかも知れない。Web+DB PRESSも発売されたので、サンプルをリリースしなければ。

[Plugin] Django AMF - SkiToo.Org Ce manque n'existe plus ! En effet, j'ai pu tomber par hasard sur le site DjangoAMF qui nous propose donc un middleware Django nous permettant d'utiliser le Flash Remoting. Ce plugin semble tout jeune (version 0.3.2) mais néanmoins actif (dernière mise à jour faite le 19 janvier 2007 ) Il semblerait qu'il soit développé par une équipe japonaise, mais fort heureusement une documentation anglaise est présente sur le site.
読めない。。。 が、Google翻訳使って大体は分かった。「バージョンは0.3.2とまだ低いけれど、活発に開発されている。日本人が作っているけど、幸いなことに英語ドキュメントが用意されている」みたいな。
WebFaction Forum / More Static serving issues... BTW - if you are interested in harnessing the power of Flash for your Django apps, check out Django-amf written by Tomohiro Otsuka, http://djangoamf.sourceforge.jp/index.php?DjangoAMF_en
スパムとか そうそう、PyJUGブースに「Django AMFに非常に興味がある」という方がみえました。地方の方だそうで、Django勉強会には参加できないとのことでしたが、やはり見る人は見ている!と思いました。

スペイン語もあった。大学の時に第二外国語としてスペイン語を履修したのにさっぱり分からない。
Flash, Django y AMF

Posted by otsuka : 03:19 | Comment (2) | Trackback (0)

2007年02月05日

Python | Pythonで分散バージョン管理

Pythonで分散バージョン管理

via Twisted Mind

「MercurialHG」というツール。初めて知った。チュートリアルも用意されている。

Posted by otsuka : 11:27 | Comment (1) | Trackback (0)

2007年01月11日

Python | Windows用mod_python

mod_python download - The Apache HTTP Server Project

Windows Apache用のmod_python-3.2がない。。。と思っていたら、Other Binariesのリンクを辿ればあった。MEMO。
http://ftp.kddilabs.jp/infosystems/apache/httpd/modpython/win/


Apache+mod_python環境下で、Django AMFが動かないバグを発見。今までDjango付属のテストサーバだけで確認していたけど、今度からは両方で確認しないと。

Posted by otsuka : 16:32 | Comment (0) | Trackback (0)

2007年01月09日

Python | Django AMF 0.3 リリース

Django AMF

Django AMFの新しいバージョンをリリースしました。今バージョンではAMF3をサポートしました。

PythonによるAMF3のオープンソース実装はおそらく世界初。世界初のバグ報告をお待ちしています。

Posted by otsuka : 20:27 | Comment (0) | Trackback (0)