2007

TaskPaper adds just enough to stick

My favorite apps, the ones that slip easily into everyday use and stick there, just start with plain text and add some extra sauce. VoodooPad is a great example, and Hog Bay Software's new app TaskPaper is, too.

I've used both kgtd and iGTD, and played around with a few others. I came closest to sticking with a system using kgtd, but switched to iGTD because manually syncing kgtd got old.

All the extra stuff in iGTD was appealing, but I left tasks in the inbox for weeks, and never reviewed much of my vast forest of projects. I eventually fell back into tending short lists in Stickies, with titles like "NOW:" and "BY TUESDAY!:".

When I moved those Stickies lists into TaskPaper, all I had to do was copy and paste - it uses the same format I do when I get lazy, and that has to be a good sign. I haven't found a reason to jot a note somewhere else yet.

Moving tasks from iGTD was more sobering. Half those "next actions" had been done for weeks, and the other half were clearly scheduled for next Neversday. As Merlin Mann pointed out, switching apps is a good excuse for a real review.

TaskPaper adds automatic formatting, tabs, search, and a bit of hyperlinking to plain text. Tasks are lines that start with a dash, and can be tagged by starting any word with an at-sign. Clicking a tag starts a search for that tag. I use them in a couple of ways - as contexts, and for scheduling. They can really be anything that makes sense as a visible search keyword.

I have been keeping a few tabs open - one to edit tasks, and a couple others with live searches to look at what's on my plate. When I want to schedule something, I'll tag it as @now or @tomorrow - I have those two as open tabs, and as I work I keep the @now tab open. Other tabs come and go to look at contexts, like @email or @errand.

I like that the tags can be part of the sentence, so I don't have to tab through a bunch of controls to set tags - I just write something like '@email Bob @home'... easy.

I also set up an inbox project (by typing "Inbox:", naturally) to collect notes quickly, and that's worked pretty well so far.

As with any 1.0, there's some room for improvement. It's not very scriptable, but it is plain text, so it could be worked around. Quicksilver integration was important with both kGTD and iGTD, and I'm not sure yet if I'll really miss that here. It can clean up tasks marked as done into an "Archive" project, but doesn't yet note when they were finished, if that kind of thing matters to you. Finally, I'm not sure what the best way to sync with other devices would be, but there is a web interface in development - maybe that would be a good iPhone option.

TaskPaper is a solid, clear, and nicely minimalist app. Over the week I've been using it, it has made keeping to-dos in one place too easy to avoid, and added just enough functionality to sort through them without being distracting.

Note: When I downloaded the 1.0 release, I found a conflict with TextExtras and wrote a bug report. In reply, Jesse sent me a complimentary license. Nice guy. I was going to write about it anyway, but I thought I should mention that I got it for free, as a surprise.

The editing pass

Anything worth writing is worth re-writing. This applies to code as well as prose.

I give paper sections and important emails a while to sit after I write them, and they always benefit from another look with fresh eyes. I think that doing this with code is worth thinking about.

Once you get a piece of code to the point where you believe it works - it's passing its tests - go back over it and edit it. That is, go back and edit it for clarity, flow, and style. Just as if it were an essay.

This is particularly important for tests. If a test fails, it should tell a clear story that explains exactly what failed, and what it was expecting.

Things to consider editing out are vague variable or function names, and non-idiomatic shortcuts. Control flow can get tangled when working out a solution. Make it obvious. One-liners often don't tell the full story. When you come back to a piece of code, you know the chase. It's the first loose thread of a bug, a failed test, or an occurrence of a symbol you need to refactor. What you need is the story around it, and solid code will fill that in.

You can learn this by sharing your code or by waiting a while and reading it over again. It's easier said than done - I don't always do it, but I do know: an editing pass can do you good.

Something to think about: would a professional code editor help or hurt in the long run?

That Windows feeling

I started this post more than a year ago. Not much has changed, and it's time to just let it out.

Uninvited dialogs popping to the front or stealing keyboard focus in OS X have been giving me that Windows feeling lately. It was part of the old Mac OS's comfortable "I'm in control" feeling, and was always immediately noticeable using Windows - popups and splash screens everywhere.

It's particularly bad with multiple monitors, when you may not notice that a dialog opened on the other monitor and is stealing all your keypresses, making the app you thought you were using seem unresponsive and rudely interrupting your work.

