Let’s run the Park Service like Chuck E. Cheese

Today’s frothing rage brought to you by this article: https://www.hcn.org/articles/national-park-service-wifi-amazon-and-food-trucks-trump-teams-vision-for-national-parks

The tl;dr is: let’s “modernize” national parks by adding food trucks and WiFi so you can get your Amazon deliveries while you’re camping.

That’s actually not the frothing rage bit. People should be allowed to experience the outdoors how they want; it’s a spectrum, from Primitive Technology Guy to glamping.

I’ve lived that entire spectrum! Obviously I’m closer to glamping, now that we have the trailer, but it’s not like we have a bread maker in there. Still gotta shower in the creek and poop in the woods.

So we’ve established that allowing a wide range of outdoor experiences is OK. Fine, right?

No, I still have frothing rage.

First, this stupid plan is blatantly intended to enrich landlords:

The White House wants to reduce spending on the National Park Service by 15%, or $481 million, even as the service has said it is facing a more than $11 billion maintenance backlog.

In other words, enable and empower our corporate overlords instead of doing the boring, expensive, and absolutely critical work of maintaining outdoor public spaces.

This is some straight-up disaster capitalism thinking:

“Overall capacity has not kept up with growth and changes in camping demand, and the infrastructure that does exist, with few exceptions, fails to meet expectations of the contemporary camping market,” the group said, calling U.S. national campgrounds an “underperforming asset.”

Underperforming asset. Public lands are underperforming. A thing that is ours, yours and mine, intended to provide for all of us and our kin and our future generations. But this group of walking infectious human waste bags look at the George Washington National Forest as an “underperforming asset” and not “the woods”.

That’s really the frothing rage bit, here. It’s not about diversity of outdoor experience, or reasoned ways to accomplish that diversity. We’re going to disaster-capitalism the outdoors, “extract value” from it, suck the marrow from its bones, then shrug and move on.

“Sure, we aided in the extinction of dozens of species and added tonnes of carbon to the air – we had to cut down a lot of trees so there was better WiFi on the trail, and for some reason there were a lot of fires every summer in the places we didn’t want to spend money maintaining – but at least we generated a lot of value for private industry and our shareholders.”

The way to solve the “changes in camping demand” is easy. Fund the fucking park services. Maintain the backcountry, keep the vault toilets emptied on a regular basis, and enforce the rules.

Part two of that is, yes, also build some infrastructure to support the glamping types. Just FOR FUCK’S SAKE put the “we have to have a generator/AC/shore power” areas opposite from the “I want to sleep on the ground” areas, OK?

Storytime: some of my worst interviews

I start my new job tomorrow, so I thought I’d write a little about some of the worst interviews I’ve gone through.

The worst of the worst (my fault edition):

I was interviewing as a junior sysadmin at a company located in Arlington. For some reason that utterly escapes me, I decided NOT to take the Metro from Vienna, but drive. This was not too long after I’d moved up to NoVA and well before there was such a thing as Waze or Google Maps. We had MapQuest but that still involved printing or writing down turn-by-turn, and had no notion of traffic or road construction.

As I said, at the time I’d basically never even been out of Fairfax “farther in” than the Vienna Metro stop (at the time, the most distant station for the entire suburbs and exurbs of NoVA). I had no idea about any landmarks anyone tried to give me.

I ended up in DC somewhere.

I was now doubly lost, because I needed to get out of DC and figure out how to get back to where I needed to be. I had no interactive maps or GPS and only a pre-Razr-era cell phone.

Also, related, it was summer and my car didn’t have AC and I was of course dressed up in a full interview outfit.

I managed to call them and tell them I got lost, which was sort of a bad way to start the interview but it did happen back in those days, so they were miffed but a little understanding.

Then, once I got near where I needed to be, I had to park. The closest parking I could find was over half a mile away or something. I was already incredibly late. I ran as hard and fast as I could in my stupid, uncomfortable interview shoes, and got there, something like 2+ hours past my appointed time. I was drenched in sweat, my feet where blistered from just a short jog, and I looked like a crazy person. The people who needed to talk to me had just bailed; clearly I was a fuck-up and not worth bothering with.

They gave me a glass of water and asked me some half-hearted question about Linux, and then thanked me for my time and escorted me out.

I didn’t get the job.

The worst of the worst (their fault edition):

I went through the interview process at a small web site that sells books and other merchandise. It consisted of a phone screen, a second phone screen with coding test, and then a final on-site coding test/culture fit/torture session.

In the first coding test, they FizzBuzzed me. Like literally gave me a test to do Fizz/Buzz/FizzBuzz. Opinions vary – some people claim it’s still a valid test – but I’ve done hiring of engineers and the only people who fail FizzBuzz are 1)morons or 2)people too lazy to do 5 minutes of searching for common programmer interview questions (which, if you think about it, are morons).

I guess I’m not a moron because I passed it and several other coding questions and got an on-site. Yay!

