Grant Muller

High Lonesome 100: Race Report

High Lonesome

We staggered up the last few steps in the dark to the top of Monarch on the Continental Divide trail. A relentless wind slapped me in the face, and kept on slapping. A chill burrowed into me despite the wool shirt, rain jacket, gloves and buff. I couldn’t see more than three feet in front of me; it wasn’t fog, we were standing in a cloud. I turned back to Aaron, now nothing more than a diffuse headlamp glow and a voice in the dark.

"We gotta get the hell off this ridge."

We broke into a run, anxiety fueling our effort. We hadn’t eaten anything in several hours. We were wet with sweat in the cold, constant wind. Slowing down could mean hypothermia. The day before had been perfect.

How the hell did we get here?

5:45 AM, Friday

Hundreds of people milled around in the dawn chill at the campground on Mt. Princeton. Pictures were taken; all smiles. Seventy-three of this crowd were preparing to toe the line of the inaugural High Lonesome 100. I was one of them.

Dudes

This was my first one hundred. Hundred-miler. Hundo. Finally hunting some big game. A few months prior I had no intention of being on the side of that mountain, but a successful fifty-miler seduced me to strike while the iron was hot. Besides, all my buddies would be there, and who doesn’t like a little peer pressure. I got on the waiting list and within a few weeks I was committed.

At 6:00 AM, to the crack of gunfire, we rushed out of the campground in a mass and expelled our nervous energy on a steep downhill road towards the Colorado Trail. After a few miles the paved road degraded into a wide, flat, dirt path. We clicked off several quick miles before the real hunt began.

A steep ascent marked the beginning of the Colorado Trail. I’d be lying if I told you I remember it this way. I only recall this ascent the way back, with ninety-four miles behind me. It was an easy climb going out; it would be a quad-killer coming back.

We peaked out on the initial climb, and were rewarded with some nice, flat, runnable terrain of Colorado Trail. It didn’t take long to make it to Raspberry Gulch, the first aid station.

By now our group of runners, all flatlanders from the Atlanta-area, had split into their respective factions. TJ had spent the better part of a month in Colorado, and had acclimated well enough to take an early lead. We would see him only once more before the finish. We’d instructed our crew to get some sleep, get their supplies, and skip these first few aid stations; we’d catch up with them around mile twenty-five. We filled up on water, grabbed a few snacks (Nutella tortillas? Hell yeah), and headed out for our first big climb: Antero. 9 miles ahead.

It didn’t take long for the going to get tough. Aaron and I ascended the trail into ever thinner air. We came across flatlanders and highlanders alike, all struggling to make meaningful progress up the long hike. Our easy run was reduced to a power hike, and then a trudge.

"I gotta take a picture of this!"

That was my excuse anytime I wanted to stop and breathe for a minute, and the scenery made it easy. We were surrounded by mountains, bare on top, green on their slopes, rocky at their bases. White snow pack salted the peaks, gathering in nooks and crannies between folds of the ridge. The melting ice formed a half dozen creeks, streams and waterfalls that poured off the sides of the mountain, rushing toward flatter terrain. It was a mountain paradise.

Mountain Paradise

It was also a struggle. We worked with the mountain; we slowed to its speed. It might be the altitude talking, but by the time I reached the top I no longer felt spent. There was peace up there that I cannot describe.

Peace up high

At the top, we looked down the side of the pass onto a steep jeep road. Perhaps a dozen rocky switchbacks wound their way downward toward our next aid station. If the previous five miles were toil, this was an effortless fall into a forested abyss. The scenery remained stunning, and with smiles on our faces we strode in to Antero aid.

Into the Basin

We made quick work here. The trail continued to descend out of Antero onto a roughshod jeep road. We passed several trucks on our way down. Several times the trail coincided with a melting snowpack stream; a taste of things to come.

After several miles of descent we turned a corner to hear cheering. Were we at the aid station? Had we covered eight miles so quickly? No. Several members of our crew had found a spot where the road and jeep trail met, parked, and waited for us to pass. It was uplifting, even if it did mean we still had several miles to go until St Elmo.

"I think the worst is over," I commented to Aaron.

"I ran parts of this course during training," another runner interjected. "I think the next out and back from St Elmo is the worst."

We were ignorant of the course other than the elevation profile and map. On the topo map it just looked like a couple of hills. How bad could it be? We contemplated as we ran up the Alpine road and past the creatively named Alpine lake. It didn’t take long before we arrived at St. Elmo.

St. Elmo was supposed to be a ghost town; it looked anything but ghostly as we passed through. The hustle and bustle of runners, their crews, and race volunteers transformed it into a mountain metropolis again for the span of 24 hours. In the traffic we saw Anthony Lee and Mike Wolfe, the front runners, exiting on their way to Tin Cup and the rest of the race. They were hours ahead.

The aid station itself was on the trail about a half mile past the old town. Our crews had made quite a hike to get our gear from the parking area to the station itself, a thing which we’d hear a lot about later on. We took a quick break, our crew forcing us out after 5 minutes, and began the trek up and down to Cottonwood.

This was a low point. The rain hovered like an indecisive spectre. The clouds obscured much of the scenery. When you’re on cooperative terrain you don’t notice. But when the mountain feels like it’s working against you, the weather does too. If it had been sunny and hot, I’d still be complaining. There is no solution to the problem other than to stash your ego in a pocket and get to work.

The going was slow, even coming down the backside into Cottonwood felt like work. How could two little blips on the map compare to the pass at Antero? We caught up with TJ, making his return trip from Cottonwood, looking strong. After a few minutes conversation, we let TJ continue and struggled on. At Cottonwood, our break was short. We headed back the way we came.

Out and backs bend your mind. On the way out you might complain a little. Your way back is a gripefest. Now you know where to complain. You just saw this. You know that "this next section" is muddy, slippery and steep. You’re probably going to fall. There is that tree where the incline gets rough again. There is that clutch of grass that marks where all the damned rocks are. This kind of thinking is unavoidable on an out and back.

As we approached St Elmo, we caught up with Matt on his way out to Cottonwood. We did our best to lift his spirits without being dishonest about the beast in front of him. Forget the thin air and just keep moving. It was a struggle for everyone, and I know I learned something from it: on your way out, better to forget.

Approaching St. Elmo

After powdering my joints on the descent, we met our crew again at St. Elmo. I was burning up despite the dreary rain and stripped off some clothes. It was getting late; the sun would be down before we arrived at the next aid station, so we grabbed our night gear. A quick shoe change later and we were on our way.

The next few miles of flat road flew by as daylight expired. We hit the water drop at Tin Cup, signaling the end of the road and the beginning of the ascent over the ridge to Hancock.

"Hey Yogi!"

Aaron’s cry startled me. Our energy was flagging; conversation was limited to occasional grumbling. Sometimes about the knee-deep mud, other times the endless ascent over the ridge. It was getting too quiet, and we needed to make more noise to encourage our bear friends to stay far away.

"Hey BooBoo!" I called back.

"Go away, bears! Nobody likes you!"

"Nothing to eat here!"

"Fuck off, bears!"

It always devolves into profanity.

The bears weren’t the only things we were cursing. As the snow melts in the mountains of Colorado, rivulets of ice-cold water form and wheedle down the mountain. Sometimes they mind their business and gently cross the trail. Other times they get lazy and just share the trail with you. I don’t mind the occasional creek crossing, but after several miles of running in what can only be described as an "ankle deep kinda ice river", I was pleading for dry feet.

Speaking of snow, during this leg of the course we encountered our first snowpack. What’s snowpack? It’s a big slab of melting, soggy, but still somehow slippery snow that sprawls across the trail like Jabba the Hut. Its too big to run up-mountain of, and if you slip and fall you’re going to end up "down mountain" pretty quickly. In my first encounter I tried to gingerly prancercise my way across and ended up with one pole jammed into the downhill side of the trail, the other end under my rib in a feeble attempt to slow my roll. A few feet of butt-waddling and I was back on dirt trail, but it was a close one. On my second attempt at snowpack I didn’t even try to stay on my feet; I unceremoniously plopped to my ass and slid until I was across.

After several wet, steep, and muddy miles we arrived at Hancock, bear free. Mile 48.8. Halfway. Sort of.

We had expected our crew at Hancock, and were surprised to see that they hadn’t made it. We took a long break here to try and give them time to catch up. Wes, our pacer had planned to step in to get us through a couple of tough climbs. I needed some warmer clothes. Luckily both Aaron and I had packed a drop bag for Hancock in case our crew couldn’t make it. I switched into a long-sleeve wool shirt and stretched a buff over my head. On the verge of shivering, we dragged ourselves out of the comfortable camp chairs and dawdled to the exit. One last look around; our crew hadn’t arrived. It was just Aaron and I until Monarch Pass, mile 66.6.

