Skip to main content



Posted in

It is with heavy heart that I noticed tonight the tweeting earlier in the day by the excellent Pinboard about the end of life of Pukka, my first commercial app.

R.I.P. Pukka. Sic transit gloria appi.

Translated roughly based on a Latin phrase it means "Thus passes the glory of the app" or "Apps are fleeting."

I removed both Pukka and my other app, Meerkat, from sale earlier this summer following a lot of thought and the realization that I just don't have it in me to work on them anymore. My initial intention back when I joined Development Seed to work on MapBox about a year and a half ago was to continue a conservative pace of development for both apps. It's not that I don't have plans and hopes and dreams for them. Far from it. My internal issue trackers show nearly 60 open tickets for Pukka and over 70 for Meerkat, both largely features and enhancement ideas. And I certainly have a soft spot for both apps; especially Pukka. Indulge me for a moment while I turn back the pages of time...


Back in 2004, I had been running Mac OS X for a couple years, largely using it as a development platform for my web and systems administration work. I had just started commuting nearly four hours a day, every other day, into Washington, DC for a new job, a wonderful hive of startup activity where it was mandated that everyone work on a Mac. This was a dream come true for me. It was about this time, eight years ago this month, that I blogged at the company about my switch to the Mac.

For someone who does a lot of technical work such as systems administration, programming, web development, and even the occasional computer audio and video work, it was a big change. But it was undoubtedly a step in the right direction. Just the fact that I can mark the exact day, two years later, should say something about its impact on my life.

It was also about this time that I began teaching myself Cocoa development, and indeed low-level programming as a whole, while riding the commuter train up to DC in the wee hours of the morning. I spent many an hour learning the ins and outs of Xcode 1.something, and I particularly remember some all-out brawls with NSTableView and friends.

Time went on and in early 2006, a couple of my coworkers had a need for a program that could post to (as it was spelled at the time, before Yahoo! started gutting it) with the ability to use multiple accounts. Thus Pukka was born, and I blogged the release shortly thereafter.

My first app is called Pukka and is a posting client. I wrote it after someone at work mentioned that there weren't any good multi-account clients. The more I thought about it, the more I realized that there are no speedy clients with low overhead that stay out of the way, either.

What followed was a whirlwind of events that, although relatively small in scale, changed the course of my life considerably.

The pace quickens

I went to South by Southwest Interactive that Spring for the first of what would be five years in a row, meeting Ted Rheingold of Dogster, among others, who loved my guerilla marketing tactics. I talked to a ton of people about the app who all seemed enthused about it and began beta testing for me.

My coworkers began using and recommending the app. I started charging for it and after my friend Rich Orris nearly immediately bought a copy, other orders started trickling in.

Shortly afterward, Brent Simmons of NetNewsWire fame, one of my Mac programmer heroes, emailed me out of the blue telling me that he was adding support for Pukka to his (incredibly popular) app.

I have a bit of interesting news I wanted to run by you... but I need it to be confidential. Agreed?

And later:

I hope you like this! (Pukka has hit the big time! ;)

I started to meet other folks in the Cocoa community, eventually attending the first C4, meeting a bunch of great folks like Daniel Jalkut and Colin Barrett who helped me realize that I could make a go of my own business.

A few weeks later, I quit my job and struck out on my own, in November of 2006, starting a business of selling Pukka and performing consulting and freelancing services. I started picking up great clients, including Matt Henderson of Makalu, whose firm I'd actually already admired from afar. Matt reached out in a random email due to my blogging of a local presentation I had done in DC and I began doing work for him. Within a year I too had moved to the Mediterranean coast of Spain to work out of their office on their projects, plus continuing my own, fulfilling a dream of living overseas. I launched Meerkat there that summer, late one evening before walking home along the sea to excitedly tell my wife Michelle that I'd finally made App Number Two. Sales of Meerkat began to take hold pretty quickly, too.

I moved back to the States, then to the West Coast, and the iPhone SDK hit. I already had four years of Cocoa programming experience at that point and hit the ground running with my freelancing services, working on apps used by millions of people worldwide with my friends at Small Society and with other clients.

Eventually, even Pukka got some wide exposure, as Leo Laporte featured it on his MacBreak Weekly show with thousands of listeners. And that same month, I started supporting Pinboard.

I gave money to charity and ran contests for customers based on my earnings from my apps, which was incredibly rewarding.

