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.