Launchpad is now fully open source

As promised, Launchpad has been fully open sourced (as opposed to the initial idea, nothing has been held back). Get it now, fix your favorite pet bug, and improve tens thousands of people’s experience.

Mark Shuttleworth really deserves a lot of praise for this bold and brave move, open sourcing not only the code, but allย  it’s history. It’s a fantastic day today.

Update: yes, fully means including soyuz and codehosting, Mark has decided to release everything. The whole history is there.

See the loggerhead page:


Working at Canonical, 5 months later

A week ago I started going through my blog’s logs, and realized that I’d had a jump in visits from Google. Digging a little bit deeper into it, I realized that a lot of people seem to be searching for “working at canonical” phrased in different ways. From what I can gather, it’s split up into two groups: people who want to find a job in Canonical, and people who are considering a specific role and want to know what it’s like.

So, I thought it would be useful to provide information for the dozen of people who land here every dayย  ๐Ÿ™‚

If you want to work for Canonical, check out the employment page, it always has the latest job offers:
Among many other things, my team is currently looking for awesome people to join the User Experience Team, the coolest place to be todayย  ๐Ÿ˜‰

As for what it’s like to work at Canonical, here’s my take on it:
At this point, it’s been a little over five months since I started working full time, although I was doing some contracting work before that, and I’ve been around the Ubuntu and bzr community for ages, so I already knew a lot of the people before joining.
One of the coolest things for me is that the way most of the company works, is basically the same as your typical open source project: mailing lists, irc, distributed, and filled with passionate people. If you have an open source background, the transition should be pretty seamless. Coming from other companies may take a little bit of getting used, but you know how it is, “your mileage may vary“.
The Ubuntu-like atmosphere where everybody is extremely nice and respectful seems to span across the whole company as well. This was especially surprising to me considering that everyone is astonishingly smart, and have done amazing things I had read (and still do!) on news sites for years. My experience is that when too many smart people are together, it’s a much more cut-throat competitive environment. Here, it is not. You could sit down and have a fantastic and interesting dinner with anyone in the company (I’ve shared meals with dozens of different people, and it’s held up true every single time).
On the technical side, all the teams are constantly revising and improving work flows and tools, pushing towards the cutting edge by adopting all kinds of lean and agile development strategies, while still being very much test-driven. What can be more appealing to a developer than that?
Finally, there are so many interesting projects being worked on at the same time, it’s often very hard to keep up with what’s happening. Personally, I believe that the balance between open source development and projects developed in-house as services or for third parties, plays a very big part in making everything happen so fast a two-hundred-and-something people size the company. It’s amazing how so many people are payed to work full time on directly on free software, directly interleaved with the community.

So, as you can guess, my recommendation is that if you ever get the chance to work for Canonical, take it, it will almost certainly be a fulfilling experience.

Loggerhead 1.10 released!

The 1.10 release is mostly a bug fix release. There has been some effort to improve performance, we’ve updated the code to work with bzr 1.10, URLs are now much more user-friendly and permanent and breadcrumbs have been added to make navigation easier.

As part of the release, I have also uploaded packages to the bzr PPA:
My intention is to keep doing that in releases from now on ย  ๐Ÿ™‚

It has also been rolled out to Launchpad, so you will see nicer URLs like:
Quick changelog:

– Fixed some performance issues (Robert Collins, James Westby, Martin Albisetti)
– Update loggerhead to work with bzr 1.10 and the latest bzr-search (Robert Collins)
– Add startup deamon script for Linux (Marius Kruger)
– Switch navigation from file_ids to paths. Fixes bugs #260363, #269365 and #128926. (Martin Albisetti)
– Fix bug #258710 (“the /files page explodes in an empty branch”). Also minor improvements to the /files and /changes pages. (Marius Kruger)
– Added –port, –host and –prefix options to serve-branches script. (Martin Albisetti)
– Fixed broken template for project browsing with start-loggerhead (Martin Albisetti)
– Added –reload options to restart the application when a python file change. (Guillermo Gonzalez)
– Added error handling middleware. (Guillermo Gonzalez)
– Fix bug #243415 (“Tracebacks go to console but not log file”). Also minor improvements to logging in serve-branches and start-loggerhead. (Guillermo Gonzalez)

