Automating the whole process instead of fixing the printer

This morning, my wife asked me to fix the printer so that she could print some forms. Sure, I could have spent a few minutes fighting with printer drivers and what-not, but I hate printing and printers – They seriously stab at my soul.

So my solution was to automate her whole process instead.

If you remember the MadLib notepads you had as a kid, then this will be very familiar to you.

Mad libs

MadLibs – shared under Fair Use

The premise is that you have a story with words cut out by type.

For example, “_______ (person in the room) is an excellent _______ (job / profession) who once _______ (verb) a/an _____ (noun) with his/her bare hands”

There would be a separate page with the following form, and while filling it out you can’t see how the words will fit into the final narrative shown above.

Person in the room   _________
Job / Profession _________
Verb _________
Noun _________

Once completed, the form might look like this…

Person in the room   George
Job / Profession fireman
Verb impaled
Noun shark

Then you transfer the words into the narrative from earlier and you get the unusual story of George the fireman who impales sharks.

George is an excellent fireman who once impaled a shark with his bare hands”

Since I was unsure of her internet access at the location of the event, I needed to build something that was completely self-contained and did not need internet access while it was running. She has a Mac, so slapping together a WPF app wasn’t a straightforward option without installing a VM.

I’ve been learning Node.js in my spare time (since @chimon1984 thinks it might catch on one day), so this was a perfect real-world scenario for me. I had about an hour to time-box the project and set off to code it up in my pajamas on a Saturday morning.

The technologies used are all free and very simple to install and get running with. I’m assuming Linux or OS X, but it could be made to run on Windows without many additional steps.

If you want to check out the code and try it yourself, hop on over to the GitHub where I’ve posted the code. Feel free to use it any way you like, as it has a standard MIT license and submit Pull Requests for improvements and updates. There’s a todo.txt section with things I might add to it as I have free time (whenever that mythical time might be).

Iceland Adventure – Day 0 – Loading Up

Of all the things in the world that I procrastinate about – and there are a few – packing for a trip is the one thing I try to put off the most. 

My wife finished packing yesterday and clearly has better Tetris skills than I do.  She did a week in Tokyo last year with just a carry-on.

Granted, I’m not traveling as light as I had planned from a photography standpoint.  I had this grand idea to switch to a mirror-less primary like my wife shoots with, but I forgot to actually buy one and make that switch.  

So out rolls the Pelican.  This thing is bomb-proof, but sitting empty it’s already halfway to the 10kg weight limit for carry-on bags.  I’ve had to check it once, just once, on an overbooked  flight back from shooting a wedding in San Francisco and was on pins and needles the entire time.  
I’m trying to cut everything that’s not necessary but I can’t bring myself to leave the 500mm telephoto at home and miss out on obligatory Puffin close-ups.  At 2000 grams, this lens is case and point why I’m over the limit.

For my checked bag (autocorrect thinks “cracked” bag and may be correct) I can have up to 23kg in it, but nothing breakable.  

I find myself weighing things on a kitchen scale, 50 grams here 75 grams there, and so forth.  Did you know a AA battery weights 25g?  That really adds up and not in my favor.  After taking the batteries out of everything and moving it to my checked bag, I have ended up with a bunch of batteries zip tied together in what I can only imagine looks like a redneck dirty bomb on an X-ray machine.
The trick is to see when they are weighing things and make some modifications once I’m in the tunnel to board.  My backpack and Pelican collectively weigh 20kg, the allowed limit for steerage like myself flying coach.  However the split is uneven due to the weight of the hard case.  By switching my three lenses to my backpack and being exceedingly careful with it for weigh-in, I can switch them back to the safety of the Pelican once I’ve made my fighting weight.

So I’m off with 41kg of gear and clothes for 10 days near the arctic circle.

I seriously need to make the switch to mirror-less.

Gear list

  • Canon 5Dii
  • Canon 550D
  • Canon 24-105mm F4
  • Tokina 11-17mm F2.8
  • Sigma 150-500mm F5.6
  • Siri carbon fiber tripod
  • LED lamp (for fill and light painting)
  • Pelican 5150 with mesh upper dividers.
  • Cokin graduated ND filter kit
  • 3-stop 77mm round ND filter

Cherry picking commits with GIT

I have a project in which I’m maintaining both a beta and a release branch. Bugfixes need to be applied to both branches, except in cases where the bug has already been fixed in the release branch, in which case it would only need to be addressed in the beta branch.

