Friday, June 29, 2018

The Prepared Woodsman, 1980's Style

We're heading out on a backpacking trip relatively soon, and we're bringing along some newbies. While I've no doubt as a group we'll be well prepared, I want to make sure they're never without essentials. Many a backpacker has been caught after dark because he wandered away from his campsite and left his flashlight behind. Heck, last year we walked 50 yards from our campsite at night to hang the bear bag and got turned around. A couple of flickering Shabbat Candles got us out of that pickle, but it was a sharp reminder that conditions can change quickly and you don't want to be caught unprepared.

Another less dramatic (though no less real) challenge: how do you keep track of important, yet small items like your knife, flashlight and spork? While hiking, they may live in your pack, but what happens once you arrive at camp?

To solve both of these issues I picked up a few small fanny-packs and filled them with essentials. Here's what I stashed inside:

  • Bandana - a classic multi-purpose item, usable for everything from drying off and handling a hot pot, to delivering first aid.
  • ~20 feet of cordage - another multi-use item.
  • A pack of tissues - when nature calls, you want to be ready to answer.
  • Compass - helpful for orienting a map and avoiding walking in circles.
  • Whistle - the first tool to reach for when you're lost.
  • Nitecore TINY - this flashlight is both comically small and comically bright.
  • Lighter - another required woodsman item, and handy to have at the ready when preparing meals.
  • #7 Opinel Knife - useful for a variety of camp chores. As an aside, I've never used an Opinel before and am curious to see how it performs this trip.
  • Spork - best not to lose your spork.
  • Heatsheet - The second tool to reach for when you're lost. It has a myriad of uses: hunker down under it to keep warm and dry, slice off pieces to use as flagging material or use for signaling rescuers from a distance. Here's something I just learned: a new Heatsheet packs perfectly in a portion size snack bag.

The above items fit into the fanny-pack with space to spare. Being prepared never looked so rad!

Thursday, June 28, 2018

20 Years of Simon and Simon

So... I try not to show up here too often, but I will make an exception.  Today is our 20th wedding anniversary.  

Part of me feels like we were just driving away in that yellow Ryder truck, and part of me looks back on all that has happened since then and realizes just how much has changed.  I've had about a gazillion jobs, and Ben who started off as the one with the long commute now gets to work in his pj's.  We've fostered amazing children and have adventured to countries where I never would have expected to go.  We never do it conventionally, and that's what's made it a super fun wild ride. 

Happy 20th, Benj.  After spending our first anniversary at a Burger King driving from Charlotte to DC, I was a little wary about making it to 5, let alone 20.  But I guess that's what memories are made of!

This picture of Ben was taken when he saw me in my wedding dress for the first time.  I strive to keep that expression on his face as much as I can - life together should never be boring!

Here we are about a month before our wedding...  My how time flies...

Wednesday, June 27, 2018

Are we there yet? -- Prototyping a Trip Timer

I'm mucking about with a new challenge: I want to create a simple timer that starts counting when my car is turned on. This is the elapsed time feature my Acura has, but I'd like to build it as a stand alone device.

To prototype this, I busted out my micro:bit and wrote the following code:

OLED.init(64, 128);

