My first ultra relay was a blast. I’m definitely not feeling my best right now, but I’m quite pleased with myself for knocking out 33.8 miles of running with a team that finished the 196 mile relay in 31 hours. It was a great team effort and the whole experience was awesome.

I’m really grateful for my prior captaining experience and the planning I was able to do based on past Ragnars. The van was well stocked with water, Vitamin Water and Gatorade, we had a good amount of snacks and the tailgate grill & camp coffee setup were priceless additions.

The pop-up changing/shower tents worked out super well. I kept the stink off and didn’t get any major rashes.

If I had one thing to change, it would have been to train up to the full mileage. I was training on 3 X 10 miles as my last long runs. My actual legs were 12.6, 11.8 and 9.4. I went with the mentality of training up close to target distance but not quiet and that just didn’t work for the relay. Net time I ultra, I’ll definitely put some more mileage in my training plan.


Howdy Folks! I put together this handing list of Google Maps links with the GPS coordinates from the Rag Mag. I hope they come in handy for those of you that can actually get phone signal in rural Wisconsin. :)
Exchange 1
Exchange 2
Exchange 3
Exchange 4
Exchange 5
Exchange 6
Exchange 7
Exchange 8
Exchange 9
Exchange 10
Exchange 11
Exchange 12
Exchange 13
Exchange 14
Exchange 15
Exchange 16
Exchange 17
Exchange 18
Exchange 19
Exchange 20
Exchange 21
Exchange 22
Exchange 23
Exchange 24
Exchange 25
Exchange 26
Exchange 27
Exchange 28
Exchange 29
Exchange 30
Exchange 31
Exchange 32
Exchange 33
Exchange 34
Exchange 35

Screen Shot 2014-03-24 at 7.31.27 PMGame Day Monitor is a fun side project I’ve been working on with Eric Bryning who is the volunteer coordinator for our AYSO region here in Oak Park. Eric asked me for help prototyping an application to capture feedback from AYSO games.

It’s a simple form that volunteer monitors can use to submit reports to help gather data about the behavior of parents, coaches and referees at the games. The core values of AYSO are focused on providing a fun, family environment to help instill a love for the game into kids, whether they are brand new to the game or well on their way to a lifetime of playing. I’m glad to be helping with this project because it will help make it easier for the volunteers that keep the league running to gather data and to identify problems with poor sportsmanship or bad parent behavior. It’s a bummer that this thing even needs to exist, but I’m always pleased when I can make a useful tool from what was a email-based or word-of-mouth reporting. Moving forward the league will be able to collect data in a database that they will be able to use more effectively.

We’re starting very simply with a release for the spring season and as we gather data, we’ll start to layer on user management and reporting as needed. I started the project by wireframing the site out in Web Flow. As I’d hoped, by doing the initial design work in Web Flow, I ended up with a responsive prototype that didn’t take much more work beyond wiring up the PHP for the data storage and laying on some CSS to style the form controls. All told, I was able to get a viable tool ready with an evening’s work.

Screen Shot 2014-03-24 at 9.58.27 AM I’ve been helping my friend Kara Eastman on a landing page and some identity work for her campaign for a seat on the Omaha Metro Community College board. It’s been a great project for me, because it has been a mix of some design work along with an opportunity to try out Stripe payments and Perch CMS together as a lightweight set up for a landing page to collect campaign contributions.

Stripe was very easy to implement. As the rave reviews of my friends have led me to expect, the signup was unbelievably quick. I spent more time getting through the verification process for the SSL certificate on the domain than I did getting Stripe tied to the campaign’s bank account. So cool.

I needed to customize a bit, so I went the route of using Stripe’s PHP library to create my own charges. If you have really simple needs, they have a super simple popup JS implementation for checkout that only needs a line or two of code to implement.

