Tim Morgan's thoughts that are too big for Twitter
Separating good design and good behavior (and additional nitpicks on the Twitter app)

As I continue to use Twitter, I find I have more to say about it.  I’ve collected some additional thoughts below.

But first, the elephant in the room is of course Gruber’s response to my original post.  In a nutshell, he says that yes, OS X is changing, and Apple is the banner-bearer for that change by themselves discarding the HIG and forging individual UIs for each of their apps.

This change is indisputable, and it is no doubt effected by (or at least affected by) the Web.  Gruber’s piece is largely agnostic regarding where he stands on this matter, as I suspect his opinion on the matter may still be nascent.  Personally, I do not deny that applications like Twitter are beautiful; the problem is they can also be inconsistent and confusing to use. (Twitter certainly is at times.)

Apple makes it very easy to make an application that behaves as you would expect; all you have to do is use the existing Cocoa UI elements as intended.  Usability comes free.  The curiosity for me is when designer/developers exert time and effort rewriting UI elements from scratch, merely to make them look differently from the Aqua UI.  Now the onus is on the developer to replicate the behavior of the UI element he is approximating — and it’s hard to get all the details right, which means few developers do.

For example, consider how the Twitter app handles the process of clicking a button, holding the mouse button down, and moving the mouse.  You will find one of four different behaviors:

  • If you do this over a sidebar or toolbar button (such as those in a user detail view), the button highlights briefly, then deactivates, allowing you to move the window.
  • If you do this over a “stoplight” button, the button does not deactivate, but remains highlighted, but moving the mouse moves the window.
  • If you do this over a button on the bottom bar (e.g., the Follow/Unfollow button in a user detail view) or in the main view, the window does not move, and the button remains active.

Worse is that the top, side and bottom bars are all draggable areas allowing you to move the window, but click-holding on buttons to drag the window works only in the top and side views.

Most, but not all buttons highlight when you click-hold on them.  The Reply buttonlets next to DMs, the delete buttons next to saved searches, and the avatars next to tweets are all buttons that give you no feedback when the mouse is clicked on them.

Most buttons, when clicked, will darken or brighten, but clicking the More Actions button on a user profile view or the clear button in the search field causes the button to lighten instead, a look I find more appropriate for the disabled state.

In my mind, the worst offender among buttons is the Follow/Unfollow button.  You may not even recognize it as a button at first: If you are viewing the detail page of someone whom you follow, a “Following” — I’m not sure what to call it, so I’ll call it a state indicator — is displayed on the left of the bottom bar.  (This state indicator is not to be confused with an activated button, which it appears deviously similar to.)

Hovering over the “Following” indicator reveals that it is in fact a button that you can use to un-follow the Twitter user.

It took me a matter of minutes to figure this one out.  I suppose I don’t see what’s wrong with doing something more like this:

It’s not like the horizontal space is being used for anything else.

I mentioned the pitfalls of the “stacking” UI concept in my previous post, and upon further use I discovered that some views slide in from the left (toolbar buttons), whereas others slide in from the right (search results).  This isn’t such a huge deal until you consider that the “close” button for the latter views (which, in Web tradition, is actually a “go back” breadcrumb) is an arrow pointing to the left:

Left arrow causes right-sliding animation

If you click the left-facing arrow, the view unexpectedly slides out to the right.  The root of the problem is that the “stacking” UI concept doesn’t jive with the “tree” navigation that you’re actually performing.

Twitter could also be more consistent in how it portrays drop-downs.  As a Mac user I am conditioned to expect a drop-down when I see a down-facing arrow, as used in the “more actions“ button at the bottom-right of the main window:

However, the “more actions” button in the user detail page looks, for all intents and purposes, like a normal click-to-action button.  It is, however, a drop-down:

The purpose of laying out these nitpicks is two-fold: First, if Loren Brichter happens to read this, maybe he’ll agree with me on some points and implement fixes.  Second, the purpose is to show that good design and good UI are two separate things.  The classical way of thinking is that good design and good UI coincide: Design to the HIG and it will both look good and feel right.  With the push for individuality (as Gruber puts it), the way we design applications for the Mac falls apart.  Developers are forced to rewrite UI functionality which causes gaps and inconsistencies in behavior.

The way I see it, there are two solutions to this problem: You can give up your individualized UI in exchange for the comfort of the tried-and-true Aqua interface (unacceptable to the “new generation” of Mac developers), or we can change the way user interfaces are developed on the Mac.  Perhaps it’s time that Cocoa got a solid, full-featured skinning layer on top of the UI toolkit, so that appearance and behavior are finally separated in the Application Toolkit APIs?

The failures of the Mac App Store’s UI, and that of its app, Twitter 2.0

