Tag Archives: vitalsource

Starting over

“Am I always starting over
In a brand new story?
Am I always back at one
After all I’ve done?”
— Always Starting Over, from the broadway show If/Then

Daniel said on the latest Core Intuition that it’s important to celebrate major work milestones, like shipping a new app or quitting a job. I didn’t think I’d be celebrating right away, but as it turned out, my wife met me for lunch on Friday and we had a beer to mark the occasion. She snapped this photo:

Some things just work out. I couldn’t have picked a better t-shirt to wear if I had planned it.

When 5pm came around I made a final comment on Confluence, replied to a couple emails, and then signed out of HipChat. But I didn’t have time for much reflection. My son and I were busy packing up to head to a campout with Boy Scouts. Then as soon as we arrived back the next day, I turned around again to take my daughter to see Idina Menzel.

The concert was incredible, somehow including both Wicked’s “Defying Gratify” and Radiohead’s “Creep” — and yes, of course Frozen — to make a show with both the occasional explicit lyric and little kids pulled up from the audience to sing. It was only while driving home from the concert that I had a moment to think what I need to do next. Idina’s lines from If/Then at the beginning of this post kept coming back to me.

I’ve worked a long time on a few things, and they were pretty good, but now it’s time to start over. I turn 40 in a few months. It’s time to figure out what the next 10 years of my life should be about.

Two weeks notice: unfinished work

Three weeks ago I had about a dozen open Jira tickets. Today, my last day with the company, most of those are still open. I was able to update some documentation and do minor maintenance work, but a bigger change I had hoped to deploy turned out to be impossible because of a missing internal API.

It’s unsatisfying to leave unfinished work. There’s only so much that can be done in a limited time, though, and as we all know software (especially a web app) is rarely ever completely finished.

Bittersweet, moving on after so many years. The folks I’ve worked with have been really great. I’m going to enjoy keeping an eye on what they ship long after my GitHub access has been revoked.

This morning, my (now) former boss and good friend Willie Abrams linked in the company chat room to some of the photos that he had taken over the last 14 years. Brought back a lot of good memories, from brainstorming app features in a conference room to wandering around San Francisco before WWDC.

I think I’m going to let this be the final post to wrap up the “two weeks notice” series. I’ve accomplished a lot but there is still plenty left, especially shipping new products. It’s been good to force myself to write every day, so I’ll keep that going with the usual full posts and microblog posts.

You can find all 14 posts under the tag “2weeks”. Thanks for reading.

Two weeks notice: Core Int 192

Continuing from last week’s Core Intuition, today Daniel and I talk more about how things are going with the final days of my job winding down. We then take the second half of the show to catch up on recent news around Twitter’s leadership.

From the show notes:

“Daniel and Manton acknowledge celebration as a survival tactic, discuss the urgency of making ends meet as an indie, and examine changes underway at Twitter with interim CEO Jack Dorsey.”

You can listen or subscribe at the Core Intuition web site. Special thanks to returning sponsor CocoaConf. They’ve got conferences coming up in Boston and San Jose, and then Yosemite National Park next year.

Two weeks notice: final pull request

With just 5 days left at my regular job, it’s time to get serious about wrapping up my work. I have a small change mostly ready and tested locally, but need to push it up to GitHub and finish testing on the dev server. I have a couple open Jira tickets to look at after that.

Over the weekend I spent a lot of time with the Stripe API, trying to improve how I manage user subscriptions. Stripe has some new features since I first started using it. For example, options for sales tax and a quantity field. The latter is convenient if you have something like the ability to pay for multiple hosted web sites in a subscription, rather than deal with adding custom line items on an invoice.

Deadlines are an excellent way to push yourself to actually finish something. So this deadline of Friday is good, in a way, but unlike most of my other deadlines, I can’t miss it and keep working for another week. That finality is a little daunting right now, as I look at the week ahead and everything I want to get done.

Two weeks notice: your business model is wrong