Here are just a few that I notice all the time:

  • Apple Backup: Every damn time it runs a backup I get an annoying alert, sometimes two if the media isn't ready when it wants to run. This is the one single situation that I can remember Retrospect's UI being better.

  • Apple Mail: If a message is sent but the SMTP server can't be contacted, the message pops back up with a sheet to pick a new server to be used until you change locations - a feature I endure daily to cope with my home ISP insisting I use their SMTP server. This window pops to the front and steals key focus, so if you're typing in another mail message, you lose letters.

  • Safari with GMail: sometimes GMail just pops to the front of the stack. I don't ever want a web page deciding that it needs to be in the front - what is going wrong here? (note, now that I use my WebMail app, this doesn't happen to me anymore…)

  • Safari also pops the download window up when it starts a download - good idea right? Not if it took a while to start the download and I'm now editing something in a totally unrelated browser window...

  • Growl: Growl could be a solution to some of these problems, but it adds its own annoyance. Just waving your pointer over a notification - or even having it sitting in the spot the notification appears at - steals key focus from the current app. I use a variety of sticky notifications that I have to click on, and so this happens to me all the time.

  • FileMerge: if it takes a while to open a merge and I've moved away, it still pops the window to the front and takes key.

  • iTunes: changes to the music store status (like it finally loading a page), cause background windows to pop up in front of other iTunes windows. This doesn't happen in browsers, why here?

  • iTunes: A more debatable example is if your iPod battery is completely drained, it will charge for a while before bringing iTunes to the front at a random time when it's ready to sync. This is only if you've already requested iTunes to be shown when you plug in your iPod, so maybe it's not their fault it annoys me.

  • Keychain security - because I have sensitive passwords on my laptop, my keychains lock when it sleeps, and time out. So I see a lot of the keychain password dialog, which steals key focus - even when it's invoked from an app in the background. Backup makes this happen regularly. The dialog is small enough that I often don't notice it on the other monitor.

If this annoys you too, share your examples in the comments.

Skim 0.7

The amazing Christiaan Hofman has released another nice update to Skim, the great PDF reader that is quite literally my dream reader app.

As usual, there are detailed and complete release notes, and I'd like to call attention to my favorite new feature, because I use it all the time, and actually wrote part of it:

Skim can now download PDFs from remote URLs, which can be provided on the clipboard, dropped on the Skim icon, or through Services.

I use this all the time to drag a PDF URL from a browser to the Skim dock icon - Skim downloads the file and displays it in one step. Very handy.

Processing Email

I watched Merlin Mann's Google Tech Talk about processing email yesterday, and even though I'd followed his posts on Inbox Zero when they came out, it's good to get a reminder, and Merlin's an entertaining speaker - I recommend you watch it.

He talks about strategies for keeping an empty inbox based on processing email as it comes in, and deciding what to do with each message as you read it so nothing just sits there reminding you of vague, unspecified amounts of work you need to deal with sometime.

You may have to accept on faith that an empty inbox is a worthwhile goal. Some people disagree, but I think it's safe to say that for most people, moving the things you get as email into more appropriate places like notes apps, calendars or to-do lists is a great way to get in control of your work. Process it, then get to work. I've been doing this for a while, and it's a good feeling to know you don't have any surprises laying forgotten in old mail.

One point from Merlin's talk that I'd like to comment on is that email is just a medium, and it's worth thinking about whether it's really the best medium for what you're trying to do. This has been in my mind lately as I've been working on a project with a series of parallel email-based heavily technical conversations, sometimes with three or four people replying every couple of minutes. I struggle with the feeling that email is just not the best way to do this, but it seems like the only way to include everyone.

Merlin made the point that sometimes email dysfunction is just a symptom of an organizational communications problem, and no amount of email system adjustment can solve it. I agree - if you're really just tracking bugs, use a bug tracker. If you're coordinating things in real time, use IMs or IRC. If you're collaborating on a document, use something like Google Docs. Please stop overloading email.

NSLocalizedString can set errno

This is a short one, but it might help someone with debugging someday.

A while back, we had some code that was checking errno, then using the NSLocalizedString macro to get a localized error message, but it checked errno again later. Only the app isn't localized yet. There's no Localizable.strings file, so when NSBundle -localizedStringForKey gets called, even though it fails gracefully, it still ends up setting errno to "ENOENT", or "file not found".

So the lesson is - in case you're seeing weird behavior where errno is changing after you check it, make sure you're not using any system calls that might set it.

Free advice about a pro email client

If you're thinking of writing a commercially successful pro email client for Mac OS X, here's some advice along the lines of what I wrote yesterday:

Make sure you've tried a lot of email clients. Try everything you can get your hands on. Really use each one - figure out what makes it different, and what makes it powerful. Make sure you've tried text-only clients like mutt and pine. Lots of your target audience refuses to give those up - figure out why. Don't just try free alternatives - peek in on big-business. Fire up Parallels and try Outlook and Notes in Windows (there may be others that are even better examples). Read up on the Chandler project.

Make sure the email is always available in an open data format. If this isn't obvious, you should probably stay home. Keep a backup copy of email in something Apple Mail can read - like Unix mbox files. You can use a database for tags and whatever, but there had better be mbox files around, because your target audience won't move into an app they can't move out of.

Don't start out by cloning Apple Mail. If your first screenshot looks almost like Mail but does less or isn't as pretty, it's bad news. Mail is a big program with lots of time and effort behind it. If you try to match its feature list first before you make your client unique, you're toast.

Pick a specific customer, and get to know their email problem. Why not clone Apple Mail? Because you're not writing for the same customer, are you? Make sure you know who your customer is, and what they actually need. People who want a pro app probably already have a system for to-do lists & notes, so your client doesn't need to match those features. Likewise, email pros can still use Mail to send slideshows to Mom…

