Potion Factory Blog

Move to Applications Folder?

After reading John Gruber's "How Should Mac Apps Be Distributed?", I wanted to mention that The Hit List already does by itself what John suggests Apple consider doing with all apps. That is, if you launch The Hit List from a folder that is not an Applications folder, it asks if it should move itself to /Applications.

Why it does this, though, is not for the reason that most people expect.

Screenshot

Zip files are great for distributing Mac software. It's an established format understood by all kinds of software, both Mac and otherwise. Some browsers will even decompress them automatically leaving one single application icon in your Downloads folder. Having seen a few people get confused by disk images and being inspired by Coda, I thought I'd give it a shot.

The switch to Zip went great except for one thing: we started getting a wide variety of mysterious crash reports. They all had something to do with the app not being able to load essential resources such as nib files. A nib file contains data to create user interface elements such as windows, buttons, and so forth. Users aren't going to get very far with a Cocoa app if it can't load its nib files.

It took me some time to connect the dots, but once I did, it was pretty damn obvious. People were moving The Hit List into the Applications folder while it is still running. Mac users think nothing of moving a file while it's being used. Mac OS X does some fancy things to allow this for the majority of cases so I wasn't expecting Cocoa to get tripped up by something that now seems trivial. But alas, it was trying to load files from the old location and freaking out when it couldn't find them.

At first I looked for ways of making Cocoa become aware of the application being moved. After looking at the bug so much it seemed like the best way to fix it. Unable to find a clean work-around, I went for the next best thing and made the application ask if it should move itself on its own terms lessening the chances of the ground getting cut from under its feet. I'm happy to report that although this is not a direct solution, it works well. When I first saw Delicious Library 2 do the very same thing I thought that it was being cute, perhaps even a bit too cute. Now, however, I'd like to think that me and Wil Shipley have fought the same battle.

One last thing. To help other Mac developers who are distributing their applications in a Zip file, I'm releasing into the public domain the code that handles all this app moving business. You can find it here.

A Contest

We know people are eagerly awaiting The Hit List companion iPhone app and we thought we'd help a few people get it a little early with a contest. Send us a description of an interesting way that you use The Hit List to contest@potionfactory.com. We'll pick up to 10 of the best entries and offer them the opportunity to participate in a closed beta program for the iPhone app when it's ready.

Comments to this post will not enter you into the contest; only emails sent to contest@potionfactory.com that contain descriptions of how you use The Hit List will.

We're not looking for a description of a feature, but rather how THL fits into your workflow or helps you get stuff done. Do you have a good tagging system that helps you track a project? Are you keeping notes for a thesis? Is it reminding you to do something you previously forgot about? We're looking for anything interesting and possibly helpful to others. Please try to be brief but descriptive. We hope to use some of the info in our documentation and on our website.

All entries must be received before September 21st, 2009 EDT.

Terms and conditions:

  1. Enter as often as you wish, but please one entry per email to contest@potionfactory.com.
  2. A person can only win one slot in the iPhone Closed Beta Program.
  3. Screenshots are allowed, but please no screencasts.
  4. All decisions are final and at the sole discretion of the Potion Factory LLC.
  5. All submissions become the property of the Potion Factory LLC. We hope to reuse your ideas but will ask if we want to reuse your name.
  6. To participate in the iPhone Closed Beta program you must supply your own iPhone or iPod Touch (we will not give you one).
  7. Participation in the iPhone Closed Beta program does not imply a license when the product ships.
  8. iPhone Closed Beta participants may not tell others about the product before it ships.
  9. We will contact the winners via email

Snow Leopard

Happy Snow Leopard day, everyone.

The user facing changes aren't drastically noticeable this time, but there are quite a few developer oriented features I'd love to start using in my apps. I hope that everybody who reads this blog will upgrade soon.

Our apps didn't need to be updated for the new OS this time with the exception of one: I Love Stars. You should upgrade to the latest version as soon as possible if you're using it because you won't be able to quit iTunes otherwise.

Our other apps will have 64-bit support when their next major versions come out, except for The Hit List, which should have it much sooner.

I'm still very busy working on The Hit List and its iPhone companion. I hope to have something to share with you soon.

Better Software Through Less UI

The Hit List 0.9.3 is out. A lot of work went into this release but the two main user visible changes are repeating tasks and AppleScript support. Of those two features, repeating tasks took a surprisingly long time to implement. The code itself wasn't too hard to write, but as usual, settling on a design was the hardest and the most hair-pulling part of the job.

