Bad Prefs, Bad Usability

Monday, 2005-10-17; 02:37:00

Ooh how they annoy me.

One of my criteria for an application that's intuitive is one that is a well-behaved Mac OS X application. That means that it is a single package, so it appears as a single entity on your hard drive in the Finder. (In reality, packages are basically folders of support files, which just launches the main application when double-clicked. It's an illusion, but a very good one and a very nice one.) Of 60 items in my Applications folder (and this is pretty minimal since I've only been using this Mac for a couple weeks), only three are not self-contained application packages (there are a few folders that contain several related applications, so those don't count). I like having the appearance of a clean hard disk, so I frown on applications that aren't application packages.

It's almost a very niggling point, but application packages are able to hide all the little files that an app uses from the regular user. If you ever want to look inside the application package, though, to extract an image or sound, it's easy -- just control-click on the application package, and select "Show Package Contents". So there's no reason not to use application packages.

Another criterion for an intuitive application is that it respects regular locations for different kinds of files. That is, preference files should go inside ~/Library/Preferences/ , any computer-dependent support files should go inside ~/Library/Application Support/AppName/ , caches go inside ~/Library/Cache/ , etc., etc. (By "computer-dependent support files", I mean any extra data that aren't preferences or cache and can't be put directly inside the application package because it depends on what that user or that computer does with the application.) If any of this data needs to be shared across users, then the appropirate files should go in /Library/ rather than ~/Library/ .

If an app doesn't do this, it's really annoying to troubleshoot the application. You don't know where its preferences or its cache is, so you can't delete the cache/prefs in order to see if that was causing the problem with the app. (You might be able to find it with Spotlight or some hunting, but it's annoying and wastes your time.) In some cases, apps put their prefs directly in the folder that contains the application, in which case it clutters up your Applications folder with prefs files, which is a particular horrendous offense. When I see this, I'm very inclined to toss that app rather than leave it and test it out a few more times. Ugh. I also hate apps that put preferences in your ~/Documents/ folder -- gah, so annoying. (AppleWorks and Microsoft Office are both offenders in this regard, which is why I use Pages.)

The result of this very well-defined structure of where to put preferences and support files results in a very mechanical solution for troubleshooting problems. Tossing the prefs/cache is the first thing I do when troubleshooting an app, and 99.9% of the time I can find it very quickly because of this defined structure of support files.

Veteran Mac OS 9 users might argue that Apple has restricted their ability to put things where they want, and to a degree Apple has. For some reason, Apple still hasn't fixed Software Update to find applications outside the /Applications/ folder. I can see how that would be annoying to some users, but I like the structure, so it doesn't bother me. The inflexibility of the structure has also netted us a loss of a very useful feature that existed with Mac OS 9 -- the ability to have all system files contained within one folder. With Mac OS 9, you could simply copy this folder over to another hard drive and *boom*, you'd have a working operating system on that new hard drive, no installation required. (I realize that doing so would obliterate permissions in a multi-user world, but I still think it would be cool if Apple came up with a solution that would restore this feature. Another hurdle is the fact that there are other system files located in hidden folders, like /usr and /var which also need to be copied to the new drive. But can't Apple use a combination of symbolic links, self-repair, and a permissions-preserving copy feature in the Finder to make the system portable?) For the most part, though, you can still clutter up your hard drive as much as you want -- you don't really have to store documents in your ~/Documents/ folder or your movies in ~/Movies/ . So it's not too much of a problem.

Zooming in on preference files, an application can also be intuitive or not depending on how it structures its preference file. (I say "file" in the singular sense because, again, a well-behaved Mac OS X application has a SINGLE preference file, and any other "preferences" go in the Application Support folder. Apps also shouldn't be creating multiple preference files for various things -- Windows Media Player, for example, creates two prefs files, a "Windows Media Favorites" file and a "Windows Media Player Prefs" file. But other than that, Windows Media Player is a fairly well-behaved Mac OS X application besides the fact that playing video using it rivals RealPlayer's infamous buffering problem.)

But back to preference file structure. Good Mac OS X applications will use the standard XML preference file format (which is usually identified by the .plist extension, and is openable in the "Property List Editor" application included with the Mac OS X developer tools). They also will have clearly defined entries in the preference file and clear values for each pref. That way, not only can you do troubleshooting by deleting prefs files, you can do troubleshooting by deleting individual preference file entries. (In fact, many applications hide features, and simply by adding a preference file entry, you can activate the feature. In the Mac OS 9 days, there was no standard way for "hacking" applications, but there is with Mac OS X. If you browse the Mac OS X Hints site, the vast majority of tips involve using the command "defaults" in the Terminal.) John Siracusa's Terminal font fix is an example. A quick "defaults write FontWidthSpacing 1.003" would do the trick.

