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.

Working With Development Seed

I'll get right to it.

I've decided to join Development Seed, a consulting and R&D shop in Washington, DC with whom I've done past work and known personally for over five years, in a full-time capacity. I'll be continuing to live and work in Portland, Oregon, though I will be visiting DC, a former home of mine, from time to time for code sprints. The first of these is next week.

Specifically, I'm going to be working on the MapBox team, continuing development of MapBox for iPad and getting into some server-side work in the Node environment.

So, three sections to follow with some more info: some background on my decision, a bit about the space and what we hope to accomplish, and lastly, where this leaves Code Sorcery Workshop.

Some Background

As I've mentioned here before, I've been working with Development Seed on the MapBox project since early last summer. I've had a blast, and I've long held the folks at Development Seed to be amongst the best innovators I know.

I have huge respect for Development Seed's impact on the Drupal community. Now that I've been working up close with them on a daily basis, I've seen their process and just how much heart they put into their work. I've also seen the willingness they have to head in new directions, specifically with things like the positively stunning TileMill and the work that I've been on in the iOS space.

At the same time, personally, I've been completely happy as a freelancer and solo shop. This past November, I reached the milestone of four years of being self-employed, and presumably with no end in sight. I've had great clients, fun and interesting projects, excellent travel opportunities, a sustainable pipeline of new work, and the chance to achieve an ideal work-life balance. I've lived abroad, moved between coasts of the US, released a new product, presented at conferences and been on a number of podcasts, and expanded into new areas such as iOS development and Mac OS X Server administration.

In short, when Eric at Development Seed and I started talking last month about a more permanent role with the team, I just couldn't picture doing anything other than what I was doing at present. I loved it too much.

The more we talked, though, the more I realized that the MapBox work has been one of the most fun, as well as the most iterative and experimentation-driven, projects that I've had the pleasure of working on. As I saw innovation continue in the spaces around TileMill and the MBTiles format, I couldn't picture not being involved firsthand. I wanted to be there. A wild ride is about to begin.

I've been tempted many times in my solo career to join other firms, many outstanding in their own right. Turning down several of these has been very difficult. But none felt like they were tempting enough to give up the indie lifestyle. I much preferred working on a project basis as a hourly contractor for the control over my time and work style that it afforded me, as well as the ability to keep the work interesting through variety.

Up Next

At Development Seed, I'll be focused on the iPad space in particular, eventually hopefully working on server-side technologies as well. I've been involved in the server-side technology space (in the form of PHP/MySQL, often Drupal) for well over a decade and Cocoa programming for over six years, but I feel like both areas are just starting to get really good at this point in time. I think the things we will be building will be, as Development Seed likes to put it, positively disruptive.

Such a goal is exciting and challenging. Knowing that that is the driver behind what we're doing, both in the tools we provide people as well as the open source technology that we are releasing in order to impact even more people, is awesome. People in non-profits, governments, and developing countries will have access to our tools. Just have a look at Development Seed's about page for some background on the excellent work they've done so far.

In the near term, I hope to be thinking hard about what the touch interface brings to mapping technology, as well as what it means to have highly custom and personal maps offline and with you everywhere. I can see a time where it just doesn't make sense to collaborate around anything with a geographic context and not have instant, touchable, personal and interactive access to what you're talking about.

I attended a phenomenal conference in October called SecondConf and saw Brian Boyer from Chicago Tribune speak there. Brian's talk on hacker journalism really got the wheels turning for me and I entered 2011 really wanting to focus on the open data and positive social change spaces. Joining Development Seed is a natural fit with that. And as it turns out, Brian is now using MapBox tools in his work!

The Workshop

My company will continue to exist at the present time as an entity, though I do not expect to have the bandwidth to take on any consulting work for the foreseeable future. On the products side, my apps will continue to be offered and I hope to make incremental improvements to them. In fact, both of my main apps are in active development right now.

Over the course of the four years that I've been on my own, I've realized that I'm not really a product person. People know and love my apps, and I use them both myself every day, but a company built upon software download sales is neither something that I found particularly motivating day to day nor sustainable with a healthy work-life balance. Again, for me, personally -- I have many friends who do this and do it well. Keeping the apps moving, but largely devoting my time to services, are what worked best for me.

That said, my apps are useful to certain people and I've put a lot of heart into them. I want to continue to keep them alive, though perhaps not at the growth rate that many others in the community enjoy. But none of this should come as a huge surprise to anyone who's actually watched the pace of development thus far.

