Photo of jesterpm


My name is Jesse Morgan. I am a Software Engineer at I also backpack, sail, ski, and play with radios in the woods.

PGP Key: C663 9070 0831 1F3C

Map of tracks

I skipped running last week while the smoke was here. I think I might have, maybe, missed it.

I can see again!

Mechanic took a look at the outboard. Much to both our surprise, there was no trace of gear lube in the lower unit (and I'd believe it from the noises it was making). However, there was also no signs of water intrusion. We're both baffled. Parts alone would be $1500. Time to look for a new motor...

Friday Saturday Sunday

The progression of the smoke from Friday through Sunday (at ~14:00 each day). Visibility is less than a half mile given the landmarks I can't see anymore.

I'm trying to extract data from various silos in preparation for posting them here. This morning I looking for ways to download my run history from MapMyRun. MapMyRun has a feature to get a CSV of all workout summaries ( and it has a feature to download a TCX file for a single workout with GPS points, etc. However, there is no option to download everything all together.

The CSV has a link to the workout page for each workout, which includes the workout ID. The TCX download URL also takes a workout ID. If we put these together we can download everything in one go:

  1. Sign into MapMyRun, open the developer console, go to the network tab and reload the page.
  2. Right-click the page load request and Copy -> Copy as cURL. Stick this in a file called and replace the URL with $1. This gives us all the cookies we need to load the page.
  3. Run the script below to get a TCX file for each workout.

for ID in $(./|cut -d, -f17|tr -d "\r"|cut -d/ -f5); do
    echo $ID
    ./$ID/tcx > ${ID}.tcx

It was a short, but foggy, trip back to Seattle

It was a short, but foggy, trip back to Seattle

07:00 - I called Aurora Rents and confirmed they had a motor available. April, Anders, and I headed up to Shoreline to pick it up and then to Edmonds. Daniel and I swapped out the motor, made sure the Honda would start, go into gear, etc., and then set off. As we floated away from the dock, the engine stalled. Repeatedly (oh no, not again). Eventually, I got it to stay running as we drifted past the breakwater. We circled for a few minutes longer for good measure before continuing south.

It was quite foggy when we left, although it was supposed to burn off by 11:00. We were just talking about estimating visibility in the fog when I looked behind me and could see clear back to Edmonds. The rest of the fog disappeared by the time we reached Shilshole.

There were a number of boats waiting at the locks as we approached. I expected we'd need to wait another cycle, but we managed to squeeze in at the end.

We made it back to Fremont, cleaned up the boat, and returned the motor. As we headed across the Ship Canal Bridge, it looked like perfect sailing weather on Lake Union.

Sorry 😔   the spinnaker!

(April, responding to my text about the motor issues)

After going about 6 miles, as we entered the Puget Sound proper, the grinding noise came back. The wind was starting to pick up, so we shut off the motor and put up the sails. However, the tide was still on its way out and the current was slowly dragging us back north.

We hadn't made much use of the Spinnaker before. In the two years that I've owned the boat, I think we've pulled it out twice. It took a minute to remember how to trim it, but once we did we finally started to make forward progress.

We sailed one tack until a bit south of Pilot Point then gybed and continued to Edmonds. As the wind picked up and the tide turned, we started to pick up speed. I think we were averaging 5-6 kt, speed over ground.

The wind started to die down as we passed the Port of Edmonds. We might have made it back to Shilshole, but it seemed like tempting fate to just continue past the marina conveniently in front of us. We decided to take a closer look at the motor and then decide if we'll continue or stop in Edmonds.

The grinding noise was back immediately. I wanted try moving the gear linkage adjustment back, so we inflated the dingy and I jumped back and forth from the boat to the dingy, trying different adjustments, while Daniel tried to work us back upwind towards the marina entrance.

Thanks Daniel...

As we made our final tack to put us into the marina, the motor was once again going into forward gear, albeit with unpleasant noises. We were still 10 minutes out, so we shut the motor off until we reached the entrance.

As we approached the entrance, we doused the mainsail but kept the genoa. If we needed to sail into the marina, I felt more comfortable handling just the headsail. I started the engine and put it into gear... nothing.

We continued in under sail, searching out an empty spot in the guest moorage area. We found one spot left, but couldn't get the boat around and upwind (I think I should have doused the headsail sooner). We bailed and tied up to the haul-out dock instead (the first spot turned out to be the pump-out station, so we couldn't have stayed there anyway). A powerboat was leaving from the guest dock and offered to tow us over into their place (thanks Jesse!).

