Ellen and Bill

I think O'Reilly's arguing on the right side for the wrong reasons. People most certainly can and should protest a business if they feel it is doing something wrong.

The real issue is not whether it's wrong to protest a "business decision". The real issue is whether being gay has anything to do with morality in the first place. The people who are calling for Ellen to be fired believe it does, and the real answer is that that is wrong, not that business decisions are somehow exempt from protest.

He might be playing a little misdirection game here. Notice how he compares this to calls for him to be fired. (For me, Glenn Beck and Pat Buchanan came to mind.) He claims those are also wrong. I think he wants to be able to shoot down any attacks on him by saying "Hey, I defended the liberal side when it came to a gay person. Aren't you being just as bad as OneMillionMoms?"

I'll give O'Reilly more credit the day he stops calling homosexuality a "lifestyle", which is code for "It has moral implications."

I did enjoy his mocking the OneMillionMoms for declining to appear on the show. And the fact remains that he is defending Ellen Degeneres, for which she's rightly thanked him.

See also "Ellen Addresses Her JCPenney Critics".

[EDIT: Switched the second and third paragraphs.]

Docsets can have bugs

If you've grabbed the latest AppKiDo (0.988; release notes here) and it seems to be a bit slower starting up, here's why.

AppKiDo is a documentation browser for the Cocoa APIs. As such, it needs information about all sorts of API symbols: class names, protocol names, method names, function names, typedefs, and constants. This information is scraped from two places: Objective-C header files and special bundles called docsets.

A docset contains a bunch of HTML files (the documentation) along with a "docset index" — a SQLite database file named docSet.dsidx. One thing the docset index does is it maps each API symbol to two file paths:

  • The header file where the symbol is declared.
  • The HTML file where the symbol is documented.

The way AppKiDo is designed, it needs to know what framework every symbol belongs to. NSString and its methods belong to the Foundation framework, NSView and its methods belong to the AppKit framework, and so on. I've been getting this framework information by querying two tables in the docset index:

  • ZHEADER, which contains paths to header files, along with the name of the framework each header file belongs to. NSString.h belongs to the Foundation framework, NSView.h belongs to the AppKit framework, and so on.
  • ZTOKENMETAINFORMATION, which contains information about each API symbol, including a foreign key to ZHEADER.

(By the way, the docset index is actually a Core Data database. Normally one shouldn't access Core Data's underlying tables directly, but AppKiDo's access is read-only so there's no risk of corrupting the database, and SQL queries were simpler to implement than reverse-engineering the managed object model. Also, the docset index is relatively static, although that's a topic for another discussion.)

Now here's the thing. For some symbols, ZTOKENMETAINFORMATION is missing the foreign key to ZHEADER. This means you can't tell purely by querying the database which header file those symbols are declared in or which framework they belong to.

As far as I can tell, this is simply a bug in the docset. I suspect if I studied up on how docsets get created (which I should really do someday) I'd have some idea why the bug is there. In any case, it's there, and when I get a chance to write it up in more detail I'll submit a Radar.

If you have Xcode 4, and if Apple hasn't fixed the docset by the time you read this, you can see an example of this. In an iOS project, type "NSFetchedResultsControllerDelegate" and Option-click on it. You'll see that the Quick Help popup is missing the "Declared In" line that appears for most other symbols.

Missing the

Compare this to the Quick Help popup for NSString:

Showing the

Because AppKiDo (or, for iOS docs, AppKiDo-for-iPhone) can't tell what framework the affected symbols belong to, it never loads the documentation for those symbols.

My workaround was to add a second query that assumes the path to a symbol's HTML file contains the name of its framework. This is not always true, but it's true often enough for AppKiDo to figure out that NSFetchedResultsControllerDelegate belongs to Core Data.

Doing the second query means AppKiDo takes a bit longer to start up, which you may or may not be able to tell given how long startup is already. You probably wouldn't notice except that the query contains a LIKE clause, which makes it relatively slow.

For more gory details, you can see the relevant commit on GitHub.

So now you know.

"Winning" personality does not mean what some people think it means

A Facebook friend linked to this article by Tom McNichol:

With the death and canonization of Steve Jobs and the emergence of the Jobs biography as a kind of sacred text for managers, the ranks of bosses who see Bad Steve's nastier traits as something to imitate is liable to swell.

Of the many, many documented things Jobs did while bringing Apple to where it is today, are there really managers out there picking the worst parts of his personality and deciding that's what to emulate? Or for that matter using Isaacson's bio as a "sacred text"? I haven't seen or heard of this management trend, but I haven't been around a lot of managers lately.

It's been pointed out that most of Apple's historic turnaround, including the iPod, iPhone, and iPad, happened while Jobs was sick. So I guess managers who want to emulate him should try to get cancer. You know, like those jazz musicians who thought if they shot heroin they'd play like Charlie Parker.

Speaking of drugs, Jobs supposedly said that Bill Gates would have been better off if he'd tried LSD in his youth. Why aren't managers following that advice? Or are they?

It's certainly possible there is a correlation between unpleasant personality traits and people who rise to the top in business. Let's just say such a correlation is not entirely implausible. That does not mean that by going out of your way to hurt people's feelings you will become a more successful manager or executive.

Here's Guy Kawasaki on the things he learned from Steve Jobs:

Notice that "be a jerk" is not on the list, which Guy has also written up in various places including Google+.

By the way, Guy gave an excellent version of this talk at MacTech Conference. MacTech will be making it available for free — soon, I hope.

Uncle Al

My Uncle Al passed away peacefully at 11:15 Friday morning. His dear friend Karen was with him.

When I was a small child Uncle Al taught me to climb stairs foot-over-foot instead of stopping with both feet on each step. This was at the old house in Ossining.

One day he showed me how the three angles of any triangle add up to 180 degrees, by cutting corners from a piece of paper. Without being pushy, he always encouraged me to learn.

When I was in high school he got me a summer job programming the Apple II. If you know me, you know how that turned out.

We celebrated Uncle Al's 88th birthday in October with a gathering at his favorite restaurant in Chinatown.

Whenever I see something on the Web about Chinese food or history, my first reflex is to email it to Uncle Al. It will take a while for that reflex to fade. I will miss Uncle Al's infectious laugh and the running gag between us where he'd tease me about my endless appetite. I will always admire the devotion with which he cared for Aunt Kay in her final years.

I invite family and friends to share remembrances in the comments section below. If you'd like to share a photo you can email it to me at aglee@earthlink.net, and I will add it to this post along with any comment you would like to add.

For the moment

Apparently the common on-stage mistakes that public speakers make — and I definitely made some — were the least of my worries.

There has been excellent food for thought on all sides.

I never intended to make anyone feel excluded or belittled. What I hoped was to entertain and inform.

For the moment at least, that is all I have to say.