In short, I'm off the consulting ship for a while and my apps are not being sold nor end-of-lifed. I will continue to improve them when I can and how I see fit, and will continue to evaluate where they are and if the directions need to change to best benefit my users.

In Conclusion

I'm excited for the future. If you had told me even a month ago that this is where I'd be today, I've have hardly believed it, but now it feels right. I'm looking forward to being on an outstanding team -- and being positively disruptive.

MapBox for iPad goes live

I'm extremely happy to announce that one of my favorite projects from 2010, MapBox for iPad, has gone live on Apple's App Store. Kudos to the team at Development Seed, with whom I worked on this project, for their creativity, flexibility, and enthusiasm throughout. While I'll post a bit here about what the app actually does, I'd like to really focus on the how of the app, as this process was pretty unique -- and fun. This may be of particular interest to developers, as open source use and release was a major part of the project.

If you want the executive summary of my work, the MapBox brand, and the actual app, read from here down to What the app is.

About collaboration with Development Seed

I've been familiar with Development Seed for quite a while. I first met Eric in mid-2005 and I did some systems work with them early in my freelancing career, thanks to Eric's flexibility and his approaching me (much to my surprise) upon my announcing that I was freelancing with "we should work together".

Eric and I have been talking for some time over the past year about doing some work together again and come mid-year, just such an opportunity arose.

What MapBox is

MapBox is Development Seed's trademarked brand of cloud-based geographic maps. Traditionally, they have been hosted on for use by client-side apps, similar to how one might use Google Maps in a project. Development Seed also created a great app called Maps on a Stick, a USB keychain app that can display maps and overlay data on Mac or Windows without network access.

Eric and I started pondering the possibilities of putting MapBox on the iPad for a number of reasons: first, of course the coolness factor and inherent low barrier to use of touch interfaces; second, the fact that such a powerful platform could operate "off of the grid", something that Development Seed is quite keen on; and third, as an exploration of open source on the closed, curated iOS ecosystem.

It became immediately clear that we would just need to get our hands dirty and start playing. But first...

What the app is

Some text from the official description:

Interact with highly custom maps and visualize your KML and GeoRSS data offline with MapBox for iPad. Maps and geo data are stored directly on your device, so you can use the application without an Internet connection.


This application is built upon open source tools. We used existing projects like route-me for the map view, and released new open source projects like SimpleKML for KML parsing.

MapBox is an approved software-as-a-service provider on All federal agencies can freely use maps from MapBox.

The basic gist is that MapBox operates independently of any mapping routines that Apple gives you in the iOS SDK. MapBox uses an open source library to display map tiles, a new and open format for bundling millions of tile images for portability and for use offline, a custom and soon-to-be-released interface to make the two work together, and open source technology for data visualization on top of the map tiles.

In short, we think MapBox is the dream of open mapping realized on Apple's iOS platform.

The challenge

The challenge in getting the word out about this app (which is free, by the way) is that unless you are a map geek, you might not find it particularly interesting or useful. That's ok. In many ways, MapBox is targeted towards map geeks -- people who actually deal in GeoRSS, KML, map tiles, geographic visualizations, and the like.

So, if you're left wondering what to do with the app, don't despair. We are hoping that like-minded map geeks use the ideas we've presented as a springboard for future development. In short, we're saying: Apple's MapKit isn't the only way.

We are hoping to see creative uses of the app as a platform, since you can create your own map tiles and data visualizations, save various views on them, and share images of them with others.

But at the very least, we've tried to open things like the MBTiles file format used by the app as a way to help and encourage others.

The process

This project was tackled very much as a research and development effort. I was basically tasked with joining "MapBox" and "iPad" and creating "awesome".

Early on, we had to determine if it was feasible to actually use Apple's MapKit with custom tiles. We realized pretty quickly that it was not, despite a somewhat misleading announcement by Apple in early 2009 that iOS 3.x would allow you to "bring your own maps". It turns out that this refers only to turn-by-turn directions with maps. If you want to use MapKit's libraries for displaying, overlaying, and querying maps with your own visuals, you are out of luck.

Once this was decided, we searched for what might be available for use elsewhere. Two possibilities came to light: CloudMade, a company specializing in mapping technology, and route-me, an open source library upon which CloudMade's tools are actually built. Based on the activity of the route-me project, the fact that it was truly open source and not reliant on builds from a third-party, and the fact that CloudMade featured functionality that we didn't really need (like geocoding and routing), we decided to go with route-me.

