Monthly Archives: August 2011

Tweetbot + Twitterrific

The second app to support “Tweet Marker”: has arrived, and it’s a great one: “Tweetbot”: I love using Tweetbot on the iPhone and Twitterrific on the Mac and iPad. Seeing these apps work together just makes for a better Twitter experience.

Here are a few tips to keep in mind while using apps that support Tweet Marker:

Turn it on! First things first: enable Tweet Marker in both apps on every device you plan to use Twitter on. MacStories has a good summary of this (with screenshots) for “their coverage of Twitterrific”: and “again for Tweetbot”:

What syncs? Only the main timeline and mentions sync between the apps. While working with these developers, we made a decision to change how Twitter lists sync after Twitterrific had already shipped. So while both apps think they are syncing lists, the format on the server is not compatible between the two. A future version should fix this.

How to switch apps? Most apps take the approach of saving the last-read position when the app is quit or sent to the background, and restoring it again when it is launched or brought to the front. You may need to change your default habits a little to get the most accurate behavior. When you know you are going to switch apps, just close your active Twitter client first before opening the next one. It may also help to wait for the app to download new tweets before scrolling or interacting with it.

Hosting for Tweet Marker

Today was day 7 of the “first app”: to ship with Tweet Marker support. Overall, things have been working great. I thought I’d write a little bit about my hosting experience so far.

First, the good news: the service is up and fast. Twitterrific is sending a lot of traffic, even with the preference off by default, but the server app is architected in such a way that things are zipping along nicely. Performance is especially important on the iPhone, where a Twitter client might be saving state on quit and any lag would be pretty obvious. Non-trivial server work, such as hitting the Twitter API, is done in the background using Resque, and the queue size there is usually small too.

There have been two distinct problems, though. Each was a good opportunity to improve the system.

On the first day, the background queue stalled and the requests piled up, so much so that my Redis instance ran out of memory and clients started receiving errors. I upgraded Redis, restarted the app, and bumped up the number of processes to quickly catch up on the backlog. Although it hasn’t resulted in errors since, it has delayed some requests on 2 more occasions after launch. I also adjusted how I’m collecting statistics to further improve performance.

More recently, I’ve noticed some sporadic SSL errors when Tweet Marker tries to verify the user account via Twitter. I added more wait-and-retry logic, and I’m keeping an eye on this to kick the background script if necessary. There have been no errors in the last couple days.

I still think it was the right decision to host on Heroku. Although I am manually monitoring the server for general health (need to automate this badly), everything is less work than I would do with a colocated box or VPS. The biggest cost is that at the last minute I upgraded to Heroku’s dedicated PostgreSQL database. I’m still evaluating that, but I would rather launch with too much horsepower and scale it down later, than not enough.

Again, thanks for your support. It is a little nerve-racking because I know that “other people”: are depending on Tweet Marker being up and performing well. This is a different experience for me than working at a “larger company”: with a dedicated system administrator, and also different than server backends for my Riverfold products, where it is only my own customers who will be disappointed if I fail.

Wii Transfer 2.7.2

And now for something completely different. I released a bug fix update to “Wii Transfer”: last night, the first in over a year. It doesn’t have some of the bigger things I’d like to finish for the app, but it does have an important bug fix to Mii rendering.

At some point in a recent update to Safari or Mac OS X, Miis started appearing blank in Wii Transfer. These are rendered in an offscreen window using Flash, then saved as thumbnails in Wii Transfer with the option to export a JPEG. The fix — for reasons I’m still not clear on — was to switch to using NSBitmapImageRep’s cacheDisplayInRect instead of initWithFocusedViewRect. Needless to say, customers were frustrated that this was no longer working, and I’m sorry I didn’t take care of the problem more quickly.

I’ve been thinking a lot lately about the future of Wii Transfer and its companion “@wii”: Twitter account. This little Mac app is overdue for a rename and refocused feature set.

Tweet Marker bootstrap

Tweet Marker is getting big. I couldn’t be more excited that “Twitterrific 4.3 is now shipping”: with syncing across Mac, iPad, and iPhone. “Users love it”: and many are rediscovering Twitterrific or becoming new customers just because of this feature.

More apps are coming, too. Craig Hockenberry, from a “Macworld article by Dan Moren”:

“The real value is having something that works well across the entire Twitter ecosystem. It’s our belief that Tweet Marker will become more useful as more clients support it.”

I struggled with how to build, price, and launch Tweet Marker. The first developers to use it are taking a risk, so I felt I had to remove the friction of supporting the service by making the API free. To cover hosting costs, I plan to later make an optional paid subscription available for developers who want more than the basics.

But we’re not there yet, and some people have asked how they can support Tweet Marker directly. As an experiment, I’ve put up a donation button over “on the Tweet Marker site”: Think of it as a small investment in the service, a bootstrap to get things off the ground and remove the stress of scaling.

It is not, however, a substitute for supporting client developers. Please pick up a copy of Twitterrific, and when my app Tweet Library is available with sync I hope you’ll consider that as well. Thanks!