タグ

ブックマーク / www.ianlewis.org (8)

  • Django 1.5.1 のリリース (ジェネレーターに例外処理はダメ?)

    Django 1.5.1 が昨日 リリースされました 。リリース内容を見るて、クエリーセットにメモリリークの問題があったそうです。 もともとのバグ 1.4 では、2回クエリーセットを解決すると、空な結果が返ってきて、前の結果がガーベージコレクションされない現象があったそうです (バグ #19895) 例えば: qs = MyModel.objects.all() first = list(qs) second = list(qs) # second は first と一緒だはずなのに、空になってしまう。。 1.5 ではこの問題に対して、 修正された らしい。ただし、1.5 のリリース後にその修正はメモリリークを招いたことが分かった。 メモリリーク この問題は Python の動きに関係があるそうです。Django の開発者は Python のバグ を登録していたんだけど、うちは社内で「それ

  • Python でPassbookファイルを作成する

    最近、iPhoneのiOS6でPassbookという機能が出ました。Passbookはイベントのチケットや、飛行機や船の搭乗券や、クーポンや、ポイントカードを管理出来る地味に便利なアプリ。 僕は興味があって、Pythonでどう作るかを調べてみたので、ここで共有しようと思っている。Passbookはパスの更新の仕組みもありますが、とりあえず、パスを作るとところまで説明しようと。 まずは、Appleの日語ドキュメントの「Passbook プログラミングガイド」をざっと見たほうがいいかもしれない => https://developer.apple.com/jp/devcenter/ios/library/japanese.html 基礎の仕組み的に、Passbookはサーバーからダウンロードしたzipファイル。パスの内容はpass.jsonというJSONファイルの中に入っている。中身のファイ

  • Python のセットがすごい

    ~$ python -m timeit -n 1000 "[x for x in range(1000) if x in range(500, 1500)]" 1000 loops, best of 3: 28.2 msec per loop ~$ python -m timeit -n 1000 "set(range(1000)).intersection(range(500, 1500))" 1000 loops, best of 3: 120 usec per loop リスト内包が約235倍時間かかりますね。リストをセットにするのも時間かからないので、合併や、交差は絶対 set() を使ったほうがいいですね。 Update range(500, 1500) を 1000回くらいよばれてしまっているので、一回呼び出すようにすると、 28.2msec が 18.2msec になった。ま

  • gevent ベースのサービス指向サーバーを作る

    非同期サービスフレームワーク ginkgo (docs) というものが今年の PyCon US で発表された。サービスを作るには、デーモン化なり、PIDファイルの作成なり、シグナルの処理なり、プログラムでやらないといけないことが多い。 Twisted フレームワークだと、サービスまわりの機能がありますが、 gevent ベースのサービスを作るには結構大変なので、 ginkgo というものが作られた。 ginkgo は Service クラスを提供して、そのクラスを継承して、サービスのことを実装するだけ。 簡単なウェブサービス まずは、WSGIベースの Hello World from ginkgo import Service from ginkgo.async.gevent import WSGIServer class HelloWorldWebServer(Service): def

  • Pythonでメソッドをクラスまたはインスタンスに動的に追加する

    Pythonでは、あるクラスもしくは、クラスインスタンスに動的にメソッドを付けたいことがあります。Pythonコードでは、一般的に考えるとこういう風に書くって思いがちだけど、 class MyObj(object): def __init__(self, val): self.val = val def new_method(self, value): return self.val + value obj = MyObj(3) obj.method = new_method

  • Ubuntu で日本語 106キーDvorak 配列を設定

    私はQwerty配列でキーボードで打つのがあまりよくなくて、Dvorakを使ったほうが効率高いんじゃないかと考えて、ずっと前から Dvorak配列 を使っています。 何かというと、キーポードの配列をソフトで切り替えるような仕組みを使っています。例えば、普通のキーポードの a s d f のキーを打つと、a o e u が入力されます。 U.S. Dvorak配列のイメージです。 アメリカにいたら、よくある U.S. Dvorak 配列を使っていたんですが、日に来てから、日語用のキーポードが普段になっていたので、キーの配置が若干違うのが問題でした。漢字変換用のキーなども普段にキーポードに入っています。日語キーポードで動くDvorak 配列ってあまりなかったわけですが、探したら、 DvorakJP というサイトを見つけたりして、その時は仕事Windows で作業していたので、結局、

  • DjangoのHTTPS対応開発サーバ

    Djangoの開発サーバはHTTPSを普段に対応してないので、HTTPS対応をどうやって開発すればいいんだろうと思ったら、調べてみた。秘密は開発サーバ、http用とhttps用を二つ立ち上げます。https開発サーバはstunnelでHTTPS対応します。stunnelは普通のソケットをSSL tunnelingをしてくれます。 このドキュメント を使います。 stunnel をインストールしてから、pemファイルを作ります。 openssl req -new -days 365 -nodes -out newreq.pem -keyout /etc/stunnel/stunnel.pem

  • virtualenv, virtualenvwrapper, pip を使う方法

    あるプロジェクトの依存は特定なバージョンじゃないとダメな場合が結構多いと思いますけど、最近、pythonの仮想環境を簡単に作れるようになりました。virtualenv と virtualenvwrapper と pip の組み合わせを紹介します。 virtualenvは環境を作ってくれるライブラリで、virtualenvwrapperはその作った環境を簡単に管理してくれるツールになります。 まず、virtualenv と virtualenvwrapper をインストール.

  • 1