pycallgraph 0.5.1 released

Last week I quietly released pycallgraph 0.5.1 with some outstanding bugs fixed and preparation for it to be a Debian package.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Create a fast C Python extension with Cython tutorial

Cython is an easy way to create Python extensions in “pseudo-Python” without having to deal with the verboseness of the Python API. It also does not rely on you knowing much of the C language. Cython is based on Pyrex which I have some experience with. This tutorial shows you how to convert a simple Python module to a Python extension.

Read the rest of this entry »

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

TracRecaptchaPlugin 0.1.0 - A CAPTCHA plugin for Trac

I decided to make a CAPTCHA plugin for Trac called TracRecaptchaPlugin, to stop spammers using the ticket system. There is an existing Trac plugin to fight spammers, but it still lets through many automated spammers.

The plugin uses the reCAPTCHA service and is serving me well so far. Here’s how it looks within the template:

TracRecaptchaPlugin Screenshot

This is my first publicly released Trac plugin so I’m unsure how it’ll perform out there, so feedback is welcome.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Python Google Chart 0.2.0

I released pygooglechart 0.2.0 this afternoon after several months of patches coming in to add features and fix bugs. The main addition to pygooglechart is automatic data scaling, which is turned on by default. You can also specify the scale range manually:

chart = SimpleLineChart(width, height, x_range=(0, 100), y_range=(0, 100))

Other features are the new API chart types and options. There are 3 new chart types: Map, Google-o-Meter and Radar. Here is an example of using the Map chart type:

import pygooglechart as gc

chart = gc.MapChart(440, 220)
chart.set_colours(('AAAAAA', '30A030', 'A0C030'))
chart.set_codes(['AU', 'US', 'CA', 'BR', 'NZ'])
chart.add_data([1, 0.5, 0.7, 0.3, 0.1])
chart.download('map.png')

Produces the URL:
http://chart.apis.google.com/chart?cht=t&chs=440×220&chd=s:9frSG&chco=AAAAAA,30A030,A0C030&chtm=world&chld=AUUSCABRNZ

And the image:

The Google-o-meter has a funny name. Here is an example of its usage:

import pygooglechart as gc

chart = gc.GoogleOMeterChart(440, 220, y_range=(0, 10))
chart.set_pie_labels(['Awesome'])
chart.add_data([8])
chart.download('gom.png')

It produces this URL:
http://chart.apis.google.com/chart?cht=gom&chs=440×220&chd=s:x&chl=Awesome

And the image:

Well, have fun. Please write a ticket for any bugs, patches or feature requests you have.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Mixing IPython and autoimp

IPython is great for typing up quick tests. Unfortunately it is annoying when you have to import modules just to use it for one or two commands. autoimp is a Python module where it automatically imports modules when you refer to them. It works well with IPython simply by adding “import_all autoimp” somewhere in your “~/.ipython/ipythonrc” file.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Changed blog theme

I’ve got a large list of things to do, but decided to finally implement my new HTML/CSS theme to this blog. Tell me what you think or see any problems with it. I will use the same theme with the slowchop.com project sites.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Release Update

Just a quick update. I have recently made some Python releases.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

BetterPrint

I find readability very important when reading data. It saves time and energy. To me, Python’s pprint module is not easy to read in a lot of cases so I made my own. This is how pprint looks like at the moment:

BetterPrint is based on a lot of the source code, which looks about 10 years old. It makes more sense to me to have braces aligned by column rather than jammed together inline. BetterPrint also introduces colour to increase readability even more. As you can see from the following screen shot:

BetterPrint is compatible with Python’s pprint module, so you can simply “import betterprint” aliased as pprint like so:

try:
    import betterprint as pprint
except ImportError:
    import pprint

If you have setuptools installed simply run “easy_install betterprint”, or visit the web page for more details and installation instructions.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Human Readable JSON Greasemonkey Script

After promising myself to do it after many months, I’ve finally written a Greasemonkey script to reformat JSON output to be easily readable by a human. I may do cool things like syntax highlighting and expandable branches in the future, if the need and/or time arises.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Python Call Graph 0.4.0

I’ve just released pycallgraph 0.4.0. It has several major new features including a command line interface and measuring accumulative time per function.

The 0.4.0 pycallgraph CLI supports function filtering, timing filtering, maximum stack level and a few more settings. For example, to do a simple call graph on “myfile.py”:

pycallgraph-dot.py myfile.py mygraph.png

Here’s an example that doesn’t include the class Foo and outputs to a SVG file format:

pycallgraph-dot.py –exclude=”*.Foo.*” –image-format=svg myfile.py myfile.svg

Turns out far easier than modifying your source code to create a call graph.

Here’s one of the graphs from the source code examples colours.py:

Orange Green Example

As you can see it has green and orange gradients. One end of the gradient is green because of the number of calls is high and the other is orange because the function calls are taking the longest. All that with a function that looks like this:

def orange_green(calls, total_time):
    """Make a higher total time have an orange colour and a higher number
    of calls have a green colour using RGB.
    """
    return '#%02X%02X%02X' % (
        0x30 + total_time * 0xc0,
        0x30 + calls * 0xc0 + total_time * 0x70,
        0x30,
    )

I hope it’s useful to you!

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

SQLAlchemy Cheat Sheet

I’ve made a small quick reference guide to SQLAlchemy if anyone is interested. I’ll update it as often as I have to look up something in the official documentation.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Releases and Projects

For the lack of updates, here is an update:

  • Just released pycallgraph 0.3.1 which fixes a few bugs.
  • This week hopefully releasing a pre-alpha of c80 which is an AJAX IRC client.
  • Development of VirtuShare, a transparent peer-to-peer networking service, is still in progress.
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

New design for project web sites

I’ve redesigned the Trac project web sites. For example pyraknet and pycallgraph have the new layout. Feedback is welcome!

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

pyraknet 0.1.4

I have released pyraknet 0.1.4! For those who don’t know… it lets you easily apply multi-player networking to your python game pretty easily. Enjoy!

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Apache replaced with lighttpd

After the web server slashdotting I decided to install and set up lighttpd to replace Apache. Pages seem to load quicker now!

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

pycallgraph.slowchop.com disabled temporarily

pycallgraph has been slashdotted.

I’ve temporarily disabled the vserver until Gerald can debug the problem.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Python Call Graph 0.2.0

Within 24 hours of releasing version 0.1.0, I’ve released 0.2.0 of pycallgraph. It’s just so fun to play with Graphviz…

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Python Call Graph

I have just released pycallgraph which can create call graphs for Python programs. Quite useful for working out how Python programs work and to see if you have any problems in your program flow.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

pyraknet 0.1.3

I’ve been releasing new versions of pyraknet like a mad man. pyraknet 0.1.3 has been released with the major change being a new Windows binary for Python 2.5. Other things include documentation, tests and one new method.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon

Server stats

For the curious, some stats on this Apache server since it started logging traffic.

  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • description
  • Reddit
  • StumbleUpon