As we waited for April to come meet us, Daniel and I started going through our options. Staying in guest moorage at the Port of Edmonds was $40/night. Towing back to Fremont would be ~$1300 (at that point, I might as well just buy a new motor...). Eventually, Daniel discovered Aurora Rents apparently rents an 8 HP Honda Outboard for $80/day. Perfect! April arrived, we all got dinner, and I headed home with April so we could pickup a motor in the morning.

Port Townsend in the distance

In hindsight, we should have anchored in Oak Bay, just on the other side of the cut. The tide was coming in the night before, which would have given us a favorable current. Instead, we faced a 3-4 kt opposing current when we left Tuesday morning.

Sunset in Port Hadlock

Anchored near Port Hadlock

Leaving the Strait of Juan de Fuca

As we approached Port Townsend, the motor started making a new noise from time to time, which could be described as a grinding sound.... We had originally planned to head to Port Ludlow, but decided to anchor at the south end of Port Townsend Bay, near the canal, and give the motor a break.

Incredibly calm in the Strait of Juan de Fuca

Cap Sante Marina

No one could look at the motor for at least a week, but one of the mechanics we spoke with suggested adjusting the gear linkage. The motor was going in and out of gear fine that morning, but we gave it a small adjustment anyway and started back towards Seattle around 11:00.

James Island from the North

We decided it would be best to see if someone could look at the motor before we headed back towards Seattle. It was Sunday and all the shops were closed, but we decided to head to Anacortes so we could call first thing in the morning. The motor went right into gear and we didn't risk touching it again until we were pulling into our slip.

It wasn't long until we made it to James Island, where we had intended to spend the weekend. We headed counter-clockwise around the island. First checking the cove on the east side and then the floating dock on the west side. Both were full and it looked like a large group of people were camping together on the west side. We decided to continue on in search of a quieter mooring.

Spenser Spit was next, but it was also crowded and looked somewhat exposed. We were supposed to have 25 kt winds in the area overnight. We were going to head towards Blind Bay, but as we stopped to move fuel into the main tank, we noticed Swifts Bay just around the corner with only a couple of boats in it. We motored into the bay (hey, it went back into gear) and dropped the anchor (during which, the motor failed to go into gear) at 16:30.

09:30 - We're officially in the Strait of Juan De Fuca.

10:30 - Just east of Smith Island, we decided the wind had picked up enough to start sailing. We intended to move towards the east side of the traffic lane, and then pick a nice line WNW.

We never got a chance to head north. The wind died back down and boat traffic was picking up, so we decided to put the motor back in the water. However, when I put it in gear nothing happened. It almost felt as if the shift-lever was disconnected... Reverse? Yup, reverse worked. Forward? Nothing. Motor off. Motor on. Push harder. Switch faster. Switch slower. No forward gear. I inspected the linkage. Everything looks fine... Try again. Motor goes into gear. I had no plans to take it out of gear until we got to wherever we ended up going.

Flaky failures are definitely my least favorite failure mode. Flaky problems are hard to troubleshoot and ever harder to know if they're actually fixed.

Moored at Ft. Flagler Sunrise over Marrowstone Island

06:30 Time to get underway. There was just enough wind to provide steerageway. We sailed off the mooring to work our way back to Port Townsend Bay. To be honest, the current was moving us more than the wind.


We decided to moor at Ft. Flagler State Park Friday night and head across the Strait first thing in the morning. Apparently, while we were... negotiating... with crabbers to tie up to the dock, this boat just drove straight into the beach. I have no idea what happened. We saw the lights from a tow boat coming to fetch it a few hours later.

As the wind began to blow the fog off, it was fascinating to watch it deflect around the hills.

The saga of my and Daniel's sailing trip to the San Juan Islands had a foggy start. As the wind began to blow the fog off, it was fascinating to watch it deflect around the hills.

Lake Sammamish from Anti-Aircraft Peak

Anti-Aircraft Peak again, 7 years later.

April 1st, I started Tuesday night hikes with a few friends after work. Only Craig made it for the first hike to Anti-Aircraft Peak.

We parked at 10TET66806465 (NAD27) and took Clay Pit Rd to Klondike Swamp Trail. The hike was pretty much flat until we turned onto Lost Beagle Trail where we gained 240 ft in 0.7 miles (according to the green trails map). We took the cut over to Tibbetts Marsh then went north to Shangri La Trail. From there it was a short walk to the view point. Coming back down we took Anti-Aircraft Ridge down instead of Lost Beagle and Klondike.

5/8λ Public Safety Band Antenna Radio Installed

I recently got a Kenwood TK-780 mobile radio for the Jeep for Search and Rescue. I did a poor job wiring my first HAM radio up and had a lot of trouble with engine noise, so I decided to rip everything out and start from scratch.

The mag mount 2m antenna had been waring a ring into my fender, so I bought two NMO brackets and screwed them into the fender. I was able to get the antennas about 1/4 wavelength away from the windshield while still keeping the screws underneath the lip of the hood.

