The news applications team at Chicago Tribune is in search of a detail-obsessed, hyper-organized weirdo to run our projects. Project management is a hard job. You will put stickers on things. You will sort index cards. You will make the boss choose, and not take “both” as an answer.

We believe in freedom through tyranny. Agile software development is an exercise in embracing constraints to draw power from chaos. You will cut features with extreme prejudice.

If you’ve got project-management experience, that’s delightful. If not, let’s talk anyway — we will teach you the way.

We’re in need of a great hacker. Someone passionate for learning programming languages, using the best tools for the job, and in general, getting things done. We’re generalists, and we expect you to be as well. On any given day you might implement a responsive web design w/ HTML5 + CSS3, explore a dataset with a reporter looking over your shoulder, or help make the servers swift.

Bonus points if you’ve got skills in…

Data science

Information design

User experience / usability

Maintaining high-performance web sites

Graphic design

Allow me a moment to persuade you

The newsroom is a crucible. We work on tight schedules with hard deadlines. While this may seem stressful, it’s got a serious upside. Every couple of weeks we can learn from our mistakes and refine our technologies. It’s a fast-moving, volatile development environment that will make you a better programmer.

Also, it’s a damned good time.

Find examples of our work at Maps & Apps. To get a feel for the full news apps experience, check our team blog. (Every team member is expected to blog their findings. We believe it’s essential to show your work!)

Gear you’ll get

One shiny, new MacBook Pro (or an iMac, if you’d prefer)

One CDM (Cheap Dell Monitor)

One comfy Aeron chair

…all at a desk somewhere in the Tribune newsroom, where you’ll be surrounded by reporters arguing with the cops, yelling about the ball game, telling crazy stories, and otherwise practicing their trade.

There is no free pop, pinball or posh cafeteria, but you’ll love your work.

You’ll arrive energized, and leave satisfied that you’ve done something that will make your mom proud.

The Boundary Service is a ready-to-deploy system for aggregating regional boundary data. We’ve recently made it a pluggable django app. Check out Hack Tyler‘s instance for the hot demo boundaryservice.hacktyler.com/.

We’re in need of a creative web developer. Someone passionate for learning programming languages, using the best tools for the job, and in general, getting things done. On any given day you might create responsive web designs with CSS3, stitch together content APIs, build snappy user interfaces with Backbone, or script backend Python or PHP.

It’s a job for a talented generalist, or someone who’d like to become one.

Allow me a moment to persuade you…

The newsroom is a crucible. We work on tight schedules with hard deadlines. While this may seem stressful, it’s got a serious upside. Every couple of weeks we can learn from our mistakes and refine our technologies. It’s a fast-moving, volatile development environment that will make you a better programmer.

…all at a desk somewhere in the Tribune newsroom, where you’ll be surrounded by reporters arguing with the cops, yelling about the ball game, telling crazy stories, and otherwise practicing their trade.

There is no free pop, pinball or posh cafeteria.

But, you’ll like what you do. You’ll come to work energized, and leave satisfied that you’ve done something that will make your mom proud.

Running the render script should have created a mess of directories and images. Let’s finally put them on a Google map. The key bits of javascript are relatively simple. You create a callback function to hand off the URL of any given tile to Google, and configure a new overlay map, and push it onto the stack, like so:

The geo search, the legend and the tricky hash-URLs are left as an exercise to the reader. It’s all in the demo code.

(Not to miss: The legend background color is the same background color as the base map, and the legend opacity matches the overlay opacity. This ensures that the colors in the legend match the colors on the map.)

To try it all out, fire up your handy one-line web server in the project directory…

Finally, something simple. Just copy the census-demo directory (containing your HTML, Javascript, styles and tiles) out to Amazon’s cheap and easy S3 hosting service and if you’ve got all the paths right, it’ll work like a charm. No fancy servers necessary.

Beware: Deploying to S3 seems quick until you try to push out a ton of files. The number of tiles you cut increases exponentially with each zoom level. Our census map of northeast Illinois, max zoom level 16, amounted to more than 130,000 tiles, and took several hours to deploy.

We’re working on strategies to speed up rendering and deployment. Stay tuned to the apps blog for further developments. We’ll post it when we’ve got it.

You’ll need pip, virtualenv and virtualenvwrapper to follow along. (You’ll also need Mapnik, which you should have installed during part three.) If you’re not familiar with virtualenv yet, this will be a happy moment in your life as a Python developer.

First, let’s fire up an env and install our requirements (I would normally use —no-site-packages here, but I want Mapnik).

Run this in your project directory…

mkvirtualenv making-maps-demo
pip install -r requirements.txt

Carto -> Mapnik

To render your tile layer, you’ve got to first compile the Carto to Mapnik XML. We can use the copy of Carto that’s installed with Mapnik, there’s no need to compile your own. I’ve got a little script that copies the files to the project directory (good for version control!) and compiles things. You will need to adjust the path to TileMill for your installation location.

Mapnik is not a tile-rendering system. It is an image generator. So, we must explicitly instruct it on how to cut our tiles. Luckily, the folks at Open Street Map already did the hard work. Our Mapnik script (source included in the demo code) is nearly the same, just generalized a bit.

To run the rendering script, you’ll need to know the extents of your state in latitude and longitude. There’s certainly a better way to do this, but my solution has been the LatLng plugins for Google Maps Labs. Grab the coordinates of the upper-left and lower-right corners of the area you’d like to render.

The script clears out the tiles directory (prefixed with a . as to not upset TextMate, it’s bad at lots of files) and tells our Mapnik script where to find your styles, where it should put the tiles, the extents of the area to be rendered, the minimum and maximum zoom levels and the number of processor cores to use.

If you’ve got everything right, then rendering your tiles should be as easy as pie. (And by that, I mean as difficult as pie. Pie is a damned hard thing to get right. But I digress…) When I’m fine-tuning my maps, I’ll run through this cycle many times:

./setup
./style
./render

Looking in your .tiles dir, you will hopefully find a pile of pretty tiles, ready to be overlayed on a map.