Here's an example of a badly structured preference file. (Incidentally, opening this preference file in Property List Editor and witnessing the horror is what inspired this whole post.) The offender is Wimic, a Dashboard widget.

The preferences file for Wimic consists of two and only two entries: the second is named "last", and it currently has a value of "Penny Arcade". The first is named "comics" and its value is, I shit you not:

title[[=]]9 to 5[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Harley Schwadron[[&]]hidden[[=]]true[[&&]]title[[=]]A Case in Point[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Rob Esmay[[&]]hidden[[=]]true[[&&]]title[[=]]Achewood[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Chris Onstad[[&]]hidden[[=]]true[[&&]]title[[=]]Adam@Home[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Brian Basset[[&]]hidden[[=]]true[[&&]]title[[=]]Agnes[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Tony Cochran[[&]]hidden[[=]]true[[&&]]title[[=]]Andy Capp[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Reg Smythe[[&]]hidden[[=]]true[[&&]]title[[=]]Animal Crackers[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Fred Wagner[[&]]hidden[[=]]true[[&&]]title[[=]]Annie[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Jay Maeder and Ted Slampyak[[&]]hidden[[=]]true[[&&]]title[[=]]Apartment 3-G[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Frank Bolle and Lisa Trusiani[[&]]hidden[[=]]true[[&&]]title[[=]]B.C.[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Johnny Hart[[&]]hidden[[=]]true[[&&]]title[[=]]Baby Blues[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Rick Kirkman and Jerry Scott[[&]]hidden[[=]]true[[&&]]title[[=]]Baldo[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Hector D. Cantu and Carlos Castellanos[[&]]hidden[[=]]true[[&&]]title[[=]]Ballard Street[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Jerry Van Amerongen[[&]]hidden[[=]]true[[&&]]title[[=]]Big Nate[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Lincoln Peirce[[&]]hidden[[=]]true[[&&]]title[[=]]Big Top[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Rob Harrell[[&]]hidden[[=]]true[[&&]]title[[=]]Bizarro[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Dan Piraro[[&]]hidden[[=]]true[[&&]]title[[=]]Blondie[[&]]src[[=]] [[&]]url[[=]] [[&]]author[[=]]Dean Young and Denis Lebrun[[&]]hidden[[=]]true[[&&]]title[[=]]Bo Nanas[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]John Kovaleski[[&]]hidden[[=]]true[[&&]]title[[=]]Bob the Squirrel[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Frank Page[[&]]hidden[[=]]true[[&&]]title[[=]]The Boondocks[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Aaron McGruder[[&]]hidden[[=]]false[[&&]]title[[=]]The Born Loser[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Chip Sansom[[&]]hidden[[=]]true[[&&]]title[[=]]Boy on a Stick and Slither[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Steven L. Cloud[[&]]hidden[[=]]true[[&&]]title[[=]]Brevity[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Guy & Rodd[[&]]hidden[[=]]true[[&&]]title[[=]]Calvin and Hobbes[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Bill Watterson[[&]]hidden[[=]]false[[&&]]title[[=]]Cheap Thrills[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Thach Bui and Bill Lombardo[[&]]hidden[[=]]true[[&&]]title[[=]]CTRL+ALT+DEL[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Tim Buckley[[&]]hidden[[=]]true[[&&]]title[[=]]Dilbert[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Scott Adams[[&]]hidden[[=]]false[[&&]]title[[=]]Doonesbury[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Garry Trudeau[[&]]hidden[[=]]true[[&&]]title[[=]]Ernie[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Bud Grace[[&]]hidden[[=]]true[[&&]]title[[=]]F Minus[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Tony Carrillo[[&]]hidden[[=]]true[[&&]]title[[=]]Family Circle[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Bil & Jeff Keane[[&]]hidden[[=]]true[[&&]]title[[=]]Ferd'nand[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Henrik Rehr[[&]]hidden[[=]]true[[&&]]title[[=]]Flight Deck[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Peter Waldner[[&]]hidden[[=]]true[[&&]]title[[=]]For Better or For Worse[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Lynn Johnston[[&]]hidden[[=]]true[[&&]]title[[=]]Foxtrot[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Bill Amend[[&]]hidden[[=]]false[[&&]]title[[=]]Frank and Ernest[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Bob Thaves[[&]]hidden[[=]]true[[&&]]title[[=]]Funky Winkerbean[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Tom Batiuk[[&]]hidden[[=]]true[[&&]]title[[=]]Garfield[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Jim Davis[[&]]hidden[[=]]true[[&&]]title[[=]]Geech[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Jerry Bittle[[&]]hidden[[=]]true[[&&]]title[[=]]Get Fuzzy[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Darby Conley[[&]]hidden[[=]]false[[&&]]title[[=]]Go Fish[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]J.C. Duffy[[&]]hidden[[=]]true[[&&]]title[[=]]Graffiti[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Gene Mora[[&]]hidden[[=]]true[[&&]]title[[=]]GU Comics[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Woody Hearn[[&]]hidden[[=]]true[[&&]]title[[=]]Herd Thinners[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Bill Holbrook[[&]]hidden[[=]]true[[&&]]title[[=]]The Joy of Tech[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Liza Schmalcel and Bruce Evans[[&]]hidden[[=]]false[[&&]]title[[=]]Jump Start[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Robb Armstrong[[&]]hidden[[=]]true[[&&]]title[[=]]Luann[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Greg Evans[[&]]hidden[[=]]true[[&&]]title[[=]]Marmaduke[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Brad Anderson[[&]]hidden[[=]]true[[&&]]title[[=]]Monty[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Jim Meddick[[&]]hidden[[=]]true[[&&]]title[[=]]Mutts[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Patrick McDonnell[[&]]hidden[[=]]true[[&&]]title[[=]]Non Sequitur[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Wiley Miller[[&]]hidden[[=]]false[[&&]]title[[=]]Over the Hedge[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Michael Fry and T Lewis[[&]]hidden[[=]]true[[&&]]title[[=]]Pardon My Planet[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Vic Lee[[&]]hidden[[=]]true[[&&]]title[[=]]Peanuts[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Charles M. Schulz[[&]]hidden[[=]]true[[&&]]title[[=]]Pearls Before Swine[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Stephan Pastis[[&]]hidden[[=]]false[[&&]]title[[=]]Penny Arcade[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Jerry Holkins and Mike Krahulik[[&]]hidden[[=]]false[[&&]]title[[=]]Pickles[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Brian Crane[[&]]hidden[[=]]true[[&&]]title[[=]]Piled Higher and Deeper[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Jorge Cham[[&]]hidden[[=]]false[[&&]]title[[=]]PvP Online[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Scott Kurtz[[&]]hidden[[=]]true[[&&]]title[[=]]Questionable Content[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]J. Jacques[[&]]hidden[[=]]true[[&&]]title[[=]]Red Meat[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Max Cannon[[&]]hidden[[=]]true[[&&]]title[[=]]Rhymes With Orange[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Hilary Price[[&]]hidden[[=]]true[[&&]]title[[=]]Rose is Rose[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Pat Brady[[&]]hidden[[=]]true[[&&]]title[[=]]Rudy Park[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Darrin Bell and Theron Heir[[&]]hidden[[=]]true[[&&]]title[[=]]Sally Forth[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Francesco Marciuliano[[&]]hidden[[=]]true[[&&]]title[[=]]Sherman's Lagoon[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Jim Toomey[[&]]hidden[[=]]true[[&&]]title[[=]]Tank McNamara[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Jeff Millar and Bill Hinds[[&]]hidden[[=]]true[[&&]]title[[=]]Ted Rall[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Ted Rall[[&]]hidden[[=]]true[[&&]]title[[=]]Tundra[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Chad Carpenter[[&]]hidden[[=]]true[[&&]]title[[=]]Unfit[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Mike Belkin[[&]]hidden[[=]]true[[&&]]title[[=]]User Friendly[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Max Ryser[[&]]hidden[[=]]true[[&&]]title[[=]]Wizard of Id[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Brant Parker[[&]]hidden[[=]]true[[&&]]title[[=]]WulffmorgentHaler[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]The Toucan Kid[[&]]hidden[[=]]true[[&&]]title[[=]]Ziggy[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Tom Wilson and Tom II[[&]]hidden[[=]]true[[&&]]title[[=]]Zits[[&]]src[[=]][[&]]url[[=]][[&]]author[[=]]Jerry Scott & Jim Borgman[[&]]hidden[[=]]false

That's in one, single preference entry. OK, I'm sorry, but that's just fucking ridiculous. There's no excuse for that crap. Hell if I'm going to try to fix my Wimic problem by wading through that!

Technological Supernova   Unfiled   Older   Newer   Post a Comment