1. django.test.TestCase and subclasses don’t warn you if the fixtures specified in their fixtures list don’t exist — double check naming if your tests mysteriously start failing or run suspiciously quickly

  2. Watch out for dict-based string interpolation examples which look like this:

    'Hello, %(name)s' % {'name': 'Otter'}
    

    That s after the brackets isn’t pluralising one adorable aquatic mammal into a whole bunch of them, it’s actually part of the interpolation placeholder — the equivalent of

    'Hello, %s' % 'Otter'
    

    Note also that for some reason, python lets you put spaces between the closing bracket and the type signifying character. This can cause extremely weird bugs when the string being interpolated is also being translated. For example:

    _('%(customer) shared a thing') % {'customer': 'Mr. Bean'}
    

    If not translated, this will produce this confusing but fairly easy to debug output

    'Mr. Beanhared a thing'
    

    But if 'shared' is translated into a word beginning with, for example, d, you’ll just get an exception like TypeError: A float is required

  3. Also in today: learning about I2C communications. Tips+resources:

    • @adafruit have a helpful guide to Setting up your Pi for I2C — remember to reboot after enabling I2C modules
    • All commands which access I2C need to be run as root using sudo
    • If you’re not sure which address a particular device is at, run sudo i2cdetect before and after plugging it in and see which address changed
    • If there are libraries available for easily talking to the device you’re using, make use of them. Do this first even if you want to learn about the lower level communications too to ensure that your device is working correctly.
    • Get to know i2cdump, i2cset and i2cget, they’re super useful for poking around in I2C devices

    I cobbled together a class for communicating with the ADXL345 by cross-referencing between the Arduino library for that chip and Adafruit’s I2C library, only to find that someone else had done so only hours earlier!

  4. I get a little annoyed at every now and again (grr package management) but then I come across things like nested tuple unpacking which are just so lovely they make up for it:

    for i, (key, value) in enumerate(list_of_tuples):
        print i, key, value
  5. Loving Django’s prefetch/select_related — that, along with a few small changes, reduced a task which was taking > 500,000 queries to 4558

  6. tip: if you come across weird inconsistencies between apps when trying to serve static files in dev, run with runserver --insecure even if you have DEBUG=True

  7. Spent ~3 hrs with the office arduino+ethernet shield and my old favourite pyo and I’ve got a light/flex controlled synthesiser over OSC. I dread to think how many weeks it would have taken me to implement this on a PIC.

  8. Building a document templating and styling system in . Been meaning to do this for a long time, finally the awkwardness of using indesign for my contracts, invoices and estimates has become too stupid

  9. Doing some wxPython programming. “Menu” is one of those words that, when you look at it properly, looks really weird :s