ipython 0.12 と virtualenv を同時に使う方法

ipython と virtualenv を同時に使う方法 - Ian Lewis はとても便利な設定なので参考にさせてもらっていたんだけれど、 IPython 0.12 からは設定の方法が変わったのでこの設定方法では動かなくなった。IPython 0.12 での設定方法は、 (1) ipython profile cr…

Ubuntu 12.04 で Python 2.6 をビルドする

Ubuntu 12.04 でもまだUbuntuパッケージとして Python 2.6 が提供されているのですが、将来消えるのかもしれないのでそろそろ後方互換性確保用の 2.6 は自前ビルドをしておくことにしました。Python をビルドするとき、 Ubuntu 11.10 からだと思うのですが、…

バージョン番号を2度書かないために

Python では、下らない問題は、賢く綺麗に解決しようとせずに、 Python 本体が持っている柔軟さを使って強引に解決する方が楽な場合があります。 問題ごとに綺麗な仕組みを作ってしまうと、新しく Python を覚えるひとは無数にある下らない問題の数だけ用意…

Python-dev ML watch: 文字列リテラルに u プリフィックスがつきました。

更新が滞っているので、 Python-dev の ML の内容を伝える記事を気が向いた時に書くことにします。Python 3.3a1 がリリースされましたが、その直後にコミットされたのが、文字列リテラルのu プリフィックスです。この prefix は、 Python 2 と 3 に同一のコ…

bzr-git で快適 github 生活

bzr

Bazaar のホスティングサイトとして、 Launchpad があります。これはプロジェクトをまたぐ Issue Tracker やオンラインの翻訳システムが含まれており、 Ubuntu の開発に大活躍しています。 しかし、 Launchpad は github や BitBucket とは異なり、ユーザー…

本当は怖い軽量チェックアウトの話

bzr

前回は、作業ツリー上でコミットすると、別の場所にあるブランチに新しいリビジョンが追加されるチェックアウトについて説明しました。 今回はチェックアウトの別の仕組みである軽量チェックアウト (lightweight checkout) について説明します。 軽量チェッ…

[bzr] チェックアウトとブランチの使い分け

