A Quick Early Voting Mashup

Our county’s Board of Elections recently approached me with an idea for a map showing early voting sites. Early voting sites are different from regular polling locations in that they are unassigned - as a registered voter you can go to any one you choose.

The idea was fairly vague, but I’ve worked with our Board of Elections for a long time and have a fairly good feel for what they like to see. So on a Monday morning I started work on a quick mashup. It went something like this:

7:00 - 8:00 Caught the bus, opened my laptop, and outlined what I wanted to do. I use Freemind for this and usually plan my day on the bus ride in to work. I figured out what I needed, how I would fit it all together, and even made a separate node for possible reasons why the most enormous person on the bus always manages to sit next to/on me.

8:00 - 9:00 My daily write-off time. Emails, phone messages, co-worker drop-ins, scan the intertubes, tamp down any fires that sprung up overnight. Nothing noteworthy ever happens from 8-9. I’ve learned to live with it.

9:00 - 10:00 Entered the 16 early voting sites in a Google Docs Spreadsheet Mapper. I went this route because (a) it was easy, (b) it has some nice pop-up templates built in, and (c) I can share the document with Board of Elections staff for editing. After an hour I had the data in, including links to building images where our CAMA data had them, and checked it out in Google Earth. Sweet.

10:00 - 11:00 Spotted on the way to the bathroom. Helped on a SQL query, shared a teeth-gnashing over a project, shook my head in incredulity over a SDE issue, talked about an upcoming (knock on wood) virtualized server for some of my goodies, regaled with stories of weekend adventures. Exited the bathroom when the hall looked clear, dove into a prone position, and belly-crawled back to my office.

11:00 - 11:15 Checked the KML in Google Maps. Still worked. Things that work the first time creep me out. Checked it again.

11:15 - 12:00 Opened Eclipse and laid out a basic page. Probably overkill using Eclipse for this, but I use Eclipse for pretty much everything (HTML, CSS, XML, Javascript, PHP, Python, Ruby, etc.), unless it’s a quick thing. In that case it’s Notepad++ or Gedit. Take a snap shot of of the current Board of Elections page for a background, drop it in, basic CSS, align div’s, etc.

12:00 - 1:00 FOOD

1:00 - 1:30 Answer a couple questions, scan the intertubes, remember what I was doing before lunch.

1:30 - 3:00 Javascript work. Dropped in a Google Map, zoomed to my subject area, added a couple of controls, mouse navigation, and pointed it at the Google Docs Spreadsheet for the KML layer. Worked first time out. Suspicious. Added jQuery, address entry form, JSON call back to my REST geocoder, street name auto-suggest, JSON handler, results table with paging. Several Javascript errors. Swearing. Make all better.

3:00 - 3:15 Nice folks park in my doorway to chat. Can’t remember about what. Nice folks though. Must remember to put trap door there.

3:15 - 3:45 Tweak, tune, polish. More CSS work, couple of graphics, instructions, etc. Bob’s your uncle, call it ready for demo.

3:45 - 4:00 Emails, last minute stuff, shake head at my slovenly office, head to bus stop and speculate which enormous person in line will soon be sitting next to/on me.

Later That Week: Show it to customers, love love love it, ask me how long it took, forget to say “I’ve been up for five nights working on this” and instead say “Monday”, stupid stupid stupid.

You can try to check out the site here, though it’s just a scratch project and may not be there for long.

Mashups have a lot of benefits, but one that is sometimes undersold is the savings in development time. A mashup is more or less an assembly of parts, and putting parts together is always faster than manufacturing the parts yourself. I was able to leverage Google Maps, Google Doc’s Spreadsheet Mapper, add a couple of our own REST web services, slap them together in no time and meet a customer need. All told I didn’t put 5 hours in the whole thing. Bob’s your uncle.