The API is straightforward and well documented. There are lots of examples for PHP, and from what I could tell poking around Stripe’s docs, GitHub and Stack Overflow there is Ruby, Python and other implementations to choose from. Stripe give you Javascript to implement which will generate a token on your page which is then passed to the PHP to create your actual charges.

My past experiences with commerce gateways have involved days of back and forth with support, out of date or esoteric documentation and general pains in the butt all around. Stripe is a dream. I’m hooked for life.

My other new love is Perch. I bought a license for a personal project a while back and never got around to using it. Like Stripe, the thing that hooked me was the documentation and ease of implementation. I’ve been after a way to move past WordPress as a go to for a long time. I’ve long felt that what I want out of a CMS is to be able to start from scratch without a predefined content paradigm and to start from writing some good clean static HTML as a base for my templates. I also want to be able to make the barest minimum of administrative functionality. Perch lets me do all this.

ke_mccFor Kara’s landing page, I started with a simple Bootstrap-based landing page template. Currently, some of the content is static HTML and only a couple areas are managed through the CMS. I’ve only created content managed areas for things that are likely to be edited. I added a custom form for the Stripe integration and set up a Google font that is a close relation to the Lubalin Graph slab serif I’m working with for Kara’s logotype.

This was a fairly quick turnaround to get live, but the pieces are all easy to implement. I expect that the Bootstrap, Perch, Stripe recipe will be my go to setup the next time I need to build a landing page or microsite.

“HTML5, or as some people call it, HTML” – Jon Buda.

Just about a year and a half ago, I had the distinct pleasure of hosting my first ever Chicago HTML5 Meetup at the COOP coworking space in Chicago. Our presenters were Jon Buda and Sam Rosen. Sam presented the business case and design thinking behind Desktime (www.desktimeapp.com) and Jon Buda presented the tech stack and dev methodology.

It was a great night. A seminal moment for the Chicago HTML5 Meetup that set the tone for the blend of strategic, design and tech content that has become a staple of our monthly events and our great mixed membership.

I thoroughly enjoyed the event, but the thing that sticks out in my mind more than anything from that evening is the quote from Jon above. Not least because I was one of the folks on the losing end of the HTML5 v HTML naming argument.

Which brings to mind another statement on naming. At Brad Frost’s session at SXSW 2013, he was talking about the debate over what to call what we all now just think of as Responsive Web Design and mentioned AJAX as a great example of another epic naming battle. The thing I remember, his point, was that folks might have been freaked out over what to call AJAX, but nobody, NOBODY was arguing the fact that we needed a browser standard for the asynchronous exchange of data using Javascript.

Likewise, we might complain about the naming or even the contents and recommendations contained in the HTML5 specification, but we can all agree on the need for a standard. Well, most of us anyway.

Even though it’s still not fully supported everywhere, and still evolving, the buzz and adoption of HTML5 as a defacto standard has had a huge impact on our industry. The support for HTML5 by the browser vendors has resulted in significantly reduced uncertainty. We’ve moved out of Beta v VHS territory to a place where the risk of investing time, resources and money are much lower risk.

As a result, you can now find HTML5 in the dashboard of cars, in refrigerators, in smart tv systems and many other places where proprietary device native development once would have been the sole option for building an application.

I might be biased, but given that I’ve been a web developer since that was ever a thing one could do with their life, being able to use my core skillset to create things that might be just as likely to appear on a desktop computer screen as a vending machine or an in-dash entertainment system feels like a really good thing.

As a result of this new found stability, I’ve seen my peers turn their attention away from figuring out how to fix bugs in browsers that have dropped the ball on this feature or that. I don’t believe we’ll ever get away from progressive enhancement or graceful degradation. We need to do these things, but having clarity around what the browser vendors support now and at least a general idea of what they will support in the future means that progressive enhancement can legitimately be considered as more of an afterthought than the main event it used to be.

Freed from the drudgery of fixing bugs in browsers, and armed with the power of Github, we’ve seen more and more folks turning their attention to creating new tools to make our jobs easier and more efficient so that we can focus on even more innovation and the building of cool shit.

