andymatuschak.org: archive

You are at the archive for the May, 2008

Rick Springfield ringtonesHeart ringtones

We Have Launch!

launchpad.jpg

If you click some of the links along the right side of Sparkle’s home page, you might notice that they lead to some new places…

bazaar144x149.png

Sorry, Git lovers, my guts took me to Bazaar and Launchpad. It wasn’t really a Git vs. Bzr thing; it was a Launchpad vs. Lighthouse+Github thing. I’m really pleased with the new solution so far, and I hope you’ll follow me to new and maintainable horizons.

Sparkle’s development now has a new home, complete with a new source repository and a new bug tracker.

Soon-ish, I’ll get up a new, simplified Sparkle home page—one that doesn’t have four different nav bars—and wiki. If any of you lovely designers in the audience feel like contributing, I’d love the help. I’m also looking into enabling the translations and blueprints sections for Sparkle on Launchpad.

Update: Some people were saying they were having trouble getting Bazaar going on OS X. It’s actually pretty simple: just get MacPorts and run:

sudo port install bzr

More on LaunchPad + Bazaar vs. Lighthouse + Git[Hub]

I sent this post to the Sparkle mailing list as well, but I thought I’d post it here to be more certain that I’m not screwing up.

I’ve decided I’m only willing to keep working on Sparkle if it’s not going to annoy me, and there are a few things that are annoying me:

  • The state of the codebase. With this refactoring, I’m mostly happy. There’s a little more to do, but not a ton.
  • Trac. I hate Trac. I hate it in the face.
  • SVN. Someone sends me a patch, but it’s for three versions ago, so I have to apply it by hand. And then projects which have their own modifications are permanently behind, so we get things like Adium 1.1 exploding in a giant fireball.

I think my plan right now is to switch to LaunchPad, using Bazaar for RCS. The alternative is Lighthouse with Git for RCS through GitHub. So here’s the way I see things:

LaunchPad+Bazaar:

  • Advantages:
    • LaunchPad has “questions” as a separate thing from normal tickets. I like this a lot.
    • LaunchPad has an “idea tracking” feature called Blueprints which could be really useful.
    • The translations feature on LaunchPad could potentially be very useful.
    • It’s one site instead of two.
    • Bazaar is a hell of lot easier to use than Git.
    • Bazaar has friendly revision numbers.
  • Disadvantages:
    • Not quite as shiny as the alternative.
    • Has a slightly Ubuntu-y taste.
    • Feels “bigger”.
    • Bazaar doesn’t have as good adoption as Git.

Lighthouse+Git[Hub]:

  • Advantages:
    • Shiny and in fashion.
    • More “powerful” in ways I probably don’t care about.
  • Disadvantages:
    • Two sites instead of one; users have to register at both places.
    • Git is more confusing.
    • Doesn’t have translations, blueprints, or questions.
    • Lighthouse seems clumsy compared to LaunchPad in ways I can’t describe.

So I’m going to start working on making the former happen, but if there’s a really good reason we should be using Lighthouse+Git[Hub], please let me know.

Driving up the Walls

Newfound Organization

This has been a long time coming.

I’ve just finished a monster refactoring to Sparkle which will hopefully keep it maintainable for the foreseeable future.

Sparkle now performs updates using drivers—you can see the current varieties on the left. This has let me take SUUpdater from about 1000 lines to 200. All the cases for different update methods are now handled through inheritance.

Along the way, I’ve cleaned everything up and made things as simple as possible. I finally feel like between this and the SUInstaller refactoring, I can actually stand to work on this project.

Anyway, with this comes a great big warning: this is not ready for primetime yet. Please, please test this revision with your app and let me know what you think (even if it’s just to say “everything’s great!”). If we don’t hear anything terrible in a week or two, we’ll say it’s good to go.

More changes may be forthcoming; you probably shouldn’t fork or subclass things for a while. And check out the (somewhat) more detailed changelog here.

Launching with LaunchPad

On another note, I’m planning to move Sparkle the hell away from Trac and SVN, both of which drive me nuts. I need a branching RCS to be efficient as a maintainer.

My current plan is to use LaunchPad because it has bug tracking integrated as well, which means using Bazaar. I may also end up using LaunchPad’s translation and idea-tracking features, which could be neat.

Is this a terrible idea? Should I be moving somewhere else? Git seems promising, but I kind of need an end-to-end project management solution like LaunchPad or Trac. And I’m not paying for Lighthouse—Sparkle has a budget of $0.

User Interaction 101

I have a lot of trouble explaining my interest in user interaction to others.

A typical response to my reasoning goes something along the lines of: “Yeah, but with Beryl, Linux looks even better!”

The computer scientists I talk to just don’t understand that user interface is about how the program acts, not how it looks. And really, I think that’s why there’s so much terrible software out there: these are the people who are building it!

The Five Minutes Left Test

In five minutes, you’ve got to leave for a doctor’s appointment, but there’s this thing you’ve really got to get done first, and you need iFoo to do it.

You’re stressed and in a hurry. Is iFoo going to make you even more stressed, or is it going to sit you down, give you a slap, and tell you everything’s going to be okay?

The sad truth is that unless I’m very familiar with it, almost every piece of software is going to do the former. I’m in a hurry, but now I’ve got to figure out how to use this thing. More specifically, I’ve got to figure out how to express what I want to do in terms it can understand.