The trail to Middle Fork, between Hancock and Monarch, was eerily similar to the trail from Tin Cup to Hancock. Oftentimes I found myself asking if we were walking back on the same trail.

Memory is tricky. I don’t remember much in here. I’m sure this portion of trail was difficult, fun, muddy, bear-free, but in retrospect what came after Middle Fork overshadowed it. I find it hard to recall anything that happened between Hancock and Middle Fork. I’m certain I found plenty of opportunities to worry about my pace, yell at bears, and curse the altitude.

I remember ending up in a forested area on switchbacks descending into a gap. I knew we were getting close. You could hear occasional cheering in the distance as a runner approached Middle Fork. When we arrived, there were many butts in seats. A volunteer told us that "visibility was pretty low, and we’ve gotten reports that there was some wind up on the ridge." We wasted little time here. Snacked and hydrated, we set out on what would become the most brutal climb of the race.

The ascent was immediate. The grade prevented anything but the slowest hiking. With burning legs and lungs we forced ourselves forward. As we ascended we came across other runners, flatlanders like ourselves getting our first taste of Monarch. I vividly remember crossing a bridge, a torrent of ice cold water beneath us. I remember looking up to see headlamps in the distance. I remember saying "Are you fucking kidding me?" when I realized how much higher those headlamps were. We were tricked multiple times by false tops and ridges, the exhilaration that we were done climbing into the thin, dark air rudely stamped out by the unfeeling mountain.

The effect of the high altitude and sleep deprivation on our minds and bodies was at its worst as we approached the top. We stumbled through the fog-thick dark, sometimes taking only five or six steps before sitting on one of the boulders that littered the trail. Delirium wasn’t far off. We didn’t eat. Eating meant chewing, and there was no extra energy for chewing. Who can chew and breath this air? The last few steps were agony.

And then we topped it.

In only a few steps we knew we were in a worse position than before. Exposed atop the ridge, the wind pummeled us, the cold mist chilled us to the bone, the air was still thin, and we were wet with sweat from the climb.

"We gotta get the hell off this ridge."

I must have repeated it a dozen times as we ran. Trail flags seemed sparse. Hell, the trail seemed sparse. One moment you think you’re on it, the next you’re running through a patch of bushes. Several times we stopped to check direction. Several times we ran in a direction not knowing if it terminated "down mountain". At one point Aaron lost the trail. I turned around to guide him back with my headlamp. I couldn’t tell if he was ten feet behind me or a thousand. I walked back until we were both on what appeared to be the trail.

"What do you boys say we get the hell off this ridge!"

It was Wes! He appeared out of nowhere. Our crew had arrived at Hancock fifteen minutes after Aaron and I had departed hours prior. Cary asked Wes what he wanted to do, and like a pro he suited up and jumped in at Hancock to catch up with us. He fought out there alone in the mud, in the dark, probably yelling at bears, up that damned climb and caught us just as we were at our lowest. His timing was perfect. Wes lifted our spirits, shepherded us along, and forced us to eat something. Soon enough we could see trees through the fog and knew we were back below tree line.

Things started to look up as we descended. Staggering delirium subsided and the trail opened up onto a wide ski run. On a high visibility night this would have been a godsend, but when you’re limited to three feet of visibility, a twenty foot wide trail is hard to keep track of, especially when you’re looking for trail markers. We split up three wide across the trail to make sure all sides were covered and we didn’t lose track of a turn.

As we shuffled down the pass a huge weight was lifted from my chest. No more high altitude. No more big climbs. No more exposed ridges. Once we hit Monarch Pass at 66.6 miles, the rest of the run would be no more than 10,000 feet. A blissfully oxygenated 10,000 feet. And we were way ahead of cut off. The combination of Wes’ arrival at the lowest point in the race and the knowledge that it was easy street from here renewed me.

We arrived at Monarch Pass at 5:45 AM on Saturday, almost 24 hours and 66.6 miles from where we started. Our whole crew was there waiting for us, and we took a much needed break to change shoes, clothes, gear and pacer. Brooke jumped in with the mandate to ensure we averaged less than 20 min miles no matter how much we complained. She would do much, much better than that.

The trail out of Monarch was significantly easier than any we’d encountered before now. After a short climb we dropped onto "Satan’s Slip and Slide", a steep, rocky downhill under power lines. Other than doing some damage to my quads, it wasn’t really much different than the rutted out rocky roads we run here in Georgia. We made quick work of it.

Brooke, patient but demanding, forced us to run more than we would have had we been alone. Several times I groaned but gave in, and found that I could run without too much trouble. With her help, the five miles from Monarch to Fooses Creek was over in a flash. We helped ourselves at Fooses Creek and rushed towards Blank’s cabin.

Most of this trail was wide and flat. I found myself reminiscing back to when I Mark at The Bear 100. It was early morning, slightly foggy, and the trail was nearly identical. Gravel gave way to dirt track, then road. Within a few miles we were back on the Colorado Trail, and into the home stretch.

The first few climbs on the trail home seemed daunting. 70+ miles into a 100 mile run, they were certainly tough, but nothing compared to what we’d encountered already, and certainly nothing compared to some of our climbs on the Duncan Ridge Trail. We trudged up quickly until we could get back onto flatter ground, where Brooke once again cracked the whip and got us moving again. In no time we’d arrived at Blank’s Cabin.

At Blank’s Cabin we caught our crew again. I felt like royalty; Brooke had run ahead of us to announce our arrival and everyone was ready for us when we waltzed in. I grabbed a Snicker’s and probably some other snacks. I only remember being interested in the Snickers. I ate a pierogi or two, which worked like magic. We set out again after a few minutes, ready to knock out the last 17 or so miles.

Shit got weird. At some point I got a little ahead of the group and out on my own. I remember waiting for a few minutes, but it could have been seconds. Time became elastic. I ran a lot more than I expected to run at the end of a 100. The patterns in the rocks started spelling words. Fish. Pepsi. Announcement. Asahi. All random. A few rocks looked like frogs. A pacer showed up in my peripheral vision. Nope, nobody there. This trail looks familiar, have I been here before?

Wait, I had been there before!

That broke the spell. I was on the return trail, the real homestretch! This was all ground I had covered before! If I’d done it once, I can do it again. The trail flattened out and I broke into a run. After passing through a cattle gate, I found myself in a field smattered with shrubs, on a flat, runnable trail. In the distance was the final aid station, Raspberry Gulch. Again.

Pacer Wife

At Raspberry Gulch my wife Cary was going to jump in with me to run it home. This was my first 100, and though Cary has always been the most important member of my crew, I wanted her to experience some the other side of the adventure on this very special run. In the weeks leading up to the race, Cary had joined me on the tail end of several long runs to get a feel for what it would be like. She’d done great! Her background as a gymnast and weightlifter lent itself to running, even if she is a self-avowed endurance hater.

Only a minute or two behind me Aaron and Brooke popped in. We were all set to conquer the last 7.4 miles together. Brooke went to the finish with the crew while Wes and Cary jumped onto the trail with Aaron and I. The run was on.

The first few miles were open and flat, and we made quick work of them. I remembered them from before, and had been looking forward to some easy work at the end to balance things out. Then we hit that steep downhill that I didn’t recall. My quads were wrecked. There was no way to take advantage of gravity without doing damage to ankles and knees, despite Wes’ insistence that "this is all runnable stuff really. Cha-ching, thats the sound of banking time."

We finally hit the flat open road and agreed to run for the sake of our pacers. We set some goals in the distance. "

"Run to that tree. No, not this tree I meant that one out there."

"Run to that dirt spot. You can’t see it? It’s right there on your left."

"Run to the last flag. I meant the last last flag, not the first last flag."

Brooke, who’d run back from the finish line towards us, found us with less than 3 miles left. Less than 3 miles of open road were all that separated us from the finish.

You might recall that the race started on a steep downhill road towards the Colorado Trail. Well, what goes down, must come up. We hit the final mile, a steep uphill toward the finish, at a solid, um, hike.

In truth we were making good time. Until now we thought we’d be taking a 34+ hour finish time. Until Wes announced that we had 0.6 miles to go, and almost 15 minutes to do it in, we hadn’t entertained the idea that we might finish in less than 34 hours. We picked up the pace, and as the hill leveled out, we settled into a slow jog. Brooke ran ahead to show us just how close the finish was. With 4 minutes to eek out a sub-34 hour finish, Brooke yelled "It’s right here!". Cones marking the entrance to the campground came into view. The horses smelled the barn, and we broke into a gallop.

