Leaving Livejournal

Since the acquisition, I have been wondering if I'd leave my LiveJournal account behind. While I've been an LJ fan for a long time, Blogger has some features which make it appealing:
  • Nicer looking templates
  • More reserved "toolbar" area
  • More diverse client software
  • Not owned by the mob
  • Far more customization options and "widgets"
  • All my friends are doing it
  • Custom domain names (I've been waiting for 5 years, "glyph".lj.com isn't going anywhere...)
  • "Blog" is a distinct entity from "Account"
  • Blogs which have multiple contributors aren't a special thing
  • Nicer profile support
  • Backlinks
  • AdSense support
  • Server-side drafts
While I plan to do more of my blogging here from now on, I don't plan to completely abandon LJ any time soon because it does have some cute other features:
  • the "friends" page
  • userpics
  • moods
  • GPG public key publishing
I want to say something about their file-hosting feature, but that's always been kind of broken, so I've never used it.

Divmod: Reloaded

Hot on the heels of the Twisted release, Divmod has a new, and hopefully much more comprehensible, sight design and layout.

Check it out over at divmod.org.

I've long been ashamed of the default-Trac look and the opaque information layout on Divmod's site, and I'm really happy to have the way we greet the world be spruced up.

This is mostly the work of the unstoppable Duncan McGreggor; this is just his latest work in improving Divmod's communication with our community and our customers — and it won't be his last.

(As with any new site design, the topic isn't entirely a joke: your browser's probably cached some stuff it wasn't supposed to, so if you've been visiting our site a lot, re-load for the full effect...)

Upgrade now!

In case you haven't heard through some other channel already, Twisted 8 is out.

In addition to numerous fixes and features, this release also includes a new release system for Twisted itself; this (hopefully) means that we won't have another year-long release drought.  We're planning to do another release in less than 3 months.

This means that new Twisted features will be available faster, but it also means that if you're writing some software that uses Twisted, upgrade now!  We try very hard to make sure that each new release is mostly compatible with the one that comes before it, so that your upgrade should be painless.  Especially if you have good unit tests.

However, this compatibility doesn't extend infinitely.  There are at least a few twisted developers who would really like to drop some of our years of accumulated cruft and break compatibility with older versions.

If you upgrade now, your migration process will be gradually fixing a few deprecation warnings.  If you wait for 3 or 4 more minor releases, upgrading all at once will mean that anything which has changed will start off broken, and your tests might not even run until you've fixed a bunch of things.

Of course, by "will", I mean "should" - we're not perfect, but we'll fix upgrade issues in micro releases if you find them and report them.

Open Source 3D Massively Multiplayer Game Infrastructure using Twisted

wasn't at PyCon, but he totally should have been.

I (and others) have been working on him for years to release this stuff as open source, and he's finally done it!

Go check it out the Multiverse 3D trac site, and get the code!

Do it!

Do it now!

(and then start submitting patches to get its persistence layer ported back over to Axiom because I told Mike not to block the release on that but it should totally be using Axiom and he only switched away from it because he didn't understand quite how it worked...)

Against the Alexandria Library Migration Strategy

Some library maintainers, when faced with the impending incompatible changes in Py3K, decide that it's time to burn their library down and start over with a new, incompatible version.  "Python is changing", they say, "so people are going to have to do a bunch of maintenance anyway.  What a great opportunity to force them to do all that maintenance that they should be doing for our library too!"

I'm saying it's wrong.  But don't take my word for it: Guido says it's wrong.  Before it became cool to do it, Martijn Faassen was saying it was wrong.

Guido didn't just blog that it was wrong, though.  He was so concerned that this message get out publicly that he repeated himself in a mailing list message to python-dev to make sure that people who don't read blogs would get the message.

This might strike some library maintainers as unfair.  If Py3K is just breaking compatibility, why can't you?

First of all, even if Py3K were really "just breaking compatibility", there is still the issue of careful timing.  You should read Guido's post and understand Ima Lumberjack's plight; he explains it exactly as I would.  When your users are doing maintenance to upgrade something, they only want to upgrade  one thing, so they know what's going wrong when they encounter problems.  And if you're making incompatible changes, they will encounter problems, regardless of how cool and well-documented your new API is.

But, if you look closely, you will find that there's another reason that your library doesn't play by the same rules that Py3K does.  It's because Py3K is actually doing a lot more than just breaking compatibility.

I've been a critic of this effort in the past (and I still occasionally grumble about a thing or two) but the bottom line is that the core Python team is not just willy-nilly breaking stuff.  Let me enumerate the huge amount of work they're doing to make sure that people can have a reasonable migration experience to Python 3:
  1. The Python core team have written and are maintaining a source-to-source translation tool to assist in the transition.  Does your compatibility-breaking project have source-to-source translation, or in fact any tool support for migrating between different versions of the library?
  2. The Python core team are developing a compatible backport of 99% of their features: Python 2.6 is effectively "python 3 lite"; you don't need to upgrade all the way to the incompatible version to get a lot of the new features.  Does your compatibility-breaking project include a (at least mostly) compatible backport of all of your new features to an actively developed, "older" version?
  3. The Python core team is providing long-term support for the previous version so that people can migrate at their own pace and not be left out in the cold.  Is your compatibility-breaking project planning to provide a decade worth of bugfixes, security patches, and feature backports to your older versions?
  4. The Python core team is providing comprehensive deprecation warnings explaining each new feature, and how you get there from the old feature.  Is your project going to provide documentation like that?
It's also worth noting that Python's dependencies are not going through any kind of compatibility earthquake while they're doing this, so they are not in the same position that you (as a Python application author) are.

So, if you answered "yes" to all four of those questions — you still don't have the same excuse that Python does, because their dependencies are not changing incompatibly.  So don't do it.  But if you were thinking about breaking compatibility at the same time as a dependency, then you probably didn't.

Of course, you can drop deprecated stuff and break compatibility if your user community will tolerate that.  Just don't do it in the same version where you decide to support Py3K.  Users should have the ability to get a compatible version that will work in 2.x and 3.x so that when they translate their own source code, they don't have to learn new methods right at that moment.