Monthly Archives: May 2012


From a great story on Mark Zuckerberg in New York Magazine:

“‘Mark has done two things in his twenties,’ a colleague of Zuckerberg says. ‘He has built a global company, and he has grown up.’ The second one made the first possible. When early mistakes risked an employee mutiny, Zuckerberg knuckled down and learned how to lead.”

It covers founding the company, Sean Parker, other execs, the Instagram purchase, and more. I’ve got new respect for what Zuckerberg has accomplished after reading this.

Several years ago, when Yahoo or Microsoft or whomever was rumored to have offered a billion dollars to buy Facebook, I thought Zuckerberg was foolish and arrogant for not selling the company. I didn’t get how it could be a real business, ever worth more. Looks like I was wrong.

Of course, the narrative of the last week is that the IPO disappointed, with the stock steadily falling since its debut. But that’s only relevant if you want a quick win. The long-term view says that Facebook is here to stay, and that the company’s growth is a reason to celebrate. Not for the service or founders, but for the success of so many great developers and designers who are now part of the public company: Instagram, Gowalla, Push Pop Press, Sofa, and others who are working inside Facebook, trying to build something great.

Clipstart 1.4.2 (on MAS)

Just approved in the Mac App Store, Clipstart 1.4.2 fixes upload issues with YouTube and especially Vimeo, which was broken in previous releases because of Vimeo API changes. I expect this to be the final Mac App Store release for Clipstart. As I blogged about before, all Mac App Store customers can upgrade to the direct download version for free.

Here’s what you should do if you bought Clipstart from the Mac App Store:

  • Update to Clipstart 1.4.2 using the App Store app.

  • Run Clipstart at least once, then quit it. This allows it to copy the Mac App Store receipt so that it’s accessible to other versions of the app.

  • Download the latest version from the main Clipstart web site and replace the existing copy in your Applications folder with the direct download.

And if you’re thinking about buying Clipstart for the first time, please get it directly from the web site and checkout via PayPal. There’s also a demo with support for 2 uploads and tagging 20 videos.

I’m now turning my attention to version 1.5, which will improve a few things and add support for Gatekeeper on Mountain Lion.

Bootstrap CSS

I’ve been using Twitter’s Bootstrap in an internal project at VitalSource for a few months, and over the weekend I finally switched to using the CSS framework in Tweet Marker too. The layout now works in more browsers and provides a much better foundation for design changes. It also allowed me to integrate this excellent date picker.

Here’s a short screencast video showing the date picker in a new browsing feature in Tweet Marker Plus. I’m very happy with how this turned out — both the look and functionality. On the server the date ranges are implemented with a Sphinx query, so they can be combined with search terms to help find old tweets.

Hosting costs and config

A few things have changed since I last talked about hosting. Tweet Marker passed 200,000 total users to the API. There are more apps and more platforms. And of course Plus launched with new requirements for database and search indexing of tweets.

Here’s a graph showing monthly hosting costs for the last year, stopping just short of $600/month for April:

Tweet Marker hosting chart

The first dip was when I moved away from Heroku’s dedicated PostgreSQL database, to Redis on EC2. The more recent increase is when I updated capacity for Tweet Marker Plus.

Tweet Marker currently runs on both Heroku and Amazon EC2. On Heroku, there are 6 dynos: 5 web dynos with 3 Unicorn processes each, and 1 background worker. I also run hourly scheduled tasks that add a small number of extra dyno-hours, and sometimes I’ll fire up additional temporary workers.

For Amazon, I run with 3 medium server instances: 1 for Redis master, 1 for Redis slave, and 1 for search with MySQL and Sphinx. The search server is partitioned across multiple EBS volumes, each one mounted as a separate MySQL database and Sphinx index. It is possible for me to move a database or search index shard to a different EC2 instance if I need to, as well as move customers between shards.

The volumes look like this in Amazon’s admin UI:

Tweet Marker volumes

I picked 20 GB shards because it seemed like about the point where the database would be too big to be fast, given the modest hardware. It’s enough to hold several months of tweets for all the users in a shard. I estimate how many users should be in each shard, and when it reaches that number I roll new accounts to the next shard, and so on.

Backup dumps for the Redis database and MySQL get sent to S3 every hour and every day, where I keep the last 24 hourly backups and the last 31 daily backups. I also do occasional EBS snapshots.

I don’t currently need a MySQL slave for backups. If I lose a drive, when I restore the last hourly backup, Tweet Marker Plus will automatically add any missing tweets lost during the downtime to bring things back to a current state.

Overall I’m happy with this setup. It’s as simple as I could design it. Hosting is not cheap, but I think I can run for the rest of the year with very few changes and mostly fixed costs. I also plan to switch to reserved instance pricing at Amazon, which should be a significant discount.

If you’ve made it this far, you probably care enough about servers and Twitter that you should consider signing up for Tweet Marker Plus yourself. Check out the details here.

Saying goodbye to Wii Transfer

“Around here, however, we don’t look backwards for very long. We keep moving forward, opening up new doors and doing new things, because we’re curious… and curiosity keeps leading us down new paths.” — Walt Disney

There are many posts on this blog about Wii Transfer, the little Mac app that launched commercially almost by accident, and convinced me that it would be worthwhile to invest time in this side business called Riverfold Software. Early posts like the launch post in 2006 or this one about the first 75 days, and this one covering the price bump in version 2.5. But the app has been fading over the last couple of years, no longer as relevant today as it once was. It’s time to let it go.

I’m retiring Wii Transfer to focus on my other apps. It’s not that it doesn’t sell; it still does. It’s just that it’s not an app I actually use anymore. By officially shelving the whole project, I hope to remove a psychological burden of sorts — to no longer worry that I’m ignoring an active product.

It also doesn’t fit into a new theme I have for Riverfold: apps that are all about keeping and remembering what matters. For Clipstart, that’s family videos. For Tweet Library and Tweet Marker Plus, that’s old tweets. Wii Transfer is about… listening to music on your Wii? It doesn’t fit, and in the world of the Apple TV and Roku, modern streaming technology has passed the app by.

If anyone is disappointed that Wii Transfer will no longer receive updates, of course I offer refunds. I won’t be selling or open sourcing the app, preferring instead to continue to support existing customers myself for as long as they want to use the app. And I’ll keep the automatic bookmark service running that makes setup easy, as well as the Mii rendering service, so nothing breaks.

I put a lot of work into Wii Transfer over its 5-year lifespan. It’s not easy saying goodbye, especially to some of the unique things that only Wii Transfer could do, such as exporting Miis as images. Maybe I can bring that back one day. For now, I’m following the path started by my apps Tweet Library and Clipstart, for which there are many new things still to do.