Baking Blogs With MarsEdit

April 4th, 2011

Brent Simmons has lately been singing the praises of baked, or statically published blogs. He encourages folks to switch from blogging systems that rely on dynamic scripting languages and database storage, in favor of systems that essentially just load plain HTML pages when a blog is visited.

Marco Arment was inspired by Brent’s plea, and according to comments on his Build and Analyze podcast, is strongly considering or is in fact starting development of a new baked blog system. This is especially significant considering that Marco is largely responsible for the development of the Tumblr blogging system, which would appear to be about as far as you can get from a baked blog type of system.

Brent focuses mostly on the performance aspect: dynamic scripting languages and databases are notoriously bad at fielding huge numbers of requests at once. They have to do too much “real work” in order to load a page, so if a blog suddenly gets very popular, all the work becomes too much and the site can simply buckle under the load.

Marco clearly respects the performance benefits of baked blogs, but seems to be even more interested in the control and data independence that are afforded by a simple, text-file-based blogging system. He noted in Build and Analyze that a major motivator for writing the Tumblr backup tool is he doesn’t like the idea of all his valuable writing being stored exclusively in a system that is out of his control.

To Bake or Not to Bake?

The arguments that Brent, Marco and others are making may have caused you to consider “going static.” But many of you are also deeply committed to using MarsEdit for writing and publishing. I’ll try to enumerate many of the solutions that are available to you, while explaining how MarsEdit would fit into that system’s workflow.

Option: Do Nothing

For completeness, let’s acknowledge that you may not need to do anything. If you’re satisfied with a hosted blogging system such as Blogger, WordPress.com, Tumblr, or Squarespace, then you should probably stick with what’s working. All of these services take away the headaches of managing your own blogging software, and due to their enormous scale, are unlikely to suffer performance problems even if you’re linked to by fifty Daring Fireballs at once.

Option: Add Caching

All of the performance benefits of static publishing can be achieved by using software that is smart enough to cache the dynamic content of a blog in temporary, static HTML files. As Marco mentioned, this can be done at a system-wide level with tools such as Varnish, or at a blog-level with plugins such as WP-SuperCache for WordPress. I personally use WordPress and WP-SuperCache to power Red Sweater Blog. Some blog systems, such as Movable Type, use a dynamic database for storing blog content, but regularly produce a statically published version of the site, essentially “caching” the content in a similar manner as this.

Option: Server-Side Baking

Essentially a variation of the caching mechanism described above, except that in completely static systems, the “baked” version of the blog is the canonical, reference version of the content of the blog. There is no database from which it’s derived. It’s the data. If you want to back up your blog, you simply copy the files.

Any server-side-baking blog system must offer some means for submitting posts to the system, where they are stored in their permanent, static format. Some systems may require you to FTP new post files up into the system, or to submit new post content via a web form, before it is baked into the blog. By implementing support for a standard API such as MetaWeblog, these systems can be made to interpret requests from apps like MarsEdit and store the content appropriately in the server-side static blog. Tom Insam recently explored this approach with the Jekyll blogging system, sharing a MetaWeblog implementation he wrote specifically to get it working with MarsEdit.

Option: Client-Side Baking

Of the many “blog systems” that MarsEdit supports, an increasingly terribly named one is Blosxom which was one of the earliest blogging systems, and unsurprisingly, also one of the simplest. Because Blosxom blogs are statically published with a simple one-file-per-post format, MarsEdit uses a local directory on your Mac to “publish” posts, and provides for a custom script to be run after any edits are made. In other words, the “Blosxom” system in MarsEdit could probably just as well be called “Static Publishing” because it writes a post to disk and then lets your script go wild with it afterwards. What you choose to do: rsync it, ftp it, copy it to S3, etc., is all more-or-less limited only by your imagination.

Keep in Touch

My mission as the developer of MarsEdit is to keep it useful for as many people as possible, without destroying the nature of the app itself. This means that I don’t jump through hoops to satisfy every whim of every user, but I do take feedback seriously and try to keep MarsEdit “with the times.” If you’re trying to use MarsEdit with a particular static publishing workflow, and it’s not working for you, let me know where it’s falling short. Maybe it’s something that would be relatively easy to tweak. Sure, this kind of support is mainly for geeks, but I happen to like geeks a lot!

MarsEdit 3.2

March 23rd, 2011

I’m currently in England at NSConference, which might seem like a funny time to be releasing software. But Apple have just approved MarsEdit 3.2 for the App Store, which makes it a perfect time to let this release fly for all to update and enjoy.

What’s new?

  • New Word Count feature displays in post status bar
  • Now reads previously used Tags from WordPress on refresh
  • Now more resilient to malformed XML and “bad characters” in downloaded posts
  • Performance improvements in media browser and autosave features
  • Now code signed to prevent need for re-authorizing keychain access every release
  • Bug fixes
    • More fixes to prevent Convert Line Breaks affecting preformatted text
    • Fix a bug that lost formatting information for image attachments saved to local drafts
    • Fixes to improve reliability “Paste HTML Source” in rich editor
    • Offer better error message when PHP out-of-memory message returned
    • Fix a crash when loading Flickr panel with thousands of Flickr images
    • Work around issues when running MarsEdit on a pre-release Mac OS X
    • Fix some bugs that caused the app to crash when errors occurred uploading attachments

Enjoy!

Fix Tumblr

March 19th, 2011