3:57 PM, Saturday

Sprinting with everything left in the tank, Aaron and I crossed the finish line. I did more damage to my body in that minute than I had in over 34 hours of running. As I caught my breath, Caleb handed me a belt buckle and shook my hand. I’m not sure how many goofy smiles Caleb had already seen that day, but I hope mine was the goofiest. The buckle was beautiful. The finish was beautiful. That dirt patch I was sitting on was beautiful. The cheeseburger was beautiful. Oh god, I was tired.

At the finish

In the minutes after the finish nothing and everything happened. Some folks changed clothes, munched on food, and milled around talking about the race. I was spent. I walked back to the van, took off my shoes, and fell asleep in the passenger seat. Once I had released whatever mental control I had on my body, everything shut down.

But I swear I fell asleep with a smile on my face.

Like never before the race was a team effort. Four runners from the flatlands of Georgia, their crew and pacers, and 100 mountain miles. The volunteers, aid station crews, the race director, the forest service, search and rescue, everyone who has to be involved to make these things work.

I’ve never felt alone out there, on any race, but this one was special. Being out there with fellow runner Aaron, a 100 mile veteran made it seem easy. Being out there with our pacers Brooke and Wes, both 100 mile veterans made it seem easy. Being out there with my crew from Georgia made it seem easy. Most of all, being out there with my wife Cary, my constant supporter, crew, and now pacer made it seem easy. With all of that support, the mental part of the game takes care of itself. After that, its all physical, and thats the easy part.

Cruel Jewel 50: A Race Report

Before we get into this, I want to clear up a few things:

  • Trekking poles – Bring them with you. Take them out immediately. Don’t bother putting them away. This isn’t Umstead or the Virginia Creeper trail. Some points of the race are so steep that you can reach out in front of your face and touch the ground. The downhills are straight down, because you know, who likes switchbacks.
  • Salt – Its Spring in the south. The temperature will be somewhere between stifling and oppressive. You’re going to sweat a lot. Take somewhere close to the lethal dose of salt for you height and weight for the day.
  • Rain Gear – Its still Spring in the south. The humidity is either 90% or raining. If its the latter and you’re 16 hours into the race at night on the side of a windy bald, you’re going to get wet and cold. I made the mistake of eschewing rain gear and was shivering in my short-sleeved shirt for the better part of 10 miles in a raging thunderstorm. It might encourage you to move your ass, but see notes on trekking poles; you can only move so fast on terrain that is fondly referred to as the Dragon’s Spine (or as I normally refer to it between heaving breaths, the worst-trail-in-the-world-dear-god-why-do-I-keep-coming-back-here).
  • It’s 56-58 miles, not 50. That matters. And don’t go thinking that you’re halfway through at mile 28. When you hit Skeenah Gap at mile 34ish, look at your watch. Double that time; thats probably how long its going to take you to clear the last 22 or so miles.

Alright, now that we’ve got that out of the way, let’s begin.

The 2017 Cruel Jewel 50 started at 8:00 on Saturday May 20th at Camp Morganton in North Georgia, 20 hours after Cruel Jewel 100. I woke at 6:30 AM full of anticipation, water, and salt. My wife had been feeding me salty this that and the other for a full 24 hours. I packed my gear and headed to the Camp with plenty of time to mill around, chat with my friends, and fret over the day to come. 100 mile racers were rolling in from their efforts the prior day; few looked chipper as they taped their toes and waddled like sweaty penguins back on to the course. I had a lot to look forward to.

My pack was full of salt, protein drink, tailwind, salt, some snacks, water, salt, trekking poles, chapstick, and some salt. I’d been training for a solid 6 months for this effort, repetitively running up and down Kennesaw Mountain nearly every weekend, and slogging away on the stairmaster at least once a week. I packed that away as well. At 7:50 AM the RD scraped a line across the gray gravel path outside of the camp with his foot; the starting line. After a few shouted announcements, we were off. 100 or so raving lunatics took off down the path to Snake Nation Road, and the race was on.

Paces varied between “Why am I running so fast?” and “Am I going out to hard?”. I tried to stay in the latter camp, and several runners pushed ahead of me on the easy section of open road leading to the first trailhead. I was playing it safe today, and didn’t mind being toward the back of the pack at the start; it was going to be a long day. The heat of the open road was mounting, but as we caught up with some of the 100 mile runners they confirmed some positive news; it was better than the day before. The temperature would reach a mere 86 degrees today compared to Friday’s 90, and the humidity had miraculously dropped into “Sweating actually matters” territory.

At some point on Aska Rd, we turned out onto the first trailhead under welcome shade at Deep Gap. I was still a bit anxious on the initial loop. Had I taken in enough salt? Running with Matt, he informed me of his strict schedule during the heat of the day: 1 SaltStick every 30 minutes. It seemed like a good strategy so I adopted it. Barely 4 miles in we deployed the trekking poles. They never went back in my pack.

Heading up Davenport Mountain was a good taste of things to come. Not so steep that you’re filled with self-loathing over your decisions in life, but no picnic either. I carry too much upper body weight to be a stellar runner, but the trekking poles made up for any genetic disadvantages I may have as a runner. In no time we were headed back down to Deep Gap Aid Station.

On the way down the mountain I had a niggling sensation in my right calf. My nemesis, the muscle cramp was creeping up. Matt’s schedule of 1 SaltStick every 30 minutes may work for him, but I was going to have to up the ante to stay ahead of ol’ crampy. I started popping those bad boys once every 15 minutes until the sensation passed. If I made any good decisions during the race it was that one. By the time I reached Deep Gap again at mile 8.5, Lord Crampus was satisfied with my salty offerings. I still ate a handful of potato chips as extra appeasement.

We headed out onto the trail again, ready to link up with the Benton-MacKaye trail. I have no idea who Benton or MacKaye were, but they sure knew how to cut a pleasant trail through the mountains. The descent to Weever Creek Rd was difficult; I later found that we’d be climbing right back out of the hole we were rushing into, but the trail was so damned beautiful I didn’t mind. We passed several 100 milers, looking tired but determined on their way up the trail. These guys and gals had soldiered on for almost 24 solid hours now and were a little more than halfway through. I did my best to raise their spirits and send some positive vibes their way, and pay my respects as I let them pass on the crowded single-track trail. If my day was hard, their’s was hellacious.

At Weever Creek Rd I had the chance to catch up with old friends, give a few sweaty hugs (Thanks Sarah!), eat a few salty chips, and gulp down some pickle juice. Pucker up. 13.5 miles in and it was time to re-fill the packs with water, salt and Tailwind. If my mood was anxious at the start, I was quickly heading towards elated. Matt and I stomped up the trail out of Weever Creek road toward Stanley Gap and the next aid station.

The climb up Rich Mountain is similar to Davenport. You won’t question your existence or see the White Buffalo, but you’re going to do some work. We trudged ever upward, passed several runners, and by the time we reached the top the game was finally on. The descent down Rich Mountain is a steady drop to Stanley Creek, and the perfect place to make up some time. I took advantage of my good mood and the conditions, put a smile on and took off. Somewhere in here I lost track of Matt but ran into several other runners that I’d see throughout the race. People had come from all over to experience this: Chicago, Dayton, the Philippines. How lucky am I to have these proving grounds in my backyard?

At Stanley Creek aid, almost 19 miles in I was craving nothing by ice cold coke. I never drink coke, but today the caffeine and carbonation were right on the money. I had several refills, more pickle juice, and literally drank from the salt shaker. The next section started with a few miles of open road, and the sweat was already flowing in the 85 degree heat.

This segment of the race started fast and furious. The road is relatively flat, so if you’re feeling fresh you can make up some time here. The sun was oppressive so I remained cautious, but packed in some quick miles here before the onslaught of the trail again after Old Dial Rd. Along the way I encountered a few 100 milers still doing the work, still getting after it. I walked with a woman from Canada who was looking a little sleepy. I donated my emergency caffeine gel to her, and we kept on until we hit the Toccoa river. It was too tempting to pass up; she got in and sat down for a while, and I dunked my hat and threw it back on. It lit us back up. I left her with another 100 mile competitor and headed up the trail. A few more miles of ups and downs to Old Dial Rd where my crew (wife) and friends were waiting.

By the time I reached Old Dial people around me were starting to think I was high. I wore a permanent smile and did my best to spread my mood to anyone I encountered. Cary, Bill, and Nikki were waiting on our fellow runners there. I felt positively pampered. Bill and Cary helped me fill my pack. Cary had made me some miso ramen noodles on a camp stove, and even though I didn’t feel like I needed to sit down, I gave myself 2-3 minutes to suck down some noodles and salty broth. The soup was hot, but really hit the spot and packed away another reserve of salt for me to draw on. Aaron, friend and 100 mile competitor wasn’t too far ahead. He’d had some early struggles with nausea in the brutal heat but was pushing ever onwards. I wanted to catch up and spread some good energy. I grabbed another cup of coke before heading out up Garland, Brawley Mountain and Bald Top.