Yesterday I ran into a case where I wanted to just merge a single commit from “beta” to “release” in order to apply a fix from “beta” directly to “release.”

It Kind of blew my mind how easy this was…

Mind Blown!


1. Find the commit you want to take from the source branch beta. In this case its hash was af19aadbcfa61d2d2816307044318d637d35cee5.

git log

2. Switch to the branch where you want to apply the commit.

git checkout release

3. Apply the commit from dev as a new commit of equivalent changes to the beta branch.

git cherry-pick af19aadbcfa61d2d2816307044318d637d35cee5

4. Resolve any merge conflicts(this may happen automatically if no conflicts)

git mergetool

5. Commit (this may happen automatically, I forget)

git commit

6. Push your changes to your GIT remote.

git push

Commit in beta [insert image a]

Commit in release [insert image b]

Charts and explanation stuffs

You can also string these together to apply more than one commit at a time, but that’s content for another post.

In addition to not imploding our universe into a parallel one with talking sheep, this just worked as expected. Slightly shocking…

Happy GITing.

French Broad – Section 9 – Barnard to Hot Springs

Check out the rafting video!

First off, don’t run the full length of Section 9 of the French Broad past Stackhouse when the river is low.  We ran it at 550 cf/s or probably less and we basically pulled the raft most of the way during this section.  You can do it, but it just isn’t a good time.  Check the gauge at Marshall before you set out, as that will give you a good idea of where water levels are.  They’re generally the best in the Spring, but rain can change things pretty quickly.

Kate Raft Splash

Kate riding the wave train

Getting There

Initially this was a pretty straightforward activity, until the moment before our shuttle left and we realized a critical blunder.  In our haste to get the shuttle vehicle loaded up, we forgot two critical things – paddles. I still can’t believe we both forgot them, but next time my tried & true checklist method will be in place.  Luckily Dan, our shuttle driver from Bluff Mountain Outfitters, was kind enough to give Kate a ride back to the campsite to pick up our two paddles and our spare.  Perhaps she cleverly planned this all-along, because around the time she got back I had just finished inflating and prepping the boat, checking all our gear, and was ready to launch.

Kayakers’ Ledge

Kayaker’s ledge, we skirted on the left, since I don’t have any interest in just tipping the raft stern over aft onto rocks for the sake of one 5′ drop.  I’m glad we took the route left of the island, as the rapids there were some of the best wave trains of the trip.  I’m hoping I got some good video of that part, but it seems Windows 10 doesn’t ship with a video player installed  – really Microsoft? (see the finished video below)


We stopped for lunch by tying ourselves to a dead tree in Windy Flats.  A footlong sammich tastes great after a long morning of rafting.  My wife was kind enough to pack us a six-pack of Yeungling, and our inflatable cooler kept them nice & cold.  A train passed by and by special request blew his whistle in the valley to a great resounding echo.  Thanks Mr. Engineer!

Frank Bells

Things got a bit sideways on Frank Bell’s rapid.  Kate and I were both exhausted, and I was fiddling with the GoPro when I should have been setting us up for a proper path.  I also skipped a step and didn’t scout the rapid before we went over it, and we ended up much more at the mercy of the river than I would have liked.  Let’s face it, a Class IV or V rapid in a boat you can technically procure at your local Walmart is more intense than it is in a 12 person guided Cadillac raft.  That’s part of the reason I do it, for the extra challenge of doing it myself rather than just being along for the ride.  It’s our expedition that my fearless First Mate Kate and I planned, supplied, and executed ourselves.

Photo of Frank Bells by Smith River Valley Canoe Club, 2008

The water levels being crazy-low ended up causing us to get stuck on the ledge of a sideways 5-6′ drop among a series of drops at Frank Bell’s. We missed the main flow at the left, which was totally my fault for a number of reasons, and the water is just too fast at that point to retrace.  So here we are, trying not to go directly over a dry rock and the strong current just wants to pound the boat into the rock.  A worst case scenario would have been for us to flip over the rock sideways and take the 5-6′ plunge to the rapids below.  The pool below wasn’t very large, very deep, or where we would have likely landed.  I’m imagining the “discussion” we’ll be having once we’re out of harm’s way that I will totally deserve, and trying as best I can to un-lodge the raft.  Since we were literally stuck between a rock and a hard place, we had to choose the least of two evils.  The route to the left was wide enough to fit our raft through, but at best we were going to hit it at an awful angle.  The route to the right was totally out, nope, not going to fit a raft.  In this fleeting moment of insanity, I stepped onto the rock, pushed the raft down the slightly less evil route and somehow was able to belly-flop back into the raft before it miraculously went over the drop more-or-less straight and upright.


