Personal tools
Document Actions

CUIベースなのに無駄にビジュアルなPython用デバッガ - pudb

by ats posted at 2010-02-09 11:05 last modified 2010-02-09 11:05

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 python

import 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 wrapper

if __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

クロスクラウドな合コンを開いた

by ats posted at 2010-02-04 13:22 last modified 2010-02-04 13:24

事の発端は,英語学校の発表会の後,開放感からすっかり酔っぱらった僕が,女性のお友達の前で「いいですよ,合コン開きましょう」と言ったこと。果たして,IT系のお知り合い(男性)と,英語学校のお友達(女性)という,普段まったく違うクラウドで暮らしている方々の合コンとなったのでした。

一般的に,合コンの主催はIT系勉強会より1万倍難しいと言われています。参加人数がそこそこ多かったこともあって,日程の調整は大変だったかなあ。それでもなんとか,1月末にはめでたく開催。 僕が男性から「柴田さん」と呼ばれていることに女性はウケてた。逆に男性は,僕が女性から「あつし」「あっちゃん」と呼ばれている(英語学校では日本語禁止なので,ファーストネームで呼び合う)ことウケてた。どっちも僕にとっては普通なんだけどなあ。

みなさん気があったみたいで,楽しく時間が過ぎてゆきました。ずいぶん遅くまでいたよねえ。会が終わった後も,「楽しかったです」「今度はボードにでも」というようなメールが飛び交ってました。また近々,鍋でもやりにあつまったりするのかな。

少しでも幸せのお裾分けができたのなら良かったです:-)。

Mac用TwitterクライアントPwitterをカスタマイズしてリスト機能対応にしてみた

by ats posted at 2010-01-26 01:01 last modified 2010-01-26 01:01

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)
ネット怖い

hbstudy7

by ats posted at 2010-01-17 07:37 last modified 2010-01-17 07:37

hbstudy7にてGAEのお話をさせていただきました:-)。ご来場いただいた皆様,スタッフの皆様,ありがとうございました。

  • 普段の倍くらいの方々に来ていただいたらしい
  • Googleの選挙キャンペーンやったときに一緒にがんばったみなさんが来てくれたのが嬉しかった:-)
  • 女性の姿もちらほら,女性の居ない集まりには滅多に出ないので普通か,と思ったんだけど,常連らしき方が「女性がいたよね」的な話をしていたので,なんか珍しかったのかなと思う
  • アプリケーションエンジニアより,インフラよりのエンジニアが多かったのかな?
  • もう一つのセッション,バックアップの話も面白かった〜。RDBMSのバックアップは便利そうですよね〜
  • チョコもらった:-)
  • 「Python王子」を襲名した:D
  • 「一人だけピンク」と言われたりした:->
  • 懇親会でPerlのコミュニティのすばらしさについて松尾さんと話すなどした
  • 僕がすばらしいと思うエンジニアが持つ共通した資質について考えたりした
3日後にも再びGAEのお話をするのです(今度はクローズドな社内勉強会)。
Category(s)
python
Pythonな求人
r = urlopen("http://www.webcore.co.jp/recruit")
About this blog
■Author


atsこと柴田淳です。この記事を読んでいただくと,技術者としての人となりを分かってもらえるかも。
Webcore株式会社 代表取締役
Plone上で動く,オープンソースのBlog Product - COREBlog2を使って運用しています。

最近書いた原稿
最終回 Python 3.0座談会(動画つき) 2009-07-16
Python 3.0 Hacks 第6回 Pythonicな文字列フォーマットforamat()メソッド 2009-03-30
言語としての一貫性を重視したPython 3の進化 2009-02-20
Python 3が後方互換性を捨てても求めたもの 2009-02-02
Python 3.0 Hacks : 第0回 Pythonの2008-2009 2009-01-01
 
最近書いた本,Mook
みんなのPython 改訂版
Python使いはもちろん,プログラミングの初心者から,他言語からの移行組までご好評いただいているPythonの定番入門書の第2版です。Python 3.0を含む最新の情報について加筆を行い,より読みやすいように構成を大幅に見直しました。第一版をお持ちの方にもお役立ていただける内容になっています。
みんなのPython Webアプリ編
Pythonの基礎から,Webアプリやフレームワークの仕組みまで,つまることなく一気に学べる書籍です。「みんなのPython」と一緒に読んでください:-)。
 

Powered by Plone, the Open Source Content Management System