Using Development Seed's own Drupal-based OpenAtrium intranet solution and a shared video gallery, we quickly iterated on features, first coming up with the MBTiles format for storing and quickly transferring the tile images to the device (a problem when you're dealing with 1,000,000+ images on disk and transferring them by USB and network), interfacing that format with route-me, visualizing data like GeoRSS and KML on top of the maps (necessitating a new, open source library for parsing KML on iOS), saving state between launches as well as into a document format, exchanging data with other apps on the system and via iTunes, and then the app-specific features that really make these technologies feel like a cohesive unit.

We also explored a variety of features and technologies that didn't make it into the 1.0, particularly in the areas of inter-device communication, presentations, data sharing, and data creation. We hope to keep iterating on these in the future.

Later in the project, we started thinking specifically about a productization route for the technologies. Specifically, what is the least we can ship as a 1.0 to put a stake in the ground to move forward from? The project thusly moved from R&D into specific polish around the user experience, marketing, and future direction.

Apple just approved the @MapBox iPad app this morning! Scheduled to be live on the App Store on Wednesday January 5th for free download.

Shouts out

I also wanted to send a quick shout out to a couple developer friends whose code was very useful in this project: Jon Wight for his excellent and essential TouchXML and Gus Mueller for FMDB. Both libraries are integral to this project and without them, it would have required a lot more work.


All in all, MapBox has been a wild ride. It's rare to come across a project offering this much flexibility for creativity and exploration, not to mention fun. To top it off, Development Seed has allowed me to be very public about my work on the project, both during and after.

We'd love to get your feedback on the app as it is now, future ideas for it, related work, and creative uses for it. Get in touch!

You can see Development Seed's blog post on the release as well.

A look back at SecondConf

As a followup to my Looking forward to SecondConf post, I wanted to be sure to talk about the conference after the fact. In a word: fantastic. I hope to do it justice in this writeup. I haven't seen any comprehensive posts about it (but please feel free to comment if I've missed one) and I definitely think it's due one, so here goes...

Edit: I have posted my photos from the event as well.

Logistics & Kickoff

As a whole, the logistics of the conference seemed to go very smoothly. When I got there Friday night, I met up with my friend David LeBer and my roomie Jose Vazquez and after checking in at the hotel, headed to TechNexus to register. My friend Eric Sinclair was holding down the registration fort. We got settled in and shortly thereafter, head organizer David Kinney set us loose on dinner. Throughout the conference, the food quality and service was very good-to-excellent, particularly considering the buffet throughput and the size of the space. No problems there.

Once we finished dinner, David gave a brief welcome, thanking us for arriving and giving a brief background for anyone who wasn't familiar with the roots of SecondConf. Going into the conference, it was obvious that it was largely inspired by C4, so I was curious to see how much it called out C4 specifically. But once David's opening remarks were done, I don't recall another mention of C4. SecondConf had become its own thing.

David's explanation for the naming of SecondConf was twofold -- Chicago is the Second City, and SecondConf represented a second chance for an indie conference and a second chance for many people to attend one given C4's popularity, then demise.


Ben Gottlieb - Living the Indie Life for the Long Haul

I was curious right off the bat to see what kind of calibre of speaker SecondConf would hold for us. I knew roughly half of the slated speakers, but the conference's first, Ben Gottlieb, was known to me only in name (I've used his Twitter-OAuth-iPhone code on projects before). His talk immediately put my mind at ease, however.

Ben detailed his journey from Newton to Nokia, through Palm and Pocket PC, on to the present day on Android and the iOS platform. Ben's talk was the first of three during the weekend on "the indie life" (all of which turned out to offer unique insights, not overdoing the topic), and while I was expecting more of a talk on keeping at it on your own for a long stretch of time, it was more about a personal journey through technology and how the indie landscape has changed, mostly for the better.

Brad Larson - Realtime Camera Processing Using the GPU - (slides & blog post)

I was very much looking forward to Brad's talk as I'd met him at C4 before and he never fails to impress. As David mentioned in his introduction, Brad is one of those guys who's always working on something that turns out down the road to be the next new hotness once everyone else catches up.

Brad spoke about GPU-based processing on both the desktop and iOS. His main point was that the GPU can be used for some very fast math and that we should be making better use of it. Also, like me, Brad shares a love for the underdog in Apple's development suite, Quartz Composer. Brad highlighted QC as a prototyping tool for things like OpenCL, since you don't have to worry about all of the legwork for things like camera input, basic UI, and data exchange when you can quickly whip it up visually in QC.