And eventually I found my way back to reconnecting with some friends in DC to end up leaving the job I thought I never would leave to work for a place doing stuff in a way that was cooler than I thought was possible.

The future

Through all of this, I kept at work on both apps, not at a fast pace, but at a decent, sustainable one. But you will recall that I am a self-taught programmer, and my Cocoa-fu in the early days was not good. The apps were sustainable, but there is enough cruft and need for refactoring (and in some cases, a need for just plain good programming practice) that in reviewing things recently, I reached three conclusions:

  1. Both apps need major refactors to lay a proper foundation for any reasonable development pace.
  2. Those needs are enough to discourage me from open sourcing or selling the apps, mostly out of embarrassment.
  3. All of this exists outside of the landscape of Mac software development that exists now (namely, the App Store).

Look, I understand that we all learn over time and get better. But through sheer force of will and the copious amounts of self-budgeted time that working for myself allowed, I was able to make decent apps enjoyed by thousands of customers while being at odds with some very fundamental programming practices. But those codebases are crufty enough now that a clean break needs to be made and I'd rather just shelve them. They've had a good run, I've learned loads about proper development practices in the meantime (having worked on many medium- to large-scale apps), and I've become a better programmer who now develops for other developers. I've still got my doubts, but all of my code is out there for people to see these days, so I feel that I've reached another level. And certainly if, at some point in the future, I decide to develop apps again, I will take into account some exit plan options right from the start.

But where does this leave things today?

The details

As mentioned on the product pages, both apps have been removed from sale. Perhaps unsurprisingly, since my rate of update to the apps declined pretty sharply following my change of job, the rate of sales declined similarly. However, if anyone feels that they did not get their money's worth from a more recent purchase, please do get in touch and I will get you a refund, no questions asked. While I understand some disappointment over not having these particular apps in some cases, I'd rather you have your money back to possibly purchase an alternative product that meets your needs.


Thanks for reading this far. This may be the last blog post here, as I'm also no longer active in consulting services since joining Development Seed, but who knows -- Code Sorcery Workshop may rise again some day in the future. Someday I may even find the time and passion to refactor these apps and give them a new lease on life. You never really know where life will take you.

It's been a great run, it has changed my life considerably, and I've met so many great people, customers and friends alike, through my work here.

Sic transit gloria mundi

And thank you, my loyal customers, these past six years.

Using Meerkat to secure wireless web browsing

A hot topic in the news today is Firesheep, a Firefox web browser extension that takes advantage of a security vulnerability in many popular websites like Twitter and Facebook and allows you to login to those sites as any other user on the network! This makes use of the practice of exchanging login information for web browser cookies that are then used to gain access, but which on open networks are subject to interception and reuse by other parties.

Our SSH tunnel manager Meerkat has always supported the ability to secure your web browsing on open networks. It does this with what's called a SOCKS proxy. The basic idea is you tell Mac OS X to use a proxy server, your web browser proxies all website requests through this server, and the server makes the actual requests for information to the website. The connection between your browser and the proxy server is encrypted via SSH, providing a workaround to network-based snooping.

Here's how to set it up:

Step 1: Add an SSH account to Meerkat

If you have an SSH account through your web hosting provider or someplace else, add the details to a new Meerkat account. [screenshot]

Step 2: Add a tunnel to Meerkat that uses this account

Be sure to check the Dynamic forwarding option and choose a high port (something in the 6000-9000 range is ideal) for the tunnel. [screenshot]

Step 3: Configure a SOCKS proxy in Network settings

In the System Preferences application, choose Network, then the AirPort connection, then Advanced... settings. Choose the Proxies tab, then SOCKS Proxy, then enter as the hostname (this means the local computer, where the tunnel endpoint resides) and the port number from above. Choose OK, then Apply to apply the changes. [screenshot 1] [screenshot 2]

Step 4: Browse the web securely!

Just activate the tunnel in Meerkat. All web browser traffic will now go through the SSH account that you setup.

While these steps are a little involved, unfortunately web browser proxies aren't a simple procedure. One way that this can be automated is with Meerkat's free plugin for NetworkLocation, an application that can apply settings based on physical location changes. You can get the plugin in the NetworkLocation website's "Extras" section or from the sidebar on Meerkat's web page.

Have any questions about this? See the Meerkat support forums if you need a hand and we'll try to help out!

Happy -- and safe -- surfing!

Update: I've also heard tips from Meerkat users about setting their SOCKS tunnel to automatically start when using a particular web browser. Meerkat supports associating a tunnel with an app so that when the app stats, the tunnel is enabled and when it is quit, the tunnel is disabled. This is another great option to help with auto-configuration.