I’m astounded that there hasn’t been a peep from Gruber about the problems and inconsistencies in the Mac App Store application, and those of the apps sold on it.  My first experience with the Mac App Store was a purchase of the new Twitter app, of which Gruber had this to say:

My new favorite Mac Twitter client.

I had a remarkably different experience upon opening the app.  Much like with the App Store itself, the head-scratching UI left me bewildered and confused more than once.

Let’s cover the App Store first.  The most noticeable divergence from the HIG is the toolbar.  In an apparent effort to save vertical pixels, the title portion has been removed; the toolbar buttons moved up, and the “stoplight” buttons moved down, for symmetry I guess:

App Store: Nonstandard toolbar and stoplight buttons

I can appreciate the desire to balance the vertical space by moving the stoplight downwards, but the result is a glaring attention-grabber.  Who didn’t notice the unusual placement of these buttons when they first opened the application?  Every other window has its buttons four pixels from the top, making these stick out like a sore thumb.

The Back/Forward buttons also stand out, in that they are colored exactly the same as the window background.  Compare to Safari’s navigation buttons:

Safaris navigation buttons

The color contrast helps set buttons apart from their toolbar backing, and frankly I’m not sure as to the reasoning in the head of the Apple engineer who wrote the code to override the default toolbar button style.

Also catching my irk was the login sheet I was presented with upon purchasing my first application:

App Store: Login sheet

Firstly, “Billing Info” is a noun and button names should generally be verbs or verbal phrases.  (What am I doing with my billing info when I click this?)  Worse in my mind, however, is the “Forgot?” hyperlink.  I’ve been seeing hyperlinks (or faux-hyperlinks) pop up in applications here and there and I’ve never been a huge fan of it in desktop applications.  Much like on the Web, these hyperlinks come in different colors, sizes, and styles; here in the App Store it’s just blue text (not even underlined!) that could easily be mistaken for a plain static text element (especially by the colorblind).

I am of the opinion that if you have a piece of text, and you want something to happen when the user clicks on it, there is one and exactly one way of doing it on the Mac: a button.  I see nothing wrong with having a “Recover Password” button alongside the “Cancel” and “Billing Info” buttons; there’s no need for the less accessible and less standard hyperlink.

The design flaws of the Mac App Store, however, are largely overshadowed by those of the first app I downloaded using it: Twitter 2.0.  Let me cover a few of the more egregious ones I’ve found.

The worst of the worst of these is the window dragging.  Look at the main Twitter window and tell me: Where do you click to move it?

Twitter: Main window

The answer is in the black areas, something you may not have expected, and is certainly not obvious from first glance.  You can also drag in the title bar, as you would expect, but the title bar is so small that finding a clickable area where you can drag is a real challenge.

Now look at the New Tweet window:

Twitter: New tweet window

To move this window, you also click in the black area.  But now the black area is along the bottom of the window, whereas in the main window it was along the side.  Notably, neither of these windows are moved by clicking along the top, which is the standard on OS X.

I should also mention that individual tweets are draggable too; you do this by clicking along the side of the tweet, though there’s no color difference that indicates the valid areas where you can do this.

Clicking on the different tabs in the main window (tweets, lists, mentions, etc.) reveals the corresponding content with a “slide out” animation.  Upon opening the application, you are presented with your timeline.  Click the “@” and your mentions slide out on top of the timeline.  Click the timeline again, and you would expect perhaps for the mentions to slide back in, revealing your timeline, but instead your timeline slides out on top of your mentions.  This endless sliding out creates a sensation of “stacking” UI views infinitely on top of each other, when in fact you are merely switching between six different tab views.

Like the App Store, Twitter has re-tooled the stoplight to suit their tastes, this time coating it in a deep graphite color no matter what your Appearance settings are:

Twitter: Stoplight Twitter: Stoplight hover

The first issue here is that these are deep grays, and not everyone has perfectly calibrated his monitor.  The buttons may be barely visible on some computers.  In addition, the Maximize button doesn’t actually do anything, but it’s not disabled.  (Not that you could tell if it were disabled.)

When Twitter is loading items, it displays an indeterminate progress bar.  Rather than being the standard OS X widget, they’ve chosen a small gray circle that widens repeatedly as content loads:

Twitter: Indeterminate progress bar

This may be fine on the Web, where people use any ridiculous animated GIF they find to indicate progress, but in my opinion, OS X should be about consistency of user experience.

Some other minor complaints include the inconsistent way that Twitter handles an empty list of items.  See, for example, an empty list of tweets:

Twitter: Empty list of tweets

… and an empty list of lists:

Twitter: Empty list of lists

When I first saw the latter, I thought some kind of network error had occurred, causing Twitter to misbehave.