How is it Friday already? I have just one week left at my regular job. In addition to looking at documentation, I talked on a video call with the lead engineer who will take over a couple of my projects. We went over my current bug list (exactly 13 lucky tickets in Jira) and reviewed a few of the trickier outstanding issues.

Nothing like walking through old code, even at a high level, to discover so much outdated cruft that could be redesigned or cleared out. There’s always a little bit of regret: if only I had fixed this one last problem before leaving, or smoothed over this one confusing part of the web UI. But that’s a slippery slope that could go on indefinitely. Web software in particular is evolving and never fully complete.

Meanwhile, I continue to get great feedback on my new Riverfold project from the very early beta testers. Bug reports, new ideas, and sometimes a series of questions that basically ends up as: you’re charging the wrong users, what if you tried this completely different way to make money instead?

While I don’t think there’s any direct competition for what I’m building, there are a lot of related services. I’d count even parts of Tumblr and WordPress among the services that are both complementary and in a similar theme to what I want to do. Tumblr makes money primarily through ads. WordPress has ads but (I expect) makes more money through their upgrades: paid custom domains, VaultPress backup, and premium themes.

When choosing a business model for my app, I’ve also been inspired by GitHub’s simplicity. Free for open source projects, which allows you to get a feel for how the entire system works as long as you don’t need private repositories. Paid for organizations, scaling up based on how many projects you have. The success of my project will hang on whether I can mix some of all these models without confusing potential new customers.

13 years

If you’ve been reading my blog for a very long time, or listening to my podcast, you probably know that in addition to my business Riverfold Software, I also have a “regular” job at VitalSource. As that company has grown, I feel less comfortable blogging about my work there, since I can’t speak for the company or even the smaller group I directly work with.

But this month is my 13th anniversary (!) with VitalSource, so I thought it would be interesting to look back on the times I’ve blogged about my work there, and highlight some of things I’ve helped build.

One of the earlier posts, back in 2005, was about our new store, where I linked to blog posts from James Duncan Davidson, Mike Clark, and Ryan Irelan about the project. But nearly a decade of migrating between blog systems has taken its toll; my post is still there, but the other links are all 404 not found.

Then from 2007, I wrote about syncing highlights and notes in e-books:

“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 recently updated the API to use a new, faster sync architecture, but the web app is still in use today. I’ve been updating it for Rails 4, a tedious process because of the Rails community’s fascination with deprecation.

Again in 2007, I mentioned updates to two of my favorite apps, MarsEdit 1.2 and NetNewsWire 3.0, along with VitalSource Bookshelf 4.6:

“At VitalSource we also just released Bookshelf 4.6 today, which lays the foundation for media-rich textbooks and adds a highlighter rating UI for any subscribed highlighters you have. This data will bubble up in a few places in the future to allow you to discover people and books, although for now it’s one-way.”

It’s neat looking back on this post because it includes a short screencast of the app from 2007, presumably running on Mac OS X 10.4 Tiger. The promise of this highlighter ratings feature never really materialized, though.

In 2010, I thought about the iPad right before its release:

“I’m working on 2 apps for the iPad. The first is just a minor iPad refresh of an existing iPhone app at VitalSource called Bookshelf Noteview (iTunes link). It’s for reading notes and highlights synced from our e-book platform.”

Noteview was eventually removed from sale. The other app I hinted at would become Tweet Library.

Around the same time, I blogged about Mac OS X as a server platform:

“At VitalSource we now have a dozen Xserves running Ruby on Rails and a couple others running MySQL. While it’s mostly stable now, over the years there have been several mystery show-stopper problems that no one seems to have on other platforms.”

Obviously Apple no longer sells the Xserve. At VitalSource all our best new servers run Linux.

Also in 2010, I reflected on how a team grows:

“If you’re working by yourself and add another person to the project, a funny thing happens: you become a manager. Before, you could spend 100% of your time on the work. Now you can allocate 50-75%, because you’re getting the new programmer up to speed, answering questions, and setting priorities. If you’re lucky (and I usually am), the person you added is contributing so much that it easily makes up for your loss in productivity, and then some.”

