Monthly Archives: December 2003

Watterson and the New Year’s Eve blog post

The way I blog, I gather bits of news stories or other blog posts and write up an opinion on them for later blogging. Then when I feel like posting something, I go through the queue of things I’ve written and pick one out, or take several related stories and put them together. I used to use BBEdit for this. Then I started using NetNewsWire’s notepad. Lately I’ve been trying out VoodooPad. The interesting thing about this approach is that I end up writing about a lot of things that never get published. After a certain period of time they are no longer relevant or interesting.

For this last post of 2003, I went through the queue of a dozen or more recent things I could blog about. This thoughtful article about Calvin and Hobbes and creator Bill Watterson stood out:

“The pressure on Watterson must have been enormous, but he steadfastly refused to sell out, even a little bit. ‘I look at cartoons as an art, as a form of personal expression. That’s why I don’t hire assistants . . . and why I refuse to dilute or corrupt the strip’s message with merchandising,’ he said in his Festival of Cartoon Art speech. ‘Characters lose their believability as they start endorsing major companies and lend their faces to bedsheets and boxer shorts.'”

So I guess maybe the advice for the new year is to stay true to what you are doing. Focus on the real problem and don’t compromise your vision for the wrong reasons.

Happy new year.

Control drag hidden constant

I’m blogging this so it will be indexed by the great search engine in the sky, and perhaps save some Mac programmer out there a little time. The new control drag-and-drop Carbon Events are only partially documented. In addition to returning noErr from your kEventControlDragEnter Carbon Event, you need to set the kEventParamControlLikesDrag parameter to true if you want to receive the drag. Unfortunately this constant is missing from the headers. The correct value is: ‘cldg’.

Your code should look something like this:

Boolean t = true;

SetEventParameter (inEvent, 'cldg' /*kEventParamControlLikesDrag*/, typeBoolean, sizeof(Boolean), &t);

These new events were introduced in Mac OS X 10.2, and they are quite convenient. Happy coding.

Feed protocol

NetNewsWire 1.0.7 adds support for the feed protocol. Wes has suggested that MIME types and helper apps are the correct way to handle this, but modern browsers seem to have practically given up on good integration between MIME types and other apps.

I took a few minutes to read the feed protocol specification. It needs a little refinement, particularly the part about extensions (sending commands and parameters with the URL). For feed URLs with no commands, I don’t like that feed:// is the same as, but if you introduce a command, the real protocol (“http” or “ftp”) seems to be required. The “how to process a feed URL” section continues this confusing by saying that the real part of a URL is denoted by either “:” or “.”, but all the examples always include “http://”, which implies that feed://command/ would not be valid. Even more confusing would be an example like feed://command/localhost/.

A minor gripe, perhaps. Anyway, we’ll see whether it catches on.

Another smart experiment with making subscription easier (or at least not as disconcerting for new users) is the work done by Jason Shellen to apply CSS to the Atom XML file. The addition of a proposed “info” element helps describe what the user is seeing.

Update: Brent points to Dare Obasanjo’s pre-draft feed URI spec. On first glance it appears to be a more formal but less complete spec (not necessarily a bad thing). Apparently this is a somewhat unorganized effort.

Stopdesign on CSS layout options

Doug of Stopdesign discusses fixed vs. liquid layouts in CSS:

“Truth be told, table-based layouts are currently more capable of handling this issue than CSS layouts are. I’m certainly not advocating a move back to tables for layout. But unless dimensions are heavily manipulated by CSS, tables do work well at ‘containing’ any objects placed within their cells. This, without needing to worry about content from one cell overlapping another, or a cell suddenly getting re-positioned below a cell instead of beside it. With the current abilities of CSS, I can see why some designers have chosen fixed-width layouts.”

It’s refreshing to hear him admit the advantage that table-based layouts still have. I would have expected CSS to be in a better state by now. Designers shouldn’t have to choose fixed-width layouts just because it’s easier.

Meanwhile, the <a href=”

“>CSS Paged Media specifications (which I’d never heard of before) are nearing completion. Maybe CSS will fulfill its promise after all.

Why Cocoa text drags are broken

Apple still hasn’t fixed text drag-and-drop in Cocoa. In addition to going against how drag-and-drop has worked in previous versions of Mac OS for a decade, I believe it is based on a flawed concept. Has it seen any usability testing within Apple?

I guess the argument for this behavior goes something like this: Because selecting text is more common than drag-and-drop, dragging over a previously selected run of text should take precedence. If you really want to drag the text itself, merely hold the mouse down for a half-second after the click and then drag. Simple, right?

Not at all, for three reasons:

  1. It is counter to how drag and drop works in the rest of the system.
  2. It is slower.
  3. It is difficult for a new user to “learn” this Cocoa behavior.