A few miles in I encountered Aaron and Ivars. They were taking a rest when I came up on them, and I probably annoyed the hell out of them, but rest time was over and we got moving again. Hopefully it wasn’t to their detriment. We were on one of the hardest sections of the BMT during one of the hottest parts of the day and I count it as a blessing that I encountered these guys when I did. We all slowed down and trudged up and down together, bantering about ultrarunning, youtube, past races, and what we were planning at the next aid station. There are few things in life better than shooting the shit with your friends on the trail. In no time we’d hit Wilscot Gap.

At Wilscot we’d agreed to hide away in our crew’s cars for a few minutes and spend some time in the AC. Rich Schick had suggested this strategy to me a few days ahead of the race, and it worked like a charm. 5 Minutes in the cool air, some ramen noodles and coke, and I was a new man. Caitlin, who’d spent the morning pacing fellow friends, was going to join on and march us over Wilscot to Skeenah Gap. A lot of runners stress over the effort ahead of them. Caitlin drinks a beer, shrugs, and says “Lets get on with it”. I didn’t drink a beer, but the attitude was inspiring so I took that with me along with the excessive runner’s high I was experiencing as fuel for the effort to come. Aaron and Ivars got a little rest in the car as well, and after some changes to provisions were ready to head back out towards Skeenah Gap.

The climb up Wilscot Mountain is rough. You’re getting closer to the real deal on the Duncan Ridge Trail; this is really the last hurrah of the relatively pleasant BMT. We trudged on toward the top, taking almost no breaks. The heat was abating and I was sweating less. I started to reduce my salt intake and stuck mostly to Tailwind, protein drink and water. Around the top of Wilscot I looked at my watch. I’d been at this for almost 10 hours now, and I was about to reach the last pleasant aid station before the real work began. Extrapolating ahead to make the finish in fewer than 20 hours, I decided it was time to break away and make for Skeenah on the double. Coming down Wilscot I went for it, and hit Hwy 60 at Skeenah Gap at a full run where the whole crew was waiting.

I got a lot of help from Cary at this aid station, the last time I’d see her before the finish. I refilled on protein drink one final time, topped off the rest of my fluids, grabbed a Snickers and slapped my headlamp on for the night. Dark clouds descended and the smell of turned over soil permeated the air. It was going to rain. I hadn’t brought any rain gear; I figured if it did rain it was hot, so it wouldn’t matter. I had neglected the cool mountain air, and didn’t appreciate just how much rain we were going to get. It was looking ominous as I waved goodbye to my wife and friends at Skeenah up the long climb to the Duncan Ridge Trail and the finish.

The climb out of Skeenah is notoriously steep. There are multiple false tops where you feel like running might be an option, but around every turn is another uphill march. It continues for several miles until you hit the Duncan Ridge trail, and make the left turn into the hills from hell. The race prior to this point was the warmup, and downright pleasant in comparison. It was time to get to work on the spine.

The sky dripped and the wind raged just as I saw the first blue blaze. Thunder in the distance signaled the oncoming storm, and I passed several 100 milers who had stopped to gear up for the drenching. Rain is usually my element. It cools me, my sweat rate drops off, and I typically pick up the pace dramatically. The sky opened up just before nightfall, and so did my pace. I wasn’t too cold yet, but I moved fast up the steep inclines and carefully quick on the declines. Several times I surfed the mud for 5 or so feet, only my trekking poles kept me from taking a butt slide or going over forward. I still don’t know how I managed to make it through the entire race without a single fall.

I could tally off the mountains, gaps and balds that you have to cross on your way to Fish Gap, but this race report is already dragging on. The only advice I can give is to put your head down and march upwards. Stop and breathe when you have to. Smile, you signed up for this. Use gravity when you can, carefully, on the downhills. Just keep moving forward.

The space between Skeenah and Fish Gap is a bit of a blur. Its a long section whether you measure by time or mileage. The lightning lit the sky every few minutes, illuminating everything on the dark trail for an instant. I’m certain I heard boar in the underbrush. Other runners claim to have heard bears calling. I think I saw the shadow of at least 20 in the distance every time lightning struck. That might have been my imagination. The rain and fog were so thick that using your headlamp on anything but the lowest setting was impossible. I just pressed onwards until the welcome light of Fish Gap appeared in the distance through the rain.

It was a dark moment for many runners at Fish. 100 Mile competitors had been at this for over 30 hours at this point, exhausted and underfueled, they were cold and hypothermic. Shivering under a tent or beside a fire, many decided to call it quits here, so close to the end. Many considered it, but hardened up and carried on. I ran into Mark, working his way through the rest of his 100 mile effort and looking really good! I crewed and paced Mark at the Bear 100 in 2016, and knew from experience that he could turn it on at the end of even the toughest races. Today was no exception. I made my stop quick. I was getting cold in nothing but my short sleeved shirt and needed to move fast to keep my body hot. I ate a few snacks, some coke without ice, and pressed on.

The next section of the race is in my opinion the toughest. Your tired legs are begging for rest. There is no such thing as a flat section after the first quarter mile out of the aid station. If you’re not ascending, you’re descending. To some degree I count it as a blessing that I was wet and cold. It made me move when I wanted to stop. The rain let up for a while, but the damage to the trail was done. Slipping and sliding on the bare mud was the rule for the rest of the race, and any chance of picking up speed on the downhills was out of the question. It was better to play it safe and finish rather than risk taking a spill off the trail to improve my time. Besides, I was already having a good time, so what did my finish time matter? Somewhere in here I met up with a few runners who were marching at exactly my pace, and I stuck with them for some good conversation about bears, beers and family. The previous 10 miles I’d covered in relative solitude, it was good to have folks nearby for a while.

By the time I reached White Oak Stomp I was starting to feel the effects of a very long day on my feet. I was still happy to be out there, but ready for the race to be over. I had warmed back up since the rain had stopped to little more than a sprinkle, but still made my rest brief. It was here that I ran into friends Wes and his pacer TJ. Wes had taken a spill early on that earned him a softball sized welt on his right calf. By some miracle of personal fortitude he had put this injury aside and managed to get out in front of our normal crew of racers over the course of 90+ miles. Taking a little rest at White Oak Stomp to change out a few articles of clothing, he looked ready to take on the rest of the race. Ellen, who I’d met in the previous section was ready to head out of White Oak right when I was, so we trudged out together.

The hike out of White Oak is as steep as it gets. Here you can touch the ground in front of your face as you ascend. Its a relatively brief climb, but brutal. We reached the top heaving a bit, and started making the long, treacherous descent. This three mile section is hard to take even in good conditions; the slick trail meant constant sliding, testing foot positions, and struggling to stay upright. I had several near misses, but Ellen kept her footing nicely. It was long and slow, but not impossible. I sympathized with the 100 mile competitors; every footfall is work at the end of a 100, every one of these steps were extra credit.

The sky opened up again during the descent into Wolf Creek. The going was so slow that I was having a harder time keeping my body temperature up. I was begging for some uphill as we approached the bridge at Wolf Creek, and the race delivered just in time. The last aid station is just a water stop. We walked right on by; the torrent of rain was plenty to drink if you just opened your mouth a little as you hiked.

The trail had turned into a creek bed of ankle deep water. The last 4 mile section is plenty runnable in good conditions, but a barely hikeable swamp when wet. We slogged ever upward, getting quieter as I began to shiver. We both wanted this race to be over. We reached the road suddenly, and I knew the rest of the trail very well. We crossed down the stairs and into the park. I bid Ellen adieu in an effort to move quickly and get my body temperature up in the last 2 miles. I was at a dead run when I hit campsites at Vogel, and the rain was driving hard all around me. As much as I could sprint at the end of a 50 something mile race, I did. The horse had smelled the barn, and I was ready to cross the finish line and find a nice, hot fire. In the pouring rain, to a crowd of perhaps a dozen, I crossed the finish line and accepted my belt of victory. To an outsider, the end of an ultramarathon may seem anticlimactic, but for me its a reminder that the joy was in the running, not in the finishing.