As an example, since you're probably a programmer, think about how a programmer's email client would be different from the standard. Maybe it does syntax highlighting. Maybe you can apply patches people send you with one click. Maybe you can create bugzilla issues from an email with one click. Or collaborate on a support email with the SubEthaEngine. Nobody but programmers will want to use that client, but that's fine - there are lots of programmers. Now what about music and video editors? Graphic designers? See where I'm going?

It could work: a 3rd party email client for OS X

Brent Simmons started a discussion yesterday about email apps for OS X. To summarize: Apple Mail doesn't do enough for everyone, and the alternatives aren't so great either. But because it is free, there's no incentive for a third party to do better.

Paul Kafasis agrees, saying "Don't compete with Free and Don't compete with Apple". He draws the comparison between email apps and browsers, where there is very little money to be made as a result of the many excellent free browsers out there. He also compares the situation to music players - it seems like everyone's got a pet feature they would add to iTunes, so there ought to be an audience for a couple music players, except competing with iTunes is just not a good business plan.

I do think there is a market for a pro email client for OS X, and I'll use another core app category to explain - Text Editors. I think they are a better analogy than music or browsers. Shipping in every Mac, TextEdit is a solid basic free editor, but everyone needs something more. Some people need styles, grammar checking, layout control, and graphics - so they move to Word, Pages, or OpenOffice.org. Clearly, there's money to be made there, if only by Microsoft. Other people need regex search and replace, code completion, syntax checking, block editing, etc. - so they move on to a programmer's editor. How is the market for programmer's editors? XCode is free and very good, emacs, vim, etc. are also free and excellent. But there are people making money selling text editors. People buy BBEdit, TextMate, and SubEthaEdit because these programs have important features that give you more power over something that they do all day. TextMate is my favorite example here, because it benefits from community involvement with bundles and plugins to customize and add power.

Does that sound familiar? It should - many of us spend more time than we'd like reading and answering email. For some, it's their whole job. An email client that had unique and compelling features for professionals, knew its audience, had strong Mac-like design, and supported community extension, would be successful, just like TextMate.

Imagine if there was just a single bundled text editor for Macs, and we had to use it for writing everything from programming to business reports to family letters. Wouldn't it be annoying when an update came around and they added stationery and voice notes when you wanted refactoring support and better version-control integration? "Email client" isn't just a single app category, and it's about time someone realized it.

The read-once email client and reference emails

I've been dreaming of a new kind of email client, one that only lets you look at a new email once. That's right - you get to scan it for 30 seconds and then you have to do something with it or it gets archived out of sight. And you can only look at one email at a time. I think it'd be a great way to focus on getting your inbox empty and doing something useful with each message.

Doing something would be replying to it, archiving or deleting it, creating a todo about it or sending it to a notes program for reference. I really think that last one's important: Email clients aren't for storing notes - send it somewhere else where you can link it up and annotate it more easily.

I don't have any suggestions about how to make your email client do this, but I have come up with something for making reference emails more useful, using VoodooPad.

I've been using Mail Act-On as described by Merlin Mann to quickly move messages to appropriate mailboxes, and I've been able to keep a clean inbox. But - I never bother to look at the emails I send to the reference folder. They're basically useless without more context.

I just wrote a quick script to send selected emails to voodoopad as a new page so I can link to them, add notes, and then later, search those reference emails in the same context as my notes. It's already made a big difference in how useful emails are - I can add comments to myself, find related notes in my VP doc, and since there's now a URL for every page in my VP docs, I can even link to reference emails from outside of VP - like in iGTD.

If you're interested in the script, it's here: NewVPPageFromEmail.scpt (control-click and save-as).

HPC blogs and news sites

I've always liked the programming-languages community website Lambda the Ultimate, and recently I went looking for something similar for the High-Performance Computing community. I didn't find exactly that*, but I did find a few great resources for news about HPC and computing research policy:

HPCWire is a well-known news source for HPC. It has daily news updates, and occasional columns by guests from around the industry. Most of the news is press releases from companies and government labs, but it's nice to have a single place to check for them. However, there is apparently no RSS feed, and to get email updates, you have to buy a subscription. I haven't, but I do check back occasionally to read the columns.

Supercomputing Online is another professional news outlet, which reads a little less like a press release, seems to have more coverage of academic news, and does have an RSS feed.

insideHPC.com is more of a weblog than either of the first two - John E. West covers news stories in brief with some added perspective and analysis. I like his approach, and I've joined him to help cover academic HPC issues, both computing research and issues affecting computational scientists.

One of many blogs at Sun is the HPC Watercooler, covering Sun's HPC products and services, as well as some non-Sun related news. I've found it pretty interesting already, and I'd be interested to see weblogs from other HPC vendors.

Finally, a couple of blogs that are less directly related to HPC but still very relevant for computing researchers, are Dan Reed's weblog at the Renaissance Computing Institute, and the CRA Computing Research Policy Blog, both of which cover computing research policy and funding issues that don't often show up in news coverage of either government or computing.

* - if anyone wants to start an LTU-alike site for HPC research, or point me to one, I'll sign up and contribute in an instant.