Good times my friends. Good times.

Our first event of the year was a smashing success.The theme for the night was Show and Tell. We featured multiple presenters given 10-15 minute talks about their favorite tools and techniques.

Attendance was great and the presentation format was very well received. I think this is due in large part to some great content that, while well within the interests of the group, covered a decent range of topics.

I kicked things off with an overview of one of my tools for remote debugging and analysis, Charles Proxy (http://www.charlesproxy.com/). Charles has some great features that allow you to observe and manipulate HTTP requests and responses. My favorite features are it’s ability to mirror content to a local directory while browsing a site, along with Charles great throttling and remapping features. The demo is well worth checking out for anyone that is interested in tinkering with server traffic without the learning curve off messing with network config files.


My co-organizer Mark Rickmeier presented some of his favorite applications from the ever-evolving landscape of mobile prototyping tools. There are new tools coming to market regularly so depending on your needs, you have lots of options. My favorite of the tools he showed is POP (https://popapp.in) which is a tool the allows you to sketch on paper and then to capture your sketch and add interactivity on your mobile device.

Adam McCrimmon covered old school, low budget prototyping with PDF files. He aptly pointed out that since a lot of folks are already
producing PDFs to present to clients, the barrier to providing at least rudimentary prototypes is pretty much non-existent. This was a reprise of a presentation he gave at Prototype Camp in Chicago. He has posted some resources here http://amccrim.com/protopdf

Mike Gibson from Table XI, who currently holds the #1 spot on my list of favorite presenters cover the Autoprefixer tool for parsing CSS and adding vendor prefixes based on Can I Use data. Check that out on Github – https://github.com/ai/autoprefixer

Matt Wagner also from Table XI, shared some tools and techniques for keeping remote teams working together smoothly including one of my favorite new tools Screen Hero (http://screenhero.com/) and the new multi-user chat client Slack (https://slack.com/)

Our last speaker of the night, Andy Richardson from Kohactive introduced Middleman (http://middlemanapp.com/) a tool for outputting static sites from modern templated front-end coding tools.

Big thanks to Zach Schneider for live tweeting. He posted recap at http://bitly.com/bundles/zachschneider/7

Friends, Chicagoans, Countrymen. On June 6-7 I’m doing something that would have been unthinkable 5 years ago. I know you’ve probably become accustomed to my Ragnar posts over the last few years and it’s likely that you know longer find the notion of a 200 mile running race as shocking as you once might have.

Well, this year I’m taking it up a notch. Actually, 6 notches. For 2014, I’ve decided that running 200 miles with 12 teammates isn’t challenging enough and have instead opted to run this year’s Ragnar team with a 6 man ultra team.

Each of us will run approximately 3 half marathons in less than 36 hours and because we will only have a single van instead of two their will be no opportunity for napping, no showers, no breaks for dinner. We’ll start at 6AM on Friday and will keep going until we cross the finish line on Saturday.

At this point, you are probably thinking to yourself, “Holy shit! That’s fucking crazy! These guys must me total badasses!” and you are absolutely right to believe all of that. You’re probably also asking yourself what you can possibly do to assist us in our effort to firmly establish ourselves as the coolest people you will ever have the pleasure of knowing.

Well, I’m glad you’re asking. One of the requirements for Ragnar teams is that we provide 3 volunteers to help keep things running smoothly. Volunteers do not have to run 39 miles, nor do they need to spend 36 hours in a van with sweaty sweaty men. You just need to yell some number, write some numbers down on paper and make sure that people don’t be parking where they shouldn’t be or running people over with their vans.

Also, I will buy you booze. So, whaddya say? Wanna be a part of this historic effort?

unroll.me provides a service to help users manage subscription e-mail. I signed up over the weekend and was able to take over 270 subscriptions and assign them to three categories; unsubscribe, keep as is and add to my “rollup”. For the rollup, unroll.me takes all your opt-in subscriptions and compiles them into a newsletter format that arrives in your inbox at whatever time you schedule.

I unsubscribed from a bunch of high volume lists and left things like my bank balance alerts and utility bills untouched.

In just a few days it’s been very effective in reducing the volume of mail I get in my Gmail account. I get the rollup email in the morning. It’s really nice to have all the promotions mails, magazine subs and other non-essential email come in as a single message instead of a pile of unread messages.

Adoption of unroll.me is growing. To highlight their accomplishments for 2013, unroll.me created an awards list the compiles data from the unroll.me user base for Most Unsubscribed, Most Rolled Up and Most Popular subscriptions.

The biggest losers are;
1800 Flowers — 52.50% unsubscribe rate
Ticketweb — 47.50% unsubscribe rate
Pro Flowers — 45.10% unsubscribe rate
Expedia — 45.00% unsubscribe rate
Active.com — 44.70% unsubscribe rate

Might be instructive (or perhaps a new biz opportunity?) to have a look at how those companies are handling email marketing.

Check out the full list here:

I had a great Ragnar overall this year. Despite being a bit undertrained, I ran well. The team was great. My vanmates were awesome. I had the pleasure of sharing the ride in Van 2 with Jeff Wallichs, Ken Novak, Hilary Klein, Greg Battoglia, Pat Egan and Beth Folkmann. Our Van 1 was April Lasker, Anna Debush, Megan Finkelman and the three amigos Doug Schenkelberg, Rob Breymaier and David Kahlow. We had a bunch of veterans this year, but also expanded our South Oak Park Ragnar gang with some first timers. All of the newbies and veterans were already making noise about running again next year and the ever-enthusiastic Mr. Wallichs was advocating for an ultra team pretty hard.

This year saw some tweaks to the van which were pretty sweet. After seeing some teams with shelving units in the back cargo space last year, I knew I had the answer to the issue of things getting buried and lost. In years past, the back of the van turns into an unmanageable pile as the rush from exchange to exchange goes on. I have typically had to unpack and repack the van at each major exchange. Not so in 2013. The little modular shelving we used allowed us to keep the sleeping gear, coolers and group supplies (first aid, snacks, etc.) separated from everyone’s personal gear. They worked like a charm.

We had great weather and great team spirit. Our only negative was a couple of lost runners. I missed a turn in Racine, WI during the middle of the night which was really unfortunate because in the cool evening air I was a few minutes ahead of my projected time and felt great. In the end, I went a good 1/2 mile out of my way, but only finished a couple minutes late.

The finish line was awesome as always. I nabbed the runner 12 spot this year so I got to run the final leg. Next year, I’m hoping to be runner 1. After three years in van 2, I’d like to see the start in Madison for once.

Hi folks. I’ve made links for getting directions from Google Maps Navigation using the GPS coordinates of each exchange. My site is responsive designed so this list should be nice and readable on any screen size.

The links will give you directions from your current position (assuming you have a GPS signal) or from exchange to exchange. Under each exchange, “Start:” is the exchange you are leaving from, and “End:” is the exchange that is listed. So the start for Exchange 3 Runner 4 Start is Exchange 2 and the end is Exchange 3 and so on and so forth. I put the runner start in because even after 3 Ragnars that whole exchange minus 1 equals runner thing still kills my brain at 2 in the morning. I’ve checked these as best I can, but if something seems fishy, you’d best double check it.

Have fun! See yez on the course. Honk if you see a bald guy with a red Camel Bak.

Start Line Runner 1
Olin/Turville Park
1156 Olin-Turville Court, Madison, WI 53715

Exchange 1 Runner 2 Start
Olbrich Park 3527 Atwood Ave. Madison, WI 53174
Start: 43.057 -89.383 End: 43.089 -89.330
Current Location to Exchange
Exchange to Exchange

Exchange 2 Runner 3 Start
New Life Church 7564 Cottage Grove Road
Start: 43.089 -89.330 End: 43.088 -89.247
Current Location to Exchange
Exchange to Exchange

Exchange 3 Runner 4 Start
Fireman’s Park 4116 Villas Rd. Cottage Grove, WI 53257
Start: 43.088 -89.247 End: 43.074 -89.208
Current Location to Exchange
Exchange to Exchange

Exchange 4 Runner 5 Start
Deerfield Lutheran Church 206 Main St, Deerfield WI 53531
Start: 43.074 -89.208 End: 43.051 -89.076
Current Location to Exchange
Exchange to Exchange

Exchange 5 Runner 6 Start
Cambridge High 403 Blue Jay Way, Cambridge, WI 53523
Start: 43.051 -89.076 End: 43.006 -89.008
Current Location to Exchange
Exchange to Exchange

Exchange 6 Runner 7 Start
Lake Mills High School
615 Caitlin Dr, Lake Mills, WI 53551
Start: 43.006 -89.008 End: 43.070 -88.911
Current Location to Exchange
Exchange to Exchange

Exchange 7 Runner 8 Start
Jefferson County Fairgrounds 503 N Jackson Ave, Jefferson, WI 53549
Start: 43.070 -88.911 End: 43.017 -88.820
Current Location to Exchange
Exchange to Exchange

Exchange 8 Runner 9 Start
Vetro Winery
1414 Vino Lane, Jefferson, WI. 53549
Start: 43.017 -88.820 End: 43.003 -88.779
Current Location to Exchange
Exchange to Exchange

Exchange 9 Runner 10 Start
Helenville Bike Trail Depot Helenville, WI 53137
Start: 43.003 -88.779 End: 43.019 -88.695
Current Location to Exchange
Exchange to Exchange

Exchange 10 Runner 11 Start
Sullivan Trailhead Palmyra St and Front St, Sullivan, WI 53178
Start: 43.019 -88.695 End: 43.012 -88.586
Current Location to Exchange
Exchange to Exchange

Exchange 11 Runner 12 Start
Cory Municipal Park 140 S Main St, Dousman, WI 53118
Start: 43.012 -88.586 End: 43.014 -88.473
Current Location to Exchange
Exchange to Exchange

Exchange 12 Runner 1 Start
Wales Community Park
420 Brandybrook Rd, Wales, WI 53183
Start: 43.014 -88.473 End: 42.998 -88.377
Current Location to Exchange
Exchange to Exchange

Exchange 13 Runner 2 Start
Sunset Park S30 W28452 Sunset Dr, Wales, WI 53189
Start: 42.998 -88.377 End: 42.990 -88.310
Current Location to Exchange
Exchange to Exchange

Exchange 14 Runner 3 Start
Carroll University
100 N East Ave, Waukesha, WI 53186
Start: 42.990 -88.310 End: 43.004 -88.229
Current Location to Exchange
Exchange to Exchange

Exchange 15 Runner 4 Start
Poplar Creek Church 17770 West Cleveland, New Berlin WI 53146
Start: 43.004 -88.229 End: 42.992 -88.135
Current Location to Exchange
Exchange to Exchange

Exchange 16 Runner 5 Start
Greenfield Park Greenfield WI 53227
Start: 42.992 -88.135 End: 43.009 -88.064
Current Location to Exchange
Exchange to Exchange

Exchange 17 Runner 6 Start
Alan Kulwicki Park 10701 Coldspring, Greenfield, WI 53228
Start: 43.009 -88.064 End: 42.966 -88.046
Current Location to Exchange
Exchange to Exchange

Exchange 18 Runner 7 Start
Martin Luther High School
5201 S 76th St, Greendale, WI 53129
Start: 42.996 -88.046 End: 42.949 -88.009
Current Location to Exchange
Exchange to Exchange

Exchange 19 Runner 8 Start
Franklin High School 8222 S 51st St, Franklin WI 53132
Start: 42.949 -88.009 End: 42.896 -87.980
Current Location to Exchange
Exchange to Exchange

Exchange 20 Runner 9 Start
Oak Creek High School 340 E Puetz Dr, Oak Creek, WI 53154
Start: 42.896 -87.980 End: 42.887 -87.908
Current Location to Exchange
Exchange to Exchange

Exchange 21 Runner 10 Start
Parkway Apostolic Church 10940 S Nicholson Rd, Oak Creek WI 53154
Start: 42.887 -87.908 End: 42.846 -87.894
Current Location to Exchange
Exchange to Exchange

Exchange 22 Runner 11 Start
Greater Racine Kennel Club 6320 6 Mile Rd, Racine WI 53402
Start: 42.846 -87.894 End: 42.814 -87.857
Current Location to Exchange
Exchange to Exchange

Exchange 23 Runner 12 Start
The Prairie School 4050 Lighthouse Dr, Racine WI 53402
Start: 42.814 -87.857 End: 42.775 -87.775
Current Location to Exchange
Exchange to Exchange

Exchange 24 Runner 1 Start
John Pershing Park 500 Pershing Dr, Racine, WI 53403
Start: 42.775 -87.775 End: 42.725 -87.779
Current Location to Exchange
Exchange to Exchange

Exchange 25 Runner 2 Start
Jones Elementary School 3300 Chicory Rd, Racine WI 53403
Start: 42.725 -87.779 End: 42.684 -87.817
Current Location to Exchange
Exchange to Exchange

Exchange 26 Runner 3 Start
Pennoyer Park, 3601 7th Ave, Kenosha WI 53140
Start: 42.684 -87.817 End: 42.605 -87.820
Current Location to Exchange
Exchange to Exchange

Exchange 27 Runner 4 Start
Anderson Park 8730 22nd Ave, Kenosha WI 53143
Start: 42.605 -87.820 End: 42.547 -87.835
Current Location to Exchange
Exchange to Exchange

Exchange 28 Runner 5 Start
Christ Community Church 2500 Dowie Memorial Ave, Zion, IL 60099
Start: 42.547 -87.835 End: 42.450 -87.836
Current Location to Exchange
Exchange to Exchange

Exchange 29 Runner 6 Start
Lake County Community Action 1200 W Glen Flora Ave Waukegan, IL 60085
Start: 42.450 -87.836 End: 42.380 -87.846
Current Location to Exchange
Exchange to Exchange

Exchange 30 Runner 7 Start
North Chicago High School 1717 17th St, North Chicago, IL 60064
Start: 42.380 -87.846 End: 42.327 -87.853
Current Location to Exchange
Exchange to Exchange

Exchange 31 Runner 8 Start
Gorton Community Center 400 East Illinois Rd Lake Forest, IL 60045
Start: 42.327 -87.853 End: 42.251 -87.839
Current Location to Exchange
Exchange to Exchange

Exchange 32 Runner 9 Start
Highland Park High School 433 Vine Ave, Highland Park IL 60035
Start: 42.251 -87.839 End: 42.192 -87.801
Current Location to Exchange
Exchange to Exchange

Exchange 33 Runner 10 Start
Henry J Kalk Park 298 Park Ave, Glencoe IL 60022
Start: 42.192 -87.801 End: 42.135 -87.757
Current Location to Exchange
Exchange to Exchange

Exchange 34 Runner 11 Start
Elder Lane Park 239 Sheridan Rd, Winnetka IL 60093
Start: 42.135 -87.757 End: 42.098 -87.717
Current Location to Exchange
Exchange to Exchange

Exchange 35 Runner 12 Start
Northwestern Campus 2311 Campus Dr Evanston IL 60208
Start: 42.098 -87.717 End: 42.060 -87.674
Current Location to Exchange
Exchange to Exchange

Montrose Beach, Lincoln Park
Approx. 200 Montrose Harbor Dr, Chicago, IL 60640