Using smbus with Python 3 on a Raspberry Pi

A while ago I got an Orange Matchbox, which is a Raspberry Pi running Snappy Ubuntu Core together with an Ubuntu branded case and a PiGlow. The Snappy image for Raspberry Pi recently got support for I2C, so I tried to drive the PiGlow using Python 3. It turned out...

VLAN tagging with Linksys E8350

I bought a Linksys E8350 router to replace the router my ISP gave me as well as an old Linksys WRT610N router. I chose the E8350, since from the setup screenshots it looked like it could do VLAN tagging, which I need. I was disappointed at first, since the UI...

Enabling middleclick scrolling in Ubuntu for Lenovo clickpads

The short version is that if you want to enable middleclick scrolling for Lenovo clickpads in Ubuntu, do this in a terminal: sudo add-apt-repository ppa:bjornt/evdev sudo apt-get update sudo apt-get dist-upgrade The commands above should upgrade the xserver-xorg-input-evdev package, as well as remove the xserver-xorg-input-synaptics and xserver-xorg-input-all packages. Next you...

Using web.go on Google App Engine

In short, if you want to use web.go in Google App Engine's Go runtime environment, check out my google-app-engine branch of web.go. Using that one you can start using web.go like this: package webgoexample import ( "http" "log" "os" "web" ) var server *web.Server func init() { server = &web.Server{...

formataddr() and unicode

I often see code like this: message["To"] = formataddr((name, email)) This looks like it should work, especially since the docstring of formataddr() says that it will return a string value suitable for a To or Cc header. However, while it works most of the time, it fails if name is...

Problems with drive-by fixes

To start with, I think drive-by fixes are great. If you see that something is wrong when fixing something else, it can be a good idea to fix it right away, since otherwise you probably won't do it. However, even when doing drive-by fixes, I still think that each landed...

RFC: Expose features to users when they are done, not once a month

I've been working on a new release/merge workflow for Launchpad. I've written it from the developers' point of view, but I'd love some comments from users of launchpad.net, so let me try to explain how you, as users, would be affected by this change. The proposal is that we would...

Technical Architect Roadmap

I made the transition from the Bugs team lead to the Launchpad Technical Architect quite a while ago. While the first time was spent mainly on satisfying my coding desires, it's time to define what I'm going to spend my time as technical architect! My road map that shows the...

Windmill - so far, so good

We've used Windmill in our Launchpad buildbots for a while now, and it's actually worked out quite well. I was afraid that we would have a lot of fallout, since in the beginning Windmill was fragile and caused a lot of intermittent test failure. However, so far I'd said that...

Block on test failures

I can't stress enough how important it is to automatically block, stop the line, when a regression occurs. Forcing someone to take action. Don't think it's enough to have tests to catch regressions. It won't help you much, unless you run them automatically, and most importantly, block on test failures,...

Think about integration issues

When doing work on something that is supposed to be used by others, don't forget to think about how it's actually going to be used. Not only to think about it, but to actually try it out, to confirm that it works nicely when integrated, and that it's easy to...

Wanted: bzr plugin to manage branches in Launchpad

I will probably implement this myself at some point, but if anyone wants to use their bzr and launchpadlib skills to make the world a slightly better place, I'd be grateful. You don't even have to have any bzr and launchpadlib skills, both are quite easy to get started with....

Dealing with USBError: No Error

In PyGarmin, I used PyUSB to implement USB support, and I was struck with one odd error. Sometimes, a USBError was raised, with the error message "No error". I couldn't find any documentation for this, and I still don't understand why an error was raised, saying that there was no error. The error happenend when trying to read from the bus for the first time, after trying to send two packet without any errors....

Version 0.3 of garmin-sync

It's been a while, but I've finally found some time to work on pygarmin and garmin-sync again. This has resulted in a new version of garmin-sync, 0.3. Not much has changed since 0.2; the biggest changes are in pygarmin itself. In general, this version should work better for people who...

Version 0.2 of GarminSync is released

The first version of GarminSync didn't work too well. It did download the runs from the GPS, but the resulting .tcx files were not valid, so they couldn't be uploaded to motionbased.com. Also, if there were pauses in the run, some track points weren't included in the exported. I've now...