The Cultured Code guys behind the excellent application Things have also written about this particular problem so I thought I'd add to the discussion and explain my design decisions on what ended up being a completely different implementation.

Requirements

I started the design process by mocking up some UI to satisfy all the different ways of setting up repeating tasks.

Specifically, I wanted the application to be sophisticated enough to accommodate the following cases:

  • Repeat every n days
  • Repeat every n weeks, optionally on specific days of the week
  • Repeat every n months, optionally on specific days of the month or on specific days of the nth week
  • Repeat every n years, optionally on days of the month or days of the week on specific months
  • Whenever possible, allow repeating after completing the task.

Solution

I spent quite a bit of time creating mockups. While they technically satisfied the requirements, none of them struck me as being elegant or easy to use. For one thing the designs always required the user to translate a simple thought into many small interface manipulations. Sure, this is true with any user interface, but it seemed especially true for this problem. From the very beginning, a goal for The Hit List has been to create an application that is as frictionless as possible. I wanted the application to make the most out of each user interaction.

Not being satisfied, and after throwing away all of my mockups and even code, I went back to the drawing board. I'm glad I did because here is the end result:

There is no myriad of buttons and fields to choose from. All the user has to do is directly type in what he wants.

After you type in a recurrence rule, the window resizes to reveal additional options relevant to the new rule.

Example Rules

For this to work without driving the user mad, the natural language parser has to be near perfect. The last thing I want is for this to come out smelling like AppleScript.

Take a look at what the application can understand.

Every day
Every single day
Daily

Every 2 days
Every two days
2d

Every week on Mondays
Every Monday
Every mon

Every other Monday
On Mondays every other week

Every third Saturday
Every three weeks on Saturdays

Every week on Monday and Tuesday
Every mon & tue
Mondays or Tuesdays

Every Monday through Thursday
Every Monday to Thursday
mon to thu

Every 2w on wed, thu, and fri

Every other month
2m

Every month on the 1st
On each first of the month
Monthly on the first
Every month on the 1st of the month

Every month on the 5th and the 20th day
On the 5th and 20th of the month

Every month on the 1st through the 6th
Monthly on the first through the sixth
On the 1st through the 6th of every month

On every second Monday of the month
Monthly on every 2nd Monday
Every month on second Mondays

Every year on January first
On January 1st of every year

Every last sun of October through April
Every oct through apr on the last Sunday

Even with all this I missed the rules "on the last day of the month" and "on the last nth day of the month". A future update will remedy this shortcoming.

If you find any other text that isn't parsed correctly, please let me know.

Problems

This design isn't perfect as it has two glaring problems. One is that the user has no easy way of discovering how complex the recurrence rules can be. This isn't such a huge problem, but a way to solve this is to include a help button to show example rules or to include an accompanying iCal style UI to let the user setup the recurrence rule in a more typical fashion. I didn't include these in the initial implementation though because I wanted to see how users would react to this kind of UI.

Another problem is localization. Even if I write parsers for a few more popular languages, it won't accommodate the rest of the users in the world. Again, the solution is an accompanying traditional UI, but for now, I'm leaving it the way it is until I get some feedback.

Closing Thoughts

The Hit List has been my playground for trying out different ideas. This repeating task UI is just another example of me having fun even at the cost of disregarding some users.

My hope is that the net result will be more happier users even when I don't satisfy everyone.

UPDATE: If you'd like see how this works out in real life, you can download the public preview of The Hit List. You'll need Mac OS X 10.5, Leopard.

http://www.potionfactory.com/thehitlist/download/

The Hit List Public Preview

I'm happy to announce that the public preview of The Hit List, my new task-management application is ready:

Download The Hit List

It's a real pleasure to finally take the veils off since I have poured so much care and love into this application.

Of course, as a preview, it's not quite feature-complete yet, but the beta testers report that it's stable enough for daily use. It should be enough to give you a taste of what its personalty is like.

If you have thoughts you would like to share about The Hit List, you can do so at The Hit List Users Google Group.

On a final note, I'm taking pre-orders until version 1.0 ships. The final price will be $69.95, but you can get it for $49.95 for now. While you don't have to purchase a license until the final version ships, that deal won't last forever.

Enjoy.