WWDC Week

20080608164325It's WWDC week for me. And it promises to be the most insane WWDC yet. I'm writing this from the line for the keynote address, which means I'm sitting on the floor at Moscone West in San Francisco surrounded by several thousand other developers. Crowd control, as you might imagine, is pretty sophisticated. This is line stage 3, and it's still a couple of hours until the keynote actually starts. I'm pretty near the front but only because I got up at 5AM to get in line, and because some friends got up even earlier and let me join them.

I kicked off the week by discovering that I'd left my MacBook's power adapter at home. Laptop use being essential here, this could have been a disaster, because the local Apple store typically sells out of laptop accessories this week. Fortunately I got one of the two still on the shelf and I'm in business again.

Last night was the now-annual sfMacIndie party, a gathering of independent Mac (and now iPhone) developers like myself. It was a hit, and organizer Chuck Soper recruited enough sponsors to cover all costs. I managed to break character for a bit and actually did some real networking. Parties are not usually my thing but I try and make an exception during WWDC.

That was followed by a large group heading to Tommy's, a cab ride across town to some serious margaritas. A fun time was had by all though I suspect some don't remember it well enough to be sure.

This year I have a couple of new things for people who like to follow WWDC.

First, I'm testing a new iPhone application I've been working on. Without going into too much detail, photos taken on my iPhone will be immediately uploaded to Flickr. So, for real-time photoblogging of WWDC, check out my Flickr photo stream.

Second is Twitter, which as of right now has not crashed yet. WWDC will no doubt stress it, but while it's running you can see my updates (think of it as a real-time micro-blog) at my Twitter page.


Atomic Bird in MacLife

Those of you in the USA should pick up the June 2008 issue of MacLife magazine. They've got an article called "The Dawn of iPhone 2.0", covering expectations for what's going to happen once this pre-release iPhone software I've been playing with goes public.

Why, when there's so much information online? Because I'm one of the sources for the article (see page 49), along with Paul Kafasis of Rogue Amoeba and Erica Sadun. That's reason enough, right?

For what it's worth, I did eventually get my iPhone developer certificate, although it still looks like the whole certificate program is pretty screwed up.

MondoMouse, "Power windows for your Mac"

Ever since MondoMouse came out I've tried to explain why it's so useful. I've had mixed success, drawing a dedicated band of users but not quite so many as I might hope. I'm not sure I really get the MondoMouse message across well.

So, I was more than a little pleased to see "Power Windows for Your Mac", Mason Mark's writeup on MondoMouse. Mason takes the time to analyze and explain how MondoMouse can save time and frustration when using your Mac, complete with diagrams that'll make it all clear even if you only skim the article.

Mason's post basically illustrates Fitt's Law, one of the cornerstones of user interface design. It provides a solid mathematical basis for why MondoMouse's approach to moving and resizing windows is not just way cool, but also provides a significant improvement in the overall Mac experience. Mason's writeup is more entertaining, and drops the math in favor of some obvious illustrations.

Fitt's law, by the way, is the reason that Macs have always had their menu bars firmly attached to the top of the screen. Applying Fitt's law, the menu bar can be regarded as if it were infinitely tall (because it's impossible to move your mouse too far when you want to click on it).

Mason is also the guy behind the excellent iGet and the promising iGet Mobile. Check them out.

WWDC 2008: Most Insane Ever?

It's still a few weeks until WWDC '08, but it's already looking to break previous records for insanity. With the iPhone taking up a huge chunk of the schedule, most who follow these things were predicting a lot of first-timers. And there were rumors from what should be reliable sources of an attendance cap, an unprecedented occurrence. A couple of days ago it became official with this notice on Apple's developer home page:

I don't think WWDC has ever sold out before. I'm guessing the real reason it did this year is that sooner or later the San Francisco fire marshal is going to say, OK, enough is enough. That might have been what prompted the sudden change of plans for WWDC '03. Then, after announcing WWDC dates for the then-typical San Jose venue, and waiting a few weeks while everyone made travel plans, Apple suddenly announced that the conference would be in San Francisco on a different date. This year? It looks like Moscone North and South are already booked for part of WWDC week, so buyers were cut off.

This has already prompted panicked would-be attendees to plead for someone to sell them a ticket. It's also prompted at least one eBay auction (where as of this writing the high bid is actually lower than what Apple's original price). Buyers should beware, though, and not just because the eBay seller has apparently never sold anything on eBay before.