Brad then proceeded to blow us all away with a demo of color detection and augmented reality in QC. Basically, he was able to wave around a yellow ball in front of his laptop's iSight camera and produce a video of a computer-drawn proxy object overlaid on top of the yellow ball. He demonstrated how GPU processing is up to the task of realtime video frame analysis and alteration in situations where normal CPUs would be likely to choke. All the while, he was explaining this in a way that made sense to me, where previous talks I've seen on augmented reality have left me scratching my head a bit.

If that wasn't enough, he proceeded to show how such technology could be ported to the iPhone, where QC isn't available. If this is your cup of tea, be sure to check out Brad's blog post on the topic.


After the talks, we all headed back to the hotel to hang at the ground floor pub, Elephant & Castle. I particularly enjoyed catching up my friends Phillip Bowden and Marko Karppinen and finally meeting in person Patrick Thomson, who I'd previously only known on Twitter.


Saturday kicked off back at TechNexus with some solid breakfast sandwiches and much-needed coffee before getting back into the talks.

Jose Vazquez - Going Indie (slides & audio)

My friend Jose was first up with the second talk of the conference on the indie lifestyle. While his was also a tale of a personal journey, I was definitely struck by the warmth and authenticity that he radiated.

Jose talked about making lots of mistakes, about the impact on his family, and about the trials and risks of working on technology without specific productization in mind. He said that he had spent a lot of time in Core Audio but in the end, didn't have a salable product and explained how that, mostly out of necessity, led to his app RetroSketch. This app was featured by Apple and Jose was pretty forthright with how this impacted his sales short- and long-term and quashed some common misconceptions about the latter.

Brian Fitzpatrick & Ben Collins-Sussman - How to Lose Friends and Alienate People (previous talk resources)

Brian and Ben, both of Google, gave an interesting talk on engineering leadership, which they prefer as an alternative to the dirty word management. Ben mentioned that they had given versions of this talk before (Google I/O, OSCON, etc.) but I still think it was a good fit for SecondConf. Brian talked about the Peter Principle -- that "you are promoted to your level of incompetence" -- the fact that in programming circles, once you're the company's best programmer, you tend to be promoted up to manager -- and promptly go from being the best programmer to the worst manager.

Ben and Brian talked about common leadership anti-patterns -- things like trying to be everyone's friend and treating your reports as children -- as well as approaches to good leadership. They had a neat grid diagram on the various permutations of self-directed, scattered, excited, and bored programmers and how to guide people into the ideal combinations of each.

I thought about the talk in the context of my own business and how I've had multiple opportunities to grow by bringing on more people besides myself, effectively going from programmer to leader. While it's still not right for me, the talk will continue to be a good resource for me whenever I come back to the topic and think it over some more in the future.

Anne Halsall - Flexible Content, Deliberate Design (slides)

First up after lunch was Anne and her excellent talk on content-driven apps. Anne is the UX lead at Inkling, which I've been meaning to read up more on since my friend Jon Wight went to work there.

Anne had an excellent analysis of content apps and the thing that really sticks in my mind is her enlightening quadrant chart on the cross between customizable, fixed, designed, and sparse. Those may not be the actual terms she used (in fact, I'm pretty sure "sparse" wasn't one of them) but the idea is that you've got apps that can have a spectrum of user customization ranging from not-at-all to fully-customizable as far as layout and inclusion or exclusion of features of content. At the same time, you've also got a spectrum in design ranging from a specific design sense (something like The New York Times) to something that's more of a generic container and doesn't carry a heavily-branded feel to it. These ranges were not good or bad, per se, but rather different ways of crafting the user experience when dealing with dynamic and changing content. I'd very much look forward to seeing Anne's slides again, so I'll be sure to update if and when I can get a hold of them.

Update: Here are Anne's slides in PDF form.

Gene Backlin - NeXT to X: A Trip Down Memory Lane

Gene was definitely the oldest speaker of the conference and I mention that primarily because his talk was specifically about the evolution from NeXT to Mac OS X as he saw it in his lifetime and career of consulting. It was really fascinating to hear from someone who lived all of these changes, some of which date back to a time before many in the audience had been born.

While I've seen the history of Interface Builder as it looked on NeXT twenty years ago, to see slide after slide of side-by-side comparison between outlets, the IB document window, inspectors, and actions one after another -- bam bam bam -- really drove the point home. It was simultaneously fascinating and scary to think how little the tools have changed in two decades of development.

I was particularly struck by Gene's mention that he started life in the 1950s, a time when ham radio was one of the best outlets for someone with a programmer's mindset to hack, and how he transitioned through the 1970s and 1980s into computers. He painted a great picture of just how much life had changed in those intervening years for someone like him.

