CUIベースなのに無駄にビジュアルなPython用デバッガ - pudb
pudbは,CUI環境(つまりシェル)で動くGUIライクなデバッガ。Pythonには標準でpdbというデバッガがついてくるけど,コマンドラインベースでちょっと使い方が面倒だよね。pudbはpdbよりノリがいい。まあスクリーンショットを見てもらうのが早いかな。
CUIベースでGUIっぽいことをするというのは,レトロなノリだよなあ。でもCUIベースならシェルが動く環境ならどこでも動く,という利点もある。ローカルのPythonでもssh越しのPythonでも,シェル上なら同じように動くというのは嬉しい。
インストールは簡単。いつものごとくeasy_installを使って「$ easy_install pudb」でOK。デバッガを実行中,使い方が分からないときは「?」を押すとインストラクションが出てくる。
とりあえず覚えるべきコマンドは4つくらいかな。
- s : ステップ実行(ステップイン)
- n : ステップ実行(ステップオーバー)
- c : 実行の継続
- b : ブレークポイントを置く,消す
さて,デバッガが有効なのは開発の場面ばかりではない。入門者がデバッガを使うと,プログラミングの学習につながる。デバッガでコードを見つつ,変数などを確認しながら,プログラムの挙動を学べる,という利点がある。SDの木村明治さんの記事にも同じようなことが書いてあったな。逆に,Pythonの達人になるとデバッガを使わないらしいけど。僕もあまり使わないかな。
さて,試しにpudbを使ってPythonの簡単なプログラムの挙動を見てみよう。Pythonの機能の中でも比較的分かりづらい「デコレータ」がどのような動きをするのか,pudbを使ってソースコードを追いながら確認してみる。
まず,以下のソースをファイルに保存する(ファイル名はdectest.pyとしておく)。ちなみにこのコードは,inspectモジュールを使って関数の引数情報を取り出し,表示する,という簡単なプログラム。
#!/usr/bin/env pythonimport inspect from pudb import set_trace; set_trace()
def sessionmethod(func):
f = func def wrapper(*params, **kwargs): arg = inspect.getargspec(func) print arg #if 's' in params[0] and return func(*params, **kwargs) return wrapperif __name__ == '__main__':
@sessionmethod def foo(hoge, s=None): print "FOO!" foo(1, s=2)
上の方に「from pudb import set_trace; set_trace()」という行が見える。これがpudbを呼び出すおまじない。
次に,このコードを実行する。「$ python2.5 -m pudb.run dectest.py」というコマンドを入力すると,pudb上でコードを実行できる。早速pudbを使ってプログラムの実行状況を見ながら,コードを実行してみよう。
sessionmethod()関数の直下や,内包関数wrapper()の直下に「b」キーを使ってブレークポイントを設置してコードを実行してみよう。ステップイン,ステップオーバーを使い分けながら実行すると,デコレータがどのようなタイミングで呼ばれているのか目で確認できるはずだ。
このデコレータは関数の定義時に呼ばれる部分と,関数の呼び出し時に呼ばれる部分に分かれているんだけど,どのような仕組みになっているのか,よく分かると思う。
挙動が把握しにくいコードは,デバッガを使って動きを追って見ると,仕組みが理解しやすいのです。
- Category(s)
- python
-
- ¦
- ¦
- Permalink
- ¦
- Comment (1)
- ¦
- Trackback (0)
クロスクラウドな合コンを開いた
事の発端は,英語学校の発表会の後,開放感からすっかり酔っぱらった僕が,女性のお友達の前で「いいですよ,合コン開きましょう」と言ったこと。果たして,IT系のお知り合い(男性)と,英語学校のお友達(女性)という,普段まったく違うクラウドで暮らしている方々の合コンとなったのでした。
一般的に,合コンの主催はIT系勉強会より1万倍難しいと言われています。参加人数がそこそこ多かったこともあって,日程の調整は大変だったかなあ。それでもなんとか,1月末にはめでたく開催。 僕が男性から「柴田さん」と呼ばれていることに女性はウケてた。逆に男性は,僕が女性から「あつし」「あっちゃん」と呼ばれている(英語学校では日本語禁止なので,ファーストネームで呼び合う)ことウケてた。どっちも僕にとっては普通なんだけどなあ。
みなさん気があったみたいで,楽しく時間が過ぎてゆきました。ずいぶん遅くまでいたよねえ。会が終わった後も,「楽しかったです」「今度はボードにでも」というようなメールが飛び交ってました。また近々,鍋でもやりにあつまったりするのかな。
少しでも幸せのお裾分けができたのなら良かったです:-)。
- Category(s)
- 煮詰まったから2.0
-
- ¦
- ¦
- Permalink
- ¦
- Comment (0)
- ¦
- Trackback (0)
Mac用TwitterクライアントPwitterをカスタマイズしてリスト機能対応にしてみた
Twitterのアカウントはもともと「Follower100人ルール」で運用してきたんだけど,だんだんFollowしてくれる人が増えてきてめんどくさくなって来た。せっかくFollowしてくれるのにFollowしかえさないのも失礼だし。Follow数が10人くらいと少なくて,つまりTwitter始めたばかりで,他の著名エンジニアさんに混じって僕をFollowしてくれる人を見かけるとどうもね。今非Follow数が888,Followingが230くらい。
ただ,このまま行くと,時間と共にタイムラインがとんでもないことになっていくのは目に見えている。特に見知った方々とのTwitter上でのコミュニケーションに支障を来すのは本意でない。
そこで,常用しているMac用のTwitterクライアントPwitterをカスタマイズすることにした。Pwitterはソースが公開されているし,必要な機能を追加するのは簡単だ。
まずPwitterが依存している,MGTwitterEngineがリストAPIに未対応だったのでこれを拡張。あとはUIビルダーを使ってメニューのあたりをちょちょっといじって,メニューから項目を選んだときだけ,TLに特定のリスト上のユーザだけを見せるように改良。後はデバッグして,ビルドして,終わり。
XcodeもObjective Cもあんまり使ったことないけど,まあ簡単かな:-)。このまま,iPhoneのアプリをがりがり作る人になってしまいそう:-)。
- Category(s)
- ネット怖い
-
- ¦
- ¦
- Permalink
- ¦
- Comment (0)
- ¦
- Trackback (0)
hbstudy7
hbstudy7にてGAEのお話をさせていただきました:-)。ご来場いただいた皆様,スタッフの皆様,ありがとうございました。
- 普段の倍くらいの方々に来ていただいたらしい
- Googleの選挙キャンペーンやったときに一緒にがんばったみなさんが来てくれたのが嬉しかった:-)
- 女性の姿もちらほら,女性の居ない集まりには滅多に出ないので普通か,と思ったんだけど,常連らしき方が「女性がいたよね」的な話をしていたので,なんか珍しかったのかなと思う
- アプリケーションエンジニアより,インフラよりのエンジニアが多かったのかな?
- もう一つのセッション,バックアップの話も面白かった〜。RDBMSのバックアップは便利そうですよね〜
- チョコもらった:-)
- 「Python王子」を襲名した:D
- 「一人だけピンク」と言われたりした:->
- 懇親会でPerlのコミュニティのすばらしさについて松尾さんと話すなどした
- 僕がすばらしいと思うエンジニアが持つ共通した資質について考えたりした
- Category(s)
- python
-
- ¦
- ¦
- Permalink
- ¦
- Comment (0)
- ¦
- Trackback (0)