Lastly, Twitter’s badge is also unusual: Whereas most applications badge themselves with a number indicating the amount of pending “things” (emails, notifications, etc.) the user should deal with, Twitter’s badge is always the same:

Twitter: Badge

Unlike the points above, I don’t actually think this is a bad thing, and in fact think John Gruber may rather appreciate it.

I fear that the App Store’s lax approach to user interface consistency, and its heritage from iOS, are causing developers to associate it with a new sort of freedom to design whatever UI they like with their apps.  This can sound like a good thing: A heterogeneous design environment like the Web can sport its share of beautiful, unique websites, so there’s no reason to believe that such a future for the Mac OS wouldn’t also produce such gems.  The problem is that we’d have to take the good with the bad, and as anyone who surfs the Web knows, there’s a whole lot more bad than good.

Gruber once said (and for the life of me I can’t find the quote) that the difference between the Mac OS and iOS is that you don’t need to be a designer to make a good-looking Mac app: Apple provides you the assets you need; if you adhere to common sense and the HIG, you will create a good-looking (if not unique) application.  On the iOS, all the best apps have had enormous amounts of design effort invested in them.  As the App Store (and OS X 10.7) blur the lines between iOS and Mac OS, I fear we may lose this distinction as well.

The perils of community-based spam filtering

OK, so unlike the rest of the world, which uses Gmail, I run my own mailserver.  I do server-side spam filtering with SpamCop, a community-based spam-filtering system.  Lately Facebook has been nagging me every time I log in: “We require a valid email address for all our users. Please enter a new email address or reconfirm your existing one.”

I opted to reconfirm the existing one a few times, but after consistently not receiving any new email, it was time to investigate.  Following my mail logs I noticed SpamCop was blocking emails from Facebook.  Since SpamCop is community driven, this basically means one thing: SpamCop users are indicating that emails from Facebook are spam.

Which is great for them, I suppose — if they don’t want to get emails from Facebook, then this is a quick and easy fix for this problem.  The problem is I do want emails from Facebook.  See, unlike these guys, I actually went into my account settings and checked only the emails I actually care about.  Sadly, people like me lose in a system like this.

Anyone got any better server-side spam filtering ideas?

Did you play Super Tetris? It came with a book about the Russian circus because you had to answer a question about the Russian circus before you could play. No? I had a better childhood than you did.
Rachel Myers
Things I dislike on the Internet
  • Websites that use your referrer to highlight your search terms when you click on them from Google search results. This is a pretty useless feature.  When I search on Google, I am generally not searching for words, I am searching for concepts.  It’s not necessary for you to highlight every occurrence of the words install, air, and conditioning on your blog entry about how you installed your air conditioning.  I’ve found what I’m looking for; thanks.
  • Websites that use a Flash object to display text in a specific font. I appreciate that you really like Myriad Pro and that not everyone has it, but that’s not what the Web is about.  A web page is not an enticing blank slate of typographical possibility, like a freshly opened Adobe InDesign document.  It is a portal for interoperable communication between people of largely heterogeneous platforms.  And most crucially: The selection algorithm used in these Flash objects is just plain terrible, and it will never be anything but terrible, because it can never have access to the operating system’s text selection API.
  • Websites that insist dates or phone numbers be in a specific format. Honestly, you’ve got a million-dollar website and the developer couldn’t be bothered to write the code parse MM-DD-YYYY and MM/DD/YYYY?  It doesn’t take much — even in ASP.
  • Websites that have a giant list of countries ordered alphabetically, and don’t stick United States up at the top. I wonder how many of these sites’ users are actually from the United Arab Emirates.  (Heck, I don’t even mind when the US shares the penthouse suite with Canada; just don’t give it to Afghanistan with its 500,000 Internet-using citizens.)
  • News articles that automatically highlight key words like “Sarah Palin” or “Yankees” with links that take you to so-called “related articles.” I don’t know about you, but when I’m reading a news story involving Obama, I don’t generally think, “after this, I’ll go read a bunch of older news involving Obama!”
  • Security questions. Because someone who knows what high school I went to and what year I graduated could only be me.
  • “Tweet this” links on someone’s blog post about the chicken pesto they ate for lunch. ’Nuff said.
  • Websites that alter your clipboard to include attribution.  Honestly to me it’s like a violation of personal space.  It’s my clipboard to decide what goes in it, so back off.
First draft of an upcoming eBay listing

Warning: This product is for serious gamers only.  Casuals need not apply.

How do you know if you’re serious enough for the Cougar?  Let me pose you a couple of examples.

For the sake of example, let’s say your name is Chad or Jake.  And let’s say today is Friday night, and your buddy calls to say, “Hey Chad or Jake, my buddy just got back from Europe with a truckload of absynthe and some Scandinavian chicks.  Let’s go get drunk and/or high and/or laid.”  If you turn off your computer and leave your den and spend the night getting crunk or hyphy or whatever the f*** kids do these days, then the Cougar is not for you.  (I can’t be arsed to find out what cool people do on Friday nights, which is why the Cougar is for me.)