Later in 2010, I described how we shipped Bookshelf for iPhone:

“At its core the app is 3 parts: a large C++ codebase, brand new Objective-C UI code, and a bunch of clever WebKit and JavaScript work. In many ways it’s a more difficult project than my other iPad app (still in development), but some great coders contributed to different parts of the architecture, before and after I joined the project.”

There are other posts, but I think these hit some of the more interesting milestones in the last 13 years. I also have an archive of earlier, company-internal blog posts, starting in 2001, that I hope to look into and publish pieces from one day.

Bookshelf Touch

Bookshelf screenshot Although I had worked a little on iOS apps before, updating an existing app for the iPad and tinkering with unfinished apps, the first 1.0 for iOS that I played a significant role in just shipped last week: a “mobile version of Bookshelf”:http://itunes.apple.com/us/app/vitalsource-bookshelf/id389359495?mt=8 for VitalSource. The iPhone version has been in development off and on for a while, but I took over the project fairly late in development, with a coding frenzy through the summer as we switched file formats and scrambled to finish in time for fall students.

Today the app broke into the App Store’s top 25 for free Education apps.

It’s designed for existing VitalSource customers, supporting both our file formats (for XML-based reflowable content or PDF-like fixed layout), with synced highlights, figure search, and offline access. At its core the app is 3 parts: a large C++ codebase, brand new Objective-C UI code, and a bunch of clever WebKit and JavaScript work. In many ways it’s a more difficult project than my other iPad app (still in development), but some great coders contributed to different parts of the architecture, before and after I joined the project.

Nearly 10 years ago, when I was hired at VitalSource to build the Mac version of our e-book reader, we delivered textbooks on DVD-ROMs and our technology was years ahead of everyone else. Today, and especially post-iPad, the market is a lot different, with some beautiful competition like “Inkling”:http://itunes.apple.com/us/app/inkling/id379351586?mt=8. Bookshelf for iPhone wasn’t first to the App Store, but it inherits an existing user base, strong platform, and large book inventory. I like VitalSource’s chances.

Congratulations, you’re a manager

The sort of odd “best of both worlds” balance in my different projects at “VitalSource”:http://www.vitalsource.com/ and as a solo shop is that I love working with a team, and I also love working alone. I mean really alone, doing the planning and design and coding and marketing. I’ve resisted farming out any piece of my apps at “Riverfold”:http://www.riverfold.com/ (except the application icon) so that I can have complete control. It’s brutally hard sometimes, but it’s mine.

If you’re working by yourself and add another person to the project, a funny thing happens: you become a manager. Before, you could spend 100% of your time on the work. Now you can allocate 50-75%, because you’re getting the new programmer up to speed, answering questions, and setting priorities. If you’re lucky (and I usually am), the person you added is contributing so much that it easily makes up for your loss in productivity, and then some.

The trade-off is worth it. Exchange the previous low communication overhead for extra coding man-hours.

You can build something great with a team, something that would be impossible alone, if you surround yourself with people who are better at your job than you are. I love that first moment when a team doubles in size from 1 to 2, or 2 to 4.

But after the initial frenzy of coding and emails and new features, I usually get burned out again. The project doesn’t strictly need me anymore, and I’m ready to get back to starting an app from scratch, when the scope is so small that the whole thing still fits in my head.

Mac OS X Server tantrums

“At VitalSource”:http://www.vitalsource.com/ we now have a dozen Xserves running Ruby on Rails and a couple others running MySQL. While it’s mostly stable now, over the years there have been several mystery show-stopper problems that no one seems to have on other platforms.

Which is why I found this “quote from Rentzsch”:http://rentzsch.tumblr.com/post/316835872/mac-os-x-server-a-fear-realized so interesting:

“The trick is to radically minimize all services performed by Mac OS X Server itself, and instead run services in VMware-hosted Debian images. At that point, Mac OS X Server becomes little more than a simple container for VMware, something it seems able to handle with a minimum of tantrums.”