We’re past the most dangerous portion, but we’re not out of the woods yet.  Frank Bells always seems to be one set of follies setting you up for your next set of difficulties.  I look back over and Kate is giving me the best Grumpy Cat impression I’ve ever seen.  She’s sitting in the front of the boat, which technically is now the back of the boat as the river flows, and she’s sitting under the main flow of the small waterfall that we just passed through.  Again, we’re stuck, albeit in a much safer place, but not able to move forward just yet.  Pushing off rocks with the paddles wasn’t working for us, so I again stepped out to push us loose.  I barely made it back into the raft by way of another well-timed belly-flop, and had turned us around so that we were facing forward again for the next section of the rapid.  The rest of Frank Bells Rapid was a fantastic wave train that made good and sure the raft was full of water.  The river was surprisingly warm, so we had that going for us, which is nice.


Just before all the corporate rafters got out at Stackhouse – their boats can’t make the route from Stackhouse to Hot Springs when levels are low – One of the raft guides from French Broad Rafting makes this snide comment in our direction,

“Over there folks, you see what happens when you go to Walmart and try to do this.”
    ~Elitist Cadillac raft guide

 This moron neglected to remember us helping get some of his rafters get unstuck from various rocks along the way. I had an answer for him when everyone in his group got out to go home for the day at the halfway point. 

"Onward! … To the Walmart!"

 Oddly enough, almost nothing on our boat actually came from Walmart, but the raft is technically available there, though I think you have to order it from their website.  Again, the main reason I do this route in a small raft is quite deliberate.  On top of that, running this route again any time we want costs us nothing more than the cost of fuel to get us here, and not hundreds of dollars per raft ride.

How did the raft hold up?

When we turned the raft over back at camp, I was shocked at how well the bottom had held up.  This magical boat from Idaho is the Intex Mariner 4 that can be had for just under $250, with free shipping, from  The fact that it had a hard floor is something I’d never tried before, and was not necessarily sure that the added weight would be worth it.  It also has an inflatable keel that runs the length from aft to stern to keep the raft from bending in half when going over rapids. As we got toward the end, the water in the boat was causing my end of the floor to roll up and hitting rocks without it was definitely a less pleasant experience and more taxing on the bottom of the raft.  The 16 plastic slats it shipped with it were nice, but I had a hunch that they were heavier than treated 1″x4″s, which turned out to be right.  My miter saw, electric sander, and I had replaced the plastic slates with treated lumber night before we left for Hot Springs.  If you end up picking up one of these, I highly recommend the plastic-to-wood conversion, as it saved 155g per slat adding up to about 3.5kg (5lbs) saved overall. Aside from tools I already had, it cost around $25 for the 4 – 1″x4″x12′ treated boards needed to complete the job.

We’re looking forward to soaking in the natural hot springs across the street this evening to relax and sooth all our aching parts.

Equipment list

  • Intex Mariner 4 Raft
  • Life Jacket x 2 (Sure you’re a great swimmer, but how well do you swim after being knocked out by a rock?)
  • First aid kit (Don’t let it get soaked like we did)
  • Cell phone in waterproof Pelican case
  • Helmets x 2 (Kate – NRS Havoc Livery / Chris – Black Diamond Half Dome)
  • GoPro with helmet mount
  • Knee pads (Walmart special – Kate & I shared a pack of knee and elbow pads since the elbow pads fit her knees after some custom velcro rigging)
  • Wooden paddle x 3 – one for each of us and a spare since I hear sometimes these fall out of the boat
  • Scotty Throw Bag with 50′ of rope
  • Barrel pump to inflate initially and adjust once you’re in the water – (hint, they shrink when they hit the cold water and will pop if you leave them out in the sun fully inflated)
  • 50′ of 3/4″ braided rope
  • 20′ of para cord (if it’s not lashed down, it will end up in the river)
  • NPS Pilot knife
  • Shoulder mounting knife bracket
  • One case of Yeungling
  • Potable H2O
  • Gatorade
  • Footlong Sub x 2
  • Multi-tool (for fixing various things)
  • Gloves (Kate used her leather & neoprene diving gloves)
  • River shoes (I prefer to just wear my Keens)
  • Parachute bag for supplies (super durable and available at most Army/Navy stores)
  • Sponge x 2 (for bailing water)
  • Banana bread (excellent breakfast food)
  • Suntan lotion
  • Hat (for Chris when relaxing on flat water)
  • Bandana (to keep Kate’s hair out of her eyes)