Meerkat 1.5: Great SSH Tunneling Gets Even Better

I'm please to announce the immediate availability of Meerkat 1.5! The best Meerkat release yet, Meerkat 1.5 features a number of under-the-hood improvements, as well as a complete visual overhaul in the user interface. I'd like to take a moment to highlight some of the most useful changes.

At the top of the list is a long-requested feature: automatic retry of tunnels. While Meerkat already automatically reconnects tunnels when you change networks, sleep and wake your Mac, or have an interruption in connectivity, now Meerkat takes this a step further. A tunnel is retried at increasing intervals, so a minor network hiccup won't require your attention if the tunnel can't connect on the first try. In fact, if you eventually get an internet connection and if the server is up, you should likely never see the error dialog again. Meerkat works tirelessly behind the scenes to keep your tunnels up and running. What's more, a quick glance at either the main window or the menu bar will let you know if Meerkat is working on getting a tunnel back online.

Automatic Retry In Action
(click to enlarge)

Another solid improvement in Meerkat 1.5 is much better error reporting when there is an immediate connection problem. If your server is down, you forgot to turn SSH back on, or there is a password problem, Meerkat will tell you exactly where SSH is having the problem. And if a password no longer works, Meerkat will automatically remove it from your keychain so that you can be prompted for the new one, optionally saving it back into the keychain for future use. Combined with Meerkat's existing strengths in allowing you to choose which passwords stay in the keychain and which exist only in your head, as well as effortless SSH agent integration, all of your authentication needs should be covered.

Most visibly, Meerkat 1.5 has been given a big facelift. Each element of the main user interface was scrutinized, tiny tweaks were made here and there, and we think the results speak for themselves. There is a more pleasing balance to the main window while providing a bit more info.

Old Main Window
(click to enlarge)

New Main Window
(click to enlarge)

A more dramatic change is seen in the tunnel editing. What was once one panel with a disclosure view for advanced options is now two tabs, again lending a more balanced look while being clearer to read at a glance and more pleasing to the eye.

Old Tunnel Edit
(click to enlarge)

New Tunnel Edit - Basic
(click to enlarge)

New Tunnel Edit - Advanced
(click to enlarge)

There are many other niceties to be found under the hood of Meerkat 1.5. We've put a lot of work into both requested features as well as unrequested tweaks that we feel are big improvements. In addition, Meerkat's product page features a slew of short, one-minute screencasts highlighting Meerkat's main features. And as always, Meerkat features a 14-day unrestricted trial, so why not download Meerkat now?

As a final note, I just wanted to say thanks to both our software customers as well as our clients. Code Sorcery Workshop has recently celebrated three years as a business. Every day is still new and exciting and better than the last. I look forward to another three years -- and beyond -- providing software and services to people around the world. Thank you.

Autumn miscellany

There have been a number of things I've been mulling over posting about recently, but none have quite percolated up to a full post yet, so I'll instead post about a number of goings-on of note to me, my apps, and some other current work. Read on for a dose of Code Sorcery Workshop updates!

iPhone work

I've recently completed work with the local Portland powerhouse Small Society on two different iPhone apps. Check out the two most recent projects listed on their site -- one for a large coffee retailer and one for a nationwide car-sharing company. I've really enjoyed working with the Small Society team on these projects!

Regarding my own iPhone apps, I'm still in a wait-and-see mode, much like a number of solo developers. Mostly it's an issue of the difficulty of solo developers being able to sustain revenue in a market that's currently driven downwards in price. I may post more on it in the future, but in the meantime, feel free to weigh in on whether you'd like to see iPhone apps to complement my current Mac offerings.

C4[3] conference

The weekend before last I was lucky enough to once again attend C4, the independent Mac & iPhone developer conference. I've now been to all four, and the first one nearly three years ago was the major impetus for me striking out on my own and making Code Sorcery Workshop my full-time job. Once again, I had a great time learning, meeting new people (and meeting in person people I already knew online), and seeing a bit of Chicago. C4 can't be beat!

Welcome back, Ma.gnolia -- err, Gnolia!

The innovative social bookmarking service Ma.gnolia has been relaunched after their major incident earlier this year, and has been rebranded as Gnolia. This service will once again work with Pukka, just as before. Welcome back and best of luck!

Meerkat beta