Driver's side bracket

Jeep provided unused unswitched and switched aux circuits off the fuse box. Previously I used those to power my radio and switch a relay to turn it off with the ignition. This time, in hope of reducing the engine noise, I ran a 10 gauge power (with an inline fuse next to the batter) and ground line from the battery to that relay and moved it onto the firewall on the drivers side. I plan to add a small fuse box for auxiliary power and a terminal strip for radio grounds, but for now the hot lines are just crimped together (with inline fuses to the radios) and the grounds are screwed to the frame.

Power and Relay

My 2m radio is an HTX-252, which is small enough to sit on my dash. I had been avoiding putting holes in the jeep, but since I had started on the outside I decided to continue inside. I opted to mount the radio to the dash in front of the gear shift. I took out the center bezel and drilled two holes. I used machine screws to attach the radio bracket and reinstalled the bezel.

Center Bezel

Dad's Jeep My Jeep

My dad got a new Jeep (the black one below) that had been built up for 4-wheeling but had never been taken off road. We took it down to Evan's Creek and ran through the 311 trail.

I've been to Evan's Creek twice and drove the 311 trail each time. There are several other trails (trail map), but it was starting to rain and I had no roof, so we headed home.

Photo Location: 10TES809987

This last week was my first on-call rotation at work. With each issue I was working on, I would usually find myself looking at some dashboard of hostnames and metrics. When I found the suspect machine, I would copy the hostname, open a new terminal, and type ssh hostname. Pretty straightforward, but I still got tired of doing the same repeative actions ad nauseam. I turned to one of my co-workers and said "wouldn't it be great if I could highlight a hostname, press a button, and have a new shell opened on that host?"

It turns out I can. I use Ubuntu and the i3 window manager at work. X11 has two clipboards: the primary clipboard contains the last selected text and the secondary clipboard is usually filled after you press ctrl+c. I found a utility called xclip which gives me the contents of either in a shell script. Now I have a script, sshclip, which will launch a terminal and connect to whatever is in my primary clipboard. I bound the script to super+g for go-to (really it was the only free key close to ctrl+c).

The script attempts to strip off any surrounding garbage or port numbers from the hostname, so I don't even need to be picky about what I select.

sshclip is available in my bin/ git repo.

So, we're still running Leopard Server because I'm waiting for any snow leopard issues to get ironed out before I upgrade. We were about to put our internal podcast into use when I noticed Podcast Producer forgot how to talk to the Xgrid controller. After spending some time staring to the settings, I finally realized that the Xgrid Controller setting had to be set to the same domain as the Kerberos domain, which in my case is improperly set to Server.local instead of the server's actual name.

So, for future reference: The xgrid controller address is tied to the kerberos domain.

So, I spent quite a bit of time trying to get Podcast Producer running on our not-so-correctly-setup xserve. After getting podcast producer connected to Xgrid I thought everything should work. I fired up Podcast Capture and recorded a screen capture podcast. I pushed publish and watched it go into the Xgrid jobs list. Then I watched it stay in the Xgrid jobs list indefinitely while the lone Xgrid agent sat idle. I searched to no avail, then the project had to sit a while during the Sold Out Youth Conference and Easter services.

I started tackling Podcast Producer again today. With a bit of poking I found the last job message in Xgrid admin: "Art "0" returned score "0" for agent". Interesting. Sticking it in google lead me to the solution to my problem. After updating the UUID, Podcast Producer started working without a hitch. Now to see how it works in production.

Experience has proven Brent's rogerism, “let the sheep onto the field and they poop all over it.” But making a mess of things is part of the learning process. If developing leaders are never given a chance to clean up when they make a mess, they will never learn how. They will be stuck at square one; they'll never get to the point where you don't fear giving them control.

What should you do? Slow down and teach then get out of the way. Show them what needs to be done and how to do it, then step back. Let them do it themselves. Let them mess up. Be there to support them, but give them a chance to fail. If you don't risk the result of releasing control, you may never have a mess on your hands, but you're capping yourself and them. Remember, someone took a risk with you when you were learning.

Even though this site is no where near finished, I wanted to write this down.

I was attempting to mirror the old lighthouse homeschool site, so I fired up wget only to realize the original designer had put the nav into a javascript file to include on each page. Ok, I thought. Nice trick. I remember using that when I was 12... Now how to get all of the pages that wget doesn't see.

Now I know just about nothing about perl, but I felt like perl would provide the simplest solution. So, for future reference, here's my snazzy one-liner:

    cat | perl -e "while (<>) {
      print \"\", /href='([^']+)'>/, \"\n\"
    }" | xargs wget -m -p