bzr が git や hg と大きく異なるのは、メインラインの概念とチェックアウト機能だと思います。 メインラインについては昨日の Advent Calnedar で wonderful_panda さんが解説してくれました。(ブランチのメインラインのイメージについてしゃらくさい話をす…

Python の GC のデバッグ機能

Python のデーモン型のプログラム(具体的に言うと Loggerhead という bzr のリポジトリブラウザ)が大量(具体的に言うと100MB以上)メモリを食っていたので、それを調べた時のメモ。まず、本当にそれだけのメモリを利用しているのかどうかを meliae という…

Python3 Advent Calender 3日目 - New GIL を理解する

2011 Pythonアドベントカレンダー(Python3) - connpass の3日目を担当します。Python 3 がリリースされてから、 Python の進化は主に Python 3 で行われ、そこから Python 2 にバックポートできるものがバックポートされています(例: GCのチューニング、辞…

bdist_dumb --relative を使って絶対パスを固定せずにインストールできるバイナリ配布物を作る

Python のバイナリパッケージは、Linux 環境ではあまり使われない。 ソースからインストールする文化があるのと、Unicode の内部表現を選択する configure オプションなどによってバイナリ互換性が失われるケースがあるからだ。でも、同じLinuxディストリビ…

Python の GIL 排除のために Software Transactional Memory が注目されている理由

あるいは、Pythonは参照カウント方式だからGILを排除できないという誤解に対する回答。参照カウントってアトミックなインクリメント・デクリメントさえあればセマフォとか使わないでも並列化できるんで、パフォーマンスが滅茶苦茶落ちるということはない。参…

Google Developer Day 2011 の DevQuiz に Python で挑戦した (スライドパズル)

一部の問題は解くのに利用したパラメータがハードコードされている値と違うことがありますが、一応5000問全部解きました。全体: https://github.com/methane/gdd11/tree/master/slideCythonコード: https://github.com/methane/gdd11/blob/master/slide/_sli…

Google Developer Day 2011 の DevQuiz に Python で挑戦した (一人ゲーム)

https://github.com/methane/gdd11/blob/master/hitori/hitori.py問題読んだあとシャワー浴びながら考えて、深さ優先探索で事足りることを確信して一気に書いた。

Google Developer Day 2011 の DevQuiz に Python で挑戦した (webgame)

https://github.com/methane/gdd11/tree/master/webgame普通は Chrome エクステンションとか FireBug のコンソールとかで挑戦すると思うんだけど、HTMLのソースを見た方が早いので、スクレイピングで解いた。

watchdog と paramiko を使って、ローカルで編集したファイルを瞬時にサーバーにアップロードする

ローカルのファイルシステムの監視。WindowsではGetDirectoryChangesW(だったっけ?)とかいうAPIがあって、Linuxにはinotifyがあるし、Macにもなにか手段があるはずなんだけど、 http://packages.python.org/watchdog/installation.html watchdog というラ…

スレッドを使うプログラムが Ctrl-C で止まらない件

常識かと思ってたけど、、、 while True: thread.join(0.5) join() メソッドを呼ぶときに、タイムアウトを設定して、ループする。こうすると、KeyboardInterruptを受け取れる。

シグナルを使って statistical profiler をつくろう

Pythonの標準ライブラリにはプロファイラがあるが、これは deterministic profiler という種類のプロファイラだ。関数が呼び出されたときと関数から抜けるときに登録したコールバック関数を呼び出す仕組みが用意されており、そのコールバック関数で時間を測…

gevent で proxy server を作る

Flash製アプリの試験用のアクセスパターンを作りたくて gevent を使って簡単なproxy serverを作った。localhostの8000版で立ち上がるので、FoxyProxy などで、特定のドメインに対する proxy として登録してやると、リクエストを再現するのに必要なデータをms…

バッチがわりに Python を使うときは、 os.system よりも subprocess.call を使おう

次の2つのスクリプトは同じに見える。 #!/usr/bin/env python import os for i in xrange(100): cmd = "tail -f /var/log/syslog | cat " os.system(cmd) #!/usr/bin/env python import subprocess for i in xrange(100): cmd = "tail -f /var/log/syslog | …

xubuntu 11.04 Natty で、 trackpoint の設定と、 Caps Lock を Ctrl にする設定

スタンバイ復帰時にマウスカーソルしか表示されない現象に出くわし、Intelグラフィックでcompizは怖いのでcompiz回避するついでにxubuntuを試してみている。gnome だとGUIで設定できる2項目が、 xubuntu では設定できなかったので、その設定の仕方をまとめて…

Ubuntu 11.04 Natty で PIL をビルドする方法

原則として、PILはeasy_installやpipで問題が起こりやすいので、手動で python setup.py install を行う。*1Ubuntu Natty では、 libjpeg や libpng をはじめ、多くのライブラリファイルが /usr/lib ではなくて /usr/lib/x86_64-linux-gnu *2に置かれている…

Python でファイルを直接イテレータとして使うのが適切でない場合

Pythonでサブプロセスと対話する - 西尾泰和のはてなダイアリーPython のファイルは、通常のファイルの読み込みの効率を考えて大きめ(8192バイト)のバッファリングを行っているので、ソケット通信やパイプで問題になるケースがある。問題になるケースの一つ…

優れた Python プログラマを見つける n の質問(改)(書きかけ)

+ "", "0", [], [0], [1], 0, 1 のうち、 bool(obj) が True になるのはどれか? + True, False, None との比較に == ではなく is を使うことが推奨されるのはなぜか? + s = 'foo'; t = 'foo'; print s is t; の結果が未定義なのはなぜか? + [[0] for i in…

[python] 優れた Python プログラマを見分ける10+1の質問

お詫びと追記 この記事は 「優れたPerlプログラマを見分ける27の質問」の日本語訳 - Islands in the byte stream を見て書いたものですが、僕が Perl について無知なのとタイトルに釣られたために、で元の問題の意図を汲み取れていませんでした。その言語に…

textwrap は覚えとこう

文字列を適当な長さで区切って diff を表示する - forest book のお題だけど、読み逃してる条件が無ければ textwrap で充分。 import textwrap def limit_characters(line, start, width): return textwrap.wrap(line[start:], width) def test_limit_charac…

Excelでxlsファイルを開いて閉じるだけで変更させない設定

bzr

xls ファイルとバージョン管理 - methaneの日記 で言っていた以外にも方法があったのを、どう日記で紹介したBlogの著者の雪羽さんが見つけてくれた。開いただけで保存される情報は何かしらの個人情報らしく、それを保存しない設定でいったんファイルを保存す…

xls ファイルとバージョン管理

bzr

2ちゃんのbzrスレで発見した、bzrのバグらしき挙動。書き込みがずっと規制されているのでこちらで再現報告。http://feather.cocolog-nifty.com/weblog/2010/12/excelbazaartort.htmlさっそく確認しようとしたんだけど、xlsファイルを新規作成して、copyして…

Paverをインストール不要な方法で使う

ごちゃっとしたプロジェクトで、setup.pyみたいなファイルだけでそのプロジェクトのビルドや配置が完結できない場合に役に立つのが paver。でも、そのためにみんなに paver をインストールしてもらうのが気が引ける、という場合、 paver minilib というコマ…

VMware Player ゲストにopen-vm-tools を入れてもマウス統合が動かない場合

マウスが仮想マシンのものであるかどうかを判定するためのmdetectコマンドが依存関係でインストールされないのが問題。 sudo apt-get install mdetectして、再起動すれば、マウス統合が動くようになっている。

ビルダーメソッドを作るときはstaticmethodよりもclassmethodを使おう

Javaだとよくビルダーメソッドをstaticで定義するけど、Pythonの場合はできるだけクラスメソッドを使った方が良いだろう。 例えば、float.fromhex http://docs.python.org/library/stdtypes.html#float.fromhex はクラスメソッドなので、 >>> class Foo(floa…

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。