<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 
  xmlns:dc="http://purl.org/dc/elements/1.1/">
  
<channel>
<title>Manton Reece</title>
<link>http://www.manton.org/</link>
<description>User experience, Mac programming, feature animation, and other personal views.</description>
<dc:language>en-us</dc:language>
<dc:creator>manton@manton.org</dc:creator>
<dc:date>2011-12-08T14:38:52-06:00</dc:date>

<item>
<title>Tweet Marker wins a Macworld Eddy</title>
<link>http://www.manton.org/2011/12/tweet_marker.html</link>
<description><![CDATA[<p>A few times since it launched, I've said to friends that Tweet Marker may be the best thing I've done. It has reached more users than any of my indie Mac and iOS apps, and it has been especially rewarding to work with other Twitter developers. It's not perfect yet &mdash; there's more to improve in future versions of the <span class="caps">API </span>and clients &mdash; but I smile every time I see a tweet about how someone can't imagine going back to a Twitter client without it.</p>

<p>So it was really gratifying to see <a href="http://www.macworld.com/article/163951/2011/12/the_27th_annual_editors_choice_awards.html">Macworld recognize Tweet Marker with an Editors' Choice Award</a> for 2011. Thank you Macworld for seeing Tweet Marker as an important part of the Twitter experience.</p>

<p>And thanks to <a href="http://twitter.com/#!/manton/status/143729811406331905">all the Twitter app developers</a> who have supported Tweet Marker in their apps. We are up to 9 supporting apps across 5 platforms &mdash; Mac, iPhone, iPad, Chrome, and Android &mdash; with more on the way. I've opened up the <span class="caps">API </span>to over 40 different clients in various stages of research or testing.</p>

<p>Tweet Marker is a little unique among most of the other Eddy winners this year in that it's still completely free. I won't see a sales spike following the announcement. If you've been enjoying the service, consider picking up a copy of my iPad app Tweet Library, or donating directly <a href="http://tweetmarker.net/">on the site</a>.</p>]]></description>
<guid isPermaLink="false">591@http://www.manton.org/</guid>
<dc:subject>Technology</dc:subject>
<dc:date>2011-12-08T14:38:52-06:00</dc:date>

</item>
<item>
<title>Redis-only migration</title>
<link>http://www.manton.org/2011/10/redisonly_migration.html</link>
<description><![CDATA[<p>The best critique and praise for Heroku is that it's opinionated: only deploy with Git, only use PostgreSQL. On the whole this is a good thing, because it simplifies the choices that developers have to make. Fewer choices means more time to spend on things that matter.</p>

<p>But at $200/month for a dedicated database, there's a very real cost with PostgreSQL on Heroku. For a service like <a href="http://tweetmarker.net/">Tweet Marker</a> that is currently free, I wanted to save money on hosting and simplify things down to a single database. I might have preferred to streamline to PostgreSQL-only, since it's rock solid and Heroku's tools are excellent for managing backups and moving data around, but Resque (which Tweet Marker uses to process background work) is built on Redis. If I wanted to streamline to a single database, it had to be to Redis.</p>

<p>Tweet Marker as essentially an OAuth-wrapped key/value store anyway, so why burden the app with a full relational database? The handful of extra tables I had for tracking users and sessions could also be migrated to Redis. And even though it's a memory database at heart, it is persistent, so I can use it for real data.</p>

<p>I conducted the transition in stages:</p>


<ul>
<li>First, I was using Redis for stats. Because Redis has an atomic increment command, it's trivial to use it to keep counters on various metrics: total number of reads/writes per hour, day, or month, broken down by different Twitter clients. This was my first use of Redis outside Resque tasks and it performed great.</li>
<li>Next, I moved the marker data. I wrote a script to dump all the data from PostgreSQL to Redis, and at the same time modified Tweet Marker to write data to both locations when requests came in. I let that run for about 2 days to confirm that the data was identical in both places before shutting PostgreSQL down and routing reads to Redis only.</li>
<li>Finally, I finished moving some additional tables to Redis so that I could completely shutdown PostgreSQL. Again, simple is better.</li>
</ul>



<p>All of this was using Heroku's <a href="https://redistogo.com/">Redis To Go</a> add-on. I love it because there's no configuration; click a couple buttons and you have a server. But as soon as I was running full time on Redis To Go, I started to be concerned that I had given up a great amount of control over my data. While Redis To Go conveniently offers daily backup snapshots, it doesn't appear to have any commands for restoring data or otherwise getting access to the server and Redis files. And though I could probably set up a separate Redis To Go instance and manually send it a slaveof command to turn it into a slave, not being able to edit the config file meant that if the server was rebooted I would lose the slave until it could be reset. Not good.</p>

<p>I also expected I would quickly outgrow the smaller Redis To Go plans, eventually forcing the monthly pricing up to the same level as I was paying for PostgreSQL, but with less control. I had to run my own database server instead. And because Heroku is all on Amazon <span class="caps">EC2, </span>it also had to be on <span class="caps">EC2 </span>for the best performance between web server and database.</p>

<p>I went to work provisioning an <span class="caps">EC2 </span>instance. Initially it ran as a Redis slave to the master on Redis To Go. After I felt comfortable with <span class="caps">EC2 </span>and had automated backups in place, I added a separate instance on Amazon for the master and switched the app over to it. The cost for 2 "micro" instances is about the same as I was paying for Redis To Go, but with much more available memory, hourly backups to <span class="caps">S3, </span>and access to the Redis aof log. And my total monthly hosting costs are about half what they were before.</p>

<p>I'm hoping to keep this setup for at least the rest of the year and well into next. As the Tweet Marker user base grows, I'll bump up to higher-capacity <span class="caps">EC2 </span>instances. Heroku continues to be really great, so I don't expect to change anything there.</p>]]></description>
<guid isPermaLink="false">590@http://www.manton.org/</guid>
<dc:subject>Programming</dc:subject>
<dc:date>2011-10-25T15:20:10-06:00</dc:date>

</item>
<item>
<title>SXSW 2012 and Twitter API innovation</title>
<link>http://www.manton.org/2011/09/sxsw_2012_and_twitter.html</link>
<description><![CDATA[<p>The short version of this post is: <a href="http://panelpicker.sxsw.com/ideas/view/11867">please vote for my <span class="caps">SXSW </span>talk</a>, which I've proposed with David Barnard of App Cubby. If selected, we'll be talking about how to innovate on top of Twitter, using examples from the history of Twitter apps in the App Store including Tweet Marker, Tweet Library, and David's upcoming app Tweet Speaker. Equal parts business and <span class="caps">API</span>s, I hope it'll capture how much we can still do if we think beyond the Twitter basics.</p>

<p>The longer story is that <span class="caps">SXSW </span>is always changing. I started this blog on the first day of <span class="caps">SXSW</span> 2002, when the conference was just a few rooms in a single hallway, and I've seen it grow to more than a few <em>venues</em> spread across downtown Austin and even farther out. That's okay. There's a place for small events, as <span class="caps">SXSW </span>once was, and there's a place for <em>the</em> event where the blogging, design, social network, and software folks can meet in one place.</p>

<p>Take the Mac and iOS development world. This year alone has <span class="caps">NSC</span>onference, Voices That Matter, 360|iDev, 360|MacDev, CocoaConf, MacTech, &Ccedil;ingleton, and SecondConf. These attract developers from all over the country, but most people can attend one at most, and many events are regional conferences at heart.</p>

<p>We need <span class="caps">WWDC </span>as the single place. No matter how great the smaller conferences are, <span class="caps">WWDC </span>is the big one, the one you don't miss. And so it is with <span class="caps">SXSW.</span></p>

<p>I believe <span class="caps">SXSW</span> 2012 is going to be fascinating to watch. A couple years past when everyone already thought it was too big, 2012 could see real turnover. Some previous attendees will skip it, and many new people will speak for the first time. I want to see that conference, to find out what its themes and focus will be, and hopefully <a href="http://panelpicker.sxsw.com/ideas/view/11867">our talk</a> can be part of it.</p>]]></description>
<guid isPermaLink="false">589@http://www.manton.org/</guid>
<dc:subject>Events</dc:subject>
<dc:date>2011-09-01T10:06:43-06:00</dc:date>

</item>
<item>
<title>Tweetbot + Twitterrific</title>
<link>http://www.manton.org/2011/08/tweetbot_twitterrific.html</link>
<description><![CDATA[<p>The second app to support <a href="http://tweetmarker.net/">Tweet Marker</a> has arrived, and it's a great one: <a href="http://tapbots.com/software/tweetbot/">Tweetbot</a>. 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.</p>

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

<p><strong>Turn it on!</strong> 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 <a href="http://www.macstories.net/mac/twitterrific-4-3-syncs-timeline-position-with-tweet-marker/">their coverage of Twitterrific</a> and <a href="http://www.macstories.net/news/tweetbot-1-6-gets-tweet-marker-timeline-sync/">again for Tweetbot</a>.</p>

<p><strong>What syncs?</strong> 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.</p>

<p><strong>How to switch apps?</strong> 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.</p>]]></description>
<guid isPermaLink="false">588@http://www.manton.org/</guid>
<dc:subject>Technology</dc:subject>
<dc:date>2011-08-28T10:41:54-06:00</dc:date>

</item>
<item>
<title>Hosting for Tweet Marker</title>
<link>http://www.manton.org/2011/08/hosting_for.html</link>
<description><![CDATA[<p>Today was day 7 of the <a href="http://twitterrific.com/">first app</a> 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.</p>

<p>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 <span class="caps">API, </span>is done in the background using Resque, and the queue size there is usually small too.</p>

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

<p>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.</p>

<p>More recently, I've noticed some sporadic <span class="caps">SSL </span>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.</p>

<p>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 <span class="caps">VPS.</span> 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.</p>

<p>Again, thanks for your support. It is a little nerve-racking because I know that <a href="http://www.iconfactory.com/">other people</a> are depending on Tweet Marker being up and performing well. This is a different experience for me than working at a <a href="http://www.vitalsource.com/">larger company</a> 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.</p>]]></description>
<guid isPermaLink="false">587@http://www.manton.org/</guid>
<dc:subject>Programming</dc:subject>
<dc:date>2011-08-15T22:06:05-06:00</dc:date>

</item>
<item>
<title>Wii Transfer 2.7.2</title>
<link>http://www.manton.org/2011/08/wii_transfer_272.html</link>
<description><![CDATA[<p>And now for something completely different. I released a bug fix update to <a href="http://www.riverfold.com/software/wiitransfer/">Wii Transfer</a> 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.</p>

<p>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 <span class="caps">JPEG.</span> The fix &mdash; for reasons I'm still not clear on &mdash; was to switch to using <span class="caps">NSB</span>itmapImageRep'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.</p>

<p>I've been thinking a lot lately about the future of Wii Transfer and its companion <a href="http://twitter.com/wii">@wii</a> Twitter account. This little Mac app is overdue for a rename and refocused feature set.</p>]]></description>
<guid isPermaLink="false">586@http://www.manton.org/</guid>
<dc:subject>Programming</dc:subject>
<dc:date>2011-08-14T17:29:50-06:00</dc:date>

</item>
<item>
<title>Tweet Marker bootstrap</title>
<link>http://www.manton.org/2011/08/tweet_marker_bootstrap.html</link>
<description><![CDATA[<p>Tweet Marker is getting big. I couldn't be more excited that <a href="http://twitterrific.com/">Twitterrific 4.3 is now shipping</a> with syncing across Mac, iPad, and iPhone. <a href="http://tweetlibrary.com/manton/twitterrific4.3">Users love it</a> and many are rediscovering Twitterrific or becoming new customers just because of this feature.</p>

<p>More apps are coming, too. Craig Hockenberry, from a <a href="http://www.macworld.com/article/161655/2011/08/tweet_marker_shows_twitter_client_developers_still_innovating.html">Macworld article by Dan Moren</a>:</p>

<blockquote>"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."</blockquote>

<p>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 <span class="caps">API </span>free. To cover hosting costs, I plan to later make an optional paid subscription available for developers who want more than the basics.</p>

<p>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 <a href="http://tweetmarker.net/">on the Tweet Marker site</a>. Think of it as a small investment in the service, a bootstrap to get things off the ground and remove the stress of scaling.</p>

<p>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!</p>]]></description>
<guid isPermaLink="false">585@http://www.manton.org/</guid>
<dc:subject>Business</dc:subject>
<dc:date>2011-08-13T13:23:03-06:00</dc:date>

</item>
<item>
<title>Twitter app chance</title>
<link>http://www.manton.org/2011/07/twitter_app.html</link>
<description><![CDATA[<p>Five years ago today, I joined Twitter as its 897th user, though for some reason <a href="http://twitter.com/manton/statuses/1457463">my first tweet</a> wasn't until a few months later. So much has changed in the meantime &mdash; the <span class="caps">API </span>always in flux, the transition from primarily <span class="caps">SMS, </span>to web, to apps &mdash; but in many ways the core of the service remains intact and stronger than ever. Short messages, distributed efficiently to friends.</p>

<p>I talked about some of the good and bad of being a Twitter developer <a href="http://atxwebshow.com/2011/07/05/episode-34-tweet-library-with-manton/">on the <span class="caps">ATX</span> Web Show last week</a>. There have been a string of changes that cause developers to scramble: turning off basic auth, discouraging mainstream clients, disabling DMs for xAuth. With each step, Twitter loses a little goodwill, and that's demonstrated in the tweets I <a href="http://tweetlibrary.com/manton/xauthtooauth">collected over the xAuth change</a>.</p>

<p>Even as Twitter passes 1 million registered apps, there's a risk that some developers will stick with the platform as users only, putting their apps in maintenance mode. In May, <a href="http://yourhead.tumblr.com/post/5550105265/i-love-you-kiwi-i-know">Kiwi developer Isaiah stopped development</a> of his Mac Twitter app:</p>

<blockquote>"I'm just going to take a break from Kiwi for a while. It's still for sale. I still support it. I'll still fix bugs when they crop up. But adding new features and playing catch up with the other guys/gals is off the table."</blockquote>

<p>Maybe because I don't have to depend on Tweet Library sales, I tend to more stubbornly ignore what is good business sense. There's so much I still want to do. As <a href="http://www.manton.org/2011/03/twitters.html">I wrote in my previous take</a> on the state of the platform: "I'm a little discouraged, but not enough to stop."</p>

<p>I think that's doubly true today. More annoyed, but also more determined to plug holes in the platform, from archiving to syncing. I couldn't be more excited about the developers who are building in <a href="http://tweetmarker.net/">Tweet Marker</a> support.</p>

<p>And there's always a chance, a feeling that something big is just around the corner. That if I don't add that one feature, or open up that new <span class="caps">API,</span> I'll miss the tipping point that makes Tweet Library really take off.</p>]]></description>
<guid isPermaLink="false">584@http://www.manton.org/</guid>
<dc:subject>Technology</dc:subject>
<dc:date>2011-07-14T11:45:46-06:00</dc:date>

</item>
<item>
<title>iPad Pro is the new iPod Photo</title>
<link>http://www.manton.org/2011/07/ipad_pro_is_the.html</link>
<description><![CDATA[<p>I'm fascinated with the iPad "3" rumors because on the surface they make so little sense. Apple just shipped the iPad 2, no competitors can match it, and demand is strong. Why mess with a good thing so soon?</p>

<p>But it almost fits when <a href="http://daringfireball.net/linked/2011/07/11/ipad-pro">you give it a name like "Pro"</a> (or iPad Retina, or whatever). This isn't a replacement for the current iPad; it's another layer to the product lineup. And like the awkwardly-named iPod Photo from 2004, I bet the iPad Pro is meant to be temporary. It's a way to sell a high-end, over-priced and over-pixeled iPad before the technology is cheap enough for the masses. A year or two from now, the Retina Display will be available in all iPads, and the "Pro" name will fade away, just like iPod Photo did when all iPods got a color screen.</p>]]></description>
<guid isPermaLink="false">583@http://www.manton.org/</guid>
<dc:subject>Technology</dc:subject>
<dc:date>2011-07-12T18:00:42-06:00</dc:date>

</item>
<item>
<title>Push-based sync</title>
<link>http://www.manton.org/2011/07/pushbased_sync.html</link>
<description><![CDATA[<p><a href="http://kickingbear.com/blog/archives/202">Guy English writes about iCloud</a> and the magic glue (Push Notifications' persistent connection) that makes it work:</p>

<blockquote>"Each of these new features tickle the persistent 'push' connection and trigger some action on the device. The short-form state may be transmitted immediately and set on any connected device within moments. Document syncing is likely to trigger a negotiation process to compare the state on any one device with The Truth stored on Apple servers and replace the document on the device with the latest revision &mdash; this has the advantage of limiting the window between syncing where conflicts are most likely to occur."</blockquote>

<p>Sync speed matters. The first note sharing server I built for VitalSource years ago assumed a lot of offline time, and despite <a href="http://www.manton.org/2007/01/bookshelf_note_sharing.html">my blogging in 2007 that it was</a> "magic", in practice it could take 5-10 minutes before all your computers got their act together to get a set of highlights completely synced. With that kind of lag, note edits might happen on a client in the meantime, so we remembered conflicts everywhere and had a UI for resolving them.</p>

<p>Too complicated. The new system, recently rolled out in Bookshelf for iPhone and iPad, syncs so much more efficiently and quickly that conflicts don't need the same emphasis. We can throw away a bunch of code and simplify the user interface.</p>

<p>I've yet to do anything with iCloud except read the release notes and sit through a couple <span class="caps">WWDC </span>sessions, but we're going to have a fantastic platform if it can deliver the same speed and reliability of Push Notifications. Guy's post is the first I've seen to connect the dots, capturing how well-positioned Apple is to use this plumbing for all sorts of stuff.</p>]]></description>
<guid isPermaLink="false">582@http://www.manton.org/</guid>
<dc:subject>Programming</dc:subject>
<dc:date>2011-07-01T11:13:37-06:00</dc:date>

</item>


</channel>
</rss>