Shuttle Info

  • Put-in:  Barnard, NC
  • Take-out:  Hot Springs, NC
  • Shuttle driver::&nbsp Dan @ Bluff Mountain Outfitters – (828) 622-7162

Camping Info

Rafting Info

This is your belt-buckle speaking…

PagerSince it’s Fathers’ Day, I feel obligated to share a story about my Dad that I was reminded of at lunch the other day with some of my coworkers. I have so many of these stories, and as my Father’s son, they remind me why my sense of humor also turned out to be just a little bit left of normal.

For this story, we’ll have to set the way-back machine to the late 1980’s. Does anyone remember voice pagers? I’m dating myself by admitting that I do, or that I remember a time before pagers at all. For folks who don’t remember, or weren’t born at the time, they were these little precursors to text messaging that you could wear and receive voice messages from folks who called your “pager number.” Wow, did I just say “pager number” out loud? The particular model we’re talking about would make a series of beeps and then automatically play the message. This becomes important later in the story.

When Dad was working in CID as a detective in Greensboro, he had a Sergeant with a particularly large ego who had just gotten one of the fancy-pants new devices. The squad had a brief bit of down-time for lunch, so they had met up at a local diner to have some lunch. Dad had witnessed just how exceedingly proud his sergeant was of this new voice pager and all the attention it garnered when it sounded off an important message. Sarge had become predictable when a page came in. The ‘new message’ sound would go off and there would be a slight delay before the caller’s voice could be heard. As soon as he knew the message was about to play, he would crank up the volume so everyone could hear how important he with his fancy gadget on his belt.

This time was no different, the pager started beeping to let him know that a message was about to play. He predictably cranked up the volume on the pager and awaited his important call. Except this wasn’t the kind of call he was expecting. All of a sudden his pager started yelling:

“Heeeeeey… fat boy! Where ya been, man? This is your belt buckle speaking and I haven’t seen you in a really long time. When are you gonna stop eating all those cheeseburgers and get in shape so we can see each other again? …”

I can only imagine his Sergeant’s struggle to turn the volume back down as quickly as possible once he realized his folly.


While I still miss Dad a lot, he left me with a lifetime of stories like these to remember him by. They continue to entertain me and remind me to always take life seriously, but never too seriously.

On the topic of changing project or job

I used to think that changing jobs every couple of years was risky and could lead to less job security.

In the last couple of years, I have learned that the inverse is true. (at least for my industry and skill-set.)

I’ve stopped caring whatsoever about annual performance assessments and “moving up in the company” but rather focus on delivering projects successfully and keeping my eye out for the next cool project to work on. Outside your current company, nobody cares about your eleven-star annual reviews at another company – nobody.

There are enough failing software projects to jump into and get back on track to last me many lifetimes.

Software projects don’t (and shouldn’t) last forever. If you stick around after it ships, and v1 should ship in a year or less, you’re either doing maintenance or put onto the next project the big wigs deem to be important work for your team. At that point, don’t limit yourself to the project you’re given unless you can be passionate about it. Some folks can be passionate about whatever project they are on currently – and in a lot of ways I envy them- but as a “glass was designed twice as large as it needs to be” engineer, I cannot.

Find something you’re passionate about. I promise you it’s out there.

The Serif of Nottingham or Reason #478 that the internet is a unique and magical place

I must have had fonts on my mind at this particular moment. I probably spend more time thinking about fonts than is healthy or normal.

Whilst thinking about fonts, I noticed a tweet from @adambird

Adam initial smaller

The app @onediaryapp interested me so I checked it out; along the way noticing @adambird was based in Nottingham, UK.

Remember I mentioned thinking about fonts? This random thought occurred to me and I decided to share…

Sans serif

Then @trullock chimes in with this gem completing the thought.

@ballance @adambird or justSerif of? Im stealing that if you dont ;)

So that’s how the Serif of Nottingham was born. Brainstorming about a fun UX lead title with folks I’ve never met before thousands of miles apart.


…and that’s reason #478 why the Internet is a unique and magical place.