Blitz Talks

Next up were the blitz talks, five-minute timed and automated presentations in the "lighting talk" style. I don't recall the exact order, but there were five talks.

Kevin Mitchell - Losing my Religion: A journey from Emacs to Vim (blog post & slides)

Kevin gave a talk on his transition from years of Emacs as a text editor to Vim. He had a good point in that people shouldn't be afraid to try new things, regardless of their unfamiliarity. And he got perhaps the greatest conference laugh ever when he featured a slide of himself next to Richard Stallman of GNU fame and declared that he was not Richard Stallman, despite the striking resemblance.

Bob Frank - OS License Bingo

Bob talked about the basic differences between the GPL and BSD-style software licenses and why you would want to use each. He sure crammed in a lot of info, and not in a bad way. At the very least, it was a great overview of how the styles differ and he made it pretty clear that BSD was likely preferred by Mac & iOS developers given the reuse flexibility.

Daniel Meeks - Applying Basic Financial Principles to Life

Daniel gave a heartwarming talk about applying basic financial principles like investment and "junk happens" to your non-financial life. I was especially fond of Daniel's idea to invest time in another person's life. Fantastic.

Chris Cieslak - Hacking The Apple TV

Chris put on a great talk about hacking the new Apple TV, kicking off a jailbreak session on a second computer at the same time his talk started (which, by the way, got cracked before the talk was over). Chris talked about the opportunities available for some fun hacking now that the Apple TV is iOS-based. Fun talk and some cool things to think about.

Bob Kressin - Creating iOS Accessories

I first heard of Bob's work at one of the C4's. Bob specializes in something I find to be black box voodoo -- hardware accessories. Specifically, Bob talked about getting into Apple's program to build dock connector hardware accessories and then subsequently prototyping the hardware (kind of backwards from software hacking, as he pointed out). Bob got a pretty rousing Q&A going since this was such a foreign concept to a lot of software folks. All in all, it was a great complement to the software focus of the conference up to that point.

Colin Barrett - How to (Not) Be an Indie Freelancer

After the blitz talks, the format switched back to long form talks, with my friend Colin giving the third talk on being an indie. At this point, broaching the topic yet again would get a chuckle out of the audience, but Colin definitely delivered a new and genuine take on the topic with something near and dear to my heart, freelancing, as opposed to primarily product-driven, indiehood.

After four years as a wholly indie freelancer myself, I found Colin's advice on balancing multiple clients, billing hours, and managing client relationships to be spot on. Colin's talk brought to mind Andy Finnell's talk a few C4s back, where it was an introduction to the freelancing lifestyle to an audience who mostly had probably been thinking about the product route.

Colin had a good Q&A afterwards, seeming to be driven by a number of people who probably hadn't considered freelancing before. All around, Colin's talk was a great addition to the conference.

Allan Evans - Scroll, Scroll, Scroll Your View

Speaking of good additions to the conference, Allan gave a very tech-focused talk specifically on iOS scrollviews. He showed off a technique he had to create for building a scrollview that changed orientation with the device orientation -- for example, changing from vertical scrolling to horizontal scrolling -- while potentially handling tens of thousands of subviews within memory constraints.

Allan built up the app in stages, showing each as a separate Xcode project and demonstrating how the control was built incrementally. I think Allan was worried about giving a boring talk given the relative quiet of the audience, but this was partly due to intent interest and partly due to being very near the end of a twelve-hour day in the same room -- and just before dinner. Allan did a great job and it was nice to see some pure tech in the mix.

Panel Discussion

SecondConf panel discussion

Following a filling dinner of on-site Gino's East deep dish pizza, all of the long-form speakers thus far, plus Chicago-local game developer Patrick McCarron and former Apple evangelist-turned-indie developer Matt Drance, were invited up for the panel discussion.

Personally, I was a little taken aback by the fact that David was only kicking the discussion off, but not really moderating during the panel. While it moved along ok, I was a little concerned that it would devolve into a free-for-all between the panel and the audience. Apparently this was kind of the idea, so once I realized this, it put my mind at ease. This is a less a criticism and just a comment.

One thing I was concerned with, however, is that once the topic of the Mac App Store was brought up, there would be no going back. This is such a hot topic that I feared the entire evening would become a forum on it once it started. I'll have to go into the Mac App Store in a future blog post (thankfully, probably shorter than this one), so I won't touch on it too much here. Once we did move on from the store, I had the chance to bring up the topic of what the panelists found inspiring or exciting in tech right now. I'm kind of sad that the panel wasn't recorded for non-attendees, only because I didn't take any notes during, so a lot of it has already left my mind. But all in all, it was an enjoyable couple hours -- for myself and, I take it, for others, as most everyone stayed well over the allotted time to participate before retiring to the pub for the evening.