function pad(x: number): string {
    return x < 10 ? "0" + x : "" + x;

basic.forever(() => {
    let remaining = input.runningTime() / 1000;
    let hours = remaining / (60 * 60);
    remaining = remaining % (hours * 60 * 60);
    let minutes = remaining / 60;
    remaining = remaining % (60 * minutes);
    let seconds = remaining;
    OLED.showString(pad(hours) + ":" + pad(minutes) + ":" + pad(seconds));

I then brought the micro:bit out to my car and plugged it into a USB port. I turned on the vehicle and in a few moments, the counter started ticking away. Whoo!

In about 15 minutes, and using little more than CS 101 coding skills, I had my prototype. I suppose I could stop there, but for a more refined version of the device I'm thinking of using the following:

  • The Huzzah Weather Display Tutorial describes hardware that matches up with the footprint I had in mind. The fact that the micro-controller includes WiFi support is extraneous, but does open the door to future functionality. I could imagine issuing commands to the timer remotely, which would be sweet.
  • The Universal Dashcam Installation Kit answers the question of how to power my device. The kit turns an automotive fuse into a 5v power source. This is what the Huzzah calls for, so I think this should work nicely.

I even took a peek under my car's dashboard and sure enough, the fuse box is just itching to be plugged into:

All that's left to do is buy the parts and build this bad boy. It may not as audacious as say, making your car doors removable, but this would be a fun (and gentle) foray into the world of Car Hacking.

Tuesday, June 26, 2018

Just Write: An Artist's Way Inspired Web App

In Jenna Fischer's The Actor's Life - A Survival Guide she heaps praise on The Artist's Way. She describes this text as being useful for re-connecting with your inner artist. I was intrigued, so I checked out a copy from the library.

The Artist's Way is setup as a workbook and self-paced class, and I'm not quite convinced as to whether I'm going to play along. Yet, I was impressed with tools described in the opening chapter: Morning Pages and the Artist Date. The latter one is interesting, but I'll save discussing it for another day.

Morning Pages work like so: every morning you sit down and fill 3 pages of text. The writing is intended to be stream of consciousness, and does not call for coherency. And that's it. Don't know what to write? No problem, write "I don't know what to write." for three pages and you're done.

On the surface, this exercise seems to parallel one you might find in a photography, drawing or any book teaching a skill. The directive might read like so: Every morning you should [insert skill], where the skill may be snapping a picture, drawing a sketch or composing some music. The author of the Artist's Way, however, makes it clear that while you're writing, this isn't really a writing exercise. It's much closer to a form of meditation. Perhaps it works like so: rather than trying to empty your thoughts through relaxation, you do it through the act of expelling them. I know that when I'm running, I'll often find clarity by just letting the thoughts flow.

While this exercise is useful for writers, it's just as useful for photographers, dancers or anyone who can benefit from exercising their creative muscles.

A typical person who was inspired by the concept of Morning Pages might go out and buy a notebook and start the practice. But where's the fun in that? My first thought was: I should make an app to power my own take on Morning Pages!

I quickly worked up a plan: I'd make a simple web app that encouraged you to enter N number of words. When you hit this quota, you'd have the opportunity to save your work. After 7 days of repeating this process, the system would start e-mailing you the text that was a week old. This would initially focus you on a write-only mode of composing, yet with time, you would get exposure to the content you've previously created. I can't take any credit for this flow: it's just automating the strategy described in the book.

Today I built out part of this app. You can check out the source code here. Right now, the app does little more than give you a space to write and count down from 500 words:

You can try out the app here.

Next up, I need to add support for logging in with your GMail account. That will give me access to the user's e-mail address, which I can use as the destination for archived entries.

Did I have time to actually do Morning Pages this morning? Oh no, I'm to busy building an app to do Morning Pages.

What can I say, Morning Pages, like public transportation, are perfect for the other guy.

Monday, June 25, 2018

Taking the Leap - from Rock Hopping to Rock Climbing

I watch rock climbing videos with a mix of admiration and horror. My fear of heights means that you're never going to find me dangling off a ledge. Heck, just watching the right climbing videos on YouTube leaves me with sweaty palms. So I was a bit surprised when I found myself captivated by the Ropework For Scramblers series put out by the BMC.

The goal of the series is to introduce rope-based climbing techniques to those who have mastered equipment free rock scrambling. Using little more than a harness, rope, slings, caribeners and a few nuts, it's possible to make a precarious scramble into one that's far safer.

At a certain level, I enjoyed watching the videos just to understand what all the glittery equipment I see at REI is used for. But more than that, I appreciated the clear demonstration of skills and the explanation of the various trade-offs of each approach. It blows my mind that in a minute or two an experienced climber can secure themselves to a mountain and be prepared to help catch a fellow climber should they fall. Would I want to trust my life to a couple chunks of metal wedged in a rock? Yeah, no thanks. But to see how it works and the thought-process behind setting this up, is quite cool.

Given the emphasis on ropework, I was surprised that the various techniques demonstrated required only two knots: a clove hitch and a munter hitch. When I hear 'clove hitch,' my mind immediately goes to boating. But apparently, they're also used in a rock climbing context. Or in my case, hot-sauce dangling:

Will you look at that, a clove hitch secures an object to a caribiner and yet is relatively easy to untie. Cool!

I'd not heard of a Munter Hitch, but from a little research I see that it's used extensively in climbing and rescue work. If you need to raise or lower a person or object, a Munter Hitch is a solid knot to consider.

If you've ever been curious about how one transitions from rock hopping to rock climbing, this video series should get your journey started. Enjoy!

Thursday, June 21, 2018

Winkler Botanical Reserve - A Nature Oasis in a Suburban Desert

Today I found myself helping out a fellow foster parent by watching the 7 year old in their care. I suppose I could have plopped the kid in front of the TV and done work for the morning, but instead I used the time to explore a local site I've been curious about for years: Winkler Botanical Reserve.

I packed a few snacks, a couple of water bottles and a makePad, and just like that C. and I were in the car heading to Winkler. I'm not sure how much of a hiker C. is, so I figured the relatively small size of Winkler would work to our advantage. And if it was a dud, no big deal, we'd go elsewhere. Right before we pulled out of the driveway, I handed C. the makePad and told him he could use it to create whatever he wanted. By the time we had driven the 15 minutes to the entrance, he had found WalkBand and was strumming away on the virtual guitar.

Our walk through Winkler was truly delightful. There's no maps or signs; nor is the area large enough to get lost in. I let C. pick a direction and off we went. In short order, we found a variety of colorful flowers to snap pictures of. It's amazing how secluded the place is, you really do forget that you're adjacent to office buildings and route 395. What the trails lack in length they make up for in woodsy authenticity.

Along with pretty flowers, there's also some interesting features to explore: a ropes course tower (which, alas, you can't climb), a pond, a couple of waterfalls, a log cabin and a sort of abandoned cellar. I suppose you could turn up your nose at these discoveries, as they aren't especially flashy. But with a bit of imagination and the right mindset they're truly fun. We walked slowly, with both of us snapping plenty of pics.

If that had been the extent of Winkler, it would be considered a gem. But wait, there's more.

There's also a Geocache located in the park. Best of all, it's the right level of difficulty to find (not obvious, but not wickedly difficult), and the container is large enough that it contained a number of interesting items. C. had never geocached before, and relished the idea of treasure hunting. He walked away with three Turkish coins, which might not be worth the value of 3 gold doubloons (OK, they're worth about 53¢), but I'm sure they're far more lucky. The presence of the Geocache is really the icing on an already delicious cake.

As we were nearly finished walking the perimeter of the pond, C. announced that there was a deer across the water. Sure enough, there was a bambi-like fawn just chilling across the way. In a trip which didn't include seeing much wildlife, seeing the deer was a real find.

Whether you want to take the kids out for an accessible yet rustic adventure, or you just need a dose of vitamin N, Winkler is a terrific option. It may be relatively small, but it's truly an oasis.

As we were driving back home, C. excitedly announced that he had 'put a hat and eyes' on one of his flower pictures. Without any prompting, he had opened up PicSay, loaded the photo of his choice, and found the sticker functionality that let him create his masterpiece. I suppose I shouldn't be surprised that a 7 year old can intuitively figure out features on a cell phone, but I have to say, it does give me hope for the future.

Wednesday, June 20, 2018

Kilns and Cannons - Exploring DC's Not So Hidden Past

These days, if I'm being extremely generous, I'd say DC's primary export was policy. Heck, we even pass a law or two, now and then. But it wasn't always so. And if you look around the city, you can see traces of a far more industrial DC.

These last couple of weeks I've used my running time to hit up two different historic sites that reflect this era.

First off, I visited the Godey Lime Kilns. Back in the 1860's, these bad boys were producing lime for various local building projects. Apparently, they were preserved back in the 1960's, and the site looks quite neat and tidy today:

You can read about the history of the kilns here. If you've lived in DC long enough, you may have caught a glimpse of them from the highway. In fact, they're quite accessible to the curious. Just find your way to 26th NW and L street NW, and then walk to the dead end of L street. When I visited the site I found one sketchy looking tent setup in a neighboring field, but had no problem reaching the kilns.

Tonight I made my way to a second site: the ruins of the Columbian Cannon Factory. During its heyday it produced a wide range of artillery and even managed to miraculously survive the British torching DC. Read the whole story here.

This site took a bit more sleuthing to find. The ruins are located off the Capital Crescent Trail, about half a mile in from its start. I'd been on that section of the trail numerous times and never noticed any ruins. And so it was this evening:

But sure enough, behind that wall of brush are the ruins of an old structure:

Finding my way to these sites isn't just a chance to bulk on my local trivia. It's a simple way to embrace the best values of Urban Exploration:

I find it sad that most people go through life oblivious to the countless — free — wonders around them. Too many of us think the only things worth looking at in our cities and towns are those safe and sanitized attractions that require an admission fee. It's no wonder people feel unfulfilled as they shuffle through the maze of velvet ropes on their way out through the gift shop.

Urban explorers strive to actually earn their experiences, by making discoveries that allow them to get in on the secret workings of cities and structures, and to appreciate fantastic, obscure spaces that might otherwise go completely neglected.

For me, Urban Exploration conjures up thoughts of risk taking and law breaking. But not so with these two sites, and no doubt many others around the city. They're waiting for you to discover them; you just have to be curious enough to look.

Tuesday, June 19, 2018

Review: The Actor's Life - A Survival Guide

The Actor's Life by Jenna Fischer is part biography and part guidebook to those with dreams of acting. Jenna Fischer's credentials speak for themselves: she went from a nobody, to Pam on The Office. The book elegantly uses her career journey as sources of both advice and cautionary tales.

While I'm not quitting my day job to be an actor, I did find the book spoke to me on a number of levels.

First off, the book gave me a fresh perspective into the world of TV and Movies. I appreciate more than ever what a struggle it is to land a notable TV/Movie role. Since reading the book, whenever I see a quirky commercial or notice a scene with actors buzzing around in the background I think: every individual on set had to work their tail off, passing numerous hurdles, just so they could be there. It's down right impressive.

Second of all, while Fischer almost certainly didn't intend it as such, the book strikes me as interesting social commentary. Throughout the book, I came to appreciate how important an actor's 'look' was. If your head-shot shows you with a beard, then you better show up at the audition with that same beard. I also learned that many commercials contain just a few lines of dialog, far fewer than you'd expect.

This all works because our brains are optimized to recognize patterns and make assumptions. Imagine we cut to a scene with a seasoned plumber talking to a frazzled new mom. Thanks to the look of the players, the use of costume and set design, we need only a phrase or two of dialog to know what's going.

The fact that we have these shortcuts in place isn't on the surface a bad thing. Heck, it's probably what makes movies and TV even work. The challenge is that pattern recognition and assumption making doesn't stop when you turn off the TV. This can have real world implications, from the hiring manager who passes on a quality candidate, to the Police Officer who makes a fatal error. I don't know the best way to limit the impact of these biases, but I do know Fisher's book underscores they're pervasiveness.

Finally, the book spoke directly to me as a programmer who works for himself. Like Fischer, I'm my own CEO. Much of the advice she gives her readers, from building a like minded community, to making your own work, apply directly to folks like myself. Most importantly, she talks about how actor's never stop hustling; they're always working hard to land their next gig knowing that it won't be handed to them. Fischer may have had huge success as 'Pam,' but it doesn't mean she's automatically offered another amazing role.

This is a lesson I've learned from years of working for myself, and it would have been sound advice to have had at the start of my self-employment adventure.

If you're interested in being an actor, definitely pick up Fischer's book. But I'd say her wisdom applies to anyone who wants to make it as their own CEO. The road may be longer than you expect and the journey harder, but the reward is that much sweeter. Just ask Pam, uh I mean, Jenna.

Monday, June 18, 2018

Arlington Monuments and a Doorless Wonder

Hanging out with Spencer yesterday was a real treat. We spent a few hours hitting up some of Arlington's finest memorials. The first stop was the Air Force Memorial. Then on to a hike through Roosevelt Island ending at Teddy Roosevelt's likeness. And finally, we finished at the Marine Corps Memorial.

On Roosevelt Island we came across a 5 lined skink, which has to be a good omen. And while I've been to the Marine Corps Memorial a few times, I forget how photogenic it is. No matter where you stand, you're lined up for an amazing pic.

Spencer regaled me with stories of his Jeep. With his A/C out he did what any inventive young person would do: he implemented a Jeep Mod to make it possible to remove his front doors. A/C problem solved. And check it out, the Jeep doesn't just look cool, it sounds cool too:

As someone who tinkers around with bits, I've got nothing but mad respect for anyone who does so with atoms. If I ever need my car hacked, I know who I'm calling.

Friday, June 15, 2018

The Graduate

Tis the season for graduations, and yesterday we attend B's. We're so proud of her and know she's going to kill it in college!

I have to hand it to Arlington, they ran their high-school graduation with military grade precision. It started and stopped as promised, and that included the variables of two student speakers and reading 400 student names. I was also impressed to see that the graduation was MC'd by a student. That was a nice touch and spoke to the maturity of the class (or at least one member of the class).

As for the pic of her brother, well, that's just a bonus. Enjoy!

A Brute Force Solution to the Penniless Pilgrim Riddle

The Kids Should See This posted a challenge known as the Penniless Pilgrim Riddle. There's a video describing the riddle as well as the solution below. Here's a summary of the puzzle.

Consider this map and your current location:

The rules are as follows:

  • You start off with a tax of $4.00
  • Every time you walk a block the tax owed is modified. Go east add 2, go west subtract 2, go south multiply by 2, go north divide by 2.
  • You can't walk the same block more than once.

How can you go from the position shown on the map to the bottom right hand corner with an ending tax of $0.00?

On the surface, this doesn't seam possible. Every block you walk south, taking you closer to the end point, incurs a 2x penalty.

After pondering this puzzle for a few minutes I decided to write code to find me a solution. That counts as solving it, right?

My approach was to do a brute force attack on the problem. The poor pilgrim would have to walk every possible combination of legal routes until he found one that worked. The complete code I wrote is here. However, these two functions capture the essence of my solution.

(define (try direction x y owed walked)
  (solve (next-x x direction)
         (next-y y direction)
         (case direction
           ((south) (* owed 2))
           ((north) (/ owed 2))
           ((east) (+ owed 2))
           ((west) (- owed 2)))
         (cons (next-street x y direction)
(define (solve x y owed walked)
  (cond ((arrived? x y) (list (= owed 0) owed (reverse walked)))
         (let loop ((options
                       (if (can-walk-north? x y walked) '(north) '())
                       (if (can-walk-south? x y walked) '(south) '())
                       (if (can-walk-east? x y walked) '(east) '())
                       (if (can-walk-west? x y walked) '(west) '())))))
           (cond ((null? options)
                  (list #f owed walked))
                  (let ((attempt (try (car options) x y owed walked)))
                    (if (car attempt)
                      (loop (cdr options))))))))))

solve takes in a current x/y position, current tax owed and a history of the blocks that have been walked. The function figures out which possible directions are legal to walk, and then calls try on the first one. try updates the state of pilgrim and then calls solve. solve returns false if the pilgrim didn't reach the destination, or reached the destination with a tax greater than zero. If try returns false, solve goes on and tries the next direction it found as valid. When all possible directions are exhausted, solve gives up returning false.

To find a solution to this riddle I kicked off solve like so:

(solve 2 4 4 '("3,4-4,4" "2,4-3,4"))

This invocation accounts for the fact that the pilgrim starts at 2,4 with a $4.00 tax. The list of blocks walked is a notation that names every street in the grid. It does so by combining the x,y coordinates of the street's end points. The smaller coordinate is always listed first. This insures that regardless of how the pilgrim approaches a road, it will be named properly.

I kicked off the above on my Galaxy S9+ under Termux and waited. A minute or so later, I had this output:

The pilgrim arrived at 0,0 with a $0.00 tax; it worked! The list of street names tells me the route that pilgrim took to get there. I transcribed the streets to a piece of scrap paper and arrived at a visual display of my discovered route:

I had a feeling that the grid size was small enough in this problem that a brute force attack would work, and it did.

There's something poetic about a recursive solution like this. So many attempts are made, yet the code to try all these attempts is relatively terse.

Definitely take the time to watch the video and accompanying solution. Most importantly, it walks you through the process of teasing out a valid route using little more than simple observation. It's inspirational: maybe next time I won't be so impatient and jump right to coding. But still, this was some fun code to write!

Wednesday, June 13, 2018

Pupusas on the Pike - Fried Cheese Perfection

Are they the best Pupusas on the Pike? I'm not an authority on pupusas, so I can't really say. But man, were the cheese and squash pupusas from Sofia's Pupuseria delicious! They were freshly made, which meant we had to be patient, but boy were they worth the wait.

If you find yourself in the area, and have a craving for something fried and cheesy (and who doesn't have that craving at all times?), you should stop by. Your taste buds will thank me!