It seems kind of wasteful, but Mac OS X Server really is overkill most of the time.

Related: over the weekend I checked into “Heroku”:http://www.heroku.com/. I’m impressed with what they have built. If it works as advertised, I think I’ll supplement my Dreamhost stuff with Heroku any time I need a Ruby backend.

iPad ships next week

With the iPad set to ship in just a week and a half, I’ve been quietly reshuffling some of my projects around it. I’ve written critically of the iPhone and App Store a couple times, such as how the iPhone is a gold rush distraction that “doesn’t need me”:http://www.manton.org/2009/09/its_okay_to_ignore.html. I also stand by “earlier opinions”:http://www.manton.org/2009/11/the_only_2.html of how unfixable the App Store is, especially now when it’s obvious that any effort trying to convince Apple to open the store is completely wasted. They never will.

But I really like what I’ve seen of the iPad platform so far and I think it represents a big shift for everyday computing in a way that a cell phone can’t. So I renewed my membership in the iPhone developer program.

I’m working on 2 apps for the iPad. The first is just a minor iPad refresh of an existing iPhone app at VitalSource called “Bookshelf Noteview”:http://itunes.apple.com/us/app/bookshelf-noteview/id333263742?mt=8 (iTunes link). It’s for reading notes and highlights synced from our e-book platform.

I’m not ready to announce the next app yet, but it’s a personal project which I had originally written for the Mac over a year ago. I shelved it at the time because I wasn’t sure there was demand, the backend web services weren’t mature, and I wasn’t ready to take it to completion. For the iPad though, it might be perfect.

And that’s ultimately where I see the most interesting potential for the iPad. New middle-ground apps that we haven’t even thought of yet, not ports from another platform. Apps that would feel small or distracting or wrong on the Mac, yet equally oversized for a relatively underpowered iPhone. Maybe the never-tested-on-a-real-device launch day apps will be buggy and the overall quality low, but I can’t wait to try them anyway.

5 by 5

telluride.png

I first met Dan Benjamin in 2005, at an off-site meeting for VitalSource in Telluride, Colorado. I don’t remember much of what we talked about over the course of those few days, but what I do remember, as the team was riding in the back of a jeep heading up the mountains, is that he kept talking about radio and podcasting.

In the five years since then he’s started a couple successful podcasts, and now he’s launched something bigger: a podcast network called 5 by 5 with a strong lineup of new shows.

“I started planning. I didn’t want to do it part time or half way — I wanted to do this for real, meaning full-time. I wanted to create an Internet-based broadcast network, a place where I could create and host shows for myself and with my friends.”

I love seeing someone’s passion, only loosely related to how they earn a living, go from something in the back of their head to a full core business. Good luck, Dan. It’s off to a great start.

Software product myth

“Rob Walling has a good post”:http://www.softwarebyrob.com/2009/01/07/expenses-you-dont-think-of-when-starting-a-business/ about all the expenses it’s easy to overlook when starting a software business. The most insightful line is this:

“The point of The Software Product Myth is that at some point you are going to have too few sales to support yourself monetarily, yet too much work to fit comfortably into your evenings and weekends.”

This rings true for me. Wii Transfer is too successful to abandon, but not successful enough that I can retire to a beach house. Luckily I love the “people I work with”:http://www.vitalsource.com/, but I’ll admit that running Riverfold on the side is making me a little bit nuts.

I guess the “good news” is that I’m pretty used to too much work and too little sleep.

Kindle

All we do at “VitalSource”:http://www.vitalsource.com/ is e-books, from working with publishers on converting their content to our format, to managing the delivery of digital files and building the web-based infrastructure to support it, and finally to designing and coding the Mac and Windows applications for reading and annotating books. My “Kindle”:http://www.amazon.com/Kindle-Amazons-Wireless-Reading-Device/dp/B000FI73MA arrived on Tuesday, the day after it was released, and here are my initial thoughts after using it over the Thanksgiving weekend.