The instructions were simple: Arrive at 10, and you may dress casually (clean jeans and a decent shirt). I arrived early, as usual, and talked to the security guards to announce myself and tell them who my contact was. They called for them and I was told to sit down.

By 11 – after asking numerous times what the FUCK was going on – I was still just sitting in the reception area as numerous employees came and went. At around 11:30, someone came and fetched me, and escorted me to a huge conference room and told me to wait.

After another 30 minutes or so, a TV on the wall came on and someone started talking to me. It went very badly because whatever they were supposed to talk about, was based at least in part on some conversation I was already supposed to have had! So they tried their best and ended their portion of the interview, and said they would signal the next person to come and get me.

Still more time passes; it’s some time after noon and I was getting thirsty and hungry. Lunch was in theory on the schedule, but when?

Someone came to fetch me and was clearly, obviously, profoundly annoyed at having to do so. They then wordlessly carted me around several floors looking for someone to interview me. Everyone was incensed at the suggestion they stop their important day to talk to some asshole. Some of them had copies of my schedule for the day and were angry that it had been violated, and clearly were looking at me as the source of the problem.

I got bounced around a few tech interviews, and eventually managed to get a quick bite at their cafeteria. The tech interviews were, in my opinion, the worst type: they weren’t interested in how you thought, they just wanted to see how long it took you to get to the answer: “Given a string, find the longest palindrome, you have 30 seconds”. Several of the questions were so jive, I actually asked them, “is this a problem you’ve had to deal with in code before?” which further angered them.

I was already WELL over schedule and over, like, an hour and a half later than I was supposed to be there. I was a little tired, and a lot bewildered at the entire experience, and I had one more 45-minute whiteboard coding session to go. “Since you’re over, you could leave now, but it probably would make you score lower” was the official line. OK, fine.

Another angry asshole, another giant conference room with a whiteboard. He handed me a circuit diagram and wanted me to use OO to model the circuit and then implement it to produce the same, pictured answer.

I just stared at him. “This is a graph. It’s a directed, acyclic graph. You want me to model a DAG.”

“Yes, uh, I mean, model and implement whatever you think it is.”

I was furious. I was on time and had been treated like shit all day, and now this. “OK, answer me this. Is this a DAG? I think this is a DAG.” and I drew a quick sketch indicating the differences between cyclic and acyclic. “Am I even remotely right, here?”

He nodded and sorta grunted that I was. “Fine”, I said. “The next thing I’d do is hit Google to remind myself what the class model for a DAG looks like, because I’m tired and grouchy, every programmer I’ve ever met uses Google or Stack Overflow or even a file full of notes to do a lot of their work, and frankly my dude I have better things to do than this. I have correctly identified the problem which is, like, 90% of professional programming. I’m done. Thank you for your time.”

He looked like he wanted to hit me. He ran out and got someone. I was quickly escorted out without a word from anyone.

I didn’t get the job.

Is my Dropbox going to sell me out?

Let us assume for a moment that I have NSFW content on my personal (paid for by me) Dropbox, which I connect to my work computer. 

Am I then “storing” NSFW content on my work computer? After all Dropbox locally caches pretty much everything. If I’m using Dropbox at work for things like 1Password or syncing application config, am I obligated to ensure that no NSFW content is part of the bargain?

(Note that I am not looking at the NSFW content at work. It is just passively there. Obviously if I use Dropbox to sync NSFW content so I can look at it at work, I’m in the wrong.)

Hit points are broken

I really, really dislike hit points.

Here’s an example. According to the official rules (paraphrased), at or above half is “no signs of injury”, half to 0 is “a few cuts and bruises”, and a hit that takes you to 0 or below is a serious injury.

Even as an abstraction, it’s sort of broken, and especially when combined with Armor Class. We’d probably call it a leaky abstraction in software, although it’s slightly different.

The intent is to model abstract survivability in combat. Your stereotypical orc and human fighter, armed with medium hand weapons (swords, axes, etc) and a shield, wearing decent armor, set to murdering each other. Since each is pretty equally matched, the fight goes on for a bit. They swing and score the occasional hit, but not one that is especially damaging. Eventually, one of them will have their “luck run out”: perhaps literal bad luck, or the exhaustion of hand-to-hand combat combined with numerous small wounds, but in any case, one of the combatants will score a serious hit and put the other out of the fight – if not 6 feet under.

This is perfectly good abstraction for our 2 perfectly average combatants. There’s problems, though:

  • Critical hits are boring. A critical hit with a dagger does max damage: all of 4 points. You have a 1 in 4 chance of having that happen anyway. A critical hit should actually do some damage. Having a game where certain weapons are simply useless is bad.
  • Armor “makes you harder to hit”, which is another annoying abstraction. It’s assumed that you’re actually being hit, but the blow is “turned”. But now, when a hit is scored, the armor – no matter how good – does nothing. So armor is a binary prospect: it either protects you utterly or fails completely. In our perfectly average example, the abstraction is fine, but in larger combats (as one example) suddenly my plate mail is less strong.
  • Healing is perfect. Get to -1 HP, but luckily survive the fight? No problem, you’re fine! I understand that D&D is not intended to replicate the very real effects of actual wounds, but it’s a little annoying that you’re just a lump of magic putty that mends perfectly by resting.

