Monthly Archives: January 2007

I hate domains

There is a story behind the name “Riverfold”:, but it’s probably not a very good one and I won’t go on a tangent by telling it here. What I will say is that I hate domain names.

Maybe it’s because I remember when domain names used to be free (I do), or maybe it’s because I get some thrill out of typing in IP addresses (I don’t), or maybe it’s because I think domains should last forever, like a printed book in wide circulation. But in any case I decided not to register when I first named the product. Five days after announcing and shipping 1.0, someone else registered the domain, for their own presumably evil purposes.

I’ve owned just a handful of domains over the years. During the dot-com days I registered and started building a web-based note filing system (sort of like “Stikkit”:, but not as good). Then there were the family web site and related domains.

I let all of them expire, except I kept for “everything else”, and I’m pretty comfortable with the simplicity of that decision right now. It was probably foolish to pass up the domain for my own product. But how many people type in to go anywhere? No one who matters.

There is a thread on the MacSB mailing list about the rise of product-oriented web sites (the “”:’s of this new era of glitzy Mac shareware), and it really made me second-guess my decision to not register everything. But at the end of the day, it’s one less thing I have to worry about, and I can focus on stuff that is more interesting.

Bookshelf note sharing

I’ve blogged a lot about my side project “Riverfold”: lately, but it’s time to show my “real” job some love as well. Internally at “VitalSource”: last week we rolled over to beta status for the upcoming Bookshelf 4.5, and I’m really excited about what is coming. I’ve been working on the note sharing and syncing feature off and on for over a year now.

What’s it all mean? In a nutshell, create highlights and notes in your digital textbooks and have them flow to other users or to any of your computers. As Steve Jobs said with a totally straight face at the iPhone introduction: It works like magic.

(That was one of my personal favorites from Macworld. Rewatch the keynote and see the expression on his face. This magic is serious stuff.)

At least, magic is the goal. If it was that easy we would have shipped by now. Behind the scenes it gets a little tricky, and the cross-platform C++ code that powers the client (the server piece is written in Ruby on Rails) is in its third major rewrite. Which like all good refactoring, is simpler and probably uses fewer lines of code than the previous two attempts.

But first, some screenshots: “Subscribed highlights”: and “Sharing”:

The architecture is based on the “Simple Sharing Extensions”: (SSE) for RSS and OPML. On top of that we have added a VitalSource namespace and a few extra XML elements and attributes to keep track of Bookshelf-specific data, such as highlighter color and selected text within a book. The goal is to keep it as open as possible, so that in the future we can both consume other sources of user notes, and allow third-parties to also hook into the data in interesting ways.

We (computer users in general) are all writing bits of notes and data in various applications and for the most part, it’s a mess. We switch applications frequently, databases and file formats change, and there’s no good way to move data between applications. Imagine instead that you could have bookmarks and short snippets of text easily sync between apps like, NetNewsWire, Yojimbo, Flickr, and Bookshelf. Ultimately the only requirement is that each item is RSS-like (it has a URI, some text, and maybe another piece of specialized data just for that app). Anyone who has been programming for the web for a few years knows that after a while, everything starts to look like RSS.

The key is simple, flexible standards. “Less Software”:, if you will. Mac OS X’s Sync Services by comparison is too complicated, too closed, and too narrowly tied to specific applications.

What I like best about SSE is that it provides a roadmap of sorts. It makes some assumptions about how you want to sync data and that frees you to work on more important things. Wondering how to deal with GUIDs, versioning, and deletions? Don’t reinvent the wheel, that’s in the spec.

I’ll post again when we actually ship the software, of course. Anyone else using SSE yet? If so, drop me an email. I’d love to hear how people are using this stuff.

Wii Transfer takes over internet

Okay, not really. But this has been a crazy and surprising week for my “little” application, Wii Transfer. Putting 8 hours each day into “VitalSource”: (I have a post coming about that tomorrow, by the way) and then juggling home responsibilities, putting out various other fires, and sitting down to work on Wii Transfer until 3am is just not healthy.

Luckily I slept great last night and took a 3-hour nap today. So time to blog again. :-)

Over a week ago I released Wii Transfer 2.0 and made a big mistake, and since I’ve been programming for the Mac for over a dozen years now, I really should know better. It was buggy. And not just a few minor cosmetic problems, but at least two serious crashers. I simply had not tested enough. It’s difficult (sometimes impossible) to regain a user’s trust after their first experience with an application is a bad one, so I got to work that weekend fixing problems and releasing beta builds to customers to get a few extra eyes on the software.

Then Monday came, and all hell broke loose.

