タグ

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

  • Redmine で reStructuredText を使う方法

    我々BeProudのRedmineのWikiやチケットの説明文やチケットのコメント文にはReStructuredTextを使っている。 RedmineのデフォルトのTextileはPythonが好きな弊社で使うのは以ての外。なので、ReSTを使うようにした。 そして、生のReSTしか使わなければ、出来ることが少ないので、blockdiagや、コードの構文ハイライト(Pygments) を使っている。 Redmine はテキストフォマッターを入れ換えるように作られている。プラグインを入れるとWiki やチケットの内容のフォーマットを変えることができます。BeProud では Redmine reStructuredText Formatter の RbST/docutils ブランチを使っている。 http://glacialis.postmodo.com/posts/zyd1ig インスト

    kshimo69
    kshimo69 2012/04/16
  • 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 になった。ま

    kshimo69
    kshimo69 2011/09/08
  • Flask で LDAP でパスワード変更アプリを作る

    この間、会社で少し大きくなって、利用するツールが少し増えつつありますので、 ユーザー管理を統一するために、LDAPサーバーを使うようになりました。 思ったより面倒だったんですが、LDAPを使うと色なサービスで同じ ユーザー名とパスワードが使えるので便利です。今のところ、 Redmine サーバー、 Wiki、社内ライブラリのリポジトリーサーバー などに使っています。 ただし、LDAPは同じユーザー名とパスワードが使えますが、ユーザーが 自分でパスワードを変更させるには何か用意しないといけません。 というわけで、Flask のLDAPパスワード変更アプリを作ってみた。 Flask は Python で当然ながら、WSGI に普通に対応していますので、 かなり便利です。 さって、どうやるのか。 Python プロジェクトなので、当然ながら、 virtualenv を使います。仮想環境に Fla

  • Google I/O 2011

  • PYPI を使わないでデプロイする方法

    pip、buildout などを使うとデプロイする時に Python ライブラリの依存関係はややこしいことがあります。 普段はデプロイスクリプトで、 pip に requirements.txt を指定して、もしくは、 buildoutを実行して、 依存ライブラリを落としてインストールしますが、 PYPI がダウンしている場合、環境によって、PYPIにアクセス 出来ない場合もありますので、デプロイが止まってしまって困ります。 PYPIはダウンしている時に pip は PYPI のミラーを使うことができますが、ミラーに必要がパッケージバージョンが入っていない、 ミラーの最後のIDのDNS が ちゃんと動いていないときに、 pip は当然ちゃんと動かない場合も。 bitbucket や、 github からのリポジトリに依存している場合、 接続できなかったら、ミラーがないので、当然インストール

  • Python の JSONライブラリのパフォーマンステスト

    概要 最近、あるお客さんから、 快速なので、 cjson を使おうという要望をいただきましたが、 以前、僕は cjson は色なエッジケースの処理が微妙と分かっていて、実際に他のライブラリより早いのかなと思いました。 cjsonのPyPiページ いろなコメントが書かれています。しかも、 最新パージョンは 2007 リリースでかなり古い。バグがあるのに、直っていないし、あんまりメンテしてないライブラリに見える。 simplejson も jsonlib もCで拡張があり、 かなり最適化されていると思ったので、テストしてみようと思いました。 というわけで、パフォーマンステストを作って、bitbucket にアップしました https://bitbucket.org/IanLewis/jsonlib-test 準備 buildout を使って、環境を作ります テストを実行 ./bin/run_t

  • Python Hackathon 2011.02

    Python Hackathon 2011.02 に参加しに行ってきました。今回は、ちょっと遅く着いたが、楽しかった。 やったことはほとんどプレゼンの準備でした。発表したのは、Twistedで作られたロングポーリングチャットサーバの作り方についてでした。 #:coding=utf-8: import sys import json from functools import partial from time import sleep from twisted.web import server, resource from twisted.internet import reactor, defer from twisted.application import internet, service println = sys.stdout.write def chat_msg(reque

  • PyCon Mini JP 「お前、誰よ」まとめ

    昨日、 PyCon Mini JP にSphinx 1.1 の i18n 機能について発表しました。 Python コミュニティの偉い石さんが 日Pythonコミュニティの歴史について、いいキーノートを発表してくれたけれども、いろなPython 開発者がみんな集まる PyCon みたいなイベントが珍しいので、最初は固くて、重たい気持ちを感じました。 清水川さんや、鈴木さんがアイスブレークしようとしましたが、固い雰囲気が続いてしまった。 私はスタッフさんから無理やりアイスブレークをするのが非常に難しいと認識した。もし、スタッフさんがよく頑張ってくれたのに、みんなさんがあまり楽しめずに終わってしまったら、非常に残念なことになるなと思った。発表が受けられるために、以前にいろいろ考えて資料を作ったが、もうちょっと軽い気持ちをさせるため、発表する前に、ギリギリな時間に #bucho の写真の

  • Google Appengine フレームワーク Tipfy の紹介

    (この記事は Python Web フレームワーク アドベントカレンダー2010 のために書いた 12/24 の記事です。 他の記事を読むには http://atnd.org/events/10465 をご覧ください) 私は普段、 kay フレームワーク を使いますが、最近、 Tipfy (http://www.tipfy.org) というフレームワークを試してみました。 Tipfy は Kay と同じく、 Google Appengine専用フレームワークです。 Kay は Django に似ているものの、 Tipfy は Appengine SDK の Webapp フレームワーク に 似ているように作りました。 インストール Tipfy は buildout という環境管理ツールの利用を推進しています。 まずは、 Tipfy の配布プロジェクトテンプレート をダウンロードします。

  • Google Appengine SDK 1.4.0 がリリースされました!

    Google Appengine 1.4.0 がリリースされました!! このリリースはかなりでかい!! チャンネルAPI, “Always On” (リザーブインスタンス)、タスクキューの正式リリース、スタートアップリクエスト、バックグラウンド処理の改善などなど、 チャンネルAPI まずは、一番重要なチャンネルAPI。チャンネルAPIでクライアントブラウザーにプッシュすることができるようになります。内部的には、Google Talk の XMPP インフラを使っているらしくて、それでスケールアウトしてくれます。チャンネルAPI は2つの部分がに分けています。 サーバー再度のチャンネルAPI と チャンネルAPIJavascript ライブラリ。 チャンネルAPIはサーバー側から、クライアントの通信に使います。クライアントからサーバーへの通信は今までどおりのPOSTがGET HTTPリ

    kshimo69
    kshimo69 2010/12/04
  • BPStudy #37

    昨日、BPStudyで、 Djangoアプリの実践的設計手法について発表をしました。 スライドをSlideshare にアップした。

  • 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

  • Django 1.2 の変更のまとめ

    先週、 Django 1.2 が出ました。新しくて、良い機能がいっぱい入っているけども、1.1 からの変更をご紹介しようかと思っています。 マルチDB 1.2 では、一番大きい変更は明らかに マルチDB対応 ですね。 settings.py の DATABASE オプションは DATABASES になりました。それで python 辞書で複数のDBを設定する。 以下のように MySQLsqlite、PostgreSQL、それぞれ違ってても構いません。 DATABASES = { 'default': { 'NAME': 'app_data', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'postgres_user', 'PASSWORD': 's3krit' }, 'users': { 'NAME': 'use

  • growltestrunner の pynotify 対応 / pynotify の使い方

    最近、会社の AE35 さんが growltestrunner を作っていて、 modipyd を使って、ファイルを更新したタイミングで自動テストを自動的に実行してくれて、growlで通知するように素敵な環境を設定した。 俺はlinuxなので、当然 growl がないけど、Mac OS の growl みないな libnotify があって、pynotify と言うpythonバインディングがあるから、pynotifyでも使えるように、 fork を作った。 ちなみに、pynotify はこういう使い方 import pynotify pynotify.init("My App") n = pynotify.Notification("Title", "Message", "/path/to/my/icon.png") n.show()

  • BPStudy #29 テスト駆動開発

    BPStudy #29 のテスト駆動開発の話でペアプログラミングで、Last Recently Used キャッシュ (LRU)を自動テストやりながら、実装しようという部分がありました。 最初に僕は二つのリストで10分くらいで実装したんですけど、やっぱりパフォーマンスが出ないと思ったから、時間が終わったまでに、pythonの辞書で書き直した。 最終版はこれでした。 lru.py #:coding=utf8: class LRU(object): def __init__(self, size=2): self.size = size self.name_list = [] self.value_dict = {} def put(self, name, value): if name not in self: self.name_list.append(name) self.value_d

  • svn リポジトリをmercurialに変換

    convert でリポジトリを変換するのが簡単ですけど、http で実行するのがすごく遅いので、svn リポジトリを変換するなら、 svnsync を使ってロカールに落とすほうが早い。 $ svnadmin create foomirror $ echo '#!/bin/sh' > foomirror/hooks/pre-revprop-change # make insecure dummy hook $ chmod +x foomirror/hooks/pre-revprop-change $ svnsync init --username svnsync file://`pwd`/foomirror https://foo.svn.sourceforge.net/svnroot/foo Copied properties for revision 0. $ svnsync sync

  • Mercurial MQ

    最近 mercurial の mq エクステンションを試しに使ってる。mercurialのリビジョンをコミットする前に、変更を管理したい、もしくは、途中で他の作業をやらないといけないので、今の変更をどっかに置かないといけない場合に便利なエクステンションです。 mq は標準に入っているので、インストールしなくてもいいだが、エクステンションを.hgrcで有効しないと。

  • 1