If, on the other hand, your name is more like Eugene, and on Friday night we find you quite annoyed because the Chads and Jakes downstairs are thumping dance music and it’s interfering with your ability to hear the enemy’s footsteps in ArmA II, compromising your Mountain Dew-fueled edge, to the point where when you do finally see the Spetznaz skylining over Hill 625 through your M24, you imagine it’s one of the partygoers downstairs and revel in the satisfaction of blowing his f***ing head off — if this is your typical Friday night, then maybe the Cougar is for you.

Let’s not mince words.

This is a serious HOTAS.  A man’s HOTAS.  If you’re still clutching to your pathetic little Logitech whatever, with its five sad buttons and tiny little knob of a throttle, then close this browser window and go back to planetxbox360.com.  If you’re ready to move up to the next level in flight simulation, if you want a HOTAS that can offer you air superiority if you’re man enough to give it the chance, then strap in and keep reading.

Note that I am not calling it a joystick.  The Cougar has a built-in audio sensor and if it hears you call it a joystick, a robotic arm will slap you across the face.  (This is not true.)  The Cougar is a HOTAS.  HOTAS stands for This Device is Too Awesome to Be Associated With Those Little Two-Button Atari Playthings.

Let me put it this way.  Imagine the Cougar is a dick.  That’s right.  It’s big, it’s black, and it’s ribbed for her pleasure.  Look at the picture of it.  Now look to the right, where your sad little Logitech play-toy is resting.  Compare the two.  Now you know what I’m saying.

It’s time to upgrade your dick.

I know what you’re asking: What makes this HOTAS so awesome?

Thanks for the softball question.  Maybe you’ll be ready when you can work up the courage to ask a real question like, “Why would you compare the Cougar to a dick, when it moves around so limply?”  Well, regardless, I’ll answer your question anyway.

The Cougar is awesome in many ways.  For one, it’s solid metal.  I don’t mean it has little metal plates in the base, I mean the whole damn thing is metal.  When you wrap your hand around it, it’s cold, because metal is cold.  And metal is heavy too.  The throttle and the control column both weigh about 10 pounds … each.  Feel free to flog this thing like a single guy on Valentine’s day … it won’t slide around your desk, and it certainly will take what you can dish out.  Metal stands up to punishment.

Reason #2 it’s awesome: The stick and the throttle are an exacting replica of an F-16 Fighting Falcon’s flight control system.  When you strap on a Cougar, you can feel free to imagine that you are climbing into the cockpit of an F-16.  Allow yourself that luxury.  You know why?  Because if you were to invite an F-16 pilot over to your house, and have him sit in your chair, and put his hands on your Cougar (completely non-sexual here), he would feel right at home.  He would know exactly where to put his fingers, exactly what buttons to press to get that jet to do what he wants.  All you have to do is fire up Falcon 4 and you’re showing him his day job.

Here’s another good reason: Foxy.  I’m not talking about your mom, I’m talking about the software that real men use to program their HOTASs.  When you launch Foxy for the first time, there’s probably an 85% chance you will wet your pants and run away crying.  That’s how serious it is.  Change your underwear, wipe off your cheeks, and sit back down.  Clear your schedule for the day and devote yourself to learning Foxy.  (If you would rather be at work than spend the day learning Foxy, maybe the Cougar isn’t for you.)  Once you do you will be rewarded with unprecedented control over your Cougar.  Just like that F-16 pilot you invited over is a master of his machine — just like he can sweet-talk his beautiful jet into doing exactly what he wants, so you too will make the Cougar your b****.  You will speak the language of the Cougar, and tame it to be your pet.

OK, you ask, next question: Why would you compare the Cougar to a dick, when it moves around so limply?

Now that’s a hard-hitting question.  And as a former Cougar owner, I don’t shy away from challenges.

The truth is the Cougar isn’t perfect.  The best HOTASs are force-sensing, and the Cougar is not.  It swings wildly from its base like a bobble-head doll.  If this bothers you, give yourself a pat on the back because you are a discriminating HOTAS buyer.  The good news is that if you’re willing to fork over a few hundred bucks, and you’re not too wimpy to crack open that sweet metal case, you can buy an FSSB and mod your stick.

Note that I said the best HOTASs are force-sensing.  This is not force feedback.  If you are disappointed that the Cougar does not have force feedback, pick up a vibrator on your way to the post office when the box arrives.  It should do the trick.

Another problem: The Cougar uses plain old potentiometers to measure control inputs, when Hall sensors are inarguably 1,000% more awesome.  Again, break out that screwdriver, pick up some Hall sensors, and increase the studliness of your HOTAS.

