Ted Piotrowski

Code to live. Live to spend time outdoors.

Page 3

McCully Basin traverse


The Wallowa Mountains

After some Googling, I discovered that Wing Ridge and McCully Basin are the two most popular destinations for backcountry skiing out of Joseph. Since we love slogs, McCully Basin was the obvious choice. The plan was to skin up McCully Creek, find a low angle ramp onto the west ridge and traverse it back to Mount Howard where a 4WD road would take us back to the parking lot.


Heading up McCully Creek

It’s hard to get out of bed in winter especially when the skies are cloudy. We packed up as it got light out and even glimpsed a small patch of blue sky out the window. Although the forecast called for light snow, the sky looked promising. We tried to shave a mile and a half off our journey by parking at McCully trailhead, but the road wasn’t plowed and we had to start in the parking lot next to Ferguson Ridge ski resort instead. We finally got underway around 8...

Continue reading →

My first NPM package

Woke up this morning to a world that’s mostly unchanged despite publishing my first NPM package yesterday. The library is called react-leaflet-canvas-overlay and it’s a React component for React Leaflet. The library pins a canvas element on a map and it remains above the same location as you pan and zoom the map. I use a canvas on shademap.app to display the earth’s shadows in real time. I hope others find a use for it in their projects.

Screen Shot 2021-01-22 at 10.37.11 AM.png

Moving on…

The main purpose of this blogpost is to share two cryptic errors that I ran into when running npm publish for the first time.

Make sure you are logged in

npm ERR! code E404
npm ERR! 404 Not Found - PUT https://registry.npmjs.org/react-leaflet-canvas-overlay - Not found
npm ERR! 404 
npm ERR! 404  'react-leaflet-canvas-overlay@0.0.1' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name

Continue reading →

Shade map

I’ve been working on a new project for about two months now and it will never be ready but it’s time to share some progress. Shade map uses elevation data across the world and the sun’s position to determine where you can currently see the sun.

Screen Shot 2020-12-01 at 11.18.41 AM.png

Click here to see what Los Angeles will look like at 4:32 PM.

And one more video showing sunrise in the Seattle area:

I’m not sure where I want to take this yet, but it has been fun learning WebGL, raytracing and mastering trigonometry again for the first time since high school. Also, GPU’s are amazing and underutilized by web developers.

Continue reading →

Lady Luck - Red Rocks

Cassondra and I climbed Lady Luck (5.7, 1000ft) this past weekend. It felt like I spent hours researching the First Creek Slabs descent route on Mountain Project. I made this map to save others time. Each dot represents an anchor location:

Lady Luck First Creek Slabs Red Rocks

Gear: .4 cam, doubles of .5 to 3" cams, C3 micro cams, set of nuts, 8 single draws, 3 double draws, Petzl Reverso, 2 cordellettes, 4 lockers

The night before the climb, we stopped at Desert Rock Sports to pick up a new 70m rope. No one who posted a trip report descended with a 60m, so buying a 70m seemed like the sensible thing to do. We started up the First Creek Trailhead around 6am. It was pitch dark and the temperature was a chilly 45 degrees. In the darkness we got spooked by some bright eyes staring at as from behind a bush, but it turned out to be a deer.

Lady Luck start of pitch 1

Starting up pitch 1

Finding the base of the climb was not difficult but we spent...

Continue reading →

Messages Not Delivered on iPhone

I switched from Mint Mobile to Verizon in June. Verizon provides reception in more areas and faster speeds than Mint which is essential when road-tripping. After activating my Verizon service, I was no longer able to send MMS messages.

My blue (iMessage) messages worked fine, but my green (MMS) messages said Not Delivered. More specifically, I could not:

  • send a picture or gif to any friends who did not have an iPhone
  • I could not participate in any group message thread where at least one member did not have an iPhone

I tried:

  • rebooting the phone
  • removing and reinserting the SIM card
  • Settings > General > Reset > Reset Network Settings
  • backing up and restoring the phone

Finally, I managed to get it working by

  • Settings > General > Reset > Reset All Settings


This will remove all custom settings and permissions on your phone. You will need to re-grant permission for Location...

Continue reading →

Granite Peak - Southwest Couloir

