– the blog –

Picnic Training - Week 2

January 20, 2019 to January 26, 2019

Sunday - 3 hours of bouldering at NE Circuit.

Monday - Rest day! 2.5 miles of walking.

Tuesday - 40 minutes of swimming (1400 yards), 90 minute massage.

Wednesday - Bike 3.5 miles to Mt. Tabor, run eight laps on stairs, bike home.

Thursday - 1:15 on bike trainer, 3 hours of bouldering at NE Circuit.

Friday - 42 minutes of swimming (2000 yards)

Saturday - 3 hours biking in West Hills (35 miles, 4200 ft elevation gain)

Training for a Mt. Hood Picnic

Now that I have written up my ideas for A Mount Hood Picnic and posted them publicly, there is more pressure to sit down and work out some manner of training plan.

Strict training plans have never been my forte. When I was doing ultramarathon training back in 2017, I had a rough sketch of the mileage I should be hitting every week and also the length of my longest run for that week. My philosophy is that you should have weekly and monthly goals, but the actual day-to-day plan should be in flux based on soreness, energy-level, weather, and schedule. That flexibility is key to success for me. I know that if I am required to do a certain activity, I will chafe under the strict regiment. My personality simply does not like taking orders, even from myself.

When training for a backcountry triathlon, especially in winter and spring, this flexibility is even more helpful. There are days in Portland when it is 34 degrees and raining, which is simply not going to support a successful long bike ride. Or, we will have a harder than expected bouldering session and need longer than 12 hours to recover before doing our second swim session of the week. Or, friends want to go up to the mountain for a day of backcountry skiing, so we modify the week's plan to support that addition.

Wait! Did he just say bouldering and backcountry skiing? Those are not triathlon sports! What's going on here?!

Our plan includes doing activities besides swimming, biking, and running. We want to keep on bouldering twice a week and skiing a few times a month. Those are activities we enjoy and allow us to spend time with friends. As intense as a picnic will be, we do not want to make the next four months of exercise solely about training for it. That does not seem fun at all. I mean, I have a huge stick up my ass, but not about this.1

Instead, we have a white board with the specific picnic training activities we wish to accomplish each week and where we think they fit into our schedule. This schedule includes rest and easy days, as well as things like core workouts, stretching, and a monthly massage. Even on rest days, I am typically trying to walk a few miles to help loosen up my body and encourage recovery. It is all towards the goal of being ready for a picnic. It is a challenging balance of endurance and strength training, planning, nutrition, recovery, and mentally preparing for that level of exhaustion.

What is also helpful is having intermediate training goals. These are activities that are more than training, they are benchmarks. A way to push ourselves and also test to see how well we are preparing. Below is a list of the ones I currently have in mind, in no particular order. None of these are on the schedule yet, but we have a vague idea where a couple of them might go. Fun!

Double D with a Swim

  • Hike Mt. Defiance: 11.6 miles, 4840 ft
  • Swim across Columbia: 1 mile
  • Hike Dog Mountain: 6.9 miles, 2800 ft
  • Totals: 19.5 miles, 7,640 ft elevation gain

The Back 40 - Hood River to Dalles and Back via Seven Mile Hill

  • Bike from Hood River to Dalles, back via Seven Mill Hill: 40.61 miles, 4,539.0 ft
  • Additions: Include a swim along the Columbia at Hood River or Mosier

Sauvie Island - West Hills Bike Bonanza

  • Start at Sauvie Island parking lot.
  • Bike up and down: Rocky Point, Logie Trail, McNamee, Newberry
  • Totals: 41 miles, 5000 ft of elevation
  • One or more additions: Swim across Willamette, bike loop around Sauvie, Forest Park running/hiking

Double Backcountry Days on St. Helens

  • Saturday: backcountry skin up and ski down St. Helens, camp overnight
  • Sunday: friends join us, repeat skin up and ski down
  • Two friends were interested in St. Helens but worried about being too slow. My wacky solution.

Sandy to Lola Pass Bike with a Hike to McNeil Point and Return

  • 62 miles of biking, 5900ft elevation gain
  • 12 miles of hiking, 3000ft elevation gain

  1. Look, if there is a foot of fresh snow on Friday and we have no plans, we're going skiing. I mean, we're not crazy...