Z28 Project – Step 1: Find a donor car

Z28 Project - Step 1: Find a donor car

1994 Chevrolet Camaro Z28 with *extra special* T-Top package

I have been looking for a donor car for my Z28 project and finally found this beauty last weekend. After a ton of wrench time, I’ll be shoe-horning the LT1 engine from this into my formerly V6 1994 Camaro.

There’s an interesting history with the blue car. The previous owner summarized it well in this email he sent me before Tim & I went to pick it up in Lancaster, SC.

“It was sold by a Methhead to a crusher but when they went to load it over onto the crush pile the crane operator told the yard manager that it sounded like it ran great when they drove it in. The manger got in it cranked it up and did some burnouts in the lot with it but just pulled it back in and told the crane guy to load it over as it was so nasty and ratted out on the inside. I happened by the yard (friends with the manager) and saw the car being craned over. Asked about it and was told it ran great. After they set it down I went over and turned the key and it fired right up. Idled a little high but not rough. Ran a minute or two then throwed a check engine light, o2 sensors most likely. Put it in gear and it went right in and locked up ready to go. No smoke out the pipes, no leaking fluids. Figured the driveline was going to be all good and would work in my sons 1964 Impala so I bought the driveline with an option to keep the whole car if I wanted. While I was gone somebody came and cut the battery cables on it and stole the battery out of it. Shows 133,000 on the odometer but no idea if that’s original. Planned to pull the wiring harness and strip it of the Vats and other stuff I did not need, keep the ECM and the rest of the harness and pull the rear end, trans and motor and give the car back. Meanwhile my son bought a 2001 Mustang GT and though that he would just keep the 400 small block in his 64. Put it up for sale and a guy said he wanted the whole car cause he was doing a v6 swap and needed the K member and other stuff like brackets. Sent me some earnest money so I bought the body on his say so. Backed out on the deal so I still have the car. The car is truly trashed on the inside. The body is not worth anything in parts except the hood, front valance, fenders, and possibly the door skins. Of course it has a huge bow in the top where the crane grabbed it. There is a video up on youtube of it being cranked and running, if you still want to look at it I can get you the youtube link. I will send you some pictures tonight if I can. For the price you can’t go wrong. There are going to be a bunch of little things you are going to need if you do a swap from a v6. Things you don’t think of but when you start putting it back you find that there is a difference here and there from the v6 to the v8. Brackets and supports and hoses and lines and clips and you name it. With this deal you get the whole shebang to pull what you need, when you need. When finished you can take whats left and get a 150.00 or so back for the crush weight. It will need four tires and wheels to load but it will drive on the trailer. The wheels on it are sold and two of the tires are non usable anyway. As far as parts missing the hood catch and the support hardware is gone but it is still hinged and in place and none of the hood damaged. Other than that it’s complete. It’s taking up space that I need so if you want it come and get it this week and you can have it for what I have in it which is x. If you get y back after crushing whats left you got x-y in a 4l60e, an LT1 and a disc brake rear end and the 150 mile an hour dash for the v8 instead of the v6 speedo. And it is a true Z28 to boot!”

…and after a new battery, here it is running before the swap begins

Sometimes the right tool for the job is the largest hammer you have available.

Right tool for the job is sometimes the biggest hammer you can find

For the most part, I try not to force it when working on a problem. However, after trying everything I could think of, including kicking it the tire as hard a possible and subsequently a hammer and pry bar, I was making no headway on getting the rear tires removed from my car.

I decided it was time to take a break, pop open a cold beer, and consult my favorite tome of knowledge, the inter webs. After hearing recommendations to try all of the things I had already done, I tried the advice of Eric the car guy and “beat the crap out of the tire with the biggest hammer I could find.”


I had been using a sledgehammer against the tire to no avail, but the leverage and weight of the blunt end of my fiancée’s axe seemed capable of providing the necessary force. After an unfortunate mishap in which I fell backwards into a halfway-full oil pan and made a gigantic mess, the wheels finally came off with relative ease.

It is important to not use the biggest, heaviest, bluntest tool in the tool box as a first resort, but sometimes it is the only way to accomplish the task. After all, there is a minimum force necessary to break a connection that has fused in some way and the equation F = M * A is always true.

Removing the tires on my green car was a preliminary step taken before picking up an almost identical blue version of the same car for my Z28 conversion project. Stay tuned as I do a heart transplant on my 1994 Camaro.