My race was over, but my day wasn’t. I still had friends out there working their way toward the finish, and I wanted to be around to see them cross the line. After a quick bite to eat, I peeled my shoes and wet shirt off, hopped in the car to get to our hotel room for a quick shower, then headed back to the finish line. One by one friends new and old were rolling in. Wes survived his early injury and crossed with TJ with confidence. Mark managed to stay awake and crossed the line shortly afterwards. Matt had caught up to Aaron at White Oak stomp, and a few hours later they crossed the line together at a run towing a crowd of fellow combatants with their pacers. A highlight of the finish, Ivars appeared minutes behind Aaron, at a full sprint, decked out in a red cape he’d fashioned for himself from a red Georgia Bulldogs tablecloth he’d found at the aid station. Ivars had fallen asleep for a spell and when he woke, was completely re-energized, if a bit cold. He’d solved his hypothermia problem ingeniously and hilariously. It was inspiring to watch these guys and gals fight their personal struggles out there and overcome them all to finish, come hell or high water (and we had both).

After the requisite post-race elation, we congratulated each other on a job well done, and planned our next battles. As drowsiness started to set in, we said our goodbyes, satisfied with the weekend’s work.

People seem to think running is a solitary. Absolutely not. You have the support of the good people who volunteered their weekend to work at aid stations, make you grilled cheese sandwiches, and teach you what a Pickleback cocktail is. You have the folks who spent the days prior to the race marking trails so you don’t get lost out there. Many of us have crews and friends out there to give us aid and to keep an eye on us. You have your fellow runners out there on race day, reminding you that this is only 10% race, 90% community. You have your training buddies, keeping you honest and making sure you get out of bed for the long hauls in the months prior to the race. You are literally surrounded by friends and supporters the entire time.

I’d like to thank the Race Directors for putting on a hell of a good show. But most of all I’d like to thank my wife, who tolerates many long hours of training, and sacrifices weekends to come out and support me whenever she can. In the days leading up to the race and for the duration of the struggle, nobody helped me more than she did. I’m lucky to have her by my side.

Book Review: Daily Rituals

Daily Rituals is a superficial book, a collection of “facts” with little analysis or synergy of its constituent parts. Mason Currey says so right in the introduction, so we know the author’s intent right away.

There is no illusion that what Currey is about to present is somehow a compilation of how to’s and instructions for creating. But, regardless of the author’s goals, to walk away from Daily Rituals without at least a few themes is impossible. Here are some.

Art and routine go hand in hand. Even avoiding routine is in some way its own routine. Have you ever tried not doing the same thing two days in a row? Each day? It’s difficult, perhaps harder even then simply settling into a comfortable cadence. The instability of non-routine produces its own set results. Finding a routine quickly becomes its own strange ritual and as Nicholson Baker put it:

…the most useful thing is to have one that feels new. It can almost be arbitrary… there’s something to just the excitement of coming up with a slightly different routine.

At its core, art is craft. Steven Pressfield says the same in The War of Art and Stephen King agrees in On Writing. Daily Rituals overflows with tales of creatives who get up and get to work using the tools they have to do what they know. Good or bad they do the work. Currey’s collection goes a long way in dispelling the myth and mysticism of creation. Artists are working stiffs like the rest of us. They clock in and they clock out. When the mist evaporates, whats left is you, your circumstances and what you make of them. Tolstoy had thirteen kids and wrote War and Peace. Stephen King wrote most of his first novels in a laundry room. What are you doing with your time and circumstance?

Your ritual is itself a creation. The individual routines of Currey’s subjects range from the mundane (Hemingway) to the eccentric (David Lynch and Andy Warhol). Thinking about how you work best is work. The process of creation is a creation, some kind of feedback loop that you experiment with, exploit or erase and start over. Different routines beget different results. Like creative constraints, your routine sets boundaries. You create your unique time and your unique environment; your results will be similarly unique.

So, as a collection of mundane facts about creatives and their daily work, Currey’s work is a success. Its not a rulebook, and its only inspirational if you let it free you to create your own routine (or non-routine). Currey strategically ends Daily Rituals with a quote from Bernand Malamud:

There’s no one way…You are who you are, not Fitzgerald or Thomas Wolfe. You write by sitting down and writing. There’s no particular time of place…How one works, assuming he’s disciplined, doesn’t matter. If he or she is not disciplined, no sympathetic magic will help… Eventually everyone learns his or her own best way. The real mystery to crack is you.

Instagram Gets Surreal

A year ago on a trip to NYC I had the chance to view a piece of art by Jason Salavon that averaged portraits together into one portrait. The results are uncanny. A portrait is so predictable that the shape of the objects and negative space of the painting are so obviously a portrait that even expressed as the average of several it still reads as a portrait. Its as though you took off your glasses and stood far enough away that the face simply became blurred. Salavon has similar works, such as the average of Every Playboy Centerfold, and 100 Special Moments. Kids with Santa is particularly cool:

Kids With Santa

Salavon’s work inspired me to create something similar.

Instagram receives thousands of photographs a day. They’re liked, and some become very popular. Enough so that they hit the ‘most popular’ page on Instagram. I asked, what does the average ‘most popular’ Instagram photo look like? I started by using my client key to download a group of them and average it up with ImageJ. I quickly realized that the most popular list changes. Frequently.

To truly capture what the average most popular photograph on instagram looks like it must be done realtime, at the request of the user and in the moment. I wanted to try some client-side image-processing with Javascript so I set out to create a beautiful time-waster that would allow a user to get the most recent popular photographs on instagram, choose a blend mode, and see the average photo right now. The result was Surrealgram:

Screen Shot 2013-09-30 at 10.48.40 PM

Surrealgram uses my forks of some existing software, like Pixastic and connect-image-proxy, along with a jquery-mobile and backbone interface, with a super-slim node.js backend to handle proxied image requests (until Instagram supports CORS). Technology selection followed the sacred rule of “this is what I want to play with right now”. Using it is simple:

Go to surrealgram.com

The latest ‘most popular’ photos will load automatically. Check out the result.

To get the latest photographs, click ‘Refresh’

To change the blend options, click the toolbar in the top right-hand corner.

optionsbutton

You can adjust the blend mode, amount, and number of pictures.

options

16 is currently the max, but I’m working to get that up without angering the instagram infrastructure.

Save your photo. This can unfortunately only be done on a desktop browser for now.

It was a few hours of work, but its become and addiction to play with. Check out some of my surrealgrams:

DogBridge

Flight

Sunglasses

I have some additional features planned if I can find the time to implement them:

  1. Share to Facebook, Twitter, Tumblr, blah blah blah.
  2. Allow users to search by hashtag
  3. More pictures!

The code is under active revision, you can find it here

Keep Your Eyes on Your Keyboard

I recently read Accidental Genius by Mark Levy. I did so begrudgingly; I usually don’t go for books that promise to unlock the power of my mind through special techniques. I’m glad that I could put aside my stubbornness because the book contained a wealth of advice on tapping into ideas that you may not even be aware you had.

Accidental Genius advocates a practice called freewriting. Freewriting is just timed bouts of word excess. Sit down with pen and paper, or your favorite full screen editor, and go to town. Don’t think, write. This seems counter-intuitive until you understand that writing is thinking. By turning your hands into your own personal dictation device you engage that part of the brain the controls motor neurons freeing your mind to wander into deeper recesses.

I’ve been doing this to some extent intuitively for years. I first started “journaling” a few years back based on the 750 words meme that rolled over the internet. It advocated writing 750 words a day. Didn’t matter what they were, observations, stories, thoughts, feelings, etc. Just get it all out on paper. I figured if it works for Hemingway it will work for me. Every night for months on end I did this as a means of “brain-dumping”; just get it all out on paper. You can come back later and edit it into something worthwhile if you want…or don’t.

Think of it as making bread. You knead your brain with these 750 words or freewriting sessions, forming new connections between synapses you didn’t even know were there. After you knead and rest your dough (mind) for a while, you can come back and form your thoughts into rolls suitable for baking and serving.

One tip of my own to add:

Keep your eyes on your keyboard

Mavis Beacon will of course disagree, but I’m not trying to teach you QWERTY typing. The act of writing is different than the act of editing. When you write do it with reckless abandon. Ignore punctuation, spelling and typing mistakes. When you look at your screen your internal editor is watching what you put on the page, backspacing, deleting, correcting and moving forward. Backtracking into an idea to correct something as minuscule as a dropped comma forces your brain into the parallel tasks of writing and editing at the same time.

Try This:

Write stream-of-conscious for 5 minutes while looking at your screen. Do what you normally would, correct your errors and keep going.

Then Try this:

Write for 5 minutes looking at your keyboard. You may have made a typo back there or forgotten to type a comma but who the hell cares, your typing at the speed of your brain and not your stupid fingers. Just write, you can come back and clean it up later.

Now Compare

