読者です 読者をやめる 読者になる 読者になる

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

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…

PyQt4に圧倒された

いままでwxPython弄ってきましたが、ここに来て会社の人にPyQt4を薦められインストールしてみました。そしたら何じゃこりゃ!demoアプリがかっこよさが違う!うにーんうにうにーんって動いてます。以前KDE(Qtをバックエンドに使ったdesktop)を触ったことがあ…

すばらしい

[id:moriyoshi:20091214:1260779899] 参考になるなぁ。多謝。

py++

昨日の続き。py++を使ってみる。 py++をセットアップ http://language-binding.net/pyplusplus/pyplusplus.html 参考 http://anond.hatelabo.jp/20080320141900 [id:kakk0u:20080706:1215365707] http://sourceforge.net/projects/pygccxml/ http://www.gccx…

悪戦苦闘

C++実装された既存のライブラリをpy++でpythonに落とすコードを書いてみていますが、関数のオーバーロードとか、return_opaque_pointerとかの指定がよく分からない。member_functionとかで関数を拾ってきて設定するっぽいのだけど、関数の検索がうまくいかな…

boost.pythonでvirtualのoverride

http://svn.sourceforge.jp/svnroot/shive/junk/diary/2009/20091216_override.tar.gz やってみた。 class Person { public: Person() { } virtual ~Person() { } void say() { printf("[%08X]%s\n", (uintptr_t)this, _what()); } virtual const char* _wha…

C++クラスをpythonへ公開する

http://svn.sourceforge.jp/svnroot/shive/junk/diary/2009/20091215boostpython.tar.gz詳細は↑こちらを参照。 // src\person.cpp #include "stdafx.h" class Person { public: Person() { printf("[%08X]Person.ctor\r\n", (uintptr_t)this); } virtual ~Pe…

Boost.Pythonに挑戦

// src/fibo.cpp #include <boost/python.hpp> int fibo(int n) { if(n == 0) return 0; if(n == 1) return 1; return fibo(n - 1) + fibo(n - 2); } BOOST_PYTHON_MODULE(fibo) { boost::python::def("fibo", fibo); } # SConstruct from os import environ from distutils.sy</boost/python.hpp>…

sconsでpythonモジュールをビルド→試行錯誤中

[id:shive:20090901:1251820396] 環境によってはsconsがvc9ビルドしてくれない件、詳しく調べてみたらeasy_install版とwindowsインストーラ版が両方入っていて、有効になってる方のバージョンだとvc8までしかサポートできていないことがわかった。しかもダメ…

pyparsingラーニング

# -*- coding: utf-8 -*- from pyparsing import * def test(): ur""" >>> import pyparsing >>> from pprint import pprint >>> def check(func, *args): ... try: ... print func(*args) ... except ParseException: ... print 'except!!' # バージョンチ…

pdb

今まで専らpythonのデバッグはimport pdb;pdb.set_trace()でした(笑) そろそろemacs上でもデバッグしたいなぁと思い先日emacsのgud-pdbモードを試してみたのですが、まずシェル上からpdbコマンドを呼べるようにしておく(gudの命令を変更するでもたぶん可?)…

emacs23のpython-mode

emacsは22から使い始めた新参者です。そのころからpythonのアウトライン表示にはoutline-minor-modeを使っていました。しかしこれだとしっくり来なくてずっとガマンして使っていましたが、ふと思い立ってcc-modeで使ってるhs-minor-modeが使えないかなと"ema…

ズームインツール

VisualStudioに付属してたZOOMIN.exeがお気に入りだったんですが、最近は付属されないようで。wxの練習がてら作ってみました。 # -*- coding: utf-8 -*- import wx class MainFrame(wx.Frame): def __init__(self): super(MainFrame, self).__init__(None, w…

基底クラスのコンストラクタ呼び出し

class MainFrame(wx.Frame): def __init__(self): super(type(self), self).__init__(None) 基底クラスのコンストラクタを呼び出す際superを使っていますが、継承元クラス呼び出し用にtype(self)を使っていたけど、これってさらに継承すると破綻しますね。 c…

すげぇぇぇ!!

http://www.fooooo.com/watch.php?id=OMi-uN-6O1Q なんじゃこりゃ。pycomplete入れただけで喜んでる場合じゃないな。 これ調べてみよう。rope? 入れてみた rope: pythonリファクタリングライブラリ ropemacs: ropeを利用するためのemacs mode yasnippet: ス…

コマンドライン引数を無駄にif分岐しない方法

if len(sys.argv) < 2 or sys.argv[1] is None: print '-NONE-' else: print sys.argv[1] これを短くしたい。 try: print sys.argv[1] except: print '-NONE-' ぼちぼち。try/exceptは複数行になるしあんま好きじゃない。 print '-NONE-' if len(sys.argv) <…

ファイルブラウザ2

作ってみた。 表示してるのは%DXSDK_DIR% バージョンコントロールのアイコンとコンテキストメニューつければリポジトリブラウザの完成 しかし、相変わらず気合が入らない

アイコンのオーバーレイ

自分用tips:No.2。アイコンにoverlayを入れてみる。サンプルはTortoiseOverlayのオーバーレイアイコン。 import os import wx class MainFrame(wx.Frame): def __init__(self): super(type(self), self).__init__(None, wx.ID_ANY, 'Icon Overlay') tree = w…

ファイルブラウザ

os.listdirでファイル列挙 アイコン管理 wx.TreeCtrlに標準で複数選択があるのはうれしい

タスクバーアイコン

自分用tips。タスクバーアイコンを使う。最小化時にはタスクバーからウィンドウを非表示。アイコンがクリックされたらウィンドウを表示。 import os, sys import wx class MainFrame(wx.Frame): def __init__(self): super(type(self), self).__init__(None)…

パジャマ

http://pyjs.org/pyjamas JavaからJavaScriptを生成するGWTのpython版らしい。pythonからJavaScriptを生成する。 これは興味あり。後日試す。