Lastly, the throttle has two very loud detents.  Every time you pass them the throttle makes a satisfyingly loud click.  If you have a wife who wants to sleep while you blow the s*** out of MiGs, you should just turn to her and say, “Honey, your sleep is not as important as me protecting the free world from terrorist s***heads.”  If she divorces you, that’s OK, because you have a new wife now: The Cougar.  Once again, you can crack the case and change your throttle over to silenced stealth mode.  There is a world of Cougar mods.

Here’s another hard-hitter: If real men mod their Cougar, how come you’re selling a factory original?

Another excellent question.  Yes, this is a completely unmodified, factory-original Cougar.  But the student must one day surpass his master.  Buy this HOTAS, learn the secrets of Foxy, exercise aerial dominance, and then open it up and mod it.  Go where I did not, and when you sell it, sell it better than you bought it.

One last thing … this Cougar has a serial number.

Stamped into a metal plate like a dog tag, the serial number is on the base of the throttle: 26,311.  The highest serial number I’ve seen is 35,326, which makes this a pretty new Cougar.  Towards the end of the production line.  When you receive this Cougar, feel free to enter your name and the serial number into the Cougar Owner’s Database at Cougar World.  Indoctrinate yourself into the hallowed halls.

Technical Specifications

You will receive one HOTAS Cougar, consisting of the SSC (side-stick controller) and TQS (throttle quadrant system).  The Cougar requires a USB port.  The SSC has the following controls:

  • Dual-stage trigger
  • Pickle button (button)
  • NWS/AR DISC/MSL STEP button (button)
  • TMS (4-way hat)
  • DMS (4-way hat)
  • CMS (4-way hat)
  • SOI FOV switch (button)
  • AP Override paddle (paddle switch)

The TQS has the following controls:

  • ANT ELEV knob (analog knob)
  • MAN RNG/UNCAGE knob (analog knob, center dentent, with push-button Z-axis)
  • RDR CURSOR/ENABLE hat (analog microstick with push-button Z-axis)
  • SPD BRK switch (3-position switch, momentary aft)
  • Override mode switch (3-position switch)
  • Comms switch (4-way hat)

There are no flashing LED’s, no force-feedback, no digital displays, and no twist-grip.  This is a serious HOTAS.  Do you really think F-16 pilots fly around with twist-grip?!

In conclusion, you cannot purport to have the ultimate gaming rig until you have one of these cold metal f***ers sitting next to your monitor.  Step up to the next level of flight simulation, and buy a Cougar.

Rachel’s best rant yet

Rachel: On Wednesday is the Ruby party; I get to go and you don’t!

Me: Oh, look at this email I just got!  “Hi, I found your resume online.  We are seeking Ruby and Rails developers for an exciting opportunity—”

Rachel: Shut up!  Shut up!  Shut up!  Shut up!  Shut up!  I hate you.

Tim: You were trying to make me jealous of your party, so I tried to make you jealous of my employability.

Rachel: But you can come to the Ruby party if you want to.  I was making it sound awesome so you would want to come.

Tim: Aren’t you jealous of my employability? Come on, admit it; you’re jealous of my employability.

Rachel: I’m SO jealous!  I’m jealous every morning when I wake up at 7 am, and I’m like, “Wish I had somewhere to go!  Wish I had someone who would pay me to go somewhere and work really hard for them!”  Then you wake up at like noon, and stumble into work, and drink Mike’s Hard Lemonade all day while your coworkers ride in circles on Go-Karts, and nobody gets any work done, and somehow your stupid company decides to keep paying you!!  I hate you!”


A commit message

commit f71fccccb97f6d0d1bf31ef8adc137ad8dd974a6
Author: Tim Morgan 
Date:   Thu Oct 29 01:17:01 2009 -0700

	Who the fuck thought it would be faster to re-implement Git in Ruby? This
	fucking crap has been timing out my admin pages because all these fucking
	packfiles and blobs and diffs are being processed in Ruby, the Slowest
	Language Ever Invented. Boy, that's way better than doing it in fucking C,
	the language Git is written in! It's not like Linus Torvalds is some kind of
	fucking genius who knows you write goddamn command line tools in C when they
	need to be fast as fuck, right?! Jesus fuck.

diff --git a/vendor/gems/grit-2.0.0/lib/grit/git.rb b/vendor/gems/grit-2.0.0/lib/grit/git.rb
index b813a71..29e5414 100644
--- a/vendor/gems/grit-2.0.0/lib/grit/git.rb
+++ b/vendor/gems/grit-2.0.0/lib/grit/git.rb
@@ -13,7 +13,7 @@ module Grit
 	undef_method :clone