I don’t know that there’s an easy, backwards-compatible way to fix this. In my head, I’d do something like allow the advantage dice to determine the effects of a critical; so if you have a 20 and an advantage dice score that would also be a hit, then the target loses half their HP total (or is at 0 if already at or under half); otherwise it’s double damage, or something.

You get into problems with a dragon being able to kill a dragon, but hey, why not? The dragon exists, the fact that the players are fighting it int he first place requires a bit of suspension of disbelief; why can’t a lucky halfling stab in just the right place? Why can’t a stout dwarf swing his mighty axe with such ferocity that the fearsome wyrm is struck down? Is it better to play a long-game of numbers and averages?


Tomorrow is my last day at the ol’ salt mine, where I’ve been for the past 8 years. It’s a hell of a thing, leaving; I have more than a few complex emotions about the whole deal.

I feel like I’m leaving behind code and systems that were in better shape than when I arrived. Hard not to when you arrive to a giant pile of Sun hardware, running ancient versions of Solaris. I leave behind 100% Linux, running on commodity hardware, a change I brought to the company.

Our primary application, a horrible mess of PHP4 spaghetti when I started hacking on it, is a slightly less horrible lasagna of PHP 5.3+, and there’s a good first pass at a modern PHP app in the repo as well.

There’s more than a few things I didn’t accomplish that I set out to do. Some of them, we were simply “overtaken by events”. The business has a way of turning underneath you – it’s part of the fun. In other cases, the current business climate simply isn’t right. Austerity is the order of the day, and fewer and fewer customers were willing to spend money to make money (to name but one example).

I’m proud of some of the work I’ve done, but I won’t be sad to see PHP go (the new job is a Python shop). A couple years ago I went all-in on PHP; I even obtained a Zend certification. PHP often deserves much of the hate people throw at it, but there’s also a lot of smart, innovative people who are really trying to push the language/platform in the right direction.

I’m super-excited about the opportunities at the new place. I’m really looking forward to kicking a lot of ass for them. All the skills I bring, I honed in the salt mine.

Remote Work FAIL

So yesterday I had some family event to attend, and I decided rather than drag my ass into work (~1 hour driving in, 3 hours at work, ~1 hour driving back home) I’d work from home.

Suffice it to say it was such a fail I’m going to charge it against vacation time. What happened?

  1. Stayed in my underwear
  2. Didn’t start 9am sharp
  3. Didn’t have a goal

My simple solution for effective work-from-home has always been get up, get dressed, start working, as if you were at the office. Sure, not driving in gives you an hour (or two) to burn on “me time” but never, ever must that time be spent on sleeping (which is what I did) or otherwise not doing things that move you towards getting to work.

So for me, working out is a positive way to spend that extra time, because at the end of a workout I shower and get dressed and “go to work”. Sleeping or watching TV doesn’t move me towards getting into the mode to work.

The “9am sharp” rule isn’t hard and fast – in fairness sometimes it’s 9:30, or maybe even 10 – but the basic idea is “at some point you stop being at home and start being at work”. If you kinda just sit down when you sit down and think “well, I’ll check Reddit again” you’re not at work, you’re still dicking around.

Lastly, have a goal. You’re at home and comfy and it’s easy to have a wandering mind. Even more than at work, you need to have a plan, a goal, some thing you specifically intend to do. At work there’s all the stuff that we go into work for: phones, coworkers, post-it notes. At home your desk might be full of office toys and personal stuff. I didn’t really plan on doing a specific thing yesterday, and it showed; I eventually got around to cranking out a bugfix at maybe noon.

So there’s my simple (?) guide to working from home. Get up, get showered and dressed, start working like you are at work, and have a plan.

Metabolizing alcohol

So, from time to time, I go camping. And on said camping trips, it is not uncommon for me (and others) to drink frankly embarassing amounts of booze.

Nothing new there, right? But here’s the mystery: in years of drinking WAY too much around a campfire, I’ve never once barfed, never once worken up in any state of hangover that couldn’t be fixed with a cup of coffee. No one ever gets sick or hungover.

This weekend, for example, my teeny tiny slip of a lass of a wife drank, like, half a bottle of rum by herself. You don’t want to know how much I put down.

At home, 2 glasses of red wine with dinner and the next morning I’m foggy and have a headache. When I’m camping, I’m washing down bottles of bourbon with more bourbon with nary a problem.

WHY? How does being outside impart superhuman ability to metabolize alcohol?

I have 2 very shaky theories. One, there is such a generally higher level of activity relative to home, it somehow boosts overall metabolism, including processing the alcohol. Two, the lack of a temperature controlled environment (eg it’s frigging cold at night) increases overall metabolism – all that sugar in the alcohol gets burned up keeping us warm.