All told, Saturday was a really packed day -- in a good way. We spent over twelve hours in the same room, feeding off of each others' energies and taking a lot in.


Sunday got off to a bit of a rocky start from a personal point of view. Let's just say that on Saturday night, fun was had. But after a solid breakfast and a welcome back by David, things got underway.

Chris Rojas - Physical Computing - Thinking Differently (slides)

Sunday's schedule got tossed around a bit as compared to what was on the SecondConf website, so Chris kicked things off. His original talk was called Building an iPhone-controlled Tank, but for whatever reason, he broadened it a bit with a really interesting talk on computing in the physical realm -- things like visual and auditory sensors, Arduino boards, projection mapping of visuals onto 3D surfaces, and some other realms of hardware hacking that I don't think about too often. Chris is a photographer (and by appearances, a damn good one) at a company called SparkFun Electronics, which just seems to do awesome stuff with cool gadgetry and then make the parts available widely. From their website:

SparkFun believes everyone should have the tools, hardware, and resources to play with cool electronic gadgetry. SparkFun's goal is to get our hands on current technology and information and pass it on to you - we want to share the love!

Chris' slides were excellent and I'm really looking forward to checking out some physical computing avenues. Chris made a point of encouraging us to think about things we already have in a hacking-oriented way -- for example, considering the flash on an iPhone 4 as a visual readout or Bluetooth chips as proximity sensors.

Brian Boyer - Why you should become a hacker journalist (blog post & slides)

Brian's was another talk that got its title changed, in this case from Principles of News App Development. Brian's talk really struck a chord with me. He talked about the work his team has been doing at the Chicago Tribune with open data visualizations and helping to solve social issues. While I've dabbled in open data a bit, Brian's challenge to us to think about hacking in a journalistic way really got me thinking. I've been recently thinking a lot about solving real problems with technology and not a) so-called First World Problems or b) nominal, abstract "good cause" type of tech. Perhaps I can flesh these thoughts out a bit in a future post. Suffice it to say, Brian left me with the gears turning.

As a general note, one thing that did jump out at me specifically in the context of SecondConf as a whole during Brian's talk was the fact that while he spoke mainly of web technologies and sites, there was no backchannel snark going on amongst a group of largely client-side developers and designers. The opposite has happened at prior C4 conferences and, while I'm also a web guy, I was worried it might happen during this talk. But attendees seemed genuinely receptive, which I found really refreshing. Major win!

Rana June Sobhany - How I Became The iPad DJ

Rana June Sobhany

I think there was a general meta-theme to Sunday at SecondConf, which was basically to mix up the preordained schedule as well as the talk names, all the while completely wowing us. Rana's original title was The Importance of Creativity in Business, but what she really talked about (with no slides but an incredibly commanding and energetic presence) was a brief background on how she got into a dual-iPad-plus-mixer setup as a live producer and her trials and tribulations working hard to learn a new craft. Besides overwhelming me with her amazing track record, Rana quickly established a rapport with us as she opened herself up and talked about the vulnerability one can feel when trying something new. She told us how almost immediately after starting in iPad DJing, when the craft was basically in the process of being born, she'd get comments like "You're the worst iPad DJ ever!", which got a chuckle. It seems that there is always someone who will tear you down, but that you should persevere.

Rana then proceeded to mention how she was going to perform a thirty-minute live set for us right then, taking a lot of us by surprise. What followed was a) one of the awesomest displays of live craft I've seen and b) the best conference closer, bar none, I've ever witnessed. I'll defer to Patrick Thomson in both the departments of "at least a generation younger than me" and "easily under 30" when I quote his tweet during Rana's set:

I am absolutely FLOORED by @ranajune's set and setup. This is the illest thing I have seen in a long time.

Really, I can't express enough how amazing a closer this was. The crowd was a mix of some folks sitting on the carpet in front of Rana, storytime-style, other folks following along with rapt attention at their seats, and still others getting into a major coding groove and getting some serious work done to Rana's soundtrack. At various points, Rana would shout over the music, telling about how she was using her iPad-based tools, and at others, she would turn back to focus on particularly intense transitions. Rana's set gave out so much positive energy at the close of an overwhelmingly positive weekend.