Did you write more in the latter 5 minutes than the former? I always do and I always end up with more usable material than when I edit as I go. Separating the acts of writing and editing is the most important lesson I learned from Accidental Genius.

In the past six months I’ve spent less time dumping my brain on the page, but with the kick start from Accidental Genius I think I’ll start the practice up again with more regularity and include some of the tips and prompts from the book.

Coffee Roasting: Build or Buy?

For the last five years I’ve been roasting coffee in this:

I got 5 years out of my old machine, the Frankenstein Turbo Crazy, home grown of course

My Frankenstein Turbo Crazy.

But alas, after five years of operating “outside of normal temperature ranges”, this happened:

Before this happened. Half a decade of operating "outside of normal temperatures" melted the convection heater...

It seems that convection ovens weren’t meant to have their temperature limiters removed and run for hours on end. The handle, which controls the reed switch to turn the heating unit off and on, melted right off the base.

I knew this would happen someday, and I had planned to build another machine with a leaf blower and a commercial heating element, with robot arms and a positron brain. Alas, the unhappy melting happened right in the middle of rebuilding a fence, writing a bunch of software and getting through several releases at the office. I was posed with the classic question all technology households are posed with: build or buy?

A guy has got to have his home-roasted morning brew. I made a rash decision. I ordered one of these:

The Muller House gets a new coffee roaster

A GeneCafe from Sweet Maria’s.

After a week of waiting the GeneCafe finally arrived so after fulfilling my daily obligations I came home and took it for a test run on some Rwanda NKanka Kinyaga. In Benjamin Franklin style, here is how five years of DIY roaster technology stacks up to the commercial grade:

GeneCafe Frankenstein
Pros
  • Configurable Temperature
  • Configurable Time
  • Integrated cooling unit
  • Excellent chaff removal
  • Single unit
  • Easy to clean (so far)
  • Very even roast
  • Requires less monitoring
  • No coasting
  • Extremely high temperatures
  • Infinitely configurable
  • Very low cost
Cons
  • Long coast time
  • Small batch size
  • Long roast/cool times
  • Temperature
  • Very high coast
  • No integrated cooling unit; long cooling times
  • Requires constant monitoring
  • Occasionally uneven roasts
  • Poor chaff removal

The verdict. After the initial two test runs I’ll give the win to the GeneCafe. If only for the sweet analoguish knobs. We’ll see how it holds up after half a decade.

What’s the plan for my beleaguered Frankenstein Turbo Crazy? Well, I’ve always wanted an outdoor water heater…

Update: The coasting issue I complained about previously is no longer a problem. Seems I just needed to read the instructions…

Seven Languages in Seven Weeks

Think about the way you think. Think about that thought, and this one. Did you think using words? Did you see the words? Sound them out mentally? If someone asked you describe yourself, you would probably think of a series of adjectives (at least if you’re an English speaker).

We think via language, spoken or written. It’s the source of our intelligence and in some ways the root of our consciousness. Helen Keller is quoted with communicating that:

When I learned the meaning of ‘I’ and ‘me’ and found that I was something, I began to think. Then consciousness first existed for me

The languages you learn are the languages you express yourself with. They mold the way that you think about things and create who you are within your own mind. I’ve written about this before and it’s not an entirely new concept.

Recently I’ve gone to great lengths to change the way I think. Finding new ways to solve problems, especially software problems, often involves learning new languages, syntaxes or paradigms. You can force Java or C to do just about anything, just as you can force the English language to describe just about anything, but it might be that by using Java instead of Haskell, you’re using the wrong tool for the job.

I wanted to expose myself to a breadth of different software paradigms in as little time as possible. Rather than reading dozens of tutorials, or poring through hundreds of pages of reference manuals to get maximum exposure, I bought a book I called Seven Languages in Seven Weeks. Packed into this dense little tome is an overview of seven syntaxes from different families and programming paradigms.

Ruby

The book begins with Ruby. It’s a fairly common syntax and I considered skipping this chapter. Indeed, with the relative ubiquity of the language I wondered why it had been included at all. In the spirit of playing along with the author I read through the sections and did the exercises as described. It turned out to be a good idea; some of the concepts around using method_missing as a DSL generator I had never put into practice.

From a comfort standpoint starting with a language you’re familiar with is also a bit like reading the introduction to a Latin grammar text book in English. I know the language and therefore the author can present his approach to me with words I can understand before I try to make my way through the rest of his presentation.

Speaking of presentation, Tate clearly has a grasp of basic pedagogy. From the beginning he uses a mneumonic device to help the reader put a face to the chapter and the methodology. For Tate, every language is like a character in a movie. They have their own personalities; something that makes them unique within the dozens of lexical environments out there. For Ruby it’s Mary Poppins. You know, syntactical sugar. Get it.

IO

After Ruby Tate introduces a language I had never heard of, Io. Just try searching for information about this little language on the web. You won’t exactly find the throbbing community that surrounds java or ruby to back you up. No, if you choose to use Io to solve something new, you’ll likely find yourself in uncharted terrority. Not necessarily a bad thing if your approach to the text is to learn new ways to think.

A prototype language, Io is described by Tate as Ferris Bueller. In use I got the distinct impression that Io was heavily influenced by Smalltalk; everything you send is a message, and their are nothing but senders and receivers of messages. Method or function? Not really, there are ‘slots’ with message handlers. Can they be construed as the same thing, abstractly yes, but that is to avoid thinking in a way that make the language unique. Sending messages between objects is a powerful concept, and will help you better understand Objective-C and Smalltalk.

Using Io feels a bit like working in JavaScript, the only other prototype language I have any experience with. The concurrency framework is dead simple and provides the reader with a taste of things to come from languages like Scala and Closure. In fact, the actor framework in Io is so simple and impressive it feels like a great environment in which to teach concepts of asynchronous behavior and concurrent development.

Prolog

After Io we get to Prolog, the most frustrating language paradigm for me to grasp in the book. Tate says Prolog is like Rainman. That must make me Tom Cruise.

The logic programming paradigm was at once the most fascinating and frustrating for me to study. At first I was enthralled. A language that I can plug values into and simply query against to get the answer like a super-powered database? Sign me up. I immediately found myself fighting the syntax. It took me some time to grasp the recursive nature of the language as well; no looping structures.

Solving the sudoku problem at the end is the best example of the power of Prolog and languages like it. Reducing a game to a couple of line of syntax, injecting the rules and simply asking questions is a beautiful way to solve many of the problems modern engineers are presented with …if Rainman doesnt drive you nuts along the way.

Scala

With Scala we take a detour back to familiar territory. Scala is the first variant on the java language I’d had the opportunity to use, so when I began the chapter I had some exposure to it. Most of the concepts in this language sunk right in.

Tate says we can think of Scala as Edward Scissorhands. He is the construction of spare parts and a lot of paradigms that already exist. I prefer to think of Scala as MacGuyver; It can do pretty much anything in a pinch. Scala was a comfortable environment to take a break in for a while. It sports functional programming paradigms like higher-order functions, while retaining many imperative concepts held over from C-based languages. Its also completely interoperable with Java, so all of those libraries we’ve grown attached to like joda and jsyn can be reused in the same lexical environment.

For concurrency Scala provides an actor system, much like Io. Tate clearly planned the book to address concurrency in a methodical way, first by introducing simple examples with Io, then advancing to Scala before diving headlong into the deep waters of Erlang and Clojure.

Erlang

Things get uncomfortable again as Tate introduces erlang. From the get go Erlang baffled me, and when it was revealed that it was modeled after Prolog, I understood why. The only language compared to an antagonist in a movie, Tate describes Erlang as Agent Smith from the Matrix. Tate says that this is due to the self-replicating capabilities of Agent Smith in relation to the fail-safes built into Erlang, allowing the user to build highly fault tolerant concurrent systems that “just won’t die”. I think it’s because Erlang is evil.

Erlang is clearly very powerful, so as with Prolog I struggled through the examples and problem sets. I still don’t feel like I fully grasp how to do anything useful with it. Of the languages in the book, I feel like this is the one I need to spend the most time with to really understand.

Clojure

Next we get a lisp. Clojure, a language fully compatible with the jvm is a lisp not at all unlike Scheme, minus a few parentheses. For Tate this language is like Yoda, no doubt due to the “reverse” notation of the arguments and the “inside-outness” of the code construction, at least compared to C.

Surprisingly, I took right to it. Of the new lexical environments this felt the most comfortable, but then, I’ve played with emacs a bit. The concurrency framework is not at all unlike scala with some notable additions. The concept of STM was awkward at first, but after fiddling with it for a while I was comfortable producing usable code.