Doing It Right

The difference between mediocre software and superlative software is the language it speaks. Stressful software makes users express what they want to do in its terms; excellent software works on the user’s terms. It doesn’t make the user know what to ask or how to ask it, and most importantly, it doesn’t get in their way.

A number of principles are key to getting this right.

First and foremost is the principle of least astonishment. Essentially, actions shouldn’t surprise the user. They should work consistently across applications, they should be undoable, and what works elsewhere should work everywhere.

The next level is the principle of the four-star waiter (no Wikipedia article on that, I’m afraid). When you’re at the Ritz, and you’ve put all the marshmallows into your hot chocolate, you don’t have to ask for more. When you turn to grab another, the waiter has already silently refilled the bowl. Clippy and his wizard friends are an attempt to imitate this dapper young man, but they do a terrible job because they’ve forgotten about the silent part.

Your application should anticipate the user’s needs and—without confusing or obtruding—act appropriately. Things like remembering a window’s position or the previous input to a form are only the first step. iChat manages your away status for you, asking as few questions as possible. iTunes keeps your iPhone continuously in sync, and if you run out of space, it’ll leave off things like photos before more critical data like contacts or addresses. Twitterrific focuses tweets directed at you because it knows you want to read them.

The next important step is minimization of interaction. You can start by reducing the number of actions required to perform tasks, but that’s not good enough. When I want to broadcast a thought, I use Twitterrific more often than MarsEdit not so much because of number of steps but rather as a result of how many things I have to deal with. Every control, label, and window makes your application more stressful to use; every time I have to change focus (especially window focus), you’re breaking my flow a little. Safari is good because its interface is tiny. We like Twitter because it has one text field. iMovie ‘08 is a poster child for reduction to a tiny number of core actions.

Get Out of My Way!

This is really a matter of flow—flow is the most important thing. Flow is how we move, and it’s why people sometimes prefer a notepad over an electronic document. When you want to note something, you write it on the pad, and put it in your pocket. You don’t have to make up a filename or where it should go. You don’t have to worry about remembering where to find it again later. You don’t have to think about quitting the app when you’re done.

Flow happens when you perform a task, thinking only about what to do, not how to do it. This is why people like things like emacs and vi so much: after the (considerable) learning curve is over, they can move like lightning, slowed by the speed of their ideas rather than by the speed of their tool. When focus isn’t in the right place, when a modal dialog pops up, or when a button isn’t placed near the data it affects, it breaks flow. You have to stop thinking about the grand unified theory you’re writing long enough to explain to the computer what you mean.

That’s the real price of bad software.

When a personal finance program sucks, that’s annoying. But my blogging software gets in my way, so I write fewer posts. And when I can’t figure out how to change the time signature midway through my piece in a music composition tool, I stop composing. The music stops playing in my head. I look around. I get out the manual. All this because the icon for the tool in question wasn’t good enough!

As software becomes more powerful, it becomes more essential to creation—to making things. And if your software is doing anything to distract your users from their magnum opus, the world is never going to hear it. They’ll hear something just slightly inferior; you will have been responsible for confusing the creator at some pivotal moment.

If you’ve written something fantastic, though, it’ll become an extension of the artist’s hand, just like a paintbrush. It’s an extra tool that enables him to solve new problems and produce even better results. It’s something to strive for—it’s why I write software.

Learning

Fortunately, it’s not impossible to get a sense of your users’ flow.

Step One: You don’t count. You’re not confused by anything (one hopes) because you wrote the app. Your experiences will only catch blatantly obvious flaws. Use them as an initial filter.

Step Two: Your imagination, however, does. Write user stories. Write them for every conceivable use case. Throw out the ones that you don’t want to support. Declare that the ones which remain are the only cases you care about, and stick to that.

Step Three: Watch real users. Some of the most useful experiences I had during Pixen’s development were when I sat down an entirely new user in front of it and watched them go. You’ll see exactly works and exactly what’s confusing. You’ll discover new user stories or (with enough samples) gain the confidence to trash others.

Iterate, iterate, iterate, and never allow anything to grate or confuse. Never tell a user “well, I guess you can do that, but you have to go do these other two things with the whozit first, then click refresh.”

And whatever you do, don’t need a Knowledge Base.

Why I Love My Hovse

Blacker Hovse just got a new RA. He sent an introductory email to us all with the postscript: “Prank my apartment now, you know… before I have stuff in it like furniture :)”

There are no idle challenges in Blacker Hovse.

At the beginning...

A few hours in...

One day in...

The Man of Honor

lol smile is HUEG

It turns out to be hard to photograph an apartment filled floor-to-ceiling with 5,000 balloons, so you’ll have to use your imagination.

My favorite part? When sitting on the floor, the bass of the music we were playing vibrated all the balloons—we could feel the music. You know, on albums, the bass drum is sonic support, but in concert, it’s a whole different instrument: a punch to the chest thirty or forty times a second.

We decided to stock his cabinets, too.

Oh, and we removed one of his lightswitches. Just one. He hasn’t moved in yet, so I imagine it’ll be a while before the confusion sets in.

If you're looking for something specific then give the search form below a try:

RSS Wordpress Grady (theme) Valid XHTML Return to the Top ↑