2007-01-01から1年間の記事一覧

twisted.internet.defer.Deferred を止める

登録された遅延ルーチンが廃棄される defer クラスを作る。 from twisted.internet.defer import Deferred class StopDeferred(Deferred): def addCallbacks(self, callback, errback=None, callbackArgs=None, callbackKeywords=None, errbackArgs=None, er…

GCC-XML の msvc に対する動作について

DDK じゃ動かねーじゃん。なんでもかんでもレジストリ見に行くなよ。 変数 GCCXML_COMPILER に設定した値から動作が変わります。 この変数は次の順位で決定されるようです。 gccxml への引数 同じ名前の環境変数 %ProgramFiles%\GCC_XML\share\gccxml-0.6\gc…

例外から回復する

Python で例外が発生したら、状態を回復して、例外が起こった場所から実行をやり直すという馬鹿げた話。 クロージャは考慮してない。 例外が起こったスコープの frame オブジェクトを取得する こんな感じ ? import inspect frame = inspect.trace()[1][0] 状…

7zimport

Python には zipimport という機能があり、モジュールを zip から import することができます。 標準ではネイティブコードの拡張モジュール (*.pyd) やそれらが使うダイナミックリンクライブラリ (*.dll) を zip に固めることはできませんが、py2exe によっ…

code object から module への変換

Python で compile などによって得られた code object を module に変換するには以下のようにします。 PyImport_ExecCodeModuleEx を Python で書き直したようなものです。 import sys import imp def codeimport(dottedname, code, filename = ''): if not …

Python のディスクコスト

python-2.5.1.msi -- 10.4 MiB (展開したら大分膨らむ) zip を使って portable に -- 7.2 MiB (展開しないでも実行できる) tcl/tk サポートなし Doc, include, libs, Scripts, Tools は排除 標準ライブラリを全て zip に固める .pyd の import は pywin32 の…

distutils.msvccompiler が参照するレジストリ

from distutils import msvccompiler # レジストリのルートキー root = HKEY_CURRENT_USER #HKEY_LOCAL_MACHINE # sys.version からビルド環境とバージョンを取得 version = msvccompiler.get_build_version() # # マクロで使用する定数。使用しなければ設定…

Python の zip import

以下に示すものは pythonXX.dll と同じディレクトリに配置する必要がある X:\PythonXX\DLLs\zlib.pyd pythonXX.zip sitecustomize.py X:\PythonXX\DLLs\* は sys.path の通ったディレクトリに配置する必要がある X:\PythonXX\Lib の中身は pythonXX.zip に固…

例外が起こったフレームの変数を得る

Python で例外が起こったスタックフレームからローカル変数を取得するメモ。 import inspect frame = inspect.trace()[例外が起きた場所][0] hoge = frame.f_locals['hoge'] 例外の種類を特定し、変数を取り出して処理を続けるみたいなアホくさいことができ…

Windows の Unicode

Python では Windows の Unicode、つまり UCS-2 は 'utf-16' という名前になる。というか utf-16 とすればデコードできる。

libusb-win32

バルク転送できるデバイスしか列挙されねー HID には対応してないとか勘弁してくれ report descriptor が欲しいだけなのに

pyusb Windows 用バイナリのビルド方法

http://sourceforge.net/projects/pyusb から pyusb-*.tar.gz をダウンロード http://libusb-win32.sourceforge.net/ から libusb-win32-device-bin-*.tar.gz をダウンロード pyusb-*.tar.gz を展開 libusb-win32-device-bin-*.tar.gz から pyusb-*/ にファ…

USB スリム光学ドライブケースを買ったらフロントベゼルがきつすぎてイジェクトできなくてワロタ*1USB Bluetooth ドングル*2を買ったらアドレスが明らかに不正な値でワロタ*3Intel Pro/Wireless 2200BG を買って EEPROM 書き換えて使おうと思ったら TC1100 から KN…

HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices をいじったらうまく起動しない

http://support.microsoft.com/kb/812448 step 5 までやれば起動する。ただし部分的に設定は飛ぶ。

VMware

ホストが複数の NIC を持っていて、接続されていない NIC があるとゲスト OS から接続できないみたい。 多分 NIC を列挙した際に最初に取得される NIC をゲスト OS の接続に使ってるんじゃないか。 無線を使ってたりして NIC が増えてる環境は注意。

miniFilter

FltSetStreamContext の第一引数に FltObjects->Filter を渡して BSoD 連発して丸一日悩んだ件。 Stream はマルチストリームをサポートしているファイルシステムにおける永続化データであって、ファイルをオープンして生成されたストリームインスタンスでは…

Python の glob.glob に日本語突っ込むと何も返してこない件

import os from fnmatch import fnmatch def glob(pattern, recursive = True): result = [] dirname, pattern = os.path.split(pattern) for path, dirs, files in os.walk(dirname): result.extend(os.path.join(path, f) for f in files if fnmatch(f, pa…

twisted.internet.defer.Deferred の使い方

Deferred を使う際の簡単な解説。Deferred を提供する際の解説ではない。 コールバックとエラーバック Deferred はコールバックとエラーバックを同じものとして扱う。 twisted.internet.defer.Deferred._runCallbacks を参照すればすぐに分かるが、おおざっ…

wxPython

全体的に素晴らしくまとまっていると思います。というかまんま Win32 のような気もしますが。 でも wx.Window.ClientWidth とか欲しかったよ。 属性アクセス GetXXX 及び SetXXX 両方のメソッドがある場合、XXX でアクセスできるが、これは XXX = property(G…

.NET Framework 1.1 SDK と DDK で distutils をまわす

ほんとは platform sdk とかいれろって話なんでしょうけど当然ながらそういうのうざいだけなんでインストール済の DDK で何とかしようと思ったけどビルドに必要なバイナリが足りねーから泣く泣く .NET 1.1 と .NET 1.1 SDK を突っ込んで Zope-3.3.1 のビルド…

関数が何処から呼ばれたか、コールスタックを表示

こんなのは不要とされるべきと思う。 def stackdump(): import inspect stacks = inspect.stack() del stacks[0] print '"%s" Call Stack:' % stacks[0][3] del stacks[0] for frame, filename, line, funcname, code, exc_idx in reversed(stacks): print '…

twisted で非同期で実行される関数の前後にイベントを設置する

twisted はネットワーク環境を中心とした Python の非同期イベントフレームワークな訳ですが、ユーザーが登録したコードが実行される前と後に setup と teardown みたいなのを仕込めれば何かいいなというか私はなんでこんな汚い真似ばかりするの? class Filt…

elementtree

正直どうかと思うよ。 きちんとしてない XML の解析は BeautifulSoup でやる方が楽。 インポート Python 2.5 からは標準モジュールになったので場所が違うらしい。 try: from xml.etree import ElementTree except: from elementtree import ElementTree 文…

イベントをキャンセル可能にする

StopIteration 風に StopPropagation を投げる。 # -*- coding: utf-8 -*- # event canceling support from zope import event from zope.app.event.dispatching import dispatch class StopPropagation(Exception): """stop event bubbling""" def newdispa…

zope.app.testing.ztapi.remove*

Zope でユーティリティやらアダプタやらファクトリやら ZCML から登録しますが、等価なコードは zope.app.testing.ztapi.provide* を利用することで実現できます。 しかし、zope.component は登録の解除をサポートしていないので ztapi にも remove* とか un…

wx.DataObjectComposite の使い方

サンプルもないし大分悩んだので書いとく。 wx.URLDataObject が登録できないけど Firefox からは URL ドロップできる。というかテキストで送ってるだけだろう。 class DropTarget(wx.PyDropTarget): def __init__(self): self.data = wx.DataObjectComposit…

Windows のデバイスコンテキストをビットマップファイルに変換する。Python で

Win32API が直に扱える環境なら CreateDIBSection とか使えばいいしまともなライブラリのある言語ならビットマップクラスで扱える範疇だろう。 が、pywin32 では CreateDIBSection は定義されていないし、ctypes でインポートするのも何だし、wxPython でご…

ZODB の最適化

from zope.app import zapi from ZODB.interfaces import IDatabase db = zapi.getUtility(IDatabase) db.pack()

ZODB にストアしたオブジェクトの weakref

ZODB はメモリを圧迫しないようにメモリ上にロードするオブジェクトを制限する機能がある。 このため、weakref と組み合わせると意図しないタイミングでオブジェクトの破棄が行われることがある。

ZODB にストアしたオブジェクトの __setstate__

super(class, self).__setstate__(state) を実行し、getattr/setattr/delattr またはアトリビュートを直接操作する。