If at all possible, I'll absolutely be attending a future SecondConf. I hope that it went well financially for David and the other organizers and that it's a sustainable event. As I mentioned, there were about sixty attendees, which allowed for a good group diversity, but also at times, an intimate setting for discussion and learning. Between the amazing speakers, a solid venue with good food brought in, bright and energetic attendees, and a pleasantly crammed schedule, SecondConf was a huge win in my book.

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.

Looking forward to SecondConf

I'm very much looking forward to attending the first instance of SecondConf in a few weeks, a self-proclaimed "three-day, Chicago-style, single-track conference". While it's obvious that SecondConf is inspired by, and meaning to continue in the tradition of, the now-defunct C4 conference, I'm looking forward to it on its own merits.

C4 was a pivotal institution for me, as I attended the first iteration in 2006 and, two weeks later, quit my job and struck out on my own. This was largely inspired by the people I met at C4, now-friends who were a lot like me and doing what I wanted to do -- work on their own. While I can't praise Wolf enough for assembling such an awesome slate of sessions, the most value for me came from the self-selecting attendee list for C4. I went back for three more years as a way to see and hang out with some of the best Cocoa developers in the world.

The reasons I'm going to SecondConf are threefold: first, this continued face-to-face interaction with many from the Apple development arena; second, to support this nascent conference; and third, because I just plain like going to Chicago in the fall to hang out with Cocoa devs. Old habits die hard, I guess!

Much like Wolf, I still have hesitations about Apple's direction. You may have noticed the conspicuous absence of my own iPhone and iPad apps in the App Store. While I do work on a lot of iOS projects with clients, I choose to stay in the technology space out of a desire to improve my Cocoa programming capabilities most of all and not out of any love for Apple's policies on the actual commercial side of the App Store. So while I fully understand the reasons for the demise of C4, I was ready to accept it as a passing thing. I'm ready to give SecondConf a chance, however, in the same space and see what it's got for us.

Are you going to SecondConf? Leave a comment if you'd like and maybe we can meet up! See you in Chicago!

Making KML Simple For The iPad

I've been involved this summer in some exciting work with Development Seed on bringing their mapping technologies to the iPad. This has included their gorgeous MapBox tile sets, but also third-party data from the internet in the form of KML and GeoRSS. These are each file formats for exchanging geographic information along with content.

GeoRSS is pretty straightforward -- it's basically regular RSS but with a small amount of geographic information added in the form of extra tags such as <georss:point>. KML, however, is a completely different sort of format, written from the ground up for geographic data. It's probably most commonly known as the format that Google Earth uses to exchange geo info. Beyond Google Earth, it has been used in some exciting applications, from Development Seed's own Maps on a Stick tool to The Jane Goodall Institute's Gombe Chimpanzee Blog, which attaches KML data to every blog entry as a way to give it context and to allow the reader to explore the story a bit more.

Once I got started on the iPad work, however, I noticed that there basically was no parsing library for KML on Apple's iOS platform -- iPhones and iPads. Google puts the definitive library, libkml. It's written in C++ (a minor setback) but it also depends on libexpat, something that exists on Mac OS X but not on iOS.

That aside, I thought that it would also be nice to have a Cocoa-native KML parsing library, something that speaks in native Objective-C types like UIImage for icons and UIColor for colors without the need for conversion. So I wrote one!

This library, Simple KML, is now available as open source under the New BSD License, licensed jointly by Development Seed and Code Sorcery Workshop. You can find a basic usage overview in the features summary.

While Simple KML does make KML very simple to parse, it does not do any drawing for you. It's important to note that you will have to take the placemarks, styles, and structures in the KML documents that you wish to display and write your own drawing to display them. This could be on Apple's MapKit mapping library built into the SDK, external mapping libraries, or perhaps your own drawing on static map images. Simple KML just makes it easy to turn a KML file or a KMZ archive into data structures native to Cocoa for use in your own graphics work.

Since Simple KML is open source, I'd love to have any feedback or contributions that you might have to offer. Simple KML is up on GitHub, allowing anyone to create a free account, fork the project, and send me patches via merge requests.

(Cross-posted on the Development Seed blog)

Drupal module: Advanced Comment Trigger

Posted in

I have to admit that I've got it pretty good in the website spam department. The Mollom project, started by some of the same folks who started Drupal, uses content analysis to keep spam users from registering accounts on my site, leaving blog & forum comments, and using my site's contact form to spam me via email as well.

The only problem that I've really seen is the rise of spammers who will post blog comments containing text from the blog post itself, almost entirely unchanged, along with one or more links to their sites. Content-based analysis is of no use here, since the majority of the comment is actual text that I would want on my site -- after all, I blogged it!

