python

デコレータで関数に属性を付与

def note(**kw): def applier(func): __notes__ = getattr(func, '__notes__', None) if __notes__ is None: __notes__ = dict() setattr(func, '__notes__', __notes__) __notes__.update(kw) return func return applier @note(foo='this is add') @note(b…

cdefクラスとcpdefの挙動

Cythonでネイティブ実装のPythonクラスを作る。(Cython 0.24 で確認) # hoge.pyx from libc.stdio cimport printf from libcpp.string cimport string cdef class Hoge: cdef string name_ property name: def __get__(self): return self.name_.c_str().d…

getoptの戻り値をグループ化

こういうのが欲しい。 # hoge.py import sys import getopt import itertools opts, argv = getopt.getopt(sys.argv[1:], 'x:y:z:') keyfunc = lambda item: item[0] opts = sorted(opts, key=keyfunc) opts = itertools.groupby(opts, key=keyfunc) opts = …

Python3.4(win64)用の_curses.pydをビルド

https://github.com/shive/python_curses_for_windowsちゃんと日本語が使える _curses.pyd が欲しかったんですが、ネット上に見つけられなかったので自分でビルドしてみた。これで tui 作り放題ですね!昔のN88BASICを叩いてたころが懐かしくなってきたので…

Windowsの資格マネージャからパスワードを拾う

以下のコードで取れた。あとはTargetNameでマッチングしてやれば目的のパスワードが拾えそう。 # Python3.4.2(x64) import sys from ctypes import * class CREDENTIAL(Structure): _fields_ = [('Flags', c_uint), ('Type', c_uint), ('TargetName', c_wcha…

RSA暗号書いてみた

https://github.com/shive/try_rsa $ make keygen python keygen.py P = fe03 Q = fc95 N = fa9ecbbf / log2(N): 31.9694 K = 10001 U = da17e869 (V = dec9) len(ORIGIN) = 22 b'\x8c\xc3\x92r\x82\xe2\x8a^\x82\xc6\x82\xd1\x82\xb1\x82\xde\x90\x85\x82\x…

py2exe for python3を使ってみた。

https://github.com/shive/test_py2exe_for_python3さっくり動いた。ctypesが必須だけど明示しないと含まれなかった。入力スクリプトをutf8にするにはどうすればいいんだろうか?

cx_Freezeでexeを作る

Python: 3.3.2 win32 cx_Freeze: 4.3.2 # hoge.py print("hoge hoge hoge") # setup.py from cx_Freeze import setup, Executable setup( name='hoge', options = dict( build_exe = dict( create_shared_zip = False, ### library.zip ではなく hoge.zip を…

sconsの便利っぷり

sconsの日本語情報が少ない気がするので自分の知ってる情報を晒してみます。 sconsを使ったWindows環境下でのサンプルです。githubにあげました。 https://github.com/shive/scons-test/tree/master/test001-forwin 動作環境 Python 2.7 SCons 2.3.0 Cygwin …

PyPyは本当に速いのか?

先日のjson速度計測を使いまわして試してみた。#PyPyではujsonがコンパイル通らずインストール不可でした 速いのはyamlだけ。PyPyはC言語でモジュールを書いた部分が混ざると逆に遅くなるとか?PyPy専用に書けば速くなるのかもしれないけど、すべてのモジ…

PyYAMLが非常に遅かった

うすうす感じてはいたが測ってみたらPyYAMLがめちゃめちゃ遅い。しかもこの調査をするまでlibyamlを使えていなかったのでなおさら。 ということでテキストならujson、バイナリならmsgpackがおすすめ。どうしても可読性が必要な場合は容量を抑えるか速度の必…

PTVS on VS2012

VS2012のPTVS動いた。 http://www.microsoft.com/visualstudio/jpn/downloads の 「Visual Studio 2012 Shell」にあるやつを Isolated → Integrated の順に入れて http://pytools.codeplex.com/ の 「PTVS 1.5 VS 2012.msi」 を入れる。 追記 ちゃんと解説し…

easy_installの底力

$ easy_install pywin32-217.win32-py2.7.exe これでインストーラ形式のpythonモジュールをインストールできる。 virtualenvなどでクリーンな環境の自動構築するのに便利。

pybindgenでC++クラスを呼び出す

いろいろカンでやったとこもあるので間違っているところがあればツッコミお願いします。 前提とする環境 Windows XP 32bit cygwin VisualC++ 2008 Express Edition (gccxmlは古いので2010に対応していない) Python2.7 gccxmlのインストール http://sourcefor…

luajit vs pypy

luajitがアツイという話を聞きつけたのでpypyと比較してみた。 luajitは id:pcl:20100203 を参考に。 -- prime.lua function isprime(n, primes) nsqrt = n ^ 0.5 for i = 1, #primes do if nsqrt < primes[i] then break end if n % primes[i] == 0 then re…

pipとeasy_installの違い

何が違うんだかわからんけど、virtualenv先でもscons使いたかったのでpipでインストールしようとしたら入らんのでどうしようか悩んでたけど、easy_installしたらサクっと入った。 そういうこともあるのね。

コメントアウトの切り替え

ふと思いついたpythonで#if/defのようなことをやる方法 C/C++:#if/defを使う #if 0 ... 無効 ... #else ... 有効 ... #endif #if 1 ^ .. 0->1に書き換え ... 有効 ... #else ... 無効 ... #endif C/C++:コメントを使う /* ... 無効 ... /*/ ... 有効 ... /…

py2exeのデフォルトエンコーディング

環境:python2.7 / win32 py2exeでexe化するとデフォルトエンコードが設定されずasciiのままになります。この状態で日本語をprintするとエンコードエラーになり正常に動作しない。いままでsys.stdout=codecs.getwriter('cp932')(sys.stdout)って書いてたけど…

crc32

最近PTVS(http://pytools.codeplex.com/)なんて面白いものも出てくるし、Aptanaがver3になってpydev標準装備など、どんどんpythonブームが来ている感じがしてワクワクします。 crc32 crc32の計算方法を調べたのでメモしておきます。 from binascii import cr…

PyPy 1.4

先日言ってたのがやっぱしリリースされました。早速試してみよっと。 http://morepypy.blogspot.com/2010/11/pypy-14-ouroboros-in-practice.html

pypyでexeを作る

環境はbashとpython2.7とVisualStudio2008で試しました。 まずはpypyの最新ソースを取ってくる $ git svn -r HEAD http://codespeak.net/svn/pypy/trunk pypy-trunk もしくは $ svn co http://codespeak.net/svn/pypy/trunk pypy-trunk 適当な.pyを書く #!/u…

argparse

#!/usr/bin/env python # -*- coding: utf-8 -*- import argparse parser = argparse.ArgumentParser() parser.add_argument('-o', '--output') parser.add_argument('-v', dest='verbose', action='store_true') args = parser.parse_args() print 'args.ou…

wxProgressDialog

プログレスバーを使って進捗表示。 #!/usr/bin/env python # -*- coding: utf-8 -*- import wx count = 10 app = wx.PySimpleApp() progress = wx.ProgressDialog( u'progressing ...', u' '*80, maximum = count, parent = None, style = wx.PD_APP_MODAL|w…

windows用のPyQt4をビルド

折角python2.7にしたのにnokiaさんRiverbankさんがPyQt4のpython2.7版をupしてくれないので自前でビルドしました。やり方を忘れないようにメモ。 http://diotavelli.net/PyQtWiki/BuildPyQt4Windows 基本的に上記サイトに書いてあることをそのままやっただけ…

コマンドラインでC-hを使う方法

すぐ忘れるのでメモメモ http://www.freia.jp/taka/blog/690 $ easy_install -Z pyreadline --- pyreadline/keysyms/keysyms.py.orig +++ pyreadline/keysyms/keysyms.py @@ -119,6 +119,10 @@ char = chr(VkKeyScan(ord(char)) & 0xff) elif control: char=…

pdbで日本語入りソースをデバッグするとき

マルチバイト文字入りのコードをpdb.pyでデバッグ開始するとencodeうんたらでbreakされる。バグ?ググったら修正の仕方が載ってたのでメモメモ。 http://bugs.python.org/issue6719 --- pdb.py (revision 74707) +++ pdb.py (working copy) @@ -183,11 +183,…

pingアプリの結果を逐次表示

昨日の実装だとpingの終了を待たないと結果が表示されないので、逐次表示されるように修正してみた。 作ってみる 構成 ping2/ - main.py - static/ - favicon.png - jquery-1.4.2.min.js - test.css - test.js - templates/ - index.html index.html $def wi…

web.pyでpingアプリ

最近はtwitterでつぶやくばかりではてな日記は書いてませんね。こっちに書かないと回想できないのでたまにはこっちにも書きます。 前準備 web.pyをインストール $ easy_install web.py 現時点でのバージョンは0.32。 作ってみる ディレクトリ構成 hoge/ - ma…

玄箱復活

自宅の落雷停電とともにクラッシュしていた玄箱の中身を消してdebian化して復活させました。aptでpython2.5とdjangoを入れて携帯電話からdjangoのIt worked!が見れるところまで確認。やっぱりdebianは楽でいいです。後はなんか家計簿アプリを自作して個人的…

標準django完全解説

開発のプロが教える標準Django完全解説―Webアプリケーションフレームワーク (デベロッパー・ツール・シリーズ)作者: 増田泰,中居良介,露木誠,松原豊出版社/メーカー: アスキー・メディアワークス発売日: 2008/06/19メディア: 単行本購入: 13人 クリック: 196…