Launchpad and stacked branches

For those of you who heavily use Launchpad for code hosting,ย  Jonathan Lange has a very good post about an optimization that has been rolled out in Launchpad a while ago. Check it out.

bzr-upload, now with automatic transmission!

A few days ago, James Westby worked on a branch of bzr-upload, that added the upload-on-commit feature to bzr-upload. It’s now part of trunk!

This means that now you can use the –auto switch, and from now on, your commits will automagically get uploaded.

To start uploading automatically:
bzr upload --auto

To stop:
bzr upload --no-auto

In other news, bzr-upload is now packaged and waiting in the Debian NEW queue to be uploaded, thanks to Jelmer Vernooij‘s packaging, and Marcela Tiznado‘s sponsoring.

Working at Canonical

So, some of you already know, and some of you, including myself, will be a bit surprised.
Starting Monday, I’m going to start working full time for Canonical.
I’ve been active in the Ubuntu community since very close to the beginning, then jumped to working on Bazaar and surrounding projects, which, btw, has one of the greatest community ever. So, working for Canonical is like going to Disneyland ๐Ÿ™‚
I’ve been doing some contracting work on my free time (mostly for Loggerhead, which turned out great, and some UI in Launchpad), and things just got more exciting every day, until at some point things just started speeding up, and I got offered to work full time a few weeks ago. Having sorted out the remaining details yesterday, Monday is officially my first day.
I’m going to stop working actively as a lead developer at my company, have found some very qualified people to take over the work I’ve been doing, and I’m going to fully focus on making user interfaces mind-blowingly good.
I’ll also get to continue working on Loggerhead as part of my job, so expect to see the improvements to keep on landing regularly.

I’m really excited to start working full time with the smartest people in the world, doing a job that has the word revolution in it’s description!

Update: see what happened 5 months later ๐Ÿ™‚

Upload your websites with bzr-upload

I was lucky enough to be able to attend the Bazaar Sprint back in March, mostly thanks to Canonical sponsoring my entire trip across the globe ๐Ÿ™‚
The sprint was interesting in all sorts of ways, and it got me working on several projects (some of which I’ll talk about in future posts), but there was one in particular that amazed me how fast it was put together. Bzr-upload.
It all started one night, while sitting across the table from Vincent Ladeuil, the guy who basically wrote transports in Bazaar, and I started complaining about how I had to work around bazaar to make it fit into my daily work flow (doing web development).
The problem was simple: bzr doesn’t update the working tree (the actual files) remotely, so there was no simple way for me to upload the websites I worked on a daily basis.

Long story short, Vincent asked some questions, sat down, wrote tests, wrote code to work with those tests (TDD, FTW), and after some fiddling, we can now upload websites (and anything else, actually) using bzr’s knowledge of what we’ve changed, and it’s solid transport libraries (ftp, sftp).

So… how does this work? Simple.
Assuming you already have bzr installed, fire up a terminal and do:
bzr checkout lp:bzr-upload ~/.bazaar/plugins/upload

Now that we have the plugin installed, go to the branch containing your website, and with a simple:
beuno@beuno-laptop:/mywebsite$ bzr upload sftp://beuno@host/path/to/http
No uploaded revision id found, switching to full upload
Uploading bar
Uploading foo


Did more work?

beuno@beuno-laptop:/mywebsite$ bzr ci -m'Random bug fix'
Committing to: /mywebsite/
modified foo
Committed revision 2.
beuno@beuno-laptop:/mywebsite$ bzr upload
Using saved location: sftp://beuno@host/path/to/http
Uploading foo

That’s it!

bzr-upload will remember the last revision you uploaded, and make sure it only sends what you’ve changed.

Project’s page:

Comments, feedback, patches, etc are very welcome.