Ten Cocoa words, plus two

At the last CocoaHeads I gave a talk about "The Top Ten Cocoa Words That Sound Dirty But Aren't". Ben Haller's web site has been the home for this list since 2003. I thought now would be a good time to give the list another home, so here it is:

  1. increaseLengthBy:
  2. insertBacktab:
  3. autorelease
  4. yank:
  5. stroke
  6. member:
  7. NSRectFill
  8. NSInsertionPosition
  9. toolTip

And the #1 Cocoa word that sounds dirty but isn't:

  1. knobThickness

Note that on Ben's site "stroke" is misspelled as "stroke:" — my fault for emailing it that way.

I added two bonus words:

  • touchUpInside (iOS only)
  • NSStopTouchingMeBox (a private class)

One of the stated goals of my talk was to beat this old joke to death. Having gone over the list many times in the last few days, I feel that I accomplished that goal at least for myself. However, this doesn't stop me from reposting two other jokes of mine that Ben posted:

Q: Where do IB users do all their shopping?
A: Target outlets.

Q: Why can't Cocoa programmers win presidential elections?
A: They don't retain their delegates.

Thanks folks, and please tip your waiter.

[UPDATE: I've posted source code for the demo app I used. The README contains links to Apple docs and further reading.]

Deviation from "clean"

Matt Gemmell on what he calls the "Critical Customisation Cost of Software":

Geeks are known to love configuring and customising their devices, but perhaps paradoxically they can also be reluctant to do so because of a compulsion to not deviate too far from a “clean” (and thus presumably safe, fast, efficient, known and well-tested) configuration.[1]

I'm part Felix, part Oscar. When I get a new machine and start customizing it, I'm just obsessive enough to document what I'm doing, so that my deviation from "clean" will be reproducible. But I'm not obsessive enough to maintain that document over time as I install more apps and tweak more settings. As a result I feel a constant nagging distress over how messy I've let my computer get — how far from pristine. I'm sloppy in other ways too, that I keep meaning to clean up One Of These Days.

I know this is irrational, but one thing that bugs me is apps that insist on being installed in /Applications. I don't like third-party apps getting mixed in with built-in ones. The Mac App Store has forced me to endure a bit of this discomfort. I used to put my third-party apps in special subdirectories of /Applications, named with leading underscores so they show up at the top in Finder. Now I put them in ~/Applications — the ones not from the Mac App Store, that is.


[1] One sign of my OCD[2] is that I checked the HTML source of Matt's blog post to see if he'd italicized the commas in "safe, fast, efficient, known", because I wanted to be sure to quote him exactly, down to the punctuation. I was glad to see he italicized only the words, not the commas.

[2] Like Matt, I don't claim to suffer from clinical OCD. I'm just using the term as a shorthand for the fussy side of me.

"Previous" and "Next"

I finally addressed a little thing on this blog that has bugged me for a long time. To navigate historical posts, there used to be links at the bottom of the page called "Previous Entries" and "Next Entries". I think the words "previous" and "next" are confusing to the reader because they overlap conceptually with the browser's Previous and Next buttons.

The terms can be confusing to a programmer as well. Here's a code snippet from the WordPress theme I'm using, showing two function names which combine with the link text to imply that "next" means "previous" and vice versa:

<div class="alignleft"><?php next_posts_link('&laquo; Previous Entries') ?></div> <div class="alignright"><?php previous_posts_link('Next Entries &raquo;') ?></div>

The word "next" in "next_posts_link" means "next" in the sense of "next page", if you imagine all posts grouped on pages in reverse chronological order. A lot of sites use this conceptual model, as you can see from links like mysite.com/archives/1, mysite.com/archives/2, etc. To a programmer, this corresponds to the idea of traversing a database cursor, where you've done a SELECT * FROM all_my_posts ORDER BY post_date DESC, and going to the "previous" post chronologically means going to the "next" row in the cursor.

A better choice for both the link text and the function names would be to use "older" and "newer" rather than "previous" and "next". I've changed the links on this site accordingly, and I've replaced "Entries" with "Posts" since that's the word I tend to use when I mention blog posts either here or elsewhere. This would also eliminate confusion if I were to change to a different WordPress theme that puts "Previous" on the right and "Next" on the left, as I've seen some sites do, adding spatial ambiguity to the semantic ambiguity of the words.

There are times when "older" and "newer" don't make sense, like when navigating pages of Google search results. In that case I think we're pretty much stuck with "previous" and "next" and have to live with it.

I've seen some sites that don't use words at all for their Previous and Next links. They use just the left and right angle-quote characters ("«" and "»"). Typically this is done when you get a row of page numbers, like this:

«7 8 9 10 11»

A variation uses double angle-brackets to mean "first" or "last", and single angle-brackets to mean "previous" or "next":

« <7 8 9 10 11> »

The usability flaw here is that one-character links are an extremely small click target. It's much easier to click the two links if they look like this:

Older7 8 9 10 11Newer

But this bugs me too. Somehow it doesn't look right. Maybe in this case "Previous" and "Next" really are better, and maybe they work better with "First" and "Last":

Previous7 8 9 10 11Next

First Previous7 8 9 10 11Next Last

You can see a sequence of page numbers, so it's clear the words refer to numerical order of pages, not chronological order. The reader still has to figure out the correlation between page numbers and chronology, but I don't see a way to make that easier.

I don't mind that the page numbers themselves are small click targets, because I suspect they are rarely used. I think most of the time the reader wants to go to the previous or next page, which is why those links must be easy to click.

Note that when the page numbers refer to historical pages, "left" means "newer" and "right" means "older" — the opposite of how "Previous" and "Next" often work when they are used alone (on this site, for example).

Detailed review of YoruFukurou

As I mentioned, I've been trying YoruFukurou as my main Twitter client.

After using it a bit more, I still really like it, for all the reasons I listed in my earlier post:

  • Command-F not only brings up a text field for filtering my timeline, it also dismisses that text field. I like Command-F being a toggle rather than using Escape to dismiss. For one thing, it's easier to reach. For another, it doesn't rely on the text field having keyboard focus.
  • Command-S shortens URLs, and the same shortcut also unshortens, which I like. While editing my tweet I might change my mind and prefer to show the full URL if it will fit. [Update: It looks like I was mistaken about Command-S unshortening. Use Undo to unshorten URLs.]
  • You can set the font size for composing tweets.
  • You can change the font size of the timeline by zooming in and out using the standard keys. For some reason I like this better than using a preference.
  • The app has a cute owl icon.
…[Y]ou can't edit multiple tweets at once like you can in Twitter.app, but Twitterrific has this limitation too and it never bothered me, though it's true I tweet very little.

I have a few more observations and minor suggestions. I'll Direct Message this blog post to the developer, since there doesn't seem to be an email address or forum for feedback.

Keyboard navigation

See their home page for a list of handy shortcuts (plus lots of screen shots of other features). I was pleased when, just guessing for the heck of it, I tried J and K to go to the next and previous tweets and they worked. I prefer them to arrow keys.

  • SUGGESTION: Put the J and K shortcuts in the menu so they're discoverable.

Opening links

If a tweet contains a link, you have to select the tweet to click the link. In fact, there's an option to make links unclickable altogether, which puzzles me. Do people often click links by accident? Maybe I don't use Twitter enough to understand.

I discovered an option to open all links in a tweet by double-clicking, which in a way is actually better than clicking the link because it gives me a much bigger mouse target. Hitting L is another quick way to open links in the selected tweet.

  • SUGGESTION: Make links clickable without my having to select the tweet.
  • SUGGESTION: Always highlight all links so they're easier to spot visually even if I can't click on them.

Translation

There's a Translate command (Command-T) to translate the selected tweet into a language you select in Preferences, which is English by default. It reminds me of a great Safari/Chrome extension called Franker, which I find handy when reading Facebook posts by my Russian and Chinese friends.

  • SUGGESTION: Provide a way to translate all tweets from particular users. It could be a checkbox in the Accounts pane: "Translate all tweets from this user". This could open up the world of people I might be interested in following — the YoruFukurou developers themselves, for example. I wonder if there's something about Google's terms and conditions that disallows this kind of automatic batch translation.

Time display

There's an option to show absolute time on tweets rather than how old the tweet is. I thought I would prefer this, but actually I like their way of showing relative time, with a phrase like "10 hours ago" rather than the abbreviation "10h".

  • SUGGESTION: Remove the word "ago". It's not needed and makes the timestamp more intrusive than it has to be.

Copying tweets

When you select text anywhere, the standard Copy action works as you'd expect. There is also a contextual menu for tweets that contains a "Copy" action for copying the tweet as a whole. You can configure how this is done:

Options for copying tweets

For example, copying one of my recent tweets in STOT format (whatever that means) gives me:

cocoadog: Twitterific: No Cmd-C in tweets? Cmd-F only works in compose field? No key/menu for Shorten Links? Links not draggable? This is Mac-like? [http://twitter.com/cocoadog/status/51874394028519424]

  • SUGGESTION: Have Command-C copy the tweet when a tweet is selected, so I don't have to use the contextual menu. For now my workaround is to use System Preferences to indicate Command-C as a shortcut for "Copy". You might think this would be redundant, but it makes the shortcut work in contextual menus. [Update: The developer @aki_null pointed out that Command-C does in fact copy the selected tweet — my mistake!]

Switching views

Someone replied to one of my tweets and I wanted to see the whole conversation. In other apps, this is done via an icon or menu that is within the tweet itself, and therefore fairly discoverable. In YoruFukurou, viewing the conversation is not treated as a tweet-level action but an overall mode for the timeline view. The timeline view options are "Normal View" (Command-1), "Single User View" (Command-2), and "Conversation View" (Command-3), which is the one I wanted. You can switch views using the menu, a keyboard shortcut, or a segmented control in the toolbar:

View modes

When you switch between the views, there is an animation, but it's not the sliding transition that Twitter.app uses. It's a sort of zoom-and-fade, which I prefer; it feels faster than the sliding transition, and it doesn't distract.

I have no suggestion here. Although it took me a minute to figure this out, it's not totally undiscoverable. I think the view switching is nicely done and I prefer it to the way other Twitter apps navigate.

Switching accounts

Another thing that confused me for a minute was how to view more than one Twitter account. I could see how to sign in to multiple accounts, but not how to switch between them. It turns out you do this with the "Previous Account" and "Next Account" menu items or their keyboard shortcuts.

[Update: @aki_null pointed out another way to switch accounts. When you have more than one account, your account icon appears in the tweet input field. You can click on this icon to select a different account from a pulldown menu. I had not noticed the absence of the icon when I only had one account, and it did not occur to me that it was an interactive control. Nice to know.]

  • SUGGESTION: To help with discoverability, add a popup button to the toolbar that lists my accounts. Also add "Previous Account" and "Next Account" buttons so that I am aware of these actions and will know to look for them in the application menu.

Take my money

  • SUGGESTION: Give me a way to donate, or make YoruFukurou a paid app. I wouldn't mind at all.

Cute app icon

When you quit the app, the owl closes its eyes and has a snot bubble coming out of its nose, which is the Japanese cartoony way of indicating sleep. I have no suggestion here, except maybe: don't underestimate my ability to be swayed by a cute icon.

Owl eyes

Scratching my head over Twitter clients

A couple of months ago when I decided to give Twitter a serious try, I figured I'd want a desktop client. From what I'd heard, the two best were Twitterrific and the official Twitter client.

I chose Twitterrific for three reasons:

  • It has one-click access to my lists, which mattered because I expected I'd want to view tweets grouped by areas of interest.
  • I much prefer its standard-looking window, with a standard toolbar and hideable sidebar, to Twitter's heavy black sidebar, which is non-hideable but has a "translucent" option that makes practically no visible difference.
  • I love the ding-chirp alert sound.

After several weeks of using the app the only thing I've changed my mind about is the one-click access to lists. I still appreciate that it's there, but it turns out I don't mind viewing everybody's tweets mixed together. The vast majority of the people I follow are in my "apple-people" list anyway.

So I do like Twitterrific, and I should note that IconFactory and its lead developer, Craig Hockenberry, have been greatly admired in the Mac community for a long time. Heck, they just made a huge open-source contribution to the developer community.

All of which has me puzzled by things about Twitterrific that are distinctly un-Maclike:

  • Command-C. I can't copy text in tweets with Command-C. I have to use a contextual menu.
  • Command-F. If there's a way to filter my timeline by searching for text, I can't find it. In other Twitter clients this is done with Command-F. In Twitterrific, Command-F brings up the standard Find panel when you're in the tweet editor, which by definition is limited to 140 characters, which means the Find panel is almost never useful.
  • Shorten Links. There's no menu item, toolbar item, or keyboard shortcut for Shorten Links. There's a pulldown menu, and I hoped assigning an Application Shortcut in System Preferences would work, but it doesn't. This strikes me as weird, because it seems to me Shorten Links would be a pretty frequent operation and a keyboard shortcut should be a must-have.
  • Can't drag links. I can't drag a link from a tweet to, say, a browser window or an email message. I have to copy it using a contextual menu and paste it where I want it.
  • No File menu. Extremely non-standard top-level menu bar items (Timeline, Tweet, Edit instead of File, Edit, Tweet), with no compensation in the form of increased usability.

I rarely use the menu bar, so I can live with the deviant menu and chalk it up to artistic license. But the handling of keyboard shortcuts (or their absence) is not only un-Maclike, it reduces usability. I don't get it.

I was about to switch to Twitter.app and just live with the heavy black sidebar, but I noticed odd things about it too. There's no URL shortening (much less a shortcut to do it), there are no font options, and it inexplicably limits the width of the window.

(Twitterrific at least allows Smaller, Normal, and Larger fonts. Other apps give more flexibility, and I'm not sure "Normal" is the right word, but at least they give options.)

I looked around a bit and for now I'm going with a free client called YoruFukurou, which is Japanese for "night owl". It has lots of features, including:

  • Command-F not only brings up a text field for filtering my timeline, it also dismisses that text field. I like Command-F being a toggle rather than using Escape to dismiss. For one thing, it's easier to reach. For another, it doesn't rely on the text field having keyboard focus.
  • Command-S shortens URLs, and the same shortcut also unshortens, which I like. While editing my tweet I might change my mind and prefer to show the full URL if it will fit. [Update: It looks like I was mistaken about Command-S unshortening. Use Undo to unshorten URLs.]
  • You can set the font size for composing tweets.
  • You can change the font size of the timeline by zooming in and out using the standard keys. For some reason I like this better than using a preference.
  • The app has a cute owl icon.

One difference from other apps is that YoruFukurou can't cancel a tweet or even hide the tweet editor. Command-N selects everything in the tweet editor, so you can easily delete it all and start a new tweet if you want. This seems fine to me. It does mean you can't edit multiple tweets at once like you can in Twitter.app, but Twitterrific has this limitation too and it never bothered me, though it's true I tweet very little.

Maybe I will use YoruFukurou as my main client and leave Twitterrific running for the ding-chirp alerts.