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…

エキスパートPythonプログラミング 予約開始

去年から翻訳していた本が、今月末やっと発売になります。 エキスパートPythonプログラミング作者: Tarek Ziade,稲田直哉,渋川よしき,清水川貴之,森本哲也出版社/メーカー: アスキー・メディアワークス発売日: 2010/05/28メディア: 大型本購入: 31人 クリッ…

unionとintersection

http://blog.livedoor.jp/dankogai/archives/51441112.html一方、Pythonはsetの演算子を定義した。 >>> a = "0 1 2 3 4 5 6 7 8 9".split() >>> b = "0 2 4 6 8 10 12 14 16 18".split() >>> print set(a) & set(b) set(['0', '8', '2', '4', '6']) >>> prin…

DebianでPythonを自分でビルドするときに入れておいた方が良い lib***-dev パッケージ

libbz2-dev libbdb-dev libgdbm-dev libncurses5-dev libreadline5-dev libsqlite3-dev libssl-dev libz-devこれだけあれば、まず使わないようなものをのぞいて、標準ライブラリがビルドできるはず。

Pythonの配列操作

いまさらだけど、 http://0xcc.net/blog/archives/000043.html の Python の部分を添削。 len(a) == 0 は、 if a: のようにリスト自体が空の時に偽になるので使わない。 a.pop(0) は del a[0] とも書ける。どちらでも良いが、多分属性参照が無い分 del の方…

reStructuredText のヘッダを書く

http://blog.tuxcoder.com/2008/12/vim-restructure-text-macros.html を参考に、日本語タイトルに対応する。 vimスクリプトが全く判らないので、Pythonに頼った。 キーマップとか、もっと賢い方法があると思う。 python <

Python Imaging Library (PIL) で、パレット形式のPNGを扱う

PIL のパレットは色々と問題がある。256色あることしか考えてないとか。 んで、PngImagePlugin も、 PNG の "tRNS" チャンクのうちαが0のところを見つけて、そのインデックスを info['transparency'] に突っ込むだけしかしてくれない。PNGのパレット形式はパ…

日本語のdocstringはunicode literalで書こう

# coding: utf-8 def foo(): """ほにゃらら""" 一般的にdocstringと言われていて標準的に使われるドキュメント形式なんだけど、上記のように通常の文字列として書いた場合は (Python 2.xでは) byte string になり、utf-8でエンコードされているという情報が…

Expert Python Programming

eBookにて購入。いいなこの本。 チュートリアルを読み終えてしばらくPythonを触った人〜独学でPythonパッケージをPyPIに登録するようになった人まで、入門者を除く広い層にお勧めできる。 Pythonって、標準で、Python以外の言語は使えるプログラマ向けチュー…

Visual Studio 2010 ではATLやMFCの入手コストが上昇する

Visual Studio 2010 は SKU (Editionの数) を整理することがこの間発表された。 これで困るのが、Visual C++ Standard Editionを使っていた人。ATL/MFCとx64コンパイラのサポートがExpress Editionにはなく、Visual Studio 2010 ではStandardがProfessional…

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