Lastly, I've just released a public beta of the next release of Meerkat. The headline feature will be much more robust automatic reconnection of tunnels, adding to the existing support for reconnect due to sleep, wake, and network change. If this is a feature you've been waiting for (and it sounds like quite a few folks have been), go ahead and check it out. Just be sure to backup your data first, as this is a testing release!

That's all from the home office for now. Thanks for reading!

Pukka 1.8.2 & Meerkat 1.2.2

I've just released two updates: Pukka 1.8.2 and Meerkat 1.2.2. Both feature official support for Mac OS X 10.4 through 10.6. In addition, both include new features and both include some minor bug fixes.

You can grab Pukka and Meerkat in their usual places, or you can update within the respective applications via the app menu > Check For Updates... item.

Below are summaries of the changes.


New Features

  • Mac OS X 10.6 Snow Leopard support. Pukka now supports 10.4 through 10.6. Please see our blog post regarding future support of 10.4.
  • Search menu is now horizontally resizable from a minimum of the default width to a maximum of half of the screen width.
  • Added a new preference to sort search results by visit count.
  • Posted-to account has been added to the search tooltips.

Bug Fixes

  • Fixed a bug where the account selection popup could sometimes change inadvertently.
  • Fixed a window resize bug that affected progress spinner placement.
  • Search bar now remains unloaded into memory until first used.
  • Search bar now auto-places to the right if screen size demands it.
  • Search bar now auto-places properly after monitor & resolution changes.
  • Search result selection should reset on new search results.
  • When a caching error occurs, dismissing the error dialog with the "Ignore For Now" button will ignore further errors until the preferences have been edited, including across app relaunches.

And Meerkat:

New Features

  • Mac OS X 10.6 Snow Leopard support. Meerkat now supports 10.4 through 10.6. Please see our blog post regarding future support of 10.4.
  • Any tunnels that are active at app quit are re-activated on next launch if launch happens within a minute or so.
  • The command-line tool now accepts tunnel name substrings. For example, meerkat myServer up will activate every tunnel whose name contains myServer.

Bug Fixes

  • Fixed some data storage issues that could cause error messages when saving or deleting several tunnels in a single run of the app.
  • SSH ControlMaster support is now disabled for all tunnels. In current versions of OpenSSH, ControlMaster does not work with tunnels.

Enjoy, and please don't hesitate to post any comments, problems, or suggestions to the forums!

Tiger, Leopard, and Snow Leopard

With the imminent release of Apple's Mac OS X 10.6 Snow Leopard next month, it comes time to examine the state of our apps as well as their operating system support. Pukka was originally released in early 2006, in the time of 10.4 Tiger (and updated to support 10.5 Leopard in late 2007). Meerkat was originally released in mid-2008, supporting both Leopard and Tiger out of the gate.

We've made the choice so far to sacrifice many (but not all) advantages offered by Leopard in the name of Tiger support. However, with Snow Leopard's upcoming release, we will be shifting to support only Leopard and Snow Leopard going forward.

Beginning with the next major releases of both Pukka and Meerkat (likely 1.9 and 1.3, respectively), we will no longer be including support for Mac OS X 10.4 Tiger.

Current release versions will be supported for Tiger users, but little or no new functionality will be added going forward.

PowerPC architecture will still be supported, though of course Snow Leopard will run only on Intel-based Macintoshes.

Snow Leopard support is expected in the next point release of each application (e.g., Pukka 1.8.2 and Meerkat 1.2.2). We expect to have each of these released in the next month.

We would love to continue Tiger support indefinitely, but as the operating system was released in 2005, we would rather move ahead and take advantage of the new technologies that Apple is providing to developers in order to create the best possible experience for the broadest user base.

If you have any questions or comments about this announcement, please contribute to the forum post on the topic.

Update: Please see the Pukka and Meerkat forums for the latest betas of each, which work with Snow Leopard right now.

Update 2: Official, stable releases of both apps are now up. Please see the announcement.

We have a winner!

I'm pleased to announce the winner of the A celebration of open source contest from earlier this week!

Michael Glass, Production Manager of TED Conferences, LLC, is the winner of the $250 USD gift card from Portland's own Powell's Books.

Michael says:

"I'm the production manager [at TED] and all my engineers and photo
editors are in love with [Meerkat].

Thanks again for both the gift certificate and the wonderful software.

I'm pleased that Meerkat can be used at such a great place -- I personally love the TED talk videos. It's pretty awesome to know that it's being used behind the scenes there.

