technology from back to front

Archive for May, 2010

Little Brother: spying on yourself for fun and profit

One of the internal tools that some of us use is a little script called getcap. Using the venerable xwd and ImageMagick, along with a bit of shell scripting it gets run by cron 8 times an hour and dumps a screen capture into a hidden folder in your home directory. As you can imagine, this is the sort of thing that if someone else was doing it would be a nasty invasion of privacy, but if you’re doing it for yourself, it becomes invaluable for accurately filling in timesheets, especially when you’re busy juggling 3-4 different projects.

I’d run into a few problems with it however, primary being that xwd doesn’t play nice with compositing, and so my Docky instance at the top of the screen looks like a big black patch across the screenshots, which occasionally blocks useful information.

I’ve therefore written a replacement, called LittleBrother, using primarily Python and gtk. Initially I was just following the instructions on the PyGtk FAQ on how to capture your screen, but then I figured I could do a bit more. So, we now have a little status bar icon that lets you open up the screenshots folder (using xdg-open so the right file manager gets used), and instead of having to hardcode in the times when you’re in the office, it instead uses the DBus interface of the Gnome screensaver (patches for other screensavers welcomed) to detect when the screensaver is active, and only take captures when it’s inactive. I found the D-feet DBus introspection tool particularly useful for playing around with this step.

Code is available on Github, and there’s even a Debian package available as well.

Tom Parker

RFC3339: Simple, canonical date parsing and formatting for Python

As part of a customer project some years ago, we wrote an [implementation]( of the interesting parts of RFC [3339]( for Python. The abstract for the RFC says

> This document defines a date and time format for use in Internet
> protocols that is a profile of the ISO 8601 standard for
> representation of dates and times using the Gregorian calendar.

We needed to be able to robustly transfer timestamps between languages (Javascript and Python, chiefly) without getting tangled up in timezone troubles or complex ambiguous parsing problems.

Our code provides

* simple, standard, robust, cross-language (e.g. Javascript) format for parsing and printing time stamps
* a standard no-frills “UTC” `tzinfo` class and singleton instance
* a standard no-frills fixed-offset `tzinfo` class
* other utilities for helping write robust timezone-aware time manipulation code


These examples are taken from the doctests/docstrings in the module source itself. See the module documentation for many more informative examples.

Parsing a timestamp, with timezone support and timestamp equivalence:

>>> midnightUTC = parse_datetime(“2008-08-24T00:00:00Z”)
>>> oneamBST = parse_datetime(“2008-08-24T01:00:00+01:00″)
>>> midnightUTC == oneamBST

Printing a timestamp:

>>> oneamBST.isoformat()
>>> parse_datetime(“2008-08-24T00:00:00.123Z”).isoformat()

Downloading the code

The code is [available on github]( It’s [MIT-licensed](

* Browse the code [here](
* Download a [tarball]( of the latest code

You can also install the module directly from github using `pip`:

pip install -e git://


A two-dimensional swingometer

In addition to our swing visualizer in Java, we now have something closer to a two-dimensional swingometer in JavaScript. Not quite as polished as I’d hoped this late, but still useful in an unpredictable election. I hope to be updating both on election night. Suggestions welcome!

Paul Crowley



You are currently browsing the LShift Ltd. blog archives for May, 2010.



2000-14 LShift Ltd, 1st Floor, Hoxton Point, 6 Rufus Street, London, N1 6PE, UK+44 (0)20 7729 7060   Contact us