The first is easy enough. If you can drag most “things” (a file in the Finder, or a window, or an object in a graphic design application) by clicking and dragging right away, why should dragging selected text be any different?

And it’s slower not just because you have to click and hold, but because you have to think too much. How long do I hold? Half second? Full second? Us humans never know exactly, and it’s easy to make a mistake and get a selection when you wanted a drag.

To illustrate what I mean by the last reason, let’s go over how someone would learn to make selections and use text drag-and-drop.

The Cocoa way: User makes a selection. They want to drag that selection, but instead the app keeps making a new selection where they clicked. User tries a few more times, then gives up, thinking that the app doesn’t support dragging of text. They use copy-and-paste instead.

The Carbon and old Mac way: User makes a selection. They drag that selection and it works as expected. If they are a new user, they might try to make a selection inside an existing selection, but without meaning to drag it. In this case they get the wrong behavior — the text starts to drag and they are momentarily confused. The next time this happens, they realize that they should single-click to remove the selection before making a new one in the same run of text.

See the difference? With the original Mac drag-and-drop behavior, the user might make a mistake once but that process teaches them how selection and drag-and-drop works. With the Cocoa behavior, the user might never learn how text drag-and-drop works!

Luckily, Mac developers using Cocoa can override this behavior in their application (which speaks to the power of those frameworks), but I have yet to see an application that does.

Running Mac OS X

Congratulations to James Duncan Davidson, whose Running Mac OS X Panther has gone to press just in time for him to enjoy the holidays. I had the opportunity to review the book, and it’s a solid achievement. He covers many topics that will be useful to new and long-time Mac OS X users alike. Even in the most basic chapters there was nuggets of goodness, little tricks that will make working with your system easier. I particularly like how he covers the command-line tool equivalents for many features, which makes the book a good resource to turn to later.

Mike Clark has a fun review which will surely make the back cover. The official web site is also now up.

Independent comics

I’ve been digging back into comics lately, hence some of the comic-related posts. One of the things that fascinates me is the abundance of great web comics out there. Tons of artists who haven’t quite found the right business model, but are producing incredible stuff anyway.

Chad Townsend pointed me to Kazu’s work at His latest there is a quality monthly one-page comic called Copper.

I went shopping in the real world the other day, and came back with the Adventures of Mia, by Pixar story Enrico Casorosa; The Red Star, colored by Animation Nation member Snakebite; and a few issues of Bone, the award-winner from Jeff Smith.

What will the future hold for independent comic artists? Who knows. Here’s a semi-related excerpt from a Dave Sim speech from 1993:

“The critical difference with Spawn is that Todd McFarlane recognized that he is hot NOW, while he was working on Spider-man. He recognized that he was making an enormous amount of money for Marvel Comics and that the percentage of that money that he was being paid was minuscule. He recognized that there was a window of opportunity NOW to make his future financially secure and to take control of his career. He recognized that at Marvel, his career was out of his control. A change of editor, of editorial policy, of company ownership, any number of things could throw him out in the street at a moment’s notice. If Marvel could throw Chris Claremont away after fifteen years, refusing even to let him write a farewell note on the letters page of the book he had made into the industry standard, what security is there? Todd McFarlane recognized that there is no security. There never has been and there never will be.”

Over a decade ago I bought most of Todd McFarlane’s Spidey comics, as well as the first few issues of Spawn. Fast-forward to today: Spawn is drawn by someone else and McFarlane is a millionaire. And Dave Sim is a few months shy of wrapping up the entire 300 issue run of his independent comic, Cerebus. (He started 26 years ago.)

Christmas lights

House lights

I’ve come to enjoy the yearly tradition of putting up Christmas lights: balancing on a wobbly ladder, hanging over the side of the roof, and searching for that elusive burned-out mini-bulb. This year we put our lights up in record time, before the sun set on the eve of December 1st. Ah, the holidays.

(Not a great photo above. I was trying to capture the lights on the bird feeder.)

Roy leaves Disney

The New York Times covers Roy Disney’s resignation:

“Roy E. Disney, a nephew of the founder of the Walt Disney Company, said on Sunday that he was leaving the board of directors and called for the resignation of the chairman and chief executive, Michael D. Eisner.” has a reprint of the full letter to Eisner and the board:

“I have and will always have an enormous allegiance and respect for this Company, founded by my uncle, Walt, and father, Roy, and to our faithful employees and loyal stockholders. I don’t know if you and other directors can comprehend how painful it is for me and the extended Disney family to arrive at this decision.”

Big news. It’s a shame that Roy is the one to leave. It’s clear that Disney (the company) has lost its way, and Eisner has no vision for what the company could be.