The interoperability with Java is another major benefit to using Clojure. For Dijkstra’s Sleeping Barber problem, rather than struggle through writing a queue from scratch, I just borrowed the existing Java LinkedBlockingQueue, cranking up one actor to poll it, and another to deliver to it:

In just under 1000 parentheses the barbershop problem was solved. The wrapper around it is unnecessary, but then the whole solution is a little bit wordy for Clojure.

Haskell

Impressed as I was with Clojure, it was time to study the final language in the book, Haskell. I originally selected the book based on the inclusion of Haskell. For some time now I’ve wanted to take a crack at this pure functional, almost entirely mathematical language.

Compared with the ever logical Spock, I’m still dazzled by Haskell. Having read the chapter and gone through the exercises, I feel like I’ve only scratched the surface of what it can do. It’s unofficial tag is that it makes hard things easy, and easy things hard. That ain’t no lie. Try reading a file with it. Do something simple, like open a socket. I feels like pulling teeth. Now go write a Fibonacci solver. Chances are you’ll have cooked up something that can’t be done as succinctly or quickly as Haskell can do it. Of all the languages in the book, this is the one I intend to dig the deepest with.

Wrap-up

When learning anything, I generally feel like a breadth-first overview is the best method of getting started. When learning new ways to think, this breadth-first search seems even more important. Get all your options on the table, see what’s been discovered before deciding how to tackle the problem. Selecting a strategy to go deeper with is a decision that can always be deferred until you know what your strategies are (Of course, you can only defer for so long before you just need to make a damned decision based on what you already know).

The real value of Seven Languages is that it provides this kind of breadth-first overview. You may know Java or C already. That’s great. What else is out there? What can a language like Io make easy? Clojure will help you understand lisp. Haskell will help you understand any functional and improve your understanding of modern math. Scala will let you build damn near anything.

Tate’s progression makes a lot of sense as well. If I was creating a curriculum to prepare a developer for the real world, I would start a youngster out with something like Ruby. This is an obvious ramp into Java and C. Then I might introduce something like Io to explain prototype languages and concurrency in a simple way. This is an step towards a better understanding of both Javascript and Objective-C. Then I might start them on Scala. It’s maximum exposure to as many concepts as possible. From scala, Learning a functional language is made easier if the programmer has been using Scala’s higher-order stuff like fold and map, and is used to immutable variables. Tate’s text provides a decent way to do all of this, introducing a young developer not only to the syntaxes but to paradigms that are broad enough provide insight to damn near any language out there.

If you’re interested in seeing my solutions to the exercises and problem sets, you can find them here. I learned a lot along the way, and I think I achieved the goal I had set out to achieve: Learning new ways to think.

Be Careful With your Redis BitSets and Java

Fast, easy, realtime metrics using Redis Bitmaps

A while back a popular article hit Hacker News. Written by the guys over at Spool, it contained a slick methodology for storing metrics such as user logins per day, song plays by user, etc using using Redis BitSets.

How about a basic example. When a user logs in, set a bit in a bitset at the location of that user’s ID number. If you have a bitset allocated for each day, you can tell for any given day how many users logged in by looking at the cardinality of the bitset. Want to see if a particular user logged in on a particular day? Just check the location in the bitset for that user’s ID for the day in question for a 1 value. You can also perform more advanced logging, taking the union of multiple sets, or the disunion, to determine various statistics.

The theory behind it is simple and sound. It’s faster than hitting an RDBMS for values that are binary in nature, and the ability to apply basic set theory to your bitsets to analyze your metrics is quite powerful.

I began to use this method and the code examples on the Spool blog to create metrics in a variety of systems, not to mention create silly stuff like prime number tables. It only took a few implementations to realize that the code examples, taken at face value, don’t really work.

The Problem with BitSet.valueOf() and BitSet.toByteArray()

The heart of the problem lies in the output of Java’s default BitSet.valueOf() method. Here is one of the examples on the page:

import redis.clients.jedis.Jedis;
import java.util.BitSet;
...
  Jedis redis = new Jedis("localhost");
...
  public int uniqueCount(String action, String... dates) {
    BitSet all = new BitSet();
    for (String date : dates) {
      String key = action + ":" + date;
      BitSet users = BitSet.valueOf(redis.get(key.getBytes()));
      all.or(users);
    }
    return all.cardinality();
  }
If you use the Jedis setbit method to set all of your individual bits, then read the entire set out with BitSet.valueOf(), Java reads the bytes as though they were right to left, whereas Redis stores the values in a straight line. Left to right. The bit sex, as it is called, is reversed in this case, and you can’t possibly get an accurate bitset out of Redis if you retrieve it and convert it using plain ol’ BitSet.valueOf(). You have to have a ‘tweener method to flip the bit sex for you.

You might also think, though it isn’t in the examples, that simply performing a BitSet.toByteArray() would create a byte array appropriate for storage in Redis to be read back via redis.getbit(); Not so. Java uses its native byte order for each call. This confuses things greatly, because if you set the bitset using BitSet.toByteArray() and read it back using BitSet.valueOf(), everything looks correct. Try to read a bit out of this array and be prepared for a surprise.

Some helper methods to get you through…

I reported this to the guys over at Jedis and they are considering adding some helper methods in their Redis client to alleviate this.

Until then, you can use the helper methods that the guys at Jedis and myself created to get you through.

To get a BitSet out:

public static BitSet fromByteArrayReverse(final byte[] bytes) {
        final BitSet bits = new BitSet();
        for (int i = 0; i <; bytes.length * 8; i++) {
            if ((bytes[i / 8] &amp; (1 <;<; (7 - (i % 8)))) != 0) {
                bits.set(i);
            }
        }
        return bits;
    }

To put a BitSet in:

public static byte[] toByteArrayReverse(final BitSet bits) {
        final byte[] bytes = new byte[bits.length() / 8 + 1];
        for (int i = 0; i <; bits.length(); i++) {
            if (bits.get(i)) {
                final int value = bytes[i / 8] | (1 <;<; (7 - (i % 8)));
                bytes[i / 8] = (byte) value;
            }
        }
        return bytes;
    }

And you can see the gist I created to read bytes out and put bytes in, retaining the integrity both ways, and show how things do and don’t work:

You can run that locally to get something like a code story…

So, whether or not the guys over at Spool have an unfortunately named helper method that looks exactly like the native Java one, or use some other methodology to maintain bit order in their bitsets I can’t say. It goes without saying that you should check and double-check any ol’ method you pull off the streets.

A Big Day In Banos

We met Franco El Blanco in the lobby at 4:30 AM. After a few checks to make sure we had everything we needed Frank introduced us to our ride. It seemed that Cary and I couldn’t escape from Ecudar’s two primary modes of transportation: buses and single cab trucks. Cary rode up front, three across with Frank and our driver; I just hopped in the back.

Luckily, the baths were just a short ride away. Situated just north of town, Termas El Salado are a bit newer than most of the other local baths, owing to the fact that they were completely destroyed by a volcanic eruption in 1997. Rebuilt on it’s ashes, you can see the remains of the former site if you look closely at the surroundings.

“We can have a nice soak if we get there at opening time, before the the crowds.” Frank told us.

In America only a few events can illicit a crowd at 5AM. A new Harry Potter book. An iPhone release. In Ecuador, the daily opening of the baths during Carnival in Banos is equivalent. When we arrived the hot pool’s slurry of yellow sulphur and tan-skinned inhabitants was already beginning to look like human soup. The two warm pools were filled with children on flotation devices. Only the cold pool was left alone, save for the occasional contrast bather passing from take a quick dip to cool off.

We hung out for a while, moving from pool to pool to try them out. I did some contrast bathing myself. When I get back I’ll have to engineer a way to do this at home. An hour later when we left the sun was rising and so were the real bath-goers; we walked out passing a line of latecomers who cared very little about beating the crowd. After a quick breakfast at the Hostal we headed out for our next event: Canyoning.

UntitledCanyoning is simple. You hike to the edge of a cliff, attach some ropes to yourself and rappel down. Then you find another cliff and do it again. Think of it as the opposite of climbing (though you have to do some of that to get to the cliffs). In Banos, canyoning usually meant descending into the canyons created by the many waterfalls.

We met up with a group, donned our wet suits harnesses and performed our first descent. It was little more than a practice round to get us started. Our second drop consisted of being dropped off a sheer cliff into the mouth of a roaring cascade. It was fun, but so far the guides were doing all the work. I was beginning to wonder if they knew that Cary and I weren’t exactly amateurs at this. We took a long hike out of the canyon and met up as a group close to where we started.

“Ok, now we go to the next waterfall.” Announced Jonny, one of our guides.

