Skip to main content

mapping

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 mapbox.com 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 Apps.gov. 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.

Conclusion

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.

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)

Syndicate content