Exciting times in mobile

Android has finally arrived.  The comparisons to the iPhone are everywhere, and rightly so, as this is going to be a very interesting show down between Google + Open and Apple + one of the best design teams in the world.  I tend to place my best on Open, but if anyone can compete against it, it's the people that convinced the world that devices with non replaceable batteries are good investments.

It's also interesting that the dramatic challenge in getting everyone excited by mobile wasn't really a bump up in technology.  90% of what the iPhone can do today would be doable on your random flip phone from verizon, except the carriers block you from doing it.  Carriers:

  • block your access to the gps on the phone.  Every phone has had a gps for the last few years due to e911 requirements.
  • make it difficult to deploy apps to the phone, as they want a cut of every one.
  • make it impossible to really provide free apps on phones (by the previous point)

A good instance of this is the fact that I've got google maps on my Sprint flip phone.  Google wrote the app, and it does all the close searching for things like the iPhone does.  It can't tell me where I am, because sprint blocked the gps.  But, when it comes to finding a restraunt in a strange city, it works quite well.

What Apple and Google have really been working on is getting the carriers out of the way so that mobile devices can really become a more primary platform for consumers.  They basically forced AT&T, T-Mobile, and hopefully soon Sprint, to break down their walls against letting consumers really do things on the mobile networks.  This is exciting.  I'm eagerly hoping that Sprint (who is part of the Android alliance) puts an Android phone out by the end of the year, because I'm going to snap it up immediately.  I've already got the Android SDK installed, and am going to start puttering around with applications that I'd love to be on my phone.

Thinking about Debt

I've been thinking about a lot of things in terms of debt recently, and the world looks a bit different if you do that. Debt is borrowing against the future, be that in time, money, energy, health, etc. Debt is what you get when you take short cuts, as you are borrowing from the future.

When your debt is money, it's somewhat easy to understand. You take money from the future you which you have to pay back at some point. It's a little harder to understand in areas that aren't money.

If you create a new piece of code you are creating both value and debt. Debt is created by taking shortcuts, as the software will need to be reworked to reasonably extend it in the future. You take a short cut now to pay for it later, with interest. Every future feature will take longer until you pay back your debt. Refactoring is really all about paying down debt in a responsible way in software.

Most of the time the right approach is to pay off your debt. The other option is bankruptcy (which we are seeing a lot of this week in the financial world). Software bankruptcy is throwing the whole thing out and starting from scratch.

When I started thinking about software development in terms of debt in the last few weeks, lots of things started to make a lot more sense. Shortcuts are debt. Inconsistent interfaces are debt. Inconsistent coding style is debt. Bad or wrong abstractions are debt. Missing documentation is debt. Confusing APIs are debt. If you want a project to move forward more productively you need to eliminate some of your debt, as it's what slows people down (green field code is easy, brownfield is hard).

I'd love to hear about other concepts of debt, and what debt looks like in other media besides software. Please post comments if you are so inclined.

Hello Thunderbird

Push finally came to shove, and I've now entered the 21st century by making Thunderbird my email client (I actually tried Evolution for a day, but after 20 crashes gave up. But that's a different story.) Previously I was using mutt. There were a bunch of reasons to do this, though the biggest one for me was getting to turn off a box at home that was my IRC proxy, gateway to my home network, and ssh point for reading my email in mutt. That should save us at least a few hundred watts.

The New Configuration - Server Side

I've moved to using dovecot as my imap server. This has the advantage of being able to handle a home directory full of mboxes nicely (which courier could not). This means I can keep my perl based dynamic mail filtering working on the server until I manage to rewrite it as a thunderbird extension. I was using IMAPS before just as a secure POP, but now I'm actually taking full advantage of having imap remote folders.

My IRC proxy moved to my linode, which was probably a better place for it to be anyway. I even bothered to package it as a ppa for ubuntu, which means you can easily install as well.

Lastly, my gateway box is now a kvm guest running on my big home media / backup server. I was quite impressed by how nice virt-manager made the system install and setup from an ubuntu 8.04 iso. I had to do a little manual effort to configure bridge networking correctly, and deal with conflicting dnsmasq instances, but after that all was good.

The New Configuration - Client Side

I've now got thunderbird setup for 3 IMAP accounts (dague.net, gmail, and work), plus news groups (all work ones). This gives me a really nice consolodated view of my email. I was pretty impressed by how well thunderbird handles the 4 identies, and routes outbound correctly quite nicely. For dague.net and gmail email is filtered server side, I've client side filters for work because it's sieve, and I really don't want to learn another filtering specification language.

On top of that I've got a ton of extensions. I found that thunderbird out of the box was ok, but I lost a lot of mutt functionality. After a hunt through the extensions I got most, if not all of that back. For the record here are the extensions I currently have installed:

  • Attachment Reminder - this fires off a warning and prompt if you hit it's heuristic rules of an email that might need an attachment but you don't have any. I've seen the warning 4 times now, though they were all false positives. I do like the idea though, so I'll keep it around.
  • Colored Diffs - brilliant if you are on mailing lists where patches are sent around
  • Display Mail User Agent - because I'm curious on who uses what. I always had this header visible in my mutt configs.
  • Display mailing list header - way more useful than I thought. It basically puts a set of links across the top of the email for Subscribe, Unsubscribe, Archive, etc. It makes it a lot easier to get off lists that you realize you don't really care about any more.
  • Enigmail (from ubuntu package) - there was no way I was giving up pgp. It also has the advantage of making pgp policy setting much simpler.
  • Extension Developer - more on this later
  • Import Export Tools - because I had a lot of saved off mbox files that I needed to get back into thunderbird.
  • keyconfig - actually works on all mozilla base tools, but I needed it to redo a few key bindings
  • Lightning - this is the Sunbird callendar program as an embedded addon. It's actually quite nice for callendaring and task lists.
  • Mnenhy - this gave me more control over mail headers. IIRC display mailing list header needs it to function.
  • Mutt Keys - my own extension, more on that in a bit
  • Nostalgy - gives you a set of nice key bindings and input field for save & copy of email. Very handy.
  • Provider for Google Calendar - a lightning plugin that lets you have good 2-way google calendar support. This is something evolution promissed, but it didn't work. It works great on thunderbird with this extension.
  • Quote Colors - if people both to follow standard quoting models for email this does a really nice job of coloring the different posters to make it much easier to read.
  • Track Package - gives you highlight + right click to track packages based on emails. While it's not everything I want, it is pretty useful.

But it could be better...

Thunderbird is now very useful to me, but I have found ways in which I could make the whole thing better. Mutt keys was a quick dive into making my own thunderbird extension that was nothing much more than key bindings (based on the now unmaintained mouseless extension). It's rough, but it let me figure out some of the basic structure of writing thunderbird extensions.

Since then I installed extension developer, which has a great tab completable javascript shell, and have been exploring making an extension that lets me quickly make a calendar task out of an email. I have a bunch of ideas queued up behind this, but that is a short term useful one to dig into. I actually quite like the component interface model that thunderbird has, though I wish there were a few more API docs or examples to figure out what possibilities exist.

As I figure out more, I'm sure I'll post it here. I have definitely found that developing thunderbird extensions is pretty tall grass, as very few folks have really written down much on it. I'm going to try to be a good citizen and stick stuff in the mozilla wiki as I figure it out.