Granite Peak Southwest Couloir

Granite Peak, highest point in Montana

I picked Cassondra up at the Billings airport at 2:30pm. I got a flat tire on the van about an hour before she landed and I didn’t have a spare because I recently ditched it to make room for her gear in the van. Murphy’s Law was in full swing. Fortunately the tire still had enough air left to drive it to a nearby tire shop and they had it patched in 30 minutes. That left me with enough time to shower and show up triumphantly in baggage claim a few minutes early.

Beartooth pass sunset

Sunset on Beartooth Pass

We stopped at the Billings Walmart to grab some groceries and headed south towards Red Lodge. After packing our backpacks in a shady spot next to Rock Creek we rewarded ourselves with a pepperoni and pineapple pizza, which we took with us up to Beartooth Pass. We ate the pizza while watching the sun set behind some of flattest mountain peaks I’d ever seen...

Continue reading →

Mount Hood

Mt Hood sunset

The summit forecast for the 5th of July was clear skies, winds at 10 miles per hour and temperatures just below freezing. Joe spent a couple of nights in Portland and I made my way through central Oregon. We met in an overflowing Timberline Lodge parking lot, sorted gear and hit the trail around 3pm.

Mount Hood routes

Mount Hood route from the parking lot

My pack felt surprisingly empty. I had barely been able to clip the top shut on Shasta but now it easily closed with room to spare. We made our way up the access road on the right side of the ski resort. The skies were clear and the sun’s rays were noticeably gentler than they had been in California. As we reached Silcox Hut I quizzed Joe about the packing list and that’s when I realized why my pack felt so small. I forgot to pack my sleeping bag. A night in the cold seemed more painful than running back to the parking lot, so I dropped my pack and...

Continue reading →

Mount Shasta


Joe and I spent the previous week camping at altitude (8000’+) in the high Sierra in preparation for doing some summits. The first one was Shasta and it was already starting to be late season. California snowpack in May was just 37% of average. Low snowpack means that the crumbling slopes of Shasta start to poke through the snow and loose rocks previously held in place with snow come rolling down the steep slopes. It’s like a game of bowling where the climbing route is the lane, climbers are the pins and you’re praying for a gutter ball every time you hear a rock cracking loose on the slopes above you.


Bunny Flats campsite at the trailhead

The weather the previous week was especially warm (summit temps above freezing) but the weekend brought a cold front with 60mph winds. By Wednesday night the forecast called for chilly temps but low winds so we decided to give it a try. We passed...

Continue reading →


Screen Shot 2020-05-21 at 2.48.36 PM.png

I built a simple browser based Zoom clone for quickly connecting with people on the internet. My goals were:

  • audio, video, screensharing, chat
  • no user accounts
  • limit rooms to 2 people
  • cost $0 to operate
  • free to use for everyone!

How it works

  1. You visit moonlite.live and land in a random room indicated by the url. https://moonlite.live/cello-forum-rainbow is one example.
  2. Share the url. The first person to visit the url will instantly connect with you. As long as you’re connected, no one else will be allowed to join.
  3. That’s it.

The backstory

Over the past few months I’ve been using the Twilio Programmable Video api at Hopps and at some point I realized that we were paying on the order of $50+/month for something I could build in about a day. Most of the modern WebRTC magic that allows two people to connect via audio, video and screen share through the browser is built directly...

Continue reading →

Setting up pass on a new machine

I have been using pass as a password manager since 2017. Pass is free and has an iOS client which I use on my iPhone. It’s worked well over the years but occasionally I need to set it up on a new machine. Because this rarely happens I am going to document the setup process here. This article is intended for people who already have pass setup on one laptop and want to configure it on a new laptop.

 Install pass on new machine
brew install pass

 Add SSH public key for new laptop to git hosting provider:
ssh-keygen -b 4096 -t rsa -C newlaptop -f newkey
pbcopy < newkey.pub
 Paste the key into Settings on your git hosting

 Clone password repo to the new machine:
git clone git@host:repo.git .password-store

 On the old machine, export existing keys and transfer to new machine:
gpg --export ID > public.key
gpg --export-secret-keys ID > private.key
scp public.key private.key user@newmachine

Continue reading →