Full Stack Developer - Maintenance Edition

The phrase "New Year, new you" comes to mind when it comes to websites. Sure, it is a little cliché, but January is a nice time to step back and double check that everything is working well for your website and/or web application. A few days improving things can definitely make a world of difference for how the rest of the year is going to go, and you might find a few problems that you were not aware of.

The software that runs this blog, Craft CMS, reached version 3 last year, but I have stayed on version 2 because the code structure of the application changed significantly and I was too lazy to read up on what was necessary to upgrade. Fell into the trap of "Everything is working so far, why change?" The answer, of course, is that software updates have performance and security improvements, on top of their shiny new features. Also, the longer you go between updates, the more painful it is when you finally do the work.

It just so happened that I was also setting up a demo site for my latest software project last week and discovered that my server could not run my new application. The server was still running PHP 5.6, and while I had installed PHP 7.1 on it for another project, I needed to be on PHP 7.3, which is the latest and greatest stable version. This server had been created almost three years ago—a geological age in web development time. Despite my attempts to keep all of its inner workings up to date and running swimmingly, it was becoming harder and harder to maintain. That same day I discovered that Craft CMS v3 would also not run on the server without upgrading PHP and at least two of its libraries.

Time to upgrade!


I use Laravel Forge to manage my personal servers. For my own projects, it is relaxing to have a dedicated application handling the provisioning of the servers, adding a site, handling queue workers, installing SSH keys, setting up SSL certificates, and the more mundane tasks of managing a server. I still have to do work via the command-line to get everything the way I want it, but Forge definitely saves me time and effort.

So, over the course of a morning, I provisioned two new servers and begun the process of setting up my websites on one and web applications on the other. While things were being built, I took my blog and upgraded it to Craft CMS 3 on my local development environment. It was a pleasantly small amount of work. There were two hiccups, but they were minor and easily addressed. Even took the time to set up a staging site too, just so I could test things prior to switching the DNS records and going live.