Links from “Daring Fireball”:, “Ranchero”:, and “The Unofficial Apple Weblog”: were followed by “Jostiq”:, “Infendo”:, “4 Color Rebellion”:, and a bunch of others. Ironically one of the only gaming sites I read that never linked to Wii Transfer was the only one I had actually sent an announcement to (“GoNintendo”: Traffic and sales were way up (“here’s a Mint screenshot”: from one day last week).

But meanwhile, the application was just not that stable. I started rewriting most of the web server inside Wii Transfer and fixing lots of issues with iTunes and iPhoto libraries stored on external drives. Then I made my second mistake: I added a feature (album cover artwork!). Obviously, adding a feature in the middle of bug fixes just delays the original fixes and introduces new problems.

I also quickly realized how many things could go wrong with how music and picture sharing works. It relies on the Nintendo Wii and your Mac being on the same local network. Because Wii Transfer pings a bookmark server to register your IP address, you also have to make sure the app picks the right IP if your Mac is on both ethernet and wireless networks. Worse, many people have the Mac OS X built-in firewall enabled, so users are required to manually open up port 9000.

At one point on Tuesday when sales were coming in, every time I received a PayPal notification email I literally groaned. “Stop buying this software until I can make it work reliably,” I would say to the computer. The thing that got me through was that all customers who sent in support email were extremely helpful and patient. The other good news is that with version 2.1.1, it’s looking pretty solid, and the next update should wrap up any remaining fringe issues.

To everyone who gave Wii Transfer a try, thanks! I think you’ll like what comes next.

Wii Transfer 2.0 featured on Apple Downloads

I finished “Wii Transfer 2.0”: late Thursday night. This version is an interesting milestone for the application because it goes beyond just using the SD card to shuttle data back and forth between your Mac and Wii. There is a small Cocoa web server embedded inside Wii Transfer that can serve up MP3s and JPEGs directly to the Wii using the Internet Channel. I think this could be the basis for some really fun stuff in the future.

One of the things I added at the last minute is to try to simplify how you connect to your Mac from the Wii. IP addresses are difficult to memorize for most people and may change depending on how your home network is setup. To solve this, Wii Transfer will optionally create a permanent URL for you on You can then add that URL as a favorite for your Wii and it will always redirect to your local machine. Wii Transfer will ping the Riverfold server on startup and update the bookmark database with your current IP address. You can think of it as a simplified version of “Dynamic DNS”:

I just noticed that Wii Transfer is the featured download and staff pick in the “video section of Apple’s download site”: That is a nice surprise. It will be interesting to see what that does to download stats.

One last thing. Starting next month the price will go up to $14 for version 2.0 (free upgrade for all existing users). I usually work on Wii Transfer at night, so the increase will help offset all the sleep I lost. :-) Even at $14 it may be underpriced. Remember the “Brent Simmons rule”: anything less than $20 won’t be taken seriously. In this case though I think it’s just about right. I’m also finding a large percentage of purchases from Europe, despite no localization, probably because the US dollar is so weak now. Enjoy!

You had me at scrolling

“Last week I said”: I wasn’t interested in an iPod phone, unless it was something no one had even thought to expect. Well, it is. I am blown away by the iPhone. The thing runs Mac OS X.