At this point the rest of our group descended the hill off into the morning, while Cary and I climbed even higher with Jonny to another waterfall. This is where we got to do a couple of real drops into waterfalls with a little movement. We made a few more descents, then thoroughly soaked called it a morning on canyoning. We headed back into Banos to get cleaned up, grab a quick lunch and head off for our next little adventure: Cycling on the narrow, bus-filled roads of Ecuador.

Ecuador2-606Las Rutas de Cascadas, or the Route of the Waterfalls, is a cycling path from the city of Banos to nearby Puyo. You ride out of Banos on the main highway heading East and along the way pass eleven or so waterfalls.

Cary and I didn’t intend to make the entire ride to Puyo, which usually takes a day. We instead rode out assuming we’d stop about halfway. In what became another adventure in “Cary and Grant Don’t Know What The Hell They’re Doing”, we pedaled out of town with little more than a vague photocopy of a map that sort of showed you where to go. After riding a few miles without seeing any cascades, it became obvious that our map wasn’t to scale.

Yet we rode on into the waning afternoon sun, eventually stopping at our first waterfall, which was a roadside attraction equivalent to Rock City. There were food vendors everywhere. A zip line ran from one cliff launching tourists headfirst over the deep valley to the other side. There was also a tarabina, or cable car, for the less adventurous. We watched a few of the zipliners superman over the cut in the Andes before jumping on our bikes and heading on.

As we made the route, we passed several of these tarabina pitstops at each waterfall. I noticed several derelict and rusted out tarabinas, indicators of a tourist boom the area couldn’t sustain, perhaps even remnants of the country’s economic bust a decade prior. Ecuador2-609

There are other attractions along the way. Much of the local power is generated from a small hydro plant nearby, and the ride across the bridge provides a view in the maw of the dam. There are several tunnels, though only one that cyclists are allowed to pedal through. After two dozen buses pass you by at an ear’s breadth, the sparsely populated detours around the tunnels are a welcome retreat from the stress of riding on main road. Small towns dot the route, where other tourist industries have found a foothold. In one town visitors can bungee jump from the bridge into one of the canyons. Cary and I rode past, tempted but not enough to risk a trip to the hospital in Ecuador.

Side Note – Healthcare in Ecuador: Frank informed us that for an Ecuadorian, healthcare is quite expensive. A trip to the local clinic costs $30, and in a country where a couple hundred a month is the living wage, that’s a big chunk. Often, Frank will loan the cash to one of his many employees in the hostal to take their children to the clinic. Often, the trip to the clinic takes a detour to the local shaman instead.

Ecuador2-615“There are buses running to take you and your bike back to Banos along the way until 8:00” the agent at the bicycle rental shop assured us. We hadn’t seen a single bus, truck or car carrying any bikes back to Banos and we’d ridden the better part of three hours. Darkness was descending and Cary and I were beginning to wonder how we were going to get back. We consulted our poorly scaled map at intervals to guage our progress. We had a decision to make. Ride on hoping we came across one of these mythical buses to take us back, or turn around and start riding back to avoid riding too late into the night on a narrow road in the Andes frequented by brake-averse bus drivers.

We rolled the dice and rode on.

An hour or so later we came across the little town of Rio Verde, which was too wrapped up in it’s own Carnival celebrations to pay any mind to two gringos on bicycles. We rode around for a while, certain that this had to be the place where we would meet one of these mythical buses. After making a few confused circles in what looked to be the most crowded area of town, we shrugged and rolled the dice again.

“A Banos?” A mustached man jumped up as we approached and pointed to his pickup truck. We must have nodded hard, he quickly opened the back and started to pull the bikes out from under us an throw them in the back. We sat down on the makeshift bench in the back and breathed a little easier knowing we wouldn’t be out on an unknown road in the middle of the Andes in the dark again.

Back in Banos we returned our bikes and grabbed dinner at a little parillada we’d been eyeballing called Le Chiminea. It was a fine end to our time in Banos, which in only two days managed to feel like a week. Our trip to the Helen of Ecaudor complete, we fell into bed, ready for our last bus ride, which would take us out of the Andes and towards the sea.

RPM 2012: Year Of King Richard

2188404253-1Occasionally, between the software, traveling, work and more work, I get a rare opportunity to play the drums. The call usually comes at the end of January, and has become the most welcome distraction in February in years.

It’s The RPM Challenge

In February 2011, Tim Alexander asked me to "play on a few tracks" for his Letter Seventeen album. I hadn’t had a chance to record in over a year, so I eagerly accepted and contributed a few tracks. It was fun as hell.

This year, when Tim again asked me to "play on a few tracks", I unknowingly agreed to play on almost all of them. With an additional wrinkle, I would only be here half the month. It would turn into a whirlwind two weeks as I raced to record drums for eight of the ten songs (nine if you count the one I failed on), prepare to leave the country and grow another year older. Cutting it a little close for comfort, I uploaded the last of the tracks from my lodgings in Quito over a frustratingly slow internet connection.

Two weeks later Tim mailed the final cut of The Year of King Richard to Portsmouth, NH and another RPM challenge was complete.

Let’s Talk about the tracks:

YOKR opens with So Social, the signature track of the album and easily the most tiring to play. Sprinting in with a 16th note roll and an easy to spot homage to "The Knack", the energy of this song was an exciting way to kick things off. I’d obviously taken a year off from the drums as I approached the end of this song out of breath, and it goes without saying that it took more than one take.

With the warm up out of the way, we move into Dancing Machine, a post-disco inspired open-hat affair. It’s tragic that most drummers, rythm aside, can’t dance to save their lives. Throwing a tom roll into the middle of the chorus was wacky at first, but turned out great in retrospect. Keep your ears open for the 16th note open-hat beat in the bridge; that machine-gun hat pattern once peppered the entire song but proved to be too distracting.

Tired from dancing, Tim takes a step back with Time Bomb. "Think R.E.M." Tim told me when he first introduced the song. I went back and listened to some Dead Letter Office and gave him my spin on it. As usual, I took things too far and played the heavily syncopated beat you hear at the end throughout the entire song. Tim reeled me in though, and the album is better for it.

Year of King Richard, the title track, would be the song that got away. After hearing it once I was desperate to play on it, and after several takes of what I thought was a good beat, I simply couldn’t get the sound I was looking for. After turning in a few disappointing scratch tracks to Tim, I had to admit the song did not need me. I made a few suggestions and took a back seat on this one. Still, it’s my favorite song on the album.

YOKR behind us, Tim sidesteps any notion of being locked into a genre or era and we find ourselves back in the 80’s. Law of Motion is another open-hat dance number, this time with a significant synthesizer presence. The arpeggiated line in the bridge is classic. I almost never do splices, preferring to do one or two takes of a track all the way through and just get it right. I was made to play Laws of Motion it seems, as I did exactly one take of the song.

Next is Deep Hole, a song that any project manager I know can relate to, and certainly anyone who’s ever "bitten off more than they can chew" will understand. At first, the drum track on this song was a busy double-time beat that seemed a bit too cheery. I miced my toms and took the song into a deeper hole, preferring the ominous half-time gloom to set the mood. That and I really wanted to play my 16" tom like a hi-hat.

If you want me to go is primarily Tim and his guitar. At first I intended to play on it, but Tim looked at me like I had an elbow growing from my face when I mentioned it, so I went off and did some more failed takes of Year of King Richard.

"Can you play a Motown beat?", Tim asked me when he introduced Number Q. "Sure," I answered while googling "Motown beat" to figure out what it was. What came out was somewhere between Beast of Burden and swamp rock. So I didn’t exactly nail the Detroit thing, but Number Q did turn out to be one of my favorites on the album. You’ll wanna come out and see this one live when I can talk Tim out of the safety of the studio.

On Summer Nights I couldn’t help myself. I had to throw a rolling tom beat into this easy going, California pop number. I intentionally dropped in and out of the song to draw the listener into the simple strumming of the guitar and de-emphasize the presence of the drums. Did I mention the toms?

"Just go listen to Tomorrow Never Dies on Revolver." Tim told me after a few failed attempts at the last song on the album, Lavender Haze. After the Beatles’ refresher, I approached this song with a bit more freedom, a lot more ride, and enough ghost notes to fill a haunted house. Of, um, snare drums. The addition of Amit Chabukswar’s tabla rhythms and Gary’s sitar really made the point. It was an open end.

So that’s the album. It still amazes me how much you can accomplish in less than a month. Someday we’ll be as good as Beck and record it all in 48 hours. So go buy Year of King Richard on iTunes, CD Baby, or download it from bandcamp. Oh, and visit the Letter Seventeen site and tell us what you thought, or like Letter Seventeen on Facebook.