For several months now, Tumblr has apparently been a victim of its own success. What used to be known as a super-popular, well-designed, streamlined blogging service with lots of internet-famous blogs hosted on it, is increasingly known as all that and also as a flakey, unreliable service. Folks who host their blogs on Tumblr are up-in-arms about the frustrating error-proneness and downtime of the service.

My primary product, MarsEdit, is a desktop blogging client that interfaces with Tumblr, among dozens of other types of blogs. The reduced reliability of Tumblr, and in particular of its API, has meant a deeply compromised experience for our customers in common. This means that I also suffer some pain in the midst of Tumblr’s flakiness, because I have to support an unreliable service and explain to customers that MarsEdit is affected by Tumblr downtimes as well.

Some of Tumblr’s greatest assets are the deeply respected bloggers who trust Tumblr to host their writing. They serve as implicit spokespeople for the service each time they publish an entry, and more explicitly so when participating in Tumblr’s own social network, raving about the site on Twitter, at conferences, etc.

As flakiness continues, the tone of endorsements is turning negative. I regularly see sarcastic snipes against the service in my Twitter feed, and even on blogs that are hosted by Tumblr itself. Garrett Murray’s frustration peaked yesterday when he posted a sarcastic revision to Tumblr’s increasingly famous “downtime” graphic. Steven Frank of Panic fame chimed in today on Twitter:

It occurs to me that Tumblr is also growing exponentially with no apparent income source. I should look for a new home, pre-dickbar.

Tumblr has a problem. Since late 2010 and for all of 2011 they have been suffering enough downtime and flakiness that a growing chorus of users is lambasting the service. Without judging whether that’s fair or justified, let’s accept that what used to be a widely lauded service is becoming a widely criticized one.

But how big of a problem is it if, as Steven Frank suggested in his tweet, the service continues to grow its membership by leaps and bounds? My theory is Tumblr’s continued success in signing up new customers is both thanks to and at the expense of their influential early adopters. Folks who helped to build Tumblr’s reputation over the past several years are now suffering, presumably because of Tumblr’s ravenous ingestion of new users. If this keeps up, the influential “power-bloggers” will quit Tumblr and move on to more reliable services. Tumblr will be left with millions of users, who I’m sure are perfectly nice people, but who don’t exert as great an influence in the web world.

What should Tumblr do? If the failure to rein in performance and uptime issues is connected to success in signing up new customers, then they should stop signing up new customers. Sound foolish? In Tumblr’s position I would do whatever it takes to bring back the level of service that users enjoyed before the “great downtime of 2010.” Happy, influential customers paved the way for Tumblr’s success, and bringing back that enthusiasm is the best way to perpetuate success far into the future.

If Tumblr turned off new user registrations today and added a “notify me when more new users are being accepted” sign-up form, it would provide breathing room to focus on fixing the experience for current customers. Framed correctly, it would also make those customers feel cared for and important, something they probably aren’t feeling so much at the moment. Yes, for prospective customers it would be a slap in the face. Nobody wants to feel shut out. But if given a choice, protect your existing, not future customers. Web services build buzz all the time with limited, invitation-only beta testing intros. It would be a step backwards for Tumblr, but it would also re-establish a sense of exclusivity that would pay dividends after issues are resolved and open enrollment returns.

It’s easy to armchair-quarterback another business when you don’t know any of the details. I’m sure the challenges at Tumblr are diverse and hard to pin down to my convenient diagnosis of “too many users.” But if you’re bailing out a sinking boat, the first thing to do is stop admitting new passengers.

I hope Tumblr figures out a way to solve this for the long run. My customers depend on it. Their customers depend on it. And the longevity of the company itself depends on it.

You Can’t Please Everyone

March 18th, 2011

Some of my Twitter friends are buzzing about Alex Payne’s arguments on what constitutes a respectable entrepreneurial pursuit. In case you want to catch up on the pre-reading, it starts with a post by Justin Vincent, basically promoting the idea that indie “mom-n-pop” businesses are a reasonable alternative to massive, venture-funded pursuits. Payne responded with a snarky comment, provoking a heartfelt defense from Amy Hoy. Finally, Payne posted a retraction and clarification, the nut of which was set in bold for emphasis by Payne himself:

We should endeavor to improve the lives of as many people as possible in a lasting and significant way, making the most of our own skills in the process.

Should we aim to affect as many people as possible? My heroes have tended to please themselves first, and to please everybody else by accident. When Steve Wozniak set out to invent the Apple personal computer, he did it for himself, and perhaps to show off for a few nerdy friends at the computer club. Noam Chomsky wrote generally about languages and grammars, and was allegedly annoyed when his research happened to lay the groundwork for major fields of computer science. I doubt many of history’s great advancements happened according to the plan of the geniuses who were responsible for them.

As a self-employed business owner, I want to improve the lives of my customers. And, yes, I would like to have a lot of customers. But Payne’s measure of success is too lofty. Rather than aim incompetently and uncertainly for a massive impact, I focus on a small area that I understand and that I care deeply about. I please a small subset of all people, but I please them greatly. Focusing on what I know and appreciate is the balance that keeps me self-funded, intellectually stimulated, and productive. Who knows, maybe I’ll turn out to be an accidental genius, as well.

Ambition to influence or change the world is, on its own, relatively useless. Pursuit of truth and understanding, on one’s own terms, is the noblest of endeavors. If you’ve found something you can work on all day for weeks, months, or years, don’t let anybody tell you it’s not worth doing.