-	include GitRuby
+	#include GitRuby
 	def exist?

The aerobatic “final exam”

Riding to the airport, you’d think this was not the sort of day one does an aerobatic flight.  A thick layer of stratocumulus choked out the sky from horizon to horizon, and although I had not gotten a weather report, it was obvious this was more than just a morning fog layer that would burn off later.  The weather was changing; a front was passing through.

Still, I knew that Jeff is emboldened by past experience to give flights a go even if the weather seems marginal, as often when pushing through the three-dimensional space of clouds one finds holes or other avenues not immediately noticeable from the ground. So, I pressed on to the clubhouse, ending up uncharacteristically a few minutes late, and thus finding Jeff waiting patiently behind the front desk.

I dispatched the Citabria but Jim, the club’s awkwardly cautious owner, was eager to point out that the bird had only 1.2 tach hours left before it was due for its hundred-hour check.  Jeff quickly assured Jim that he was aware, and that he would have the plane back at Oakland Aircraft Maintenance before the tach rolled over.

Outside the clubhouse and on the way to the hangar, Jeff ran the math aloud to ensure he could make good on his hasty promise.  “It could end up that we take 0.4 hours to get there and another 0.4 to get back,” he said, warning me that today’s lesson could be short.  Honestly, I wasn’t so dismayed — the aerobatic flights are typically better when they’re shorter, and though I dare not admit it to Jeff, I had a knot in my stomach at the time.

Preflighting the Citabria, Jeff gently but firmly urged me to be expedient (but certainly not careless) in my duties.  At first I thought he was chasing the weather, but he assured me that while there was forecast a chance of a rainstorm, the main concern is getting the airplane back before it was too late.  I was a little confused as to why this meant I had to expedite my preflight, as the tachometer only runs when the engine is turning, but I didn’t wonder aloud.

Jeff was obviously extremely eager to get my checkout finished today.  We had missed the previous two lessons, the first because I wasn’t feeling perfectly well and didn’t want to risk a flight that tends to be hard on the human body, and the second because one of the parachutes unexpectedly partially deployed.  Because of that I was extra-careful to treat the parachutes gingerly, moving them around like live bombs.

I asked if we’d be going to Mt. Diablo, as oftentimes the East Bay is clear when clouds blanket the Bay and our alternate training spot, San Pablo Bay.  He quickly assured me that he had gotten a weather briefing and this weather is blanketing the entire Bay Area — this was not just coastal fog.  Despite that, however, the best bet was still to survey the Mt. Diablo area looking for a clear spot to safely perform stunts.

Jeff had also brought his video camera this time, intent on filming me in the aerial dance.  We had a brief discussion about his progress in learning the virtual ropes of ArmA II during the punctual preflight, then brought the plane out of the hangar and prepped it for taxi.  Jeff left the hangar doors unlocked, knowing that we’d be delayed by the imperative that the plane be returned to Oakland Aircraft Maintenance.

The wind typically favors the 27 runways, but today it was approaching unusually from the east (another omen of changing weather to come), so ground had us taxi to the opposite runway, 9R, which was fortuitously right nearby the Citabria’s hangar.  Jeff was still in his hurried state so he handled the radio, the taxiing and the runup, leaving me to watch the dials.  All the while I nursed the knot in my stomach, worrying intensely that I had eaten something bad and would find out in the air.

At the hold-short line, tower had us wait a good five minutes while a timid and confused airport worker bungled his way across the runway.  Jeff, frustrated with the tachometer slowly clicking up the time, had me shut off the engine while we waited.  Tower finally piped through with the clearance, I fired off the engine, and Jeff took the runway with a rolling start, already almost at takeoff speed by the time the plane finished its turn onto the runway.

The Citabria leapt easily into the air under Jeff’s control, and right about when I started to wonder if he was just flying because he likes to fly, he finally relinquished control of the vehicle to me.  He told me to start my turn to Mt. Diablo at any time, and feeling like turns are always more fun at lower altitudes, I went ahead and began my turn immediately, banking over the rows of parked planes at KaiserAir 200 feet below me.

I picked out the very tip of the peak of Mt. Diablo over the East Bay Hills, and honed in on it.  Jeff gently tapped the shoulder in the direction he wanted me to look (a habit of his), and I found his finger pointing towards a quarry to the left of the mountain.

“See the dug-out part of the hill? Head there.  It should put us on a course for Mt. Diablo.”  I was confused, but decided to heed his advice.  As the plane continued to climb we saw more and more of the earth behind the hills, until Mt. Diablo became obvious to Jeff.  “Oh, guess we were a little off.  Turn right about 30 degrees,” which I did, putting me back on my original course.  Oh well.