Apple doesn't send out blank, usable-by-bearer tickets to WWDC. This isn't a movie you're attending. They've long since moved on to e-tickets. You can transfer your e-ticket to someone else, but you have to tell Apple to transfer it by logging in to your account at the developer connection member site. And, officially at least, you're not supposed to transfer "assets" like the ticket to anyone who doesn't work for the same company as you. Scalping is not supposed to be an option. Someone buying now might well find out that Apple considers the transfer invalid, and that they can't get in to the conference.

Keynote lineup, WWDC 2007Keynote lineup, WWDC 2007Would they do this? WWDC has already become something of a cattle run at times, and had to be severely pushing the limits of Moscone West already. This year attendees should expect the crowd-control army to be in full force. If there's a session you really want to attend, get there early or you may not get in. I don't know that Apple would invoke their right to bar entry just in the interest of crowd control, but then it's not like they have any room to spare either. And of course the ticket is non-refundable, so hey, they get paid the same either way.

I've got mine. Do you have yours?


Man Page PDFs Redux

Last year I posted a script that could be used in place of the Unix "man" command to generate PDFs of the man pages in question. If Mint is to be believed, this continues to be a fairly popular page, so here's an update on the old version.

When I posted it, Tiger (Mac OS X 10.4) was still current. After Leopard (10.5) came out I found it necessary to update the script slightly. Not because the old one didn't work, but because Leopard brought many updated man pages with it. The caching mechanism used by the script had no way to detect that the cached PDF was out of date relative to the man page it was based on.

Anyway, here's an updated version of the script. PDFs are cached, as before, but are re-generated if the cached PDF is stale.

As with the previous version, you can use it just like "man": "manpdf time" and "manpdf 3 time", for example, differ from the stock "man" command only in that a PDF is generated.

Source is below, you can also download it directly.

#!/bin/bash

# Convert man pages to PDF and open them in the default PDF viewer.
# PDFs are cached when created.
# By Tom Harrington, tph at atomicbird dot com, 16 March 2005

# Directory to save cached PDFs in 
# (if you don't want long-term caching, you could use /tmp/).
CACHEDIR=~/Library/Caches

# Command to read PS from stdin and write PDF to an output file.
PS2PDF_CMD="/usr/bin/pstopdf -i -o"
# Command to open the resulting PDF once it's created.
OPEN_CMD="/usr/bin/open"
# Path to "man", which is expected to take the -w, -S, and -t args.
MAN_CMD="/usr/bin/man"

CACHEDIR="$CACHEDIR/manpdf"
if [ ! -e $CACHEDIR ]; then
	mkdir -p $CACHEDIR
fi

if [ $# -eq 1 ]
then
	MANSECT=""
	MANARG=$1
elif [ $# -eq 2 ]
then
	MANSECT=$1
	MANARG=$2
else
	echo "Usage: " `basename $0` "[section] name"
	exit
fi

if [ "$MANSECT" != "" ]; then
	MANSECTARG="-S $MANSECT"
fi

# Look for the command's man page.
MANFILE=`$MAN_CMD $MANSECTARG -w $MANARG 2>/dev/null`
if [ -z $MANFILE ]; then
	echo No manual entry for $MANARG
	exit
fi
# OK, got the man page.  Now get the name for the corresponding
# PDF.  The goal here is to organize cached PDFs in CACHEDIR
# according to man-page section, similar to the way /usr/share/man
# is organized into "man1", "man3", etc.
echo file: $MANFILE
MANSECT=`echo "$MANFILE" | sed 's/.*\.\([0-9]\).*/\1/'`
MANPDF=$CACHEDIR/pdf$MANSECT/$MANARG.$MANSECT.pdf
FINALDIR=`dirname $MANPDF`
echo PDF: $MANPDF
# Create the PDF if it's not in the cache dir or if the cached version is obsolete.
CREATEPDF=0
if [ ! -e $MANPDF ]; then
	echo Generating man page...
	CREATEPDF=1
else
	if [ $MANFILE -nt $MANPDF ]; then
		echo Man page newer than PDF, regenerating...
		CREATEPDF=1
	fi
fi

if [ $CREATEPDF -eq 1 ]; then
	mkdir -p $FINALDIR
	$MAN_CMD $MANSECTARG -t $MANARG | $PS2PDF_CMD $MANPDF
else
	echo Reading man page from cache...
fi
# Now open the PDF.
$OPEN_CMD $MANPDF


Atomic Bird, LLC