Python

Python用プロファイラPyXdebugを作った

PHPのXdebugみたいな感じ。 PyPIに登録した。 今のところ、1.2.2が最新。 pyxdebug 1.2.2 : Python Package Index http://pypi.python.org/pypi/pyxdebug インストール # easy_install pyxdebug メソッド実行をプロファイルする example_call_func.py #!/usr…

PythonでPHPのXdebugみたいなプロファイラ作った

作ってみたのはいいけど、WSGIで正しく動かない。 あと動作が遅い。 xdebug.py # set encoding=utf-8 import inspect import types from time import time import re import traceback import logging classname_reg = re.compile(r"<class '([^']+)'>") class Xdebug(object)</class>…

GAE/Pでスレッドの排他制御(synchronized)をする

Javaのsynchronized修飾子みたいなのを、デコレータで出来るようにした。 Memcacheを使ってる。 デコレートしたメソッドごとに排他制御出来るようにした。 synchronizedの引数でオプション指定が出来る。 オプションは、key / key_prefix / sleep_time / ret…

GAEでPython2.7を使ってthreadsafeを有効にする

なんだか解りづらいからメモ。 目的 本番サーバで、マルチスレッドで動かす。 開発サーバでも動くようにする。(残念ながらシングルスレッド) データストアはHigh Replication datastore必須 Python2.7を使う場合、データストアはHigh Replication datastor…

GAEでセッションを管理するライブラリ作った

gaeutilitiesとかを使うのが一般的なんだろうけど、なんとなく気に食わなかったから作りなおした。 機能 memcacheだけを使う。 速い。 db.Modelは、遅いから使いたくなかった。 特にStorage SchemaがHigh Replicationの場合、めちゃくちゃ遅いて無理だった。…

MacでDropbox Folder Locationを変更する

Dropbox Folder Locationを変えても、必ず"Dropbox"というディレクトリは作られてしまう。 これはなかなか邪魔臭い。 で、変更するスクリプトをPythonで作った。 使い方。 $ change_dropbox_folder_location.py '/Users/eth0jp/Documents/files' ソース。 #!…

NagiosでCPU使用率を調べるプラグインを作ってみた

CPU使用率を調べるプラグインは世の中にいろいろ出回ってるっぽいけど、何が重いかを調べられるのが見つからなかったので、自分で作った。 $SERVICEOUTPUT$がプラグインの出力に置き換えられるっぽいけど、なぜか1行目しかメールで来ない。 Webからはちゃん…

XenServerのライセンス期限が近づいたらメールで通知するようにしてみた

XenAPIでライセンスの期限を調べて、期限が近づいてたらメールで通知する。 コマンドラインだと、このコマンド。 xe host-license-view メールは、普段ならPostfixを入れるけど、XenServerのホストマシンには殆ど何も入れられないから、元々入ってるPythonで…

Dropboxの仕様を調べてみた

セキュリティ部分について調べるつもりが、何か別の所まで調べてしまった気がする。 C:\Documents and Settings\USERNAME\Application Data\Dropbox\host.db 1行目 16進数表記の文字列。 16進数表記で40バイト。 バイナリ表記で20バイト。 2行目 Base64エン…

Pythonの型をPHPに移植してみた

文字列とか配列とかのスライスって使い易い! 辞書って使い易い! って所から始まって、ついやりすぎてしまった。 とりあえず名前はPHPyとしておいた。 多分Strは日本語非対応。 意外と時間かかった…。 移植した型 ・Tuple ・List ・Dict ・Frozenset ・Set …

FUSE PYTHONでG-Storageをマウント出来るようにしてみた

前回、PHP FUSEでG-Storageをマウント出来るようにしてみた - yoshida_eth0の日記で作った奴だと、書き込みが出来なかった。 だから今回はPythonでやってみた。 実行するには、easy_installでoauthとtlsliteを入れる必要あり。 インスタンス変数をチェックす…

PythonでMD5を車輪の再開発してみた

やっと出来た。 なんか合わない…と思ったらunsigned intの最大値を超えてビット演算してた。 ソース #!/usr/local/bin/python # set encoding=utf-8 import math # define def F(x, y, z): return ((x & y) | (~x & z)) def G(x, y, z): return ((x & z) | (…

PythonでBase64を車輪の再開発してみた

Pythonの練習も兼ねて。 as3cryptoを参考に。 Pythonの場合StaticMethodにせず、直にdefを定義するべきだったのかな。 Base64 encode 3バイト入力して、6ビットずつに分割して、4バイトで出力する。 これで0〜63で表せる。 余ったら=を入れとく。 decode 4バ…

Pythonの関数の引数の挙動について調べてみた

Pythonの関数の引数の挙動が奇妙だったので、調べてみた。 今日久々にPHPやったら、幾度となく変数の$を書き忘れた。 デフォルト値 PHPとかと同じでデフォルト値を指定出来る。 def funcA(a=None): キーワード引数 関数を実行する時の引数に「xxx=」がつくの…

Google App Engineの開発サーバをApacheのVirtualHostにマッピングする

Google App Engineの開発サーバはdev_appserver.pyを起動してなくちゃいけなくて面倒。 デフォルトでは、ポート8080で127.0.0.1に対してバインドするようになってる。 Tomcatの動いてるサーバを使って外から開発したい場合、portとaddressを指定しなくちゃい…

PythonフレームワークDjangoをインストールしてみた

今回はやらないけど、最終的にはGoogle App Engineで何か動かしたい。 PythonフレームワークDjangoをインストール Pythonのバージョンが2.4の場合は多分これでいい。 CentOSの場合、Yumのせいで2.4がデフォルトになってるはず。 yum -y install python-setup…

Pythonをやってみる CGIとmod_pythonの違い

欲しい情報がどこ探しても見つからなかったので自分で検証。 PythonのHelloWorld総まとめ。 CGI 特徴 ファイルに実行権限を与える必要がある。 1行目は必ずヘッダーを送信する必要がある。 httpd.conf / .htaccess AddHandler cgi-script .py hello.py #!/us…