Friday, August 21
First off, I should mention that I don't think I use the word "heuristic" correctly – although in computer science it's grown to replace the word "algorithm" as just a general term for a way to solve a problem, traditionally it has a more narrow definition:
Heuristic (/hjʊˈrɪs.tɪk/) is an adjective for experience-based techniques that help in problem solving, learning and discovery.
(Yay, it's fun to copy and paste from Wikipedia!)
When I use it, I usually am talking about an algorithm that won't
always give the correct solution, but does so often enough that the algorithm is useful. This differs from a classic algorithm, where we struggle mightily to make it
provably correct in
every instance.
But classic computer programming has largely failed, because it failed to copy nature. Nothing in nature works 100% of the time, but it sure works well MOST of the time – and when it fails, well, you die and get replaced. A human being, for instance, is an absolutely amazing machine, and is provably NOT provably correct.
--
To talk about computer heuristics, we'll need to get concrete. Could I get a "for instance?" Heck, yes.
For instance: NSDateFormatter has the following method:
|
- (id)initWithDateFormat:(NSString *)format allowNaturalLanguage:(BOOL)flag;
|
Ignoring for a second that 'flag' should be
really be renamed 'allowNaturalLanguage' (I mean, honestly, if your method body refers to a variable named 'flag' it's not at ALL obvious what you mean, is it? You'd have to look at the method definition every time you saw this 'flag' variable, and that's just poor coding.) uh I lost my train of thought.
Oh! Yes. 'allowNaturalLanguage.' It's really cool! In most places you can enter a textual date in Cocoa (but
not those fiddly NSDatePicker widgets where each number is in its own field), you can enter dates like, "Next Tuesday at noon" or "yesterday at 5:23PM" and Cocoa will magically turn that into a valid NSDate.
Possibly more importantly, you can type "Oct 16, 1969" or "10/16/69" or "10.16.1969" and it'll figure out what you meant my birthday in each case. (You
cannot just type "Wil Shipley's Birthday" but that would be a great extension of their existing heuristic, if you ask me.)
This frees users up from having to figure out what magic combination of digits, dashes, slashes, words, and/or abbreviations comprise a valid date. Without this flag the programmer specifies exactly what format dates must take, like, "mm/dd/yyyy", and if the user doesn't type
exactly that information, she gets an ugly error panel. With the flag, the user doesn't have to learn what the computer wants:
she can continue to do things the way she has done them and the computer will understand her.The latter is the touchstone of great design: we must strive to make our programs require as little learning as possible on the user's part. Each little thing they have to learn about our program is another obstacle to them using it fully, another tiny chunk of enjoyment stripped from their experience.
Now, a few releases of OS X ago (I believe 10.4), 'allowNaturalLanguage' was marked as deprecated; soon to be removed from the APIs. "What what what‽" said I. I filed a bug: "Why?"
The response was, essentially, the current heuristic doesn't work perfectly even in English, and fails badly in foreign languages.
That may seem like a logical reason to remove a piece of API,
if you are a programmer. If you're a user, you're probably thinking, as I did:
this is the worst reasoning in the world.
Let's say 65% of Mac OS X users speak English primarily. They were all enjoying not having to type dates and times the way the computer wanted. 65% percent of the users were just a
little bit more happy with their experience on Mac OS X. And,
crucially, the other 35% who didn't speak English had
no idea what they were missing. It didn't hurt them at all to not have this functionality, it just didn't help them, either.
--
Life isn't fair, and programming is even less fair. Programming is all about picking a certain class of users with a certain specific class of problems, and making their lives much MUCH better. Like, if I didn't listen to music, I wouldn't care about iTunes. If I didn't take photos of my girlfriends naked, iPhoto would add nothing to my life... but that would be OK by me. iTunes and iPhoto don't have to please everyone in order to be good. They just have to please
some people, and should please those people
a lot.We talk a lot about the 80% solution, which can be summarized thusly: Will 80% of your users think this feature / heuristic / bug fix is good? Then do it.
That rule seems obvious, really; the value of this rule is in remembering its obverse: if a feature / heuristic / bug fix is only going to help, say, 20% of your customers, you need to prioritize it lower.
It's easy when programming to get seduced into doing something really super-duper-cool no matter how obscure, but we have to remember our time is finite: spend your time where your users are going to see it. Do a GREAT job on those areas. (Don't do a shitty job on the other areas - skip them entirely.)
--
In Leopard, '-[NSDateFormatter allowNaturalLanguage]' is no longer marked as deprecated – I won that battle. But there's also a new date widget that makes entering dates a much more graphical affair, which democratizes the happiness. Clear graphics trump heuristic input methods – I use the widget now in my programs, unless I'm parsing text files, in which case I use 'allowNaturalLanguage.'
Everyone wins, now.
--
So, we switch to another heuristic, which requires a bit of background:
Amazon recently started requiring that all requests to their product catalog API be digitally signed with the secret password of a registered Amazon associate – one might assume they discovered stealing other people's associate codes is rampant, and they want to crack down on programs and websites that are violating their rules and using their APIs with stolen identities. A reasonable thing.
I rewrote the lookup code for both Delicious Library 1.7 and Delicious Library 2.2 so they will digitally sign requests, so my customers could keep looking up books and DVDs and stuff. (I don't think there are a lot of 1.x users still out there, but even so I didn't want to force them to pay upgrade to 2.x just to keep using my program.)
Now, since I've changed how I look up items, immediately after the release of I asked my support team to immediately prioritize all bugs reporting lookup problems, since you modify some area of code you want to alert your support people to actively look for failures in that particular area, so you can fix them immediately instead of waiting until they become a huge issue.
It turns out there
was a tiny issue (searching for a book by title fails if its title has an apostrophe in it - fixed in 2.2.1) but while looking at user's bugs I discovered something more interesting: a number of users were reporting lookup failures because they were typing in ISBNs the way they see them on the boxes, eg: 978-0-316-01876-0, and they were getting no results, because Amazon stores ISBNs without dashes, eg: 97803780316018760.
Hrm. Now, my first response to this problem (a year ago when I'd just finished 2.0 and was exhausted) was, "Dammit, just don't type the damn dashes. Who looks up things manually by ISBN anyways? There's like twenty easier input methods, including dragging URLs in from Amazon or scanning with the iSight or typing the author's name... Geez." There was actually a lot more cussing than that, actually, but luckily I have Terry as a buffer layer between me and the customers, so it comes out as, "I'm sorry, we don't accept dashes in ISBNs or EANs right now..."
But after seeing bug reported again, I realized I'm violating my cardinal rule: I'm making users learn some picky input method that only exists because of Amazon's particular database formatting. And, worse, there's no good way for them to learn this rule unless they write us.
I should mention that there's only one search field: the user can type in numbers, author names, titles, or even keywords, and we just hand that stuff off to Amazon and let it do a fuzzy search.
So, how do we solve the dashes issue? Let's run through the solutions we think of, until we hit the best one.
|
| Add text near the search field: "Omit dashesWhen entering ISBNs or EANS" |
Advantages of this method: • It's easy for us to add a field to the NIB. • The user can actually learn from this without having to write us.
Disadvantages: • We're teaching the user something that's not generally useful, instead of learning from her. • There's another damn text box on or page, which is one more graphical thing calling for the user's attention, and we've learned from bitter experience that every widget you add to a window is like killing a kitten. • This field requires localization.
|
- (IBAction)findMatchingItems:(id)sender; { self.keywordsString = [self.keywordsString stringByReplacingOccurrencesOfString:@"-" withString:@""]; [...search...] }
|
Advantages of this method: • One line of code, sweet. • User doesn't have to learn anything: ISBNs and EANs can be entered with or without dashes, work either way.
Disadvantages: • User has lost the ability to search for titles where dashes are meaningful. Eg, "The Mythical Man-Month" would be turned into "The Mythical Manmonth," and Amazon may fail to find THAT, now (actually it does in this instance, but let's not rely on THEIR heuristic working in all cases.).
|
- (IBAction)findMatchingItems:(id)sender; { NSString *noDashesString = [self.keywordsString stringByReplacingOccurrencesOfString:@"-" withString:@""];
BOOL containsOnlyDigits = YES; for (NSUInteger characterIndex = 0; characterIndex < noDashesString.length; characterIndex++) { containsOnlyDigits &= [[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[noDashesString characterAtIndex:characterIndex]]; if (!containsOnlyDigits) break; } if (containsOnlyDigits) self.keywordsString = noDashesString;
[...search...] }
|
Advantages of this method: • User doesn't have to learn anything: ISBNs and EANs can be entered with or without dashes, work either way. • User can still search for titles with dashes in them.
Disadvantages: • User has lost the ability to search for titles that are ONLY digits and dashes, for example, if a user were searching for a book about the latest
quack diet, "10-10-10," she'd end up searching for "101010," and maybe not finding it.
|
- (IBAction)findMatchingItems:(id)sender; { NSString * noSpacesOrDashesString = [[self.keywordsString stringByReplacingOccurrencesOfString:@"-" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""];
BOOL containsOnlyDigits = YES; for (NSUInteger characterIndex = 0; characterIndex < noSpacesOrDashesString.length; characterIndex++) { containsOnlyDigits &= [[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[noSpacesOrDashesString characterAtIndex:characterIndex]]; if (!containsOnlyDigits) break; } if (containsOnlyDigits) { switch (noSpacesOrDashesString.length) { case LIISBNDigitCount: case LIUPCDigitCount: case LIEANDigitCount: self.keywordsString = noSpacesOrDashesString; default: break; } }
[...search...] }
|
(While I was in there, I decided to remove extra spaces if I pass the tests to remove extra dashes, so users can now also type "978 0 316 01876 0" and that will work, as well. It seemed like it might be as common, and it cost me almost nothing to add.)
Advantages of this method: • User doesn't have to learn anything: ISBNs and EANs can be entered with or without dashes, work either way. • User can still search for titles with dashes in them. • User can still search for titles with only decimal digits and dashes in them, as long as the number of digits doesn't happen to form a valid EAN, UPC, or ISBN.
Disadvantages: • Kind of reveals that I am a crazy person.
[Update: several sharp-eyed readers have pointed out I neglect to check for "x" or "X", which is valid as the last digit (the check digit) in the older ISBN-10s. Thank you... I'm human, too!]
[Update update: Reader Ian Stoba wrote me a note and suggested a more clever (and actually less code for me) heuristic, which is to remove the dashes and check the checksum (last digit) to see if the number that remains is a valid ISBN-10, UPC, or EAN. Since I already have written the methods to do these checks, this is very simple, and pretty fail-proof.]
--
So, that is the algorithm I went with. Let's evaluate this in terms of our goals for any good heuristic (like the one from NSDateFormatter):
- It has to help some class of users – it helps users who type the dashes in ISBNs, UPCs, and EANS, and it helps them a lot, because before they had no clues how to proceed when lookups failed.
- It has to not harm other users – it almost never will, because it won't change the input at all unless the user happens to be searching for an author or title that is all numbers and dashes AND has exactly 10, 12, or 13 digits it.
- It shows the user what it's doing, so if the heuristic does fail the user will understand why – in this case, we replace the contents of the text field in which the user just typed her number with our new (dashless) number, and so if she really WERE searching for a book whose title was, say, "1-2-3-4-5-6-7-8-9-10-11," she'd see that was replaced by "1234567891011" when she did the search, and at least have a clue why the search failed.
--
Heuristics are the key to designing programs that work well with humans, that make humans smile. In college computer science classes, we learn all about b*trees and linked lists and sorting algorithms and a ton of crap that I honestly have never, ever used, in 25 years of professional programming. (Except hash tables. Learn those. You'll use them!)
What I do write – every day, every hour – are heuristics that try to understand and intuit what the user is telling me, without her having to learn
my language.
The field of computer interaction is still in its infancy. Computers are too hard to use, they require us to waste our brains learning too many things that aren't REAL knowledge, they're just stupid computer conventions.
It's up to us to fix this.
Labels: code, interface design
Saturday, February 9
Mr. Rentczchxh has posted my talk from C4, and if you would enjoy watching a talk without paying, you can watch it. It's on hype, and how I generate it, but it also touches on other topics concerning having your own software company, like making good software, bundling, getting into stores, having sex with cylons, &c.
Watch it!Or don't.Labels: advice, business, code, interface design, mac community
Tuesday, January 15
I thought of a lot of titles for this post, but, really, the first one that came to me seems the best.
I've read nothing but whining about the MacBook Air on Mac news sites since it came out this morning. Honestly, I just want to shake these people. Not, like, shake some sense into them, but shake them like you're not supposed to shake a baby.
The criticism all basically goes like this: "It's not like a MacBook Pro!"
No, really? Seriously? I mean, they introduced this new product, and it doesn't have the same specs as the MacBook Pro? God, that is bizarre. I wonder why they gave it a new name, and continue to sell the MacBook Pro, then, if it's not going to be exactly the same. I mean, that hardly makes sense, does it?
Ok, fine, there are some people who want, like, an extra battery Pack. But let's admit amongst ourselves that the overwhelming majority of people out there have never pulled the battery out of their existing laptops, and didn't even know or care that it comes out. In fact, if something goes wrong with their battery, this majority -- whom we'll call "NORMAL PEOPLE" for convenience -- will just take the damn machine to the store and get it fixed, whether it's user-serviceable or not. Because we don't want to hassle with it.
And there are people out there who do video editing on their MacBooks and want FireWire. Great! I respect your choice! You should buy a MacBook! It's an awesome machine! If you want to do that! Which I don't!
I've read journalists complain that you can't get at the hard drive in the MacBook Air. What? I have no fucking idea where the hard drive is in my MacBook Pro, and even if you drew me a damn diagram with labels and numbers and gave me a replacement drive I wouldn't open my machine even in exchange for a year with Zooey Deschanel. Ok, yes I would, but you get my point. I'm sorry, Zooey, I didn't mean it, baby.
Some journalists get so close to the truth it hurts, yet miss the large print. "OMG! The unit is all sealed and self-contained like the iPod!"
Yes... the iPod. That huge failure. Also, the iPhone. Stunning disappointment that it was. I mean, jeebus, why would Apple make ANOTHER device incredibly simple? Clearly the market has spoken, and it wants tons of ports and screws and geegaws and flippers... no, wait, no it doesn't.
You guys are TECHNOLOGY JOURNALISTS. You are GEAR HEADS. There is no shame in this, but, come on, recognize that what you think is cool is NOT what my mom thinks is cool, or what an executive thinks is cool, or what a lawyer who just wants to write a deposition on her laptop thinks is cool.
I'm a programmer. I just want a machine I can write software on. Once, I loved gadgets, too, but now I really just want a gadget that (a) works, and (b) is beautiful and easy-to-use. Sure, my iPhone doesn't have as many raw features as my lawyer's Blackberry + RAZR combined (she carries both). But I understand my iPhone, and I don't have to learn it, because it's learned me. I can take a photo in three seconds, and so can she (we tested) even though she'd never seen an iPhone before.
I'm not the freak, here. In this one instance. I'm with the majority. All software developers should be hailing the advent of the computer-as-appliance, because it means we'll be reaching into markets that are afraid of self-service machines.
I can't take apart my Kitchenaid blender. If they come out with a new motor, I'm screwed. It's not upgradeable! And when the motor blows (as it DID... grrr), I have to send it back. I can't take apart my car. When Lotus came out with a bolt-on supercharger, I had to (gasp) take it to the dealer to have it put in. Somehow I survived.
I don't buy a laptop because I want to replace its drive in a year. I buy it because it seems great and meets my needs today. If my needs magically morph over the coming year, I guess I'll sell it on eBay. Or pay Apple to throw in a different drive, or something. Honestly, I think we need to admit that just because machines get faster every year, doesn't mean that the majority of people need faster machines.
In two weeks I'll be writing Delicious Library 2 on a MacBook Air, every day. Because it's simple and beautiful, and I crave those things.
And all you haters can... well, buy one in six months, when you realize how nice it is.
--
Update 2/4/2008: My MacBook Air with 2GB of RAM and 1.8 GHz cores and the SSD compiles Delicious Library 2 from scratch in 1:59.4. My MacBook Pro with 3GB of RAM and 2.3GHz cores and an HD compile it in... 2:04.3.
MacBook Air FTW.
Labels: business, interface design, mac community
Monday, August 21
At the non-non-disclosed WWDC keynote this year, Steve Jobs said Boot Camp will ship as part of Leopard, and it'll be friendlier. Apple has also publicly said in the past that it won't be selling Window pre-bundled on its machines. So, how
can they make Boot Camp friendlier, if they won't just, say, do all the work for you, ahead of time?
The friendliest way I can think of is, while you're running Boot Camp and still inside Mac OS X, it should ask you to pop in your Windows CD and Boot Camp installs Windows for you. Then, you reboot, and voila: Windows. (Which is kind of like saying: "Voila: Shit sandwich!")
Is this possible? Well, yes, I think so.
Right now Boot Camp allows you to sort-of repartition your boot drive while you are using it
without losing any data, which is really cool and is something us PowerPC types have wanted for years (and still want, hint hint, Bertrand). I say "sort-of" because the partition it creates isn't formatted and isn't formattable by Disk Utility, either (you can select the partition but all the buttons are grayed out). I reckon this is because of EFI mumble mumble blah blah I honestly have no idea.
But here's what I think:I think it's possible to just go ahead and format that partition as a real Windows (FAT) volume from within Mac OS X. I'm pretty darn sure of this because, well, you can format floppies or CDs or external USB or Firewire drives in Window format(s). FAT's a pretty known science by now.
So, imagine Boot Camp formats that new partition in a nice, Windows-friendly way, then unpacks the relevant files from your Windows CD onto this new partition, and then copies its special drivers into their known locations, all from the comfort of Mac OS X. Voila! Bootable Windows! With no stupid hassles!
Now, this actually may be a bit more complicated for Apple than I make it out to be, because it
may be that the unpacking of all that Windows crud is actually pretty involved. Apple could cheat a little since they know the exact configuration of the machine that WIndows is going on, but, it still might be hard. Honestly, I know little to dick-all about how Windows installation works. I'm happy in this ignorance, the way some people are happy believing that global warming is a giant hoax put on by greedy environmentalists who stand to profit by... uh... wait, environmentalists don't really make a lot of money, do they? I mean, not compared to, say, oil companies... but I digress...
Anyhow, even if actually
installing windows is too complicated, there's a slightly-less-cool solution -- Boot Camp could just copy the Windows install CD verbatim onto a subdirectory in the new partition it makes (into, say, c:\windows install\), and then do the same with the custom drivers, and then reboot that partition and have it install onto itself. This is an old trick we used to do all the time on Windows machines when I was a wee lad, because Windows always used to keep its extra drivers only on the CD, so every time you'd plug in a new mouse Windows would ask you to dig up the Windows CD so it could find a driver (even if it already had one installed), but if you'd installed from a copy of the CD you'd made that was still on your disk, it'd look there first, so you wouldn't have to keep those damn disks around all the time.
One problem with all this is that Mac OS 10.4 can't write to NTFS volumes, only to FAT volumes, and NTFS is the wave of the future for Windows filesystems (and needed for volumes over 32GB). But, Apple should add full NTFS support to Leopard anyways, because interoperability is just a damn good thing to have. Well all need that crap. I need to be able to download my game patches and shit under Mac OS X and then just drag them onto my Windows partition -- don't make me use IE to download Firefox or something, and then have to download some wack-ass decompression programs for Windows (7z?) and then virus protection because I touched the internet and then basically I'm in a living hell just because I want to play me some Elder Scrolls: Oblivion
this year instead of two years from now and twice as slowly.
No, I say. Make it easy for me to make tiny, stupid little Windows installs on my MacBook, so I can burn them off-handedly, like matches, and as each one's tiny, stupid little immune system flutters and finally flickers out under such heavy viral loads, I'll simply wipe them clean and burn them again, with a single click in my future perfect Boot Camp.
And I will laugh. Because we have totally pwned Windows.
Labels: interface design, mac community, random ideas
Friday, July 14
Tonight I was thinking about global variables (or, their equivalents -- class variables or class methods that return static values), and how gosh-darned handy they are, except for the fact that you don't often use them because what you want is variables that are global to a particular document, and if you have multiple documents open you don't know WHICH particular document unless you have a backpointer to it, in which case it's not a global any more, is it?
And then I realized that, in the future, each instance of an application will have only one document. Which is to say, if the user opens 10 TextEdit documents, she'll actually have 10 instances of TextEdit running.
The advantage to this is that, if you do something that is slow or modal in one TextEdit document, you don't have to, like, go check your mail or do something else -- you can edit another TextEdit document while you wait. When you think about it from a user's point of view, why is it that when TextEdit is hung (doing something really intensive on one document, or even just hanging for the fun of it), you can access Mail or Safari documents, but not other TextEdit documents? Is there some research that shows you are more likely to want to go send a Mail message than edit another text document? This is an app-centric feature in what
should be a document-centric world.
But imagine if, say, some crazy web page made Safari crash, but it was that only one window, and all your other Safari windows were still open. Imagine if you hung Preview by saving something as a JPEG2000 while playing a movie (true story) and you could just kill off that
document and all your other images you were working with were still around?
So, how would this work? Well, at a lowest level (the OS), it's pretty simple. Mach already will automatically share pages mapped in from the application's resources and object code, between running instances of the app. (In fact, I believe this sharing of resources happens right now if two users use Fast User Switching and run the same app.) The OS
would have to actually launch the application multiple times to create multiple documents, which would mean there'd be an extra memory overhead of a whole application's stack being created (and the objective-c environment being fired up, classes being initialized, etc), and there'd be a speed hit from this as well. However, speed and memory are two things that are getting cheaper, whereas programmer time is not. And startup times are getting faster and faster even without hardware improvements, thanks to cool OS and Cocoa tricks. I certainly don't think those are exhausted (freeze-dried apps, anyone?).
Then, at the Mac workspace (Finder) level, Apple would have to do some work with things like AppleScript and LaunchServices so they are aware that there is no longer just one, say, "TextEdit" to which it can send messages. Some things would work just fine with little reworking -- if you have an AppleScript that says, "Open this document in TextEdit and do blah blah" you already don't know and don't care how many documents TextEdit has open right now, so this change wouldn't matter. But if you look at an AppleScript that says, "Go through TextEdit's open documents and tell the first one..." then that would obviously require some OS glue to work correctly.
On the dock, Apple would only show one icon for any given app, no matter how many instances of it were running. Apple could pretty easily rework the workspace so all documents that were running in the same base application were shown/hidden together, even though they were in different address spaces. The Windows menu wouldn't be hard to modify so that it just brought another app to front, as well, if you selected a different document.
The user wouldn't (necessarily) want inspector windows to move around when she switched documents inside a single application, but that would be easy to handle -- it wouldn't be hard to do some simple messaging between instances of the application telling them all where their "Blah Inspector" should be located and whether it should be hidden, for example. This kind of coordination of the "shared look" of the app would be easily built into AppKit -- you'd simply decide ahead of time what should stay the same between documents (maybe you have a special icon dock that sits at the top and should be there for every document, for instance) and AppKit would make sure that all running instances are in the same state, much as it does right now with toolbars (albeit in a single process, but the extension is not hard). Consider, for instance, the color panel, where swatches are always the same across all running programs, or the font panel, which displays the same fonts and groups no matter the app. This is a solved problem.
The user experience for all this could be just like the current one under OS X, except crashes and hangs and modal operations in a document would be handled MUCH more gracefully, and the task of writing document-based Cocoa programs would get simpler. Imagine, for instance, if you're populating a popup button somewhere with, say, the names of all the objects in a Graffle document. The neat thing would be, you wouldn't need a backpointer! There's only one document, so you can just treat it as a global: "Hey, global document, give me all your object names." You're done. (Sure, you can ask the NSApp for its currently active document right now, but there are instances when you're doing work for a document but
you can't be sure that it's the active document -- it could be one of the background ones. This would eliminate that uncertainty.)
Conceptually, this whole model seems a lot cleaner to me, basically because different documents inside an app almost never talk to each other. There's really no reason have them in the same address space, except for the fact that launching apps was expensive (up to now) and took up memory.
But as we switch to these new Intel machines, we're finding app launches are, like, a fraction of a second. And, history has shown us, whenever we have an excess of speed or memory, we use it to make programming simpler for ourselves, which allows us to make cooler programs for users.
Heck, in the old days, we only had one address space, and if you crashed a program your whole machine was S.O.L. Now we can't even imagine such a barbaric time. I think one day we'll look back to the days when a single application had multiple documents and say, "Why? That's such a pain to deal with! What if one document corrupts memory! They'll all get messed up! That's crazy!"
Labels: interface design, mac community, random ideas
Thursday, March 16
Ok, look, I know this is a family blog (What exactly does that mean, really? That Dad reads the blog aloud to his 2.5 kids as he smokes a pipe in his easy chair with his hair all full of brillcreme?), so I don't want to get too ribald, but when I was a kid there were only two kinds of condoms, regular and
with bumps, "enhanced for her pleasure."
This apparently meant embedding grains of sand in the latex. I remember that, growing up, I had seen condoms and had read
Where Did I Come From? (hippie parents), but had no idea how these grains of sand were meant to enhance sex, even the sort of smooshy-gooshy idea I had of sex back then.
Honestly, I'm 36 now and still have no idea what the hell they were thinking. I don't know if they sell those condoms any more. If they do, I'd like to caution my younger viewers: I've never met a female whose response wasn't: "OUCH! SON OF CHRIST! WHAT THE FRAK! WHY WOULD SOMEONE PUT GRAINS OF SAND IN THAT FRAKKING THING?" (Only, without all the BSG talk.)
--
I think of the phrase "enhanced for her pleasure" every time I boot up my stupid digital video recorder (DVR), because somehow Microsoft managed to talk my cable monopoly into selling me a box that constantly, on every screen, in the upper-right corner, says, "Microsoft
Enhanced."
And, much like tiny grains of sand in your genitals, this recorder has so many idiotic annoyances and glitches that I wonder, "What do you guys think
enhanced means?" and "WHY would you WANT your name associated with this?" (To both Comcast _and_ Microsoft, I think that.)
I mean, ok, it can, mostly, record TV programs. I mean, sometimes it does. Other times, it just decides not to. I mean, it'll SAY it's going to record all episodes of LOST at 9PM on Wednesdays on Channel 102, and there will BE Lost at 9PM
this Wednesday on Channel 102, but it'll say, "Nothing more scheduled to record," even though it's the one that made up the criteria, and it did manage to record the first half of the season, and I can see the other shows in the schedule. Maybe the second half of the season stinks? I'll never know, because, hey, it decided not to record it. (Only 78% full! I checked!)
Microsoft Enhanced! For her pleasure!
But, hey, I'm fine with having to come home before my favorite shows and unschedule them and then reschedule them so my DVR will suddenly decide it's OK to record them again. I like to think of it as sort of rotating the tires; I keep the show schedule fresh. It's amazing how much less TV you'll watch when you have to reschedule everything every week, too. Besides, it's not like the POINT of having a DVR is you DON'T have to be there to start each recording manually. And this is first-generation technology, right? Right? I mean, there's NEVER been any other brands of DVRs, right? Microsoft invented this shit, no? And enhanced it?
But my actual least-favorite "enhancement" is that this DVR decides, whenever I turn it on, that it should default to showing me some stupid channel, full volume. Because, god, what would I do alone in a room with only silence to comfort me? Mayhap I would die. Now, silly "user interface experts" would argue that the idea behind a DVR is that you're a discriminating TV viewer; that you, in fact, hate the vast wasteland that is TV, and that every moment you are exposed to programs that aren't among the 4 or 5 tolerable ones you have selected is actually quite painful. (Think I'm exaggerating? Watch all of "Elimidate." Just once. Then let's talk about pain.)
So, I turn on this stupid DVR (whisper it with me as you press the power button... "microsoft enhanced"... like the wind at your windows) and it starts BLARING whatever is playing on whatever channel it last recorded, because that's probably the best default option, right?
It wouldn't be reasonable to present me, silently, with a menu of shows I've recorded, right? No. Because the most likely answer to "Why did Wil turn on the TV at 2:15AM?" is not "to watch one of the five shows he recorded this week, as he does every week, which is all he ever does with this stupid device," it's "TO WATCH THE LAST 15 MINUTES OF ELIMIDATE! BONK-BONK-WONK-WONK WONK-WONK WONK-WONK, BEOMP BEOMP BEOMP!""
But even that's not enough. As I work through the menu systems, it continues to give me a feed of some random channel in the upper-left hand corner. I'd like to point out that there are something like 900 channels on this system. It doesn't care
which one it's showing me. It's just knows that
I need to be seeing TV, dammit. I don't care if it's infomercials for electric knives on the Discovery channel at 4AM, that shit is BETTER THAN SILENCE. SILENCE IS THE SOUL-KILLER.
WHAT THE FUCK IS WRONG WITH THE PEOPLE WHO WORK AT MICROSOFT! SERIOUSLY! Do they really enjoy all this noise? IT'S MICROSOFT MOTHERFUCKING ENHANCED, FOR HER MOTHERFUCKING PLEASURE!
If I watch a show, like the season finale of Battlestar Galactica this year, which left me shaking with anger and pleasure at the same time, and then, after the screen fades silently to black, I go back to the main menu, my little Microsoft Enhanced friend is right there for me. "Show's over! Let me pick a channel and show you crap! Full volume! Right up here in the upper left! Having trouble picking a show because I'm yelling at you? About crap? Crap you don't care about? Just ignore me! Go on, pick a show! C'mon, what's wrong, you freezing up? Just pick one! Hell, I'll do it! I'm Microsoft Enhanced! For her pleasure!"
There's other annoyances. For example, if you fast-forward through commercials, and then press "play" when you're actually, you know, back into the program, an incredibly sophisticated set of things happens inside the DVR, none of which are "pleasing." The first is, the machine is so poorly-designed that ANY keypress takes a second or so to register, so it'll appear that you did NOT press play for a second, and the PVR will blithely zip ahead for a while longer. Then, to make up for this fact, they will REWIND the recording some bizarre and ever-changing amount based on their assumption of how slow they think you might react to the show having starting up again.
I'm guessing they tested this DVR on people with Parkinson's disease, because they typically rewind a full THIRTY seconds to before the spot where I pressed play. Try imagine the kind of calculation you have to do on the fly: "Ok, I saw the show begin, so I need to press play sometime soon so that I can start the pause to when the auto-rewind will take me back to before some amount based on the current fast-forward mode I'm in..." I usually spend thirty or forty seconds oscillating around the beginning of the show. It's like Microsoft doesn't WANT me to skip ads! Whaaa? What about
her pleasure? Please tell me you didn't forget about
her?
And then let's talk about the pause button. If I press the pause button during live TV, which I do a lot, the machine actually waits a second to pause, then stutters, then replays the last two seconds and adds a bonus second I haven't seen before, then really pauses. It's like a kid who wants to test your limits when you tell him to shut up. "Hey, give me a candy bar! Give me a candy bar! Give.." "SHUT UP!" ".. Give me a candy...?" When I first started pressing pause I'd get fooled by the stutter every time and think it hadn't REALLY paused, so I'd press it again, so in another second it'd resume, which made me think maybe the pause button really was the mislabeled "two-second-respite" button.
The stuttering pause is annoying all the more because the pause button is my only savior, because when I first turn the DVR and TV on, 'pause' is the ONLY button that will stop the noise. Let's think about this. You turn this device on and there is NOTHING you can do, short of finding the one button out of 800 that's labeled 'pause' (by definition, a
temporary block) to stop it from blaring crap at you. Crap that you don't want, and never wanted. Now, I'd like to point out, the "stop" button doesn't work in Live TV mode. You can't say, "No, I don't want a channel going, I'd just like silence." Sure, you can pick WHICH channel of crap you to view, and you can ask for a brief break from crap, but you can't pick "No Crap." Because, you know... the enhancements... the ones made by Microsoft.
And if you pause the live feed for that glorious, brief release, and choose and then play a program you like, and then stop that program... the PVR will go back to live. Yes, it unpaused itself while you were watching what you actually wanted to watch. "Hey, uh, we noticed you left us all paused, there, for like an hour, and, uh, we figured, 'that can't be right', so we just restarted the channel of crap there for you in the upper-left. No charge this time, buddy. Just thank Microsoft Enhanced."
The impression you get from this device (admittedly, sold to me by Comcast, my cable company BY LAW MOTHERFUCKER) is that TV is not just like a faucet, it is more like a stream. If you block the flow of TV for more than a few minutes you will JAM UP THE CABLE FLOW AND CAUSE SERIOUS HARM TO SOMETHING. THE PRESSURE WILL BUILD. THE ENHANCEMENTS WILL SUFFER. THOSE BASS FISH AREN'T GOING TO CATCH THEMSELVES. THE WINDBAGS ON CNN HAVE IMPORTANT STORIES ABOUT MURDERS AND KITTENS TO TELL. I feel like I'm in
Max Headroom: 20 Minutes in the Future, where all TV sets were permanently stuck "on" by law.
Here's the kicker: pausing the live feed actually starts a timer, because the PVR is still recording its randomly-selected channel in the hopes that you'll later give it a reprieve and watch whatever random crap was on. I mean, maybe you just need to go to the bathroom, and didn't want to miss the part where the electric knife can cut through a frozen pizza AND a slice of bread -- LENGTHWISE! But, here's the best part: after a couple hours of recording, the PVR will run out of disk space from recording this live TV feed. (Which, remember, you cannot turn off.) What would be a reasonable thing to do here. Let's look at this as dispassionate UI designers, OK?
You're making a PVR. Someone pressed pause six hours ago. You've been recording live video with the assumption the person might come back, but now you've run out of disk space. The screen has been frozen for
six hours. Might you, the putative UI designer, assume at this point that the person has left? That their TV is now off and they're done with the system? And, thus, when you run out of disk space, you'd say, "Heck, I'll hold onto this live feed stuff until the user comes back, or until some other program comes on that the user actually asks me to record, but until then I'll just go into sleep mode."
NO! IDIOT! The TV must flow! The person probably fell into a stupor. The logical thing to do is RESUME LIVE PLAY. That'll wake 'em up!
And indeed it has. No joking, in the days before I learned this cute little UI decision, I paused my DVR (instead of turning it off), turned off my TV (but not my 500 watt stereo), went to bed, and been woken up THREE TIMES in the last year at 4AM to some ads blaring at the top of their lungs in the next room, because the DVR ran out of air and just HAD TO GET IT ALL OUT! I CANNOT WASTE THE PRECIOUS STREAM OF CRAP! Let me tell you, waking up to this will make a grown man wet his bed. I'm not proud of it, but there it is.
Microsoft Enhanced. For their pleasure.
Labels: interface design
Sunday, January 15
Recently a fifteen-year-old developer wrote me:
Quite often I find myself outside lighting left over sulfer-powder mixes from the fireworks last 4th of July and thinking of product ideas. However I just can't think of a single unique idea that would actually turn out to be a hit. Everyone just tells me to think "outside of the box." Honestly, that never works for me.
Do you have any suggestions on how I might increase my developer creativity?
Delicious Library is what mostly sparked my mind, this is probably the most unique and yet still useful application released for Mac OS X.
Aw, I'm blushing. No, wait, I'm hungover. I get those two confused.
First off, left me discourage you from playing with homemade fireworks. My earlier advice notwithstanding, as a programmer you'll need your fingers and sight.
Second, my inclination is to tell you to think INSIDE the box. Because, honestly, when I think back to ideas that have changed the world, they aren't really that crazy. They're pretty normal when you think about it. It just took someone to put the pieces together and DO A GOOD JOB OF IT.
Let's take the canonical example, the iPod. Now, portable music players have existed for a long time. So that part was obvious. Digital music was completely taking off, led by iTunes. That part was obvious. Portable hard drives were very common. Obvious again.
So someone at Audible says: Gee, people like music to go, they have music on their computers, and we now have tiny hard drives that are portable... hmm, I could come up with a new device here. And Audible makes the first MP3 player. And the world yawns, because it's not that amazing and because it doesn't have a great user experience for downloading all the music you've stolen from the net. And Audible marketed it for audible book downloads (surprise!), which is frankly not nearly as exciting to our nearly illiterate, constantly gum-snapping country.
Then someone at Apple says, "Hey, we can deliver the whole experience, and make a device that's really beautiful, because we've got iTunes and we've got good engineers and we've got Jonathan Ives who is good at making things look sexy and is bizarrely muscular himself and was recently knighted but we don't have to call him sir."
So Apple makes the iPod, and everyone says, "Wow, they totally invented the MP3 market," which they totally didn't. They just did a good job of it. Hell, to this day Creative still sells some P.O.S. MP3 player called the Bedouin or some shit and nobody even acknowledges their existence. Creative is like that ugly guy who shows up to the party with bizarre, wispy, patchy facial hair and parks himself by the food table and everyone pretends not to notice him so they don't have to actually talk to him. (Note to ugly guy: sorry, man. Try shaving and eating right.)
THAT is the key. (No, not shaving.) The key is taking an idea that the world obviously wants and doing a GOOD job of it. This is how I've made my living.
I've only had like seven truly original ideas in my life. Three of them are in OmniGraffle 3 (see if you can find 'em!) and a couple more are in OmniWeb. (iSight barcode scanning is one, as well.)
All the others are just refinements of other people's ideas. I stand on the shoulders of giants, which weighs them down a ton, and frankly they probably resent it, but it works great for me.
Delicious Library was not an original idea. It was a new approach to an idea that's been around for as long as computers. Hell, longer. I think the first cavemen carved on rocks when they lent out their, uh, sticks to other cavemen. Which wasn't efficient, but still worked better than Microsoft Windows. There are many other shareware programs that do approximately the same thing as ours,
in theory, they just kind of bite. We took the idea of a media cataloging app and we made the friendliest, most fun version of it we could. But the basic idea was NOT ours. We don't ever claim it was.
So, think inside the box. Look at what people are using right now. Can you do a better job? Is there any chance people will switch to yours, or is there a market leader that's so entrenched you're going to get killed? Or can you write a simple version of what is now a program only for professionals? Can you do the converse? Can you adapt an idea from one market to another, like making a word processor for screenwriters? (Don't really do this, it's been done.)
I mean, sure, don't write a generic word processor, even if you think you are a super-genius. Word is a de-facto standard, and you don't want to mess with that. And don't re-write Excel. But, for example, when the Excel product manager got up on stage at MacWorld several years ago and said, "We've found that 85% of our customers use Excel just to make lists and outlines," we (Omni) said, "Shoot, that'll be our next product. We can do a GOOD job of making lists and outlines, and sell it for a lot less." And OmniOutliner was a pretty decent success.
Use all kinds of software yourself. Play with Final Cut Pro even though you don't make movies, because there are metaphors in there you need to know. Talk to people about what they do with software. Watch everyone around you and what they are doing, and not doing, on their computers. If there's a solution out there to some problem, but it's so complicated that most people don't use it, then there effectively IS no solution; it's a wide-open market. In my experience, programs don't get simpler in subsequent versions. You can kill your competition if you come out of the gate with something simple and friendly and cheap, even if they have a head-start with a crappier program.
Labels: business, interface design
Saturday, September 3
Today, I complain about something that I really
wanted to like, but cannot any more. My Palm Treo 650 phone. It is a cautionary tale, one from which we can all learn a lesson. Maybe not a lesson on the level of "don't stuff the government with your idiot cronies and then be surprised when it doesn't function when disaster strikes," but those kinds of lessons apparently need to be learned the hard way, again and again. (While I'm on the subject, Delicious Monster is donating our 2005 Q1 Amazon revenue to disaster relief, since, you know, the richest federal government in the world is congenitally incapable of doing anything that might be mistaken as "good," since all our money is busy being spent toppling nations.)
What was I talking about again? Oh, yes, phone. I used to really wuv my Treo, but now I've taken to hating this device, because I've spent a small fortune on it and countless hours, and it has progressively become less and less functional.
When I first bought it, I spent extra to get the "unlocked" version, thinking that I would surely own this lovely Palm longer than I would stay with any particular carrier. I should mention that I haven't owned a Palm in years, because I used to have a beautiful Palm V, made of shiny Titanium or some such. It was a small, gorgeous work of art, made when Palm was at its apex. But it didn't function as a cell phone, and I found I really got tired of having my pockets stuffed with pagers, cell phones, and Palms, so I stopped using the Palm V. And after it Palm released the almost-useless Palm VII, which was ugly, weighed about 700 pounds, and had sort of network access, sort of, but not a phone.
Then they started releasing all these plastic pieces of crap, and licensing their operating system to others so they could release ugly pieces of crap. The amazing thing was that I'd hold up my Palm V and say, "Ok, has anything this beautiful come from Palm or Handspring or Sony in the last seven years?" and the answer would always be, "Oh, no, not really, although we have this ugly piece of crap..."
So I used the calendar and contacts in my cell phones, which synced perfectly with my Mac, and made do with their tiny screens and their no-keyboards.
But, lo, a friend showed me his Palm Treo 650, and it had a beautiful screen, and I saw that it was good. So I bought one.
And the keyboard is surprisingly easy to use.
Unfortunately:
• It turns out that the built-in e-mail reader, VersaMail, actually doesn't really delete your mail from your IMAP mail servers. Now, I'm not an idiot when it comes to protocols and stuff, and I've tried it with two separate services, and it simply does not work. Oh, sure, there's a PREFERENCE you can set to delete mail from the server when you delete it locally (also: DUH!), and there's a PROMPT, and then it'll go ahead and merrily ignore you and download the same mail and spam you just deleted, over and over. HEY, it turns out THAT IS NOT USEFUL. In fact, it's completely useless for the way I read mail if I can't delete the junk and transfer the good messages to other mailboxes when I've read them. Apparently this mail reader is for people who literally want to only read their mail, and not actually, you know, DO anything with it.
So, I never use that.
• The web browser, although a truly amazing piece of engineering (with JavaScript and images and all kinds of things), is freaking slow. The 650 has, like, no memory, an anemic processor, and a tiny little capillary to the internet, and so every time you load a page it takes like 30 seconds or so. It can't cache pages, so going back and forth from a google list takes literal minutes.
I have, honestly, tried to use it several times when I was out, and each time everyone around me has lost patience and gone on with their lives before I found any useful info. It'd be like, "Hey, where's the bar?" "Oh, I'll look it up on the internet..." [5 minutes pass] "Uh, I'm just gonna call 611..." "No, really, the page is coming up! I swear."
None of this is really Palm's fault (unlike the mail-reader that can't delete), but it's still a case of, nice try, but I don't use that.
• The messaging system is really nice, but unlike the Danger, you can't talk to people on AIM, you (and they) have to pay 5 cents a page to talk to each other. So, I do use messaging, and I love the keyboard on the Palm, but it really could stand some improvement.
• Syncing with the Mac was an exercise in arduousness. Certainly, it was possible, with enough time and know-how and installations, to install the Palm Desktop software which I'd never use, and set up a fake Bluetooth to serial line, and install the iSync -> Palm Desktop conduits, and enable them in Palm HotSync Preferences, and disable the Palm Desktop conduits, and get the damn phone to sync, once I'd discovered that the group I was syncing to my phone in Address Book had to contain at least one person, not just other groups, otherwise NONE of the people would sync (unlike with my Motorola and Sony-Ericsson phones). And certainly a lot of this was Apple's fault, but, honestly, Palm should have just said, "Damn, every Mac ships with a built-in, shared calendar program and an address book -- let's chuck this crappy custom stuff we've been making and get our software to work well with what Apple's doing!"
• The phone sound quality was always bad (there was ALWAYS a hiss on the line) and it would periodically just hang up in the middle of a call. It was pretty annoying.
I'd like to mention at this point that Palm just spent a gazillion dollars buying the name "Palm" back from PalmSource (who they just spun off) so they can use the name "Palm" all over. This is one of those Dilbert-style management things, where they're all, "We should spin off our hardware and software! No, wait, buy back the name! No, sell! License the fromjub! Re-org! Capitalize our key assets!"
This is always a bad sign for a company. I'm like: Hey, here's an idea... spend your time and money making your products not suck. Nobody gives a crap if you're called Palm or PalmOne or Pam or Spam. Your asset isn't your name, you dickweeds, it's your reputation for having a cool device, which you are destroying by having the device not be cool any more.
So, now Palm comes out with a firmware update they recommend to everyone. Now, here's where the story really takes a tragic turn. First off, it's not just one firmware update, it's like four of them, and you use a different revision depending on what carrier you use. Confidence-inspiring! Because I'm SURE that there aren't going to be 4x the bugs in four different revisions.
But they recommend everyone upgrade, and say that the sound quality gets better, and mumble about other improvements in mail. Sign me up.
Let's talk about how not to do an upgrade, shall we?
• Don't come out with an upgrade that simply cannot be loaded into the anemic memory you provide for your device without the user deleting the programs that come with the device. That sucks!
• If you go ahead and do the above, then for gosh sakes write a nice custom program on the computer that will unload everything from the device, upgrade it, and then put everything back. Don't just provide instructions on your website on how to create a second, dummy account on your computer to do the syncing with a minimal system install. If you ever find yourself writing an upgrade where EVERY user is going to have to create AN ENTIRE SECOND ACCOUNT JUST TO UPGRADE THEIR STINKING PHONE, you are PROBABLY MAKING A MISTAKE. TAKE SOME OF THE FUCKING MONEY YOU SPENT BUYING THE WORD "PALM" AND SPEND IT ON WRITING AN UPGRADER.
Ok, so after an ENTIRE evening and part of the next afternoon trying, I got my phone upgraded and working again. It had lost all its settings and no longer knew about my computer, which meant I had to set up syncing again. Palm warned me to use the newer version of Palm Desktop with this newer firmware, so I downloaded it, as well, and after dancing the magic dance for about six hours, I had my Palm syncing once again.
Here's the worst part, though: syncing ONLY worked because the computer already knew about the Palm, and was still happy to talk to it, even though the Palm had forgotten about the computer. (If only ex-girlfriends were so forgiving!)
The next week I have a computer crash. I get my drive replaced entirely. Here's where the REAL FUN starts. Obviously, I need Palm Desktop to sync with the Palm again. So I got to palmone.com. Except, wait a minute... the software that they said was REQUIRED to sync with the new version of the Palm is gone. Replaced with a page that says, "Mac users: Sorry, we took the new version down. Just use the version on your CD. Except we told you not to. Good luck!" For the last two weeks, it hasn't been on their web site. TODAY, they've added it back.
Now, again, I'm going to make a short list of things you can do with your money instead of spend it buying the word "Palm":
1) YOU COULD MAKE YOUR SOFTWARE WORK WHEN YOU REQUIRE EVERYONE TO UPGRADE.
2) FOR REAL.
Hmm. Well, problem is solved now, right? Because now I've finally got the new Palm Desktop from Palm, so I can dance the magic dance again (install Palm Desktop, and, under Tiger, just click button to install Apple conduits) and maybe sync.
Except, here's the panel from when I paired my phone with my new Mac:

Hey, be sure to zoom in on that photo. That's right, after the firmware upgrade, there are NO SUPPORTED SERVICES on my Palm. I can't use it as a dial-up modem any more, even though I'm paying extra to get all-you-can-eat data from Cingular. No point in that! And I can't sync with my phone, nor dial with it!
Heck, I'm not even sure why I bothered pairing it with my computer, because it sure as hell can't do shit! What an idiot I am!
Now, this may be Apple's fault. Who knows? Except, here's my logic:
• All these things worked with my Palm and my Mac.
• Palm upgraded the Firmware
• Now none of these things work.
∴ It's Palm's fault.
But, wait, I can still go into iSync on the Mac and tell it to look for devices. Maybe it'll pair up with the phone anyways?

Hah! Denial! It's not just a river in Egypt, that has overflowed for thousands of years and yet still our leader can't grasp the concept of rivers overflowing.
But, hmm. Maybe I can hack around a bit. I run Palm Hotsync Manager, enable the Bluetooth connection, and check the conduit settings. The iSync conduit isn't enabled, since iSync couldn't find the Palm. However, when I enable the conduit, SUCCESS. The Palm shows up in iSync, and I can finally, finally, update my address book and calendar on the Palm. Sure, I still can't use it as a modem, but even getting back basic functionality seems like a godsend after all this time using the Palm as a dumb phone.
And, a dumb phone it is. Because, see, the upgrade woes are not the only problem with the Treo. Sure, with the upgrade, the sound got better, but here are some other fun fone features:
• If you don't disable the touchscreen when you're on a call (using preferences), you'll press the "hold" soft-button with your cheek. A LOT. A WHOLE LOT. EVERY SINGLE CALL, EVEN. There's no way to know you've done this if you're talking, so you'll just talk and talk for a while and then finally notice the person isn't responding, and then when you look at your phone you notice they've been on hold this whole time, and since they don't know why it suddenly went silent, they'll have hung up. But if you DO disable the touchscreen, well, you can't touch the buttons and put people on hold and the like.
• About half of the time now, my phone rings once and then instantly sends the person calling me to voicemail, with no record that anyone called. Not in the logs or anything. Which is amazing to me, because I'm like, "Hey, didn't you just ring? How come there's no log of an incoming call?" And the phone is all, "Ring? I'm not sure what you're talking about?" And I'm all, "Well, it seems awfully suspicious that I THOUGHT I heard a ring just now, and now, 20 seconds later, you're telling me I have new voicemail, but you never told me I had an incoming call, and it's not in the log." And the phone is all, "¿Que? No habla englais."
Now, admittedly, this happens a lot when the phone is in my pocket, so possibly my pocket is magically always pressing whatever button is set to "send this to voicemail and also forget you ever received it." And if it's my pocket doing it, you might call this user error, except, you know, I'd would ALMOST THINK that a phone would be DESIGNED to come out of a pocket while ringing and NOT HANG UP on the person calling. Because, see, this is amazingly annoying. I've had entire days where no calls get through, and I have to check voicemail every couple minutes. EXCEPT...
• The touch-tone keypad often sends double digits when you press a single digit key, on either the touch screen or the keypad. So, if your voicemail password is, say, "1234" (mine is
not, nice try), you'll send "122344". Now, you may think this sounds like user error, but it happens about half the time for me. And, here's the rub, the PALM ITSELF says that you typed "1234". I mean, there's a record of what you typed right there on the screen, and it's clearly been typed correctly. Except, no, it's sending doubled digits. SO I CAN'T GET INTO MY VOICEMAIL.
I only found this out because I called my pharmacy's refill service, and when I typed in my refill number the computer repeated it back to me, only with half the digits doubled. I was like Ellen Feiss, all "duhhhh?", and I typed it again, and they repeated it back doubled again, and I typed it again, and the computer is all, "Please hold while we transfer you to a real person, IDIOT..."
Oh, and when you press the "#" key on the keyboard it sends the "#" keytone FOREVER, although "#" works on the soft-screen. I'm not saying "FOREVER" as in, "amazing long," I mean, IT ACTUALLY WILL NEVER STOP. IT JUST KEEPS SENDING #.
Is this a feature? Because I don't find it useful. I think this is pretty stunning, because, you know, it's not that uncommon for a computer to be all, "Give me such-and-such a number, followed by the # key," and yet NOBODY at Palm has EVER hit that key on their keyboard, and noticed IT GOES ON FOREVER? It's really obvious, on account of the not-stopping.
--
Let's talk about the philosophy of complaining a bit. I didn't sit here for an hour typing this in because I hate Palm and want them to die. I honestly don't have that kind of free time. I'm complaining because I want them to do better. I want them to create a device I can love again, the way I loved my Palm V. It was, for its time, a truly beautiful piece of work, inside and out.
Now, the Treo does a lot more than the V, but at every step there's a little gotcha. A little rough edge that nicks you. To me, it's too much like using Windows; sure, the features are there, SORT OF, if you fight enough for them. But after a while, you get worn down, and you stop trying.
For $600 (unlocked), this should be an amazing phone. It should knock my socks off. I can buy a Motorola flip-phone for like $120 that is half the size and has all the features I can use on the Treo right now, and it'll work without all the gotchas and magic dances. (I know; I've owned a couple before, as well as two models of the execrable Sony-Ericsson line (Motto: We put the "slow" in "Damn this crappy phone is slow!").)
I like my keyboard. I like my big, bright screen. I like having a general-use computer with other software. But somebody at Palm needs to start thinking like Steve Jobs. Someone needs to make it her job to say, "This detail sucks, and if the details suck the whole thing sucks, and if our product sucks we suck, so we're going to stay here and we're going to fix this and we're not going to ship until the phone doesn't suck."
Good luck, that person.
Labels: interface design, stories