Thanks to all the entrants, and thanks again to open source developers everywhere!

A celebration of open source

In honor of this week's Open Source Bridge conference, as well as in recognition of the role that open source software has played in the development of our business, we're pleased to announce that today, June 16, 2009, Code Sorcery Workshop is offering any open source contributor a free license to Meerkat, our SSH tunnel management application. We are also giving away a $250 gift certificate to the legendary Powell's Books. Read on for the details.

If you'd like a free copy of Meerkat, just leave a comment on this post linking to an open source project that you've worked on with a brief mention of what you did. It could be coding, but doesn't have to be -- it could also be documentation, helping new users, anything that contributes to the common good of the project. We'll collect all the info and send each contributor a full, unrestricted license to Meerkat, a $19.95 USD value.

However, if you'd like to instead try for the $250 USD gift certificate to Powell's Books, a purchase of Meerkat will make you eligible for this drawing. Just register Meerkat today and you will automatically be entered for the drawing. The winner will be announced in a followup post.

In both cases, you must take action by midnight Pacific Daylight Time tonight to qualify.

Meerkat is an application that adds a lot of Mac-specific value to SSH, an open source tool that ships with every Mac (as OpenSSH). And Macs themselves are built on a ton of open source software such as Apache, Postfix, CUPS, Perl, PHP, Python, Ruby, sudo, unzip, zlib, and many others. You can read more about Apple's commitment to open source as well as open source releases pertaining to Mac OS X.

I began knowingly using open source software in the mid-90s and started contributing by releasing my own projects on freshmeat in late 1999. I've always looked for ways to contribute to open source projects when I can, whether it's by bug fixes, new feature patches, documentation, or just community help. Most recently, I've been involved with the Drupal content management system.

Open source is the lifeblood of the internet. So many of the tools that we take for granted everyday have been developed in this way, by generous folks giving their time for the greater good. I am extremely thankful for the many ways that open source has enabled me to teach myself a lot of what I know today about technology, to provide economical solutions for clients who need it, and to make software better and better by degrees.

So, here's to open source!

Meerkat 1.2 is out!

I'm pleased to announce the release and immediate availability of Meerkat 1.2, the latest version of our popular and easy to use SSH tunnel management application for the Mac.

You can read more about Meerkat, view a series of brand new video spotcasts (for desktop as well as iPod/iPhone) highlighting its major features, and download a free 14-day trial of the application on Meerkat's product page.

This release represents a lot of work, but especially so in the AppleScript, command-line, and SSH session launching departments. There are a whole slew of new features and enhancements and a number of bug fixes, too.

I hope to write more soon about some of the development challenges in this release, as well as the business aspects of major software releases and balancing a service and product business, but for now, go check out Meerkat!

Scripting allows for the unanticipated

Even though AppleScript itself might not be my favorite language, the ability to script applications on the Mac never ceases to impress me. By opening up their apps to scripting, developers allow users to do all kinds of things that either wouldn't otherwise be possible, or, better yet, that enable workflows tailored to their own needs and styles of application use.

A great example of this is my own personal use of Potion Factory's excellent task management app, The Hit List. Upon reading over the feature list soon after starting to use it, I discovered that you can drag web URLs out of your browser onto THL's app icon in the dock to create a new todo item to read the link in question.

I tend to queue up a lot of web reading for later, so I wondered if it would be possible to reduce the amount of work required to a single keystroke. My solution consists of three main pieces:

  1. The scriptability of both Safari (my preferred browser) and THL.
  2. Red Sweater Software's excellent FastScripts application, which allows for assigning keystrokes to scripts.
  3. The command-line utility growlnotify, which comes with the desktop notification system Growl.

I was able to combine the three so that by hitting Command-Option-Control-I, the current Safari URL is sent to THL as a new todo in the inbox, posting a Growl notification with the page title to confirm that things went ok.

Click to enlarge screenshot

You can download the script here. Just put it someplace that FastScripts can get to, such as in ~/Library/Scripts, and assign a keystroke to the script in that application's preferences.

My Delicious bookmarking application, Pukka, enjoys a fair amount of AppleScript popularity for integrating with organizational apps such as Yojimbo and DevonThink and I'm hoping that the next release of Meerkat, which adds AppleScript support to that app as well, will fare similarly as it too can be a workflow-oriented application. The lesson of scriptability is one that I have taken to heart and I hope to maintain a high level of scripting support in all of my current and future applications.

Syndicate content