Until now, I've been following all blog comments to my site via built-in RSS feeds, noticing spam comments some time after they were posted, and going back and deleting them. Drupal allows for comment moderation, but I want comments to go out there right away.

Drupal also allows for some advanced responses using triggers and actions. I could define a trigger such as "comment contains http://" and then assign it an action such as "unpublish comment". In fact, this is what fellow Cocoa developer and Drupal user David Sinclair of Dejal Systems does currently.

But this presents a problem in my use case, as i want to publish comments of my own sometimes containing hyperlinks. Also, I don't have a problem on my forums, just on the blog.

After some back and forth with David on Twitter, I decided to set out and build a small module to help with this. About twenty-four hours later, I give you: Advanced Comment Trigger.

After enabling the module, head to the trigger configuration in Drupal, then the "Advanced comment trigger" tab. Assign the new trigger to the "Unpublish comment" action, then follow the link to fine-tune the module settings. You can configure the trigger to occur on anywhere from one to five or more hyperlinks in the comment body, as well as exempt certain user roles (for example, site admins) or certain content types (for example, forum topics) from triggering the action.

trigger & action configuration

module configuration

I've also included the source to a Drupal view to create an RSS feed of moderated comments so that you can easily follow the comments to which the trigger applies. Checking this from time to time will allow you to easily publish any comments that accidentally get moderated, as well as get an idea of how well this module is working.

In the near future, I hope to add a few more available actions to the trigger such as emailing a site admin or post author or blocking an offending commenter.

Feedback is welcome. You can follow the project at the Drupal project page or on GitHub.

Pukka's reaching out

Just a note about a couple recent developments with Pukka and other services on the web.

First, I'm happy to announce that Pukka has been successfully supporting Pinboard for some time now. You can see the development of this on the support forum topic. Pinboard is a relatively new service which out of the gate has done a lot of things right. I believe it is run by former Yahoo! employees and they have used their experience with Delicious to rethink social bookmarking. They've been innovating at a fast pace, all the while blogging about their work. It's really refreshing to see rapid, iterative development in the social bookmarking space. They are paying attention to things that matter to today's bookmarkers -- services like Twitter, Instapaper, and Read It Later, dead link detection and bookmark archiving, mobile browsing, Google Reader support, and much more. Not to mention assurance of data integrity and scalability! Keep up the good work, Pinboard!

Second, I wanted to point out another innovative application called Quix. Quix is a bookmarklet that integrates features of many other bookmarklets. For example, you can use Quix's single bookmarklet in your browser as a way to work with Facebook, Delicious, Wikipedia, and Google, as well as a host of Mac applications such as MarsEdit, CSSEdit, ShoveBox, and of course, Pukka. You can check out the full list of services or have a look at a recent TUAW article about Quix, which specifically calls out Pukka.

Lastly, Pukka was recently again featured on MacBreak Weekly, a popular podcast by Leo Laporte, Merlin Mann and others. Pukka was first mentioned on the show about two years ago, when I was dismayed to hear Leo say that he didn't feel that Pukka should cost money. I'm glad to see that Leo has changed his tune in the latest show as he calls Pukka "spectacular" and "worth $17 to me". If you'd like to have a listen, download the episode and forward to about 1:25 in, pretty close to the end. Pukka is also featured prominently in the video version of the podcast as well.

Leo Laporte's web browser
(click to enlarge)

All in all, Pukka's been pretty busy lately. I'm glad to see it getting some press. As always, if there's something you'd like to see Pukka work with better, stop over on the forums and have your say.

Help for Haiti: Indie Relief

In the event that you haven't already seen the banner on my site or heard about Indie Relief through other channels, I wanted to put up a post to get the word out. Fellow Cocoa dev Justin Williams had the idea last week to put together a one-day event amongst Mac and iPhone developers to donate a day's sales to organizations doing work in response to the devastating earthquake earlier this month in Haiti.

I'm happy to report that Code Sorcery Workshop will be participating. One-hundred percent of the sales tomorrow for Pukka and Meerkat will be going to Portland-based Mercy Corps. Here's what Mercy Corps is doing in Haiti.

Over 150 developers have signed on to this event, so I hope that you'll check it out and consider buying some software to support these causes helping with this terrible tragedy.

Followup: Justin Williams reports that Indie Relief raised over $140,000 yesterday. Amazing. Read more here. A big thank you to everyone who chipped in!

Syndicate content