Call it old-fashioned, but I still have a passion for applying the growing power of home computing to improve everyday lives. I enjoy taking my technical understanding of certain problems and packaging it into approachable, usable products for people. I've continued slow but steady progress on a number of such projects within the constraints of being a working father.
ShutterStem is an open, decentralized photo organizer being written on top of CouchDB.
Being both a shutterbug and a software guy, I've been designing little utilities for photo management for nearly a decade. ShutterStem now represents the headquarters of these efforts.
It's not so much a single app or product yet as it is an extendable, syncable, scalable collection of user interfaces. Each sub-app focuses on its own facet of organizing/browsing/sharing a lifetime of memories and pictures.
Metakaolin provides a powerful yet simple GeoJSON document editor, and has become a platform for further web-based GIS experiments.
The current heart of Metakaolin is its feature editor. It's intuitive interface lets the user trace any vector shape without the traditional modal "tool pickers" required by most similar utilities — designed to work well in both mouse and multitouch finger-driven contexts.
Web apps hosted from personal servers seem like a promising compromise between usability and freedom, and CouchDB provides a near-perfect platform for just that.
In addition to the two Couch-based projects above, I've also been building smaller CouchApps to assist me in other common tasks:
My go-to tools lately have been d3.js, Polymaps, and Fermata on the clientside and CouchDB (via couchapp and Kanso), node.js and Python on the serverside. I also keep my C/C++/Objective-C skills within close reach. Just in case.
I resumed non-employment in the spring of 2012, focusing mainly on paid client work, but also keeping an eye out for opportunities where I might provide a useful product or service directly to end users.
As an independent contractor for Inquirium, I've iteratively developed a web-based "E-reader" application in support of reading comprehension in the classroom. I've worked with this client to refine and implement their research designs, supporting and refining the codebase as it undergoes real-world testing.
As a consultant, I helped integrate both Google Earth and Google Maps into this storytelling startup's product, rebuilt the media playback architecture, and helped debug a number of underlying platform issues with the YouTube API.
With the help of a couple part-time contractors, I began gathering public domain satellite and aerial imagery to process into map tiles. The project launched in a preview fashion, but was ultimately superseded by a service offered by a better positioned team.
&yet is a web software consultancy that makes everything from simple fresh-looking layouts to complicated Django/XMPP/node.js web applications, and recently expanded into the security and ops business as well. I began contracting for them in 2010 and became their seventh employee that June.
RECON Dynamics develops devices and provides network infrastructure for remote location tracking and telemetry. &yet's role on this project entailed responsibility for the entire user-visible software stack and all its supporting systems (affectionately labeled the "Web Front End" by their corporate engineers). My time was largely dedicated to this client during my employment.
I was brought in as &yet's geospatial expert — generating custom aerial and streetmap tiles while also rewriting core OpenLayers functionality to view them better — eventually also filling the roles of project manager and Django software lead as our deliverables on the product settled into more mundane stages of development.
I also had the privilege of continuing to work with Hjon off-and-on as he developed the supporting iPhone app as an independent contractor under our direction.
During some client project downtime, I was able to do continue my R&D on animated map drawing in the context of &yet's investment into WebGL.
Once I mastered the fundamental principles of OpenGL ES 2.0, I was able to offload most of the necessary computation onto the GPU. The result provided realtime framerates for both raster reprojection and vector line drawing, as demonstrated by a spinning world map that smoothly transitions between cartographic projections.
Fermata is an HTTP client for node.js and modern browsers, designed to compete with high-level API-specific REST wrappers while still giving direct access to all request parameters. Essentially, I designed (and refined) a very clean syntax for forming, extending, and requesting URLs as if they were "native" JavaScript objects that's worked very well in practice.
This library provides an early, compelling use case for ES.next virtualized objects. These "Proxy" objects are a new JavaScript language feature being implemented in many JavaScript engines, slated for inclusion in the next JavaScript standard. Fermata's design also includes an underlying syntax that is nearly as natural, but enables the code to remain compatible across all modern browsers.
Calf Trail Software was an independent company started by me and Hjon. This was my full time job from January 2008 to July 2010. The two of us built Mac shareware and iPhone apps, and my wife helped with much of the artwork we needed. Eventually Hjon and I both moved on to our own contract work and paying jobs, and the company has become rather dormant.
The first version of Geotagalog was limited to only one workflow, geotagging as it copied photos from a camera into iPhoto.
The second major version of Geotagalog was way more flexible: it could safely geotag original files in place, set coordinates for iPhoto Places without touching the underlying files — via a surprisingly significant amount of AppleScript code! —, and could even properly handle images that were already in an iPhoto library.
(Before I finished the documentation and released the upgrade, I took on full time employment where independent income was discouraged.)
I designed a handsome "10-foot" interface to give star ratings to pictures. The concept was that users could sit back with their Mac's bundled remote control and give a "thumbs up" to good photos. This would encourage shutterbugs to filter out their best photos, and enjoy them more.
Unfortunately, not only was it slow on the large photo libraries it targetted (due to peformance limits in iPhoto's third-party scriptability), but would have also required concerted advertising investment (due to the fact no one really thinks to look for such a task-specific app).
This was a fun one.
Apple's Magic Mouse was their first (and for a while, only) multitouch input device for desktop computers. Since the early days of Mercatalog, I'd wanted to play with pinch zoom for map navigation, and I wasn't going to let lack of driver support stop me.
Others had already mostly figured out how to read the raw touch data from Apple's drivers, but I wanted to make the full finger information available from the Magic Mouse to all Cocoa apps that supported the laptop multitouch info. After a few weeks pouring over hex dumps, assembly code and driver headers, I finally figured all the details I needed to inject multitouch and gesture events into the system.
When that was done, I needed a cool end-user interface to show it off. Given the name and icon and instructional purpose I had in mind, enough pieces were available for the visual and interaction designs to all but fall into place on their own. Thus was born Sesamouse.
Sesamouse was the most popular app I've written. It was the only similar app that offered real (non-shortkey) zoom/rotate support, and free! These days, though, I recommend simply buying the nicely-sized, officially-supported Magic Trackpad if you need desktop multitouch support.
After iPhoto's new Places feature brought the map half of Mercatalog to the mainstream, I was able to relatively quickly convert its tracklog-based geotagging code to a simpler app.
I combined Mercatalog's core ideas (and code) with Apple's relatively obscure Image Capture API for the first release, and in subsequent minor releases honed the UI and featureset, including code for a number of additional tracklog formats.
Users appreciated the straightforward way Geotagalog could automate bulk geotagging, and it became Calf Trail's most profitable paid app.
Mercatalog was a few and a half lessons.
My goal was to create a completely visual photo organizer, centered around a beautiful animated map (that worked completely offline‽), using a intuitive drag-and-drop to place photos along tracklogs.
This was the first of it's kind — back then, there wasn't much you could do with geotagged photos besides post them to Flickr. Most GPS tracklog–based geotaggers in those days worked were more like spreadsheet wizards than powerful maps (even on the Mac).
While all the above requirements were there for good reasons, it was an awful lot to bite off; plus this was my first Cocoa app! After a year, we hadn't found a magic solution for making a fully downloadable map that was detailed enough, and we hadn't designed enough overall photo management features for people to use Mercatalog as their primary photo catalog. We decided it was time to ship it warts and all...right around the time Apple announced they were adding a map to iPhoto!
Needless to say, it didn't set us on the path to millionare-hood like we'd thought it would after reading too much Wil Shipley. We had accomplished the primary idea I'd had to "invent" in late 2007, though: geotagging by simply dragging photos along a GPS tracklog.
While I focused primarily on the Mac side of things, I also helped Hjon get started with Cocoa Touch programming and helped him design our iPhone apps: Resistulator, Cheap GPS, and Inbugz.