Monday, February 18, 2013

OS X 10.8 vs...

Fedora 18 / Gnome 3.6

Gnome 3.6 is very, very nice. It's not as refined as OS X yet, but you can see the Gnome team clearly closing the gap. The new lock screen is very nice and polished. Utilizing work-spaces is a snap. Gnome 3.6 has a very distinct, appealing style: once you open an application, there is little to no clutter. All you have is your app and the top bar showing you vital system information (battery life, wifi status, etc).

The user interface is where the polish ends. As you'd expect if you've used any non-Ubuntu Linux distribution in the past few years, installing and updating applications is terrible. The built in method of installing applications from Fedora's repositories is awful; application packages (RPMs) you download from major vendors like Google (Google Chrome) have to be installed from the command line.

It's unfortunate such a pleasant user experience like Gnome 3.6 attached to an unpleasant way of managing applications.

Ubuntu 12.10 / Unity

Unity feels like a kind of forgotten Frankenstein's monster. HUD, the system for quickly selecting items in an application's menu, only works sometimes. The global menu bar suffers the same schizophrenia, leaving you with an overall inconsistent experience. When they work, they work beautifully. When they don't... well, meh.

The dash is nice and responsive, but often the search results hit the barn wall. Dash draws in search results from websites like, cluttering search results with unrelated items: searching for "photo" brings up Shotwell Photo Manager, as well as Birds of Prey, Kindle Fire HD, and what literally looks like a pornographic video. ... okay, no, it's apparently a smutty adult novel with a risque' cover. Still, not exactly what I was looking for, and definitely not what I want anyone to see if they're looking over my shoulder.

Installing applications is nice and straight-forward: the Ubuntu Software Center is a little sluggish, but search results are easy to browse. Installing applications from the Internet -- Google Chrome, Scrivener for Linux -- is straight-forward and very painless.

Unity needs a lot of shine, but seems promising.


Some things I really like about OS X that have no Unity / Gnome 3.6 parallel.

 * The Command button. I didn't understand how great this single button was until I started using it. Mac's have the standard Alt and Ctrl buttons, but the Command button is the primary modifier for interacting with applications. Command C always copies, Command V always pastes. Command W always closes a window, and Command T always creates a new tab. And because these keystrokes are divorced from the Ctrl key,  you can actually copy and paste inside of a terminal window exactly the same as you'd copy and paste from a GUI application. The uniformity is great.

* Built-in gestures. You can summon application window overviews with a simple swipe, move between windows, open the notification panel, pinch and zoom... gestures don't feel like a tacked on feature. If Unity or Gnome 3 have a similar feature, they're hard to discover. OS X told me straight up during the setup procedure how to use the mulit-touch gestures.

* Coherent animations. When you download a file from Safari, the file's icon goes flying into the "downloads stack." When you minimize an application, you watch it disappear to its place on the dock. There's never any question of where a window went or a button just did. Most things in OS X have a nice, smooth animation that visually elaborates. It's thoughtful.

Tuesday, February 05, 2013

Ruby: Ensure blocks can alter flow control!

This one bit me -- I've only found it documented in one place, here, but I also discovered the behavior after debugging a strange problem I was having with some command line processes not exiting properly when they received the exit command.

Basically, if you exit from an ensure block with "return" it behaves the same as if you had done a "rescue Exception" statement, which means it swallows up all exceptions, including exceptions raised to terminate the Ruby process when it receives SIGTERM, SIGQUIT, SIGINT, etc.