Out-of-box experience. Amazon really nailed the first-use experience. The Kindle came in a nice box and was pre-configured with my Amazon account. No syncing or setup necessary; you can start reading books immediately.

Screen. If you haven’t seen an e-ink device — actually held one in your hands, like the Sony Reader — don’t bother “reviewing” it. The iPhone screen is beautiful and I would love to have a small Mac tablet, something even a little bigger than the Kindle, but for reading books, nothing beats e-ink. It’s in a whole different class, and this is one of the areas where the Kindle shines. (It says a lot that the first FAQ item in the Kindle manual is about how the screen “flicker” when flipping pages is normal, though. It’s a little distracting but not a show-stopper.)

Connectivity. Amazon has been innovating with free shipping for years, so in a way it’s perfectly consistent to also offer free wireless connectivity. As a long-time Apple fan, I’m a little disappointed that Amazon is the one innovating with service plans, while Apple is stuck in the past with service contracts and high monthly fees with silly text message caps. I pay about $80/month for the privilege of using my iPhone; with the Kindle, I pay only for purchased content.

Purchasing. You can buy books from Amazon on your computer or from the Kindle itself, and I’ve tried both. My first purchase was using Safari on my Mac, and less than a minute later the book “magically” appeared on my Kindle. Again, no cables or sync necessary; the Kindle notices a book purchase and downloads it wirelessly.

Hardware. It couldn’t all be good news, could it? The button design is where the Kindle just falls on its face, and it’s bad news for both major areas of the device: the keyboard and the page navigation buttons. I just don’t see how they justified taking up so much room for the keyboard, because in truth you almost never need to use it. For the page buttons, try handing someone a Kindle for the first time and the first thing they do is accidentally hit next or previous page. It takes a while to train yourself on the best way to hold the Kindle.

There are other things I could say — about DRM (unavoidable) or emailing documents to the device (clever) or the book cover (clunky) — but I want to keep this short. Despite it’s flaws, the Kindle is a good device, and it goes beyond being the first usable e-book reader to offer seamless purchasing and book delivery from Amazon’s large selection. It’s not as polished a 1.0 as the iPhone release was, but it’s a solid offering and more innovative in some ways. I’m looking forward to both reading books on it as a user and experimenting with ways to get other content on the device as a developer.

Bookshelf note sharing

I’ve blogged a lot about my side project “Riverfold”:http://www.riverfold.com/ lately, but it’s time to show my “real” job some love as well. Internally at “VitalSource”:http://www.vitalsource.com/ 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”:http://www.manton.org/images/2007/bookshelf_subscribed.png and “Sharing”:http://www.manton.org/images/2007/bookshelf_sharing.png.

The architecture is based on the “Simple Sharing Extensions”:http://msdn.microsoft.com/xml/rss/sse/ (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 Del.icio.us, 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”:http://gettingreal.37signals.com/ch10_Less_Software.php, 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.

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”:http://www.jeroenwijering.com/ 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”:http://culturedcode.com/cocoa/.

“Check out this screencast”:http://www.riverfold.com/software/wiitransfer/screencasts/sharing.mov 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”:http://www.vitalsource.com/ 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.)

Ingram

I don’t blog much about “VitalSource”:http://www.vitalsource.com/ in this space, but I should. When I joined the company, it was to return to designing and building Mac software, with the potential for working on something meaningful (education tools) as a refreshing bonus.

Over 5 years later, we have built up a great team and a mature set of products. Yesterday VitalSource announced it is being “acquired by Ingram Digital Ventures”:http://www.vitalsource.com/index/news-app/story.35, which should be a good complement to the work we are doing. Ingram is the largest book wholesaler in the country, but I don’t think that fact really hit me until three days ago.

We were downtown with some time to kill before a performance. We stopped at the Farmers Market for some fresh peaches, flowers, and breakfast tacos. When we detoured to see if the library was open, I noticed these boxes outside and snapped a mobile phone picture.

Ingram boxes