« The Plot Thickens.. | Main | Quote of the Day; Tuesday December 21, 2004 »
December 21, 2004
Think Different, As Long as it's Like Us...
There's no shortage of articles attacking OS X (even Tog has weighed in), and I debated bothering to post this, but I've had this conversation too many times, with too many different people, so in the hopes that it prevents me from having to rehash it yet again, here goes...
I'm not a Mac person, in general. I've used previous versions of System on occasion, and always came away thinking "build a system any idiot can use, and only idiots will use it..."
When I joined Real I did an exhaustive search for a notebook that could compete with the 15" Powerbook in terms of power/form factor. It wasn't really surprising that I came up short - oh, and the "we only buy Dell" restriction sorta clinched it. (As an aside - I've got nothing against Dell in general, but their notebook designs are bimodal - either light and useless executive models, or big stompy machines that give you a permanent lean from carrying them on your shoulder.)
Anyway - OS X was getting generally positive reviews, and being built in large part on NeXTStep (which I really liked) I figured I couldn't go terribly wrong. So I took the plunge - and convinced Real to buy a 15" powerbook. After using it for a couple months, I've concluded that I wouldn't do it again.
It basically comes down to choice - how do you want the machine to behave? On OS X, you've basically got one choice - it behaves like Apple wants it to - which is not necessarily the same way you want it to.
Rather than re-hash all the things that are wrong with the OS X interface , I'll hit the top three that (still) drive me nuts.
1. Focus-follows-mouse. This is sorta an emacs/vi debate, but I've been using X for, well, a long time, and focus-follows-mouse is right for me. Much to my surprise, there's no support for this behavior in OS X. Well, almost. The terminal app has a focus-follows-mouse mode. As does the Apple X Server. Oh, and standard window decorations (close, minimize, maximize) give the illusion that it should work. But that's where it stops. There's a virtual desktop manager product that has a focus-follows-mouse hack, but when I tried it it didn't work consistently across applications (like Firefox and Thunderbird).
Being a developer, I decided to write my own. I found an open-source project called DesktopManager - another virtual desktop manager, that could respond to screen-edge motion to switch desktops. I figured that might be a good starting point and after a week of evening hacking, building on DesktopManager's mouse position polling code (which uses awakeFromNib to setup a periodic timer call back into itself) I had something that sorta worked.
I had to muck with undocumented low-level graphics server APIs to translate mouse cursor position into an opaque window handle, which I could map to an application object. Using some (documented) calls I could set the active application, which got me 50% there. Two problems: one is that I couldn't find a way to affect window focus without affecting window stacking - which is silly. I could synthesize mouse events into the window I wanted to make active, but that led me into the second problem.
The UI's handling of events in unfocused windows is inconsistent. Some widgets actually receive the initial click event - even if their containing window isn't focused - and they react, other's don't.
So sometimes, if I was unlucky and synthesized an event over such a widget, the app reacted - which was bad. (If you don't believe this - try the following - open a Terminal window and do something that causes more than one screen of output. Now focus a different app, leaving the terminal window visible, but unfocused. Finally, click on the top of the scroll bar area. Notice that the window both becomes focused and scrolls?)
Even windows gets this right - a click over a widget in an unfocused window both focuses the window and actuates the widget. In fact either behavior, if consistent, would be fine - though the lost click to focus mode wastes clicks and causes gratuitous interface sheer for those switching between operating systems.
I ultimately got so frustrated trying to eliminate the edge cases caused by Apple's inconsistent UI and lack of appropriate API's, I shelved the project. The response from Mac using friends is either "focus-follows-mouse is stupid" or "you'll get used to it." What a bullshit answer.
2. Multi-screen support - or "one menu bar to rule them all". The powerbook has the in-built LCD and a DVI port, so I run it with dual monitors. The first time I moved an application window to the secondary screen, I expected the menu bar to follow the application - or mirror on both screens - or something intelligent. But no - the application was just a full screen away from it's menus. Talk about horrible HCI.
Thanks to a tip from a friend I found a tool called DejaMenu that displays the app menu bar as a set of pop-up menus. It's not perfect - menu options that usually have checks next to them to reflect the currently selected state don't, for example - but it's useable.
The $64,000 question is - doesn't anyone @ Apple use their machine with multiple monitors? How did this clearly broken behavior manage to survive this long?
As an aside - I really dislike the whole model of the menu-bar being pegged to the top of the screen (and yes, I've read Tog's explanation, and it's logical, but it breaks down in the multi-screen case.) Also, the standard Mac practice of having one set of toolbars that service all application windows (like in Office) also breaks - move the document window to the other screen, it's toolbars don't follow. Notice that the Omni folks (anyone remember OmniWeb on NeXTStep?) seem to have realized this - and each OmniGraffle window, for example, has it's own button bar. (Floating pallets are another problem - it would be nice to have a way to select "this window and all it's children" when moving a window around.)
3 (2b). Window placement. It seems that OS X apps try to remember the last position a window opened in and re-open there. Even if "there" makes no sense. Example - an application running on the secondary screen opens the standard print dialog, but because the last time that dialog opened was on the primary screen, that's where it opens now. So the dialog (typically modal) appears completely disconnected from the application that instantiated it. In some cases (possibly even many) it makes sense to remember dialog placement, but not always. Furthermore, with the spatial finder metaphor seriously eroded by the new finder, it's not clear that remembering dialog position offers any value (as opposed to, say, always opening new windows on the current screen).
None of these, individually, are enough to make me abandon OS X, but they're just the tip of the iceberg. In just about every case, the problem fundamentally boils down to insufficient choice - not enough choice about how I want the system to behave. Apple forces me to adapt to the system, rather than allowing me configure the system to meet me halfway...
I've thought about installing the test version of Fedora on the machine (possibly dual boot, or just using Mac-On-Linux), but it seems that there are no drivers for the Broadcom WiFi chipset - and one of the things that OS X basically does right is wireless networking.
I've yet to find an intel notebook that's quite as nicely designed as the powerbook, but software is king, and OS X just doesn't cut the mustard.
Posted by dberger at December 21, 2004 11:19 AM