The iPhone is really inspirational in terms of UI design polish. You can tell they put some years into it. I was playing with Tiger’s NSAnimation the other night (sort of a poor man’s “Core Animation”:, and it reinforced for me the fact that UI effects are no longer optional pieces of software design. They can both visually supplement the user interaction and just make the application experience more enjoyable. “Disco”:, for all the criticism as a glorified Disk Recording framework wrapper, is fun to use. Same goes for the just-released “Snapshot 2.0”:, which has a really thoughtful single-window UI.

This is going to be another great year to be a Mac developer. And we haven’t even seen the rest of Leopard yet. Only bump in the road will be if iPhone is a closed platform. The “comments over at Theocacao”: provide some interesting commentary on that question.

Falling in love with VoodooPad again

A few years ago I used “VoodooPad Lite”: extensively. Every note, to-do list, and feature description went into it. At some point I migrated away from VoodooPad to a combination of text files and “Ta-da list”:, perhaps fearing I would have too much data in a weird format that would be difficult to get at later.

But I was always on the lookout for a problem that would best be solved with VoodooPad again. With our localized help files for “Bookshelf 4.1”:, I tried for most of a day to use VoodooPad to manage the help. I even experimented with Gus’s dead “project for remote wiki editing”:, thinking I would write my own web-based help-specific wiki system and plug “Boomerang”: into it. In the end it was too difficult to force the existing static help files into VoodooPad.

Fast-forward to a few nights ago. “Wii Transfer”: 1.5 has no Apple Help at all, and it needs some. A perfect opportunity for VoodooPad, and I’m happy to report that the solution works beautifully. I knew I could make it work because clearly VoodooPad’s own help files are managed with VoodooPad. After a bit of experimentation I bought a new VoodooPad license and all was well in the world.

Here’s how it works:

  • I manage the help content in VoodooPad, creating pages for different help sections and generally just typing away and getting stuff done.

  • The HTML export template lives inside the VoodooPad document itself, so everything is in one place.

  • Also inside the VoodooPad document is a post-processing script (written in Ruby) that looks for a comment in index.html and inserts the appropriate AppleTitle and AppleIcon meta tags that Apple Help needs to get its work done.

The only part I haven’t finished yet is that the script should also send the files off to Help Indexer to update the search index. I coded that part but it doesn’t work yet — there is something different about how VoodooPad executes these scripts that prevents other applications from launching. (Maybe. I’ll sort it out eventually.)

You can “watch a screencast of the process here”: I add a new page, enter some filler text, export the VoodooPad document, then re-run the Xcode project and view the changes in Apple Help. Fun!

The Hivelogic Podcast

Watching from the sidelines as Dan Benjamin prepared his first podcast really made me want to get out “the microphone”: again. Creating a podcast is a great experience, and I always tell myself I’ll do them more frequently. There have been a few recent events that I’ve wanted to capture as podcast episodes, including the experience waiting in line for the Wii, but it just hasn’t come together.

Enough about me. Go listen to “The Hivelogic Podcast with Dan Benjamin”:, interviewing “John Gruber”: about the upcoming Macworld announcements. The Macworld keynote is this coming Tuesday at 9am Pacific, but I haven’t heard word yet on whether it will be streamed live or a delayed rebroadcast.

Macworld 2007 predictions

“Dan covers his Macworld predictions”: in great detail. Instead of predictions, since mine will probably be wrong, I’m going to list what I want to see:

Tablet. I tend to agree with “Steven Frank’s analysis”: more than “this former Apple exec”:,,1981815,00.html, but either way it remains pretty unlikely that a tablet is going to happen under Steve Job’s watch. At WWDC once Steve Jobs called the Newton a “little scribbly thing” or something similar, and it wasn’t long before he officially gave that division the axe.

Numbers. Some people still insist on sending me Excel documents. We need a simple application in the iWork suite that can natively read/write Excel documents and handle the basics.

Finder. I’m pretty sure Leopard will sport a new Finder, as well as user interface candy paint applied across the operating system. The only question is whether they’ve rewritten it from scratch and in the process introduced even more problems. I’m optimistic on this one, though, and expect an elegant UI evolution from the Finder team.

What I don’t care about:

iTV. See “previous post about DRM”: If I want to watch a movie, I’ll put in a DVD. However, I do hope to draw some inspiration from whatever they do and apply it to “Wii Transfer”: development.

iPod Phone. I have no doubt it will be well designed, but it will also be at least $299 (guess). I have only owned a couple mobile phones in my life, and they were free or nearly free. The iPod Phone will have to be something no one’s even thought of yet for me to consider it. It’s kind of like “Nike + iPod”:, a luxury that I don’t really need.

Anyway, should be a fun Macworld. I haven’t been in years and I’m a little jealous of those who are attending this year. (But not jealous enough to want to get on a plane next week.) Part of me misses the old days, having a booth and talking with users or seeing what was new on the show floor. I was at the first Macworld keynote after Steve Jobs came back to Apple, while Gil Amelio was still in charge, and I’ll always remember it as something pretty special.

Goodbye iTMS

When I started on the “music sharing feature”: in the upcoming 2.0 release of Wii Transfer, I knew it couldn’t support protected songs from the iTunes Music Store. Still, it was disappointing when I started using it and such a big chunk of my favorite music was inaccessible. The only DRM problem I’ve ever run into before now is forgetting to deactivate old machines and hitting the 5-machine limit, but that’s easily solved, and I have been quick to defend iTMS and promote its convenience to others.

No longer. Overnight my music library has become much less valuable, just because I chose to use it in a different way. Almost all the music I’ve bought in the last couple of years is from iTunes. I created two smart playlists, one to show protected and one not. Apparently of the 5000 songs on this computer, 500 of them are from iTunes. 10%.

I’m not sure what is going to replace my use of iTunes yet, but for now I think I’ll lean on Amazon Prime’s free 2-day shipping and just order and rip CDs to good old fashioned high-bitrate MP3s. Too bad, because I do love the iTunes experience. Just gotta keep repeating to myself: text files, JPEGs, and MP3s are forever. Everything else is suspect.

Holiday hacking on Wii Transfer 2.0

I got sick (the flu?) shortly after Christmas, but nevertheless managed to sneak in some coding on Wii Transfer 2.0, which I hope to release this weekend. The big new feature for 2.0 is music and picture sharing. Essentially, there is a web server built into Wii Transfer. You can use the Wii’s Opera web browser to connect directly to your Mac running Wii Transfer and pull up MP3s or iPhoto albums. I’ve licensed “Jeroen Wijering’s Flash-based tools”: for listening to MP3s and browsing photos. The interface isn’t perfect yet (the buttons should be bigger for easy TV viewing), but I think it’s pretty good for a first shot at this. The web server portion is based off of “Jürgen Schweizer’s Cocoa example code”:

“Check out this screencast”: to see what most of it looks like. The first part shows the new Wii Transfer main window UI with a source list for switching features, and the second part shows what it looks like from the actual Wii. I just setup a tripod and filmed off the new HDTV with my digital camera.

I also started back on “real work”: today. We have some neat stuff shipping later this month that I’ll be blogging about more once it’s ready to show. I knew I could easily get lost in inconsequential stuff on the Tuesday after a long break, so I spent a bit of time yesterday reviewing to-do lists and getting my head on straight. Got some real coding and design done today, so no complaints there either.

All in all, 2007 is starting off great. (Except that I still seem to be sick, but I’m going to try to ignore that for a bit longer.)