Past 4,000 feet we started to breach the first cloud layer, a scattered assortment of cumulus clouds that denied us large swaths of the East Bay as practice sites.  Above us the second layer, a thicker broken layer at 6,000 feet, put a ceiling on how high our aerobatics would be.

Jeff had me do gentle banks from time to time as he scoped out potential holes.  We found what we thought was a promising spot, but Jeff had me check the VOR, only to reveal that we were too close to an airway.  As we passed abeam a giant but benign cumulus, its form gave way to reveal an ideal spot: A hole in the clouds above uninhabited farmland, sufficiently far from controlled airspace — exactly what we needed.  Jeff instructed me to complete my climb at a safe altitude, and then we’d jump right into the training.

“I figure you know what you’re doing, and you’re a skilled aerobatic pilot,” — I didn’t believe him, but complement accepted — “so let’s jump right into routines.  Let’s see…” he thumbed his mind for a good routine.  “How about … a left hammerhead, followed by an aileron roll, then a snap roll, then a split-S.”

It was a very similar routine to one I had done the previous lesson, but because of the Citabria’s underpowered engine, all of our routines shared a good deal of similarity.  You start with the faster maneuvers then move on to the slower ones as you use up your energy.

As he listed off the maneuvers I began my clearing turns and chose a line to use as my reference.  “When you’re ready, Captain,” he said (as he always does), and that was my cue to begin.

I pitched the nose forward and reduced power back, calling out the airspeeds as I passed each ten-mile-per-hour tick.

“One-twenty … one-thirty … one-forty!” I looked at my left wing and pulled briskly back on the stick.  The plane began a gut-wrenching pitch to ninety-degrees vertical.  I mistakenly brought the power out, and Jeff was quick to correct.

“Full power!”  I reversed my mistake.  “Threetwoone right rudder left aileron!”  Jeff’s countdown was quick, and I stuck my hands and feet in opposite directions.  The plane flopped a little on its reversal, but I was able to keep mostly smooth.  I was now looking directly at the ground, watching the airspeed indicator for 120.

At 120 miles per hour I began my pitch up to 30°, then immediately added full left rudder and aileron to commence the aileron roll.  When the plane was inverted I added a touch of forward stick pressure to keep the nose on the horizon, and followed through to level.

“Snap roll, you’re looking for 85,” Jeff ordered.  I pulled up until I captured 85 miles per hour.  “OK, break it!”  Following his orders, I pulled the stick the last inch to my gut in a fast flick, beginning the stall.  At the moment of the stall I added left rudder, and the plane began its autorotation.  Halfway through the first rotation I began my recovery procedure, neutralizing the controls and applying opposite rudder, and the plane recovered almost right on target horizontal with the horizon.

“Split-S now, 80!”  I was already at 80 so I began my aileron roll, aborting it halfway through and pulling sharply back to dive over into level flight in the other direction.

“Whoooo!” Jeff exclaimed.  “That was awesome!”  Aerobatic flight always gets him excited.  “Resume your climb and let’s figure out what you’ll do next.”  As I climbed and repositioned myself for the next routine, he built up the string of maneuvers.

“How are we doing on the tach?” It was a frequent question.  Jeff was watching the tach time to make sure we had enough left to get back home before the limit was reached.  “We probably have time for one more routine, and that’s it.”  Short and sweet.

“Let’s start with a cuban eight — a full cuban eight — then a barrel roll, and a spin.”  The routine was only three maneuvers, but two of the three were notorious for making me feel sick.  He was trying to push me a bit in our short lesson.  “Climb a bit and then go when you’re ready.”

After reaching 6,000, I commenced the maneuver, diving down for speed again and counting off the tens.  At 145 miles per hour, I pitched up sharply, this time bringing the airplane around the vertical until I was inverted and pointing 45° down, at which point I commenced a half aileron-roll to return to wings-level.

“145 and do it again!”  I watched the speed increase and at 145, I did the same thing again, completing the full cuban eight.  Upon returning to wings level, I abruptly stopped.

“I forgot which maneuver came next,” I admitted sheepishly.  Jeff sighed, reminded me of the routine, then had me climb and do it again.  This time, he was sure to call out each maneuver in the routine.

I did the full cuban eight a second time, this time prepared to enter the barrel roll when it completed.  Upon returning to wings-level I quickly sighted a landmark off my left wing — the Clifton Court Forebay — and used it as a reference for the barrel roll.  “Tighter, more aileron, more rudder,” Jeff corrected me as I worked through the maneuver, bringing the plane in a wide circling loop.

“OK, pitch up, one-rotation spin.”  Jeff continued to remind me of the routine.  I pitched the nose up sharply and watched the airspeed dial wind down.  When it dropped below the green arc I broke into the stall with a quick pull of the stick, shoved the rudder to its stop, and watched as the plane dipped down and began to spiral earthward.