Once the sites and applications were on the new servers, I switched over the DNS records and waited for the propagation to occur. Again, two minor hiccups were found once live, but it was a simple tweak to fix once I knew the underlying issue. Added SSL certificates to the sites (thanks, Let's Encrypt!) and everything was running normally again.

It took a solid five hours to move five sites and two applications to the new servers and get everything live, but it was worth it. The server specs were tweaked to better handle my needs, all software was upgraded to the most recent stable versions, new server image backups were implemented, and I even have a staging environment that I have been wanting for a while. Shiny.

Link Checking

It just so happened that the day after doing the server work, my good friend Cameron posted a Tweet reminding people to check the links on their websites. I ran both my blog and The Guide through the tool he posted and found over a dozen links broken on both sites. Ouch! For The Guide, it was particularly painful as I had gone through each article at the end of last summer updating content and links. Six months later and already things were out of sorts; two websites had gone completely away and the rest were sites changing their URLs without adding redirects.

Spent an hour fixing all the broken links. There were more than a few where the content no longer existed, so I simply had to remove the link. I also added a notification in my calendar to remind me to check again in six months. The web is prone to breaking changes, that is just the nature of the beast, so having a way to regularly validate your links (and images) is a prudent idea.

Security, Performance, Accessibility Audit

There are a plethora of tools for helping to manage the CSS and JavaScript for websites . They will do everything from building output from frameworks, bundling files together, moving files to a publicly accessible directory, compressing and obfuscating code, and versioning. While doing my software upgrades, I noticed how out of date my tools had become as well as the libraries and frameworks they were using.

Once you build a site, unless you are adding features or modifying a design, it is depressingly easy to just ignore it until something breaks. And then someone needs to tell you that it is broken. As egotistical as I am, I will go weeks without viewing some of my own sites. Server monitoring only gets you so far. Security warnings you read on Twitter or GitHub are easily ignored. Every so often, you need to roll up your sleeves and go through your files.

First, I upgraded my package managers and updated my tools. This can be painful and involve numerous Google searches. A version of one tool may not work with a version of another tool. Maybe whomever managed a JavaScript library has abandoned it and you need to switch to a new one, which will require you to upgrade your site's javascript to be compatible. Maybe a PHP framework switched to a new bundler tool that uses a new JS framework and nothing can be upgraded as your existing stack is simply no longer maintained. Things are better than they used to be—for instance, GitHub now provides security warnings for your project's stack—but it can be exhausting work. Wait long enough and it might be simpler to start over with a fresh frontend stack and copy over your old work.

Once you upgrade your tools and packages, you should evaluate your pages for performance and accessibility. Thankfully, modern browsers have built in tools to make these tasks easy. The Chrome Audits panel is probably my favorite tool right now. It will go through a page looking for problems and suggest ways to fix or optimize. It will evaluate your javascript for security alerts, it reviews forms for accessibility, checks to see if images are optimized, whether valid caching headers are sent for files, and much much more.

It can be an exhausting amount of information if you have not done it before. I will usually start with a single Audit like "Accessibility" and move through its list of suggestions. Getting a perfect 100 score is admirable but not necessary. Every so often Chrome makes suggestions (example: "Serve images in next-gen formats") that do not make sense for your site, so review its information and check the boxes you think are important.

Doing these Audits on my sites was so helpful. A few of my image files were way too large for how they were being displayed. I had totally skipped making a form accessible to screen readers. And my newly upgraded servers did not have caching headers added for CSS, JS, and images.

All of my website homepages load less than 1MB of data on an initial page load. Thanks to my changes, on subsequent page loads, this blog itself will only load ~22KB of data. The Guide will load less than 8KB on a second page load. So light! So fast!

A Conclusion (of Sorts)

Keep your software up to date and regularly check for problems with a set list of tasks.

Bugs exist, code gets stale, links expire, and problems develop even when you change nothing. Maintenance is important and fixing things will make for a better, faster, more secure website. Give yourself reminders to make sure things are checked on a regular schedule. It really will make a difference.

Picnic Training - Week 1

January 13, 2019 to January 19, 2019

Sunday - 3 hours of bouldering at NE Circuit.

Monday - Bike to Mt. Tabor, do six laps, bike home (21 miles, 2000 ft elevation)

Tuesday - 20 minute swim (1100 yards)

Wednesday - 1:25 on bike trainer

Thursday - 2.5 hours of bouldering at NE Circuit.

Friday - 3.5 hours backcountry skiing on Mt. Hood (8.3 miles, 3270 ft elevation)

Saturday - 30 minute swim (1500 yards)

Internet Security Checklist

Presented here, an open source checklist of resources designed to improve your online privacy and security.

The only things I have not checked off is using a VPN and freezing my credit. The VPN is because more than a few things that I do on a regular basis will not support the use of a VPN and when I do feel the need to use a VPN for web browsing, I simply use the one built into the Opera browser. That being said, I really should bite the bullet and use one more natively.

The credit freezing is not something I knew was easily possible. Now that I do, I am going to head off and take care of it.

A Mount Hood Picnic

Update: Read about our Mt. Hood Picnic!

A couple years ago, REI produced a short video titled "A Walk in the Park", where Kelly Halpin attempted a Grand Teton backcountry triathlon, where she biked 23 miles, swam 1.3 miles across an alpine lake, and climbed up 6,000 feet...and then turned around and did it in reverse. Oof, right?

The REI video led to me discovering Outside Online's "The Picnic: A Teton Triathlon", which explained that the original Grand Teton Triathlon, or Picnic, was the brainchild of David Gonzales, who did it first in July 2012. Since then, there have been multiple people attempting the original Picnic and then a number of variations. A website is now dedicated to keeping track of the stories and accomplishments of these attempts and there are multiple videos out there, most of which are pretty damn inspiring. A recent favorite is Outside TV's Beat Monday episode.

Naturally, a question arose in my mind, what about a Mt. Hood Picnic? We have plenty of backcountry trails for running and hiking. There are a few lakes and even a large river fairly close to the mountain, and some of my favorite biking is near the Hood River area. It seemed like there was an opportunity here. On the Picnic website, there is this tantalizing blurb as well:

Last summer I nearly finished my most outlandish meal yet, the Mt. Hood Picnic: a double swim of the Columbia River, 75 miles of bicycling, 11,000 feet of elevation gain, 4,000 feet of downhill skiing, and a miraculously zesty grocery store steak sandwich. There are innumerable magnificent picnics we could have. The possibilities tantalize, even as they terrorize.

So, thanks to MapMyHike, Strava, and a few hours of research, I put together a number of possible options. Some that seem doable. One that makes my heartbeat just a bit faster thinking about it. Even found a couple in Central Oregon that might work too. I present to you, the Oregon Picnic options:

Mt. Hood Options

Hood River - Cooper Spur Picnic

  • Swim across Columbia and back (~2 miles)
  • Bike from Hood River to Tilly Jane TH (25.5 miles; 4400 ft elevation)
  • Hike Tilly Jane to Cooper Spur Crest (6 miles; 4800 ft elevation)
  • Return
  • Totals: 65 miles; 9,200 ft elevation

Hood River - Lost Lake - McNeil Point Picnic

  • Bike Hood River to Lost Lake (28 miles; 4100 ft elevation)
  • Swim across Lost Lake (1 mile)
  • Hike to McNeil Point (12 miles; 4100 ft elevation)
  • Return
  • Totals: 82 miles; 8,200 ft elevation

Hood River - Mt. Hood Summit Picnic

  • Swim across Columbia and back from Hood River (~2 miles)
  • Bike to Barlow Pass (37.5 miles; 5,400 ft elevation)
  • Hike/Climb to Mt. Hood summit (7 miles; 6,700 ft elevation)
  • Ski/hike back down back to Barlow Pass
  • Bike back to Hood River
  • Totals: 91 miles; 12,100 elevation gain
  • Alternative: Bike all the way to Timberline (47.4 miles, 7,600 ft), climb: 3.4 miles and 5,100 ft

Central Oregon Options

Sunriver to South Sister/Broken Top via Elk Lake

  • Bike Sunriver to Elk Lake (31 miles)
  • Swim across Elk Lake (1.2 miles)
  • Hike to South Sister or Broken Top (11+ miles?)
  • Return

Crater Lake to Diamond Lake to Mt. Thielsen

  • Bike Rim Visitor Center to South Shore Picnic Area (19.5 miles)
  • Swim across Diamond Lake (2.6 miles)
  • Hike and Climb Thielsen (4.2 miles)
  • Return

So far, I have only convinced two other people to even consider one of these.

The one that appeals most to me is the Hood River - Mt. Hood Summit Picnic, which I think is the one hinted at on The Picnic website. That one is tricky as you have to swim the Columbia River and climb Hood on the same day, which makes it very conditions dependent. It could be a very windy day on the Columbia (with a fast current if there is rain or snow melt happening) and then Mt. Hood has to be in a good state for climbing. Further, you are trying to climb Mt. Hood after over 2 miles of swimming, at least 37 miles of biking, and a long hike up to Timberline.

Tina finds the Sunriver to South Sister/Broken Top via Elk Lake one a bit more appealing. I cannot disagree that it has a higher chance of success given it seems easier to do physically and has a far wider weather and conditions window.

The training is going to be key here, which I think is a bit of a concern. I have spent most of the last year focusing on bouldering with only the barest bit of maintenance for biking, hiking, and trail running. Swimming is something I have not seriously done in many many years. I am not out of shape, I am simply a fair distance away from the shape I need to be in to accomplish one of these. Is it worth it to spend this much time training for such an outlandish goal? I mean...why not?

6 Months to 40

Hello there. Wow, the summer went fast. I swear it just started a month ago and now we’re squarely in September. I can barely remember spring too. Really meant to go for more bike rides, more trail runs, climb more mountains, ascend more rock faces, and now…well the daylight hours are getting fewer and the daily temperatures are slowly lowering.

That means it is Autumn! Yay! Yessss! Back to jacket wearing weather and no more lethargic summer afternoons where you try to work on your computer but end up with a glazed expression—your singular thought is how long until the nighttime when the heat lessens just enough to let you sleep, but only if you have a fan blowing.

It occurred to me this morning that I am now less than 6 months away from my 40th birthday. These are the last months of my 30s! They’re almost over! Goodness, how the time flies. The speed of the summer and that realization just makes me acutely aware of how I do not have time for all the things I want to do.

There is a standalone, open-sourced social network that I would love to build an instance of so I can play with it. Would love to get back in serious shape for both biking and running, so I can do the ultra-distances that I have a yearning for. My indoor bouldering skills are coming along, but it sure would be nice to spend entire weeks at Smith Rock or Leavenworth working on sport and trad routes. Oh, and skiing season is coming up. Gotta get back in shape for that. Gotta catch up on Doctor Who before Jodie Whittaker’s season starts, and I discovered Rick and Morty this year and find it strange, twisted, and oddly compelling. Also, just put a hold on three more books at the library and have a long New Yorker article bookmarked that is begging for attention.

So. Many. Things. To Do. What about Denali next year? New job? What about moving abroad? Would love to go do another long hike. And, let’s be honest, I need to keep on socking away money for the future too.

Only so much time and energy to do All the Things™. Not sure age really has anything to do with that. However, the ol’ joints and recovery times definitely are a factor in how much I can fit into every week athletically. It is a challenge to do a full work week, climb multiple times at the gym, head outside during the weekend, fit in a run or bike ride whenever I can, and then not feel completely exhausted. Recovery proceeds at a noticeably reduced rate at 39 compared to 30. Protein shakes, recovery walks, rest days, and stretching are helpful but I have definite limits in how much I can do without feeling rubbish the next day.

Picking and choosing is hard. And that is always on my mind. What to choose, what to choose, what to choose. And then on the flip side, what to give up, what to sacrifice, what to let go of in pursuit of other goals. You cannot have it all.

Hell if I know what is really going to be worthwhile in the long run either. Maybe a new job will have a project that captures my interest and leads to long term employment with a company I trust. A Denali trip could end with severe frost bite and even possibly death, or it could lead to even more challenging climbs in the North Cascades or abroad.

A bit of insight would be handy. Oh dear, I just paused and thought for a moment. This is why people like horoscopes despite them being utter bullshit. Ugh. I am not sure how that is any better than making choices by pulling ideas out of a hat. At least with randomness I would feel less irrational, somehow.

Well, I promised someone a blog entry and here it is. And now it ends abruptly without conclusion.

Money to the Cause

We as Americans have a difficult time talking about money. For instance, the question "How much do you make?" is tacitly understood to be forbidden in many offices. And yet, transparency and information allows us to have open, frank discussions. Problems like pay inequality will never be addressed if vital information is taboo.

I think that is starting to slowly change. Fog Creek recently started an open salary policy. Many job hunting sites now have a salary calculator to help you find the salary range for a job in your area. And sites that review companies, like Glassdoor, will request your position and salary to help users understand where a company falls on the compensation spectrum. When I look for a job, if the compensation range is not clearly stated, I find myself significantly less interested in the position. It gives me less confidence in their ability to understand the job market and what potential employees are interested in. Saying you have snacks and a foosball table is far less pertinent to a job hunter than knowing the company is offering fair compensation.

Anyhoo. Transparency is important. Money is important in our lives (no matter how much that may frustrate us). If there was more transparency, maybe, just maybe, we would be slightly better at solving our problems both personally and collectively.

So. I make a decent amount of money. Having been working in technology since my sophomore year of college, I have a solid 20 years of experience designing and building websites and applications—as well as maintaining and deploying them. For my current gig as a contractor, I charge $90/hour and my billable hours typically range between 25-35 hours a week. As a contractor, I do not get paid time off or any benefits, so health care and retirement are all on me. Also, since the company is not paying taxes on the money they pay me, I also pay a self-employment tax on my earnings. I am estimating that with time off, I will make around $115,000 this year. Roughly equivalent to someone making $100K with benefits. Could make significantly more—and have done so in the past as a CTO—but my current work-life balance is phenomenal and I am not keen to lose it.

As a strong proponent of Kant's Categorical Imperative—if perhaps not always the best implementor of it—I believe we have a duty to help others when we are fortunate. Financially, that is always a tricky rule to formulate as there are opposing needs—and even wants—that we hope will propagate into more fortune, allowing us to give more help.

My particular strategy has been to give monthly to multiple organizations whenever I am fully employed. Nonprofits, organizations, and even individuals benefit from regular, stable financial support and by becoming a member I am both kept informed and my name is added to their rolls. The sum total of those monthly amounts is always less than I wish to give, allowing me the flexibility to give one-time donations. One-time donations are dependent on both my bank account balance and what has captured my attention in daily life. The beginning of this year was light in one-time donations thanks to a splurge of giving at the end of 2017, fully funding my Roth IRA, and a rather expensive dental visit. The past 30 days had three one-time donations totaling $1350 as the Trump Administration's approach to immigration had become more heartless and draconian than I thought possible, and I was compelled to act.

As of June 2018, this is my current giving:


$5/month - Jeff Merkley
$5/month - Mother Jones
$10/month - EFF
$10/month - OPB
$20/month - ACLU
$20/month - Access Fund
$25/month - Everytown for Gun Safety
$25/month - Environmental Defense Fund
$25/month - National Park Conservation Association
$25/month - National Immigration Law Center
$25/month - Southern Poverty Law Center
$50/month - Planned Parenthood
$100/month - NRDC

Total Monthly Giving: $345/month

One-Time Donations for 2018

$20 - Wayfinding Academy
$50 - Friends of Cedar Mesa
$100 - Reed Annual Fund
$100 - NWAC
$1000 - National Immigration Law Center
$100 - Columbia Slough Watershed Council Inc
$250 - The Florence Project

If I keep up this level of giving for all of 2018, then by the end of the year I will have donated roughly $7400. If I continue my habit of using the GiveGuide to spur me to give more at the end of the year, I suspect that it will be closer to $9000 or $10,000.

Am I pleased with those numbers? I suppose. That is no small amount of money. There are comparisons that could be made, such as how much I put into retirement or a percentage of my income after taxes. But, if I am honest, I do this more by feel. A couple times a month I load up and look at my finances. I have other goals (retirement, down payment, outdoor trips) that I wish to fund with my paycheck. And there are more personal gifts that I give to those close to me, such as taking friends out to dinner. I examine all of that and take a look at what is going on in the world and ask myself, "Am I giving enough?"

Maybe that day I was on Twitter and saw another story on immigration or that more federal land was being opened up to drilling. Those concern me. Days like that are when I give $1000 to the National Immigration Law Center or double my monthly donation to the NRDC. Given the current Administration, I expect more days like that in the future. Many more. And on those days, I will give more.

Immigration in the United States

ACLU Report: "Migrant children under the care of United States Customs and Border Protection (CBP) were allegedly beaten, threatened with sexual violence and repeatedly assaulted while in custody between 2009 and 2014"

Trump ends DACA (Sepr 2017). Throwing the lives of ~800k immigrant youth into chaos.

Trump Administration Considers Separating Families to Combat Illegal Immigration (Dec 2017)

Immigrant families separated at border struggle to find each other. "Three months later, in October, the father was deported — alone. His child, he said agents told him, was 'somewhere in Texas.'"

HHS Official Says Agency Lost Track of Nearly 1,500 Unaccompanied Minors

ICE arrests of ‘noncriminal’ immigrants double under Trump

Washington Post: Two Americans were detained by a Border Patrol agent after he heard them speaking Spanish

ICE Accused of Raiding Farm Without Warrant, Violently Arresting Legal Immigrant

Trump Calls Some Unauthorized Immigrants ‘Animals’ in Rant

Federal judge accused ICE of making up evidence to prove that Dreamer was “gang-affiliated.”

Trump administration preparing to hold immigrant children on military bases

Esquire: ICE Is a Renegade National Police Force Operating Beyond the Law


The Trump Administration is led by individuals that despise immigrants, support white nationalists, and would like nothing better than to deport or lock up anyone they please. ICE has become a terrorist organization that has taken to breaking the law to enforce Trump's cruel policies.

I support the ACLU, Southern Poverty Law Center, and National Immigration Law Center with monthly donations to help combat what I see as a violation of the principles that the United States is founded on.

"Give me your tired, your poor/Your huddled masses yearning to breathe free."

Our nation has a rather poor history of treating various races and creeds with any sort of justice or compassion, but we have been improving. Decade by decade, we as a people have been getting wiser and more accepting.

This Administration is a dark step backwards–into an abyss where the President lies straight to the public in order to continue stepping on the necks of those trying to come here to work and make a better lives for themselves.

I completely support Oregon being a sanctuary state and Portland being a sanctuary city. I have also let my representatives know these policies are abhorrent—and they agree. And this past week I just gave $1000 to the National Immigration Law Center to help them with their battles to right these wrongs. This is a fight for the soul of our nation.