“One-half … one … recover!” I was already on the recovery routine, regaining control of the aircraft right as it finished its first rotation.  I restored straight and level flight and we both exhaled.

“Awesome, excellent routine.  I hope it looks good on camera — it’s hard to hold it steady when you’re pulling G’s.  And we still have some time left on the tach.”

We flew back under very low power, inching towards Oakland at 85 miles per hour, hoping to conserve tach time.  The languorous pace allowed me much time to discuss my future as an aerobatic pilot with Jeff.

“This is where you have to put your ‘commercial pilot’ skills to bear.  I always take passengers up and do a few easy maneuvers at first to make sure they can handle it.  I don’t get into the routines unless they really want to.  That’s where the hammerhead and aileron roll are useful — they’re visually compelling but easy on the stomach.  I wouldn’t take them up and do a bunch of spins right off; you don’t want to clean this airplane.

“Spins are more of a ‘watch this’ maneuver.  Those are the two most dangerous words in aviation: ‘watch this.’

“If one of your guys gets sick, I usually tell them to just look out the window at 45°, where you get the widest view.  Just stare at the horizon.  It’s important that you be a perfect pilot when they’re recovering.  Hold it steady, rock steady.  Not even the little banks and turns.”

I admitted to him that I had had a stomach ache, “but apparently it can go both ways.  I had a stomach ache, and I was a little concerned, but after the first routine it was gone.”  I found it amusing that aerobatic flight would cure an upset stomach.

Approaching Oakland Jeff debated among which of the different runways to land on.  He had debated landing 33 for a while, despite the tailwind, to put us right next to the Old T’s (where OAM is) after the rollout.  He informed me that if we were to land with the tailwind, he should do the landing.  Sure, it might be because he has more experience, but of course there is his strong desire to fly the plane now and then.

Ultimately he settled on landing 15, the opposite direction, with the headwind.  I had not yet had the pleasure of landing on this runway.  Tower gave us our clearance to land on 15, and I studied the layout of the field as we got closer, trying to ensure I was heading for the correct runway.=

Once I was positive I was on base for 15 and not another runway, I pulled the power out and let the airplane sink.  Jeff had the camera out again.

“Make it a good landing,” he encouraged me for the camera.  I was tempted to make small adjustments to my descent rate as the runway came closer, but I decided to just trust my instincts and let the plane fly itself down to the numbers.

As it turns out my instincts were dead on.  Without any corrective input I had set up a perfect initial glide path, and the Citabria whisked past the start of the runway inches above the ground.  I needed only add a touch of power to round out the wheel landing, setting the plane down gently on the runway.  Admittedly, I was right of the centerline, and keenly aware of the camera behind me, I worked diligently to regain the center and make it look good.

We had told tower we wanted to taxi to OAM, but of course we had completely forgotten the need to fuel the plane first, so we amended our request and asked to go to Kaiser.  At Kaiser I shut down the plane and secured it against the increasing winds.  Jeff compared the departure and arrival ATIS and noted the pressure and temperature were dropping, something I remarked is “never good.”

Rodrigo was at Kaiser with a student pilot; he dropped by and Jeff shared the video he took with Rodrigo.  Jeff keenly chose the rather benign video of me landing the plane, something Rodrigo is probably more comfortable with than aerobatic flight.  At any rate, he seemed satisfied with my performance.  I worked to give him no reason to doubt that I was still a proficient taildragger pilot, locking the controls and chocking the wheels just like he taught me.  I even made a show of checking the fuel caps to make sure they were secure.

“Rodrigo should work for the FAA,” Jeff said, casting light on their different approaches to safety as instructors.  It’s a comment I think Jeff intended to be mildly derisive, but one that Rodrigo would probably take as a complement.

Jeff was ready to explain to me how to taxi to the Old T’s, but I reminded him that my “alma mater” of sorts was Alameda Aero Club right next door.  I therefore had no trouble navigating to the other side of the airport, where I enjoyed a little nostalgia as I taxiied the Citabria past the aircraft I learned to fly in.  Oh, how far I’ve come…

…and how far there is yet to go.

This is a perfect example of the problems that occur when you let religious devotion to some engineer’s precious idea of how their beautiful system can integrate together trump design considerations.
“There were no results for Spam” should really be “Hooray, no spam here!” or something more meaningful.  But because an engineer became devoted to the idea that every section of Google Wave can be represented by a search tag, you get this off-color result.

This is a perfect example of the problems that occur when you let religious devotion to some engineer’s precious idea of how their beautiful system can integrate together trump design considerations.

“There were no results for Spam” should really be “Hooray, no spam here!” or something more meaningful.  But because an engineer became devoted to the idea that every section of Google Wave can be represented by a search tag, you get this off-color result.