Ted Piotrowski

Code to live. Live to spend time outdoors.

Read this first

Cloudflare Pages Node/Yarn versions

I spent an hour today debugging this error which occurs when deploying a Github repo to Cloudflare Pages:

07:50:42.633    Success: Finished cloning repository files
07:50:43.436    Detected the following tools from environment: yarn@3.6.3, nodejs@18.17.1
07:50:43.438    Installing project dependencies: yarn
07:50:44.208    ➤ YN0070: Migrating from Yarn 1; automatically enabling the compatibility node-modules linker 👍
07:50:44.264    ➤ YN0000: ┌ Resolution step
07:50:48.645    ➤ YN0032: │ fsevents@npm:2.3.3: Implicit dependencies on node-gyp are discouraged
07:50:52.853    ➤ YN0000: └ Completed in 8s 590ms
07:50:52.879    ➤ YN0000: ┌ Post-resolution validation
07:50:52.879    ➤ YN0028: │ The lockfile would have been modified by this install, which is explicitly forbidden.
07:50:52.880    ➤ YN0000: └ Completed
07:50:52.880    ➤ YN0000: Failed with errors in 8s 618ms


Continue reading →

Using LiDAR to map tree shadows

tl;dr; I can load LiDAR data to simulate tree shadows for any time of year, but the hardware demands and hosting costs may be prohibitive so I’m only sharing a small demo for now Update: After some HN inspiration I successfully generated the Seattle dataset in 4 hours. It’s 21,000 files and 6GB so I’m hosting it for free (Video on Twitter)

Two years ago, I launched shademap.app, and since then, a common question I receive is: “Where are the trees?” It’s a valid inquiry, considering I reside in the Pacific Northwest—a region known for its towering trees that significantly affect the amount of direct sunlight a location receives.

Here are two renderings of the shadows on Bainbridge Island for July 9th at 7:09 AM. Radar clearly misses 90% of the shadows cast because it does not include vegetation. Radar only reflects off the ground (Correction: an HN user pointed out that radar does...

Continue reading →

Mount Index

Mount index hourglass gully from Mount Baring

This rugged peak is impossible to miss on a clear day while driving westward on Highway 2. Its intimidating pillars of granite, rising thousands of feet into the air, are complemented by the beautiful Lake Serene at its base. A visit during the winter months is guaranteed to impress with frequent avalanches of snow roaring down its icy walls. Mount Index actually consists of three distinct summits and this blog post is about reaching the tallest but easiest of the three.

Mount index traverse around Lake Serene

Cassondra and I set out to climb it on May 20th. It was a rather hot day, with summit temps forecast at 60 degrees Fahrenheit. Ideally you want the temperatures cool for this climb because the upper route faces south east and gets baked by the sun throughout the day. We had attempted Index in April of last year but when the sun hit the upper mountain we watched avalanche after avalanche cascade down the mountain. It...

Continue reading →

Knowledge Work


I’ve spent way too much time answering questions on stack overflow. I don’t know why. -Greggman

Recently, I think I enjoy doing house work more than programming. There’s a sense of accomplishment in finishing a task. When I set out to wash the dishes or do a load of laundry, I know that I will succeed and I can even do a decent job of estimating how long the task will take.

Knowledge work is different. Often, you can put time in for months without seeing any meaningful results. Often you throw all your efforts away if they’re not fruitful. I console myself on these occasions by telling myself I’ve learned something and even though the work is trashed, the knowledge remains.

Stack Overflow provides the type of validation that knowledge workers crave. You are given a relatively simple task and if you can finish it, expect check-marks and points in a relatively timely fashion. That’s...

Continue reading →

Tajumulco Volcano - Guatemala’s Highpoint

Cassondra, myself and my sister Ilona were invited to attend a wedding in Antigua on Saturday, March 11th and because it was a bit of a financial and time commitment to get there, we decided that we would fly in the weekend before and do some exploring.


Hotel parking by trailhead

We rented a car at the airport and spent two days with a guided group on the active volcano Fuego, outside of Antigua. It was a blast but then we decided to opt for the less visited country high point of Guatemala: Tajumulco Volcano 13,739’.


First views of Tajumulco from the road

We stayed at the Hotel Fuentes in San Marcos, an hour’s drive south of the volcano. The night before our hike, we did some Googling of the route, the directions to the trailhead and gathering general “beta”. We discovered a hotel near the trail with a parking lot where we could leave the car.


Sporadic trail markers along...

Continue reading →

Forbidden Peak

Forbidden Peak

Late summer/early fall is my favorite season in the Cascades. The mornings are crisp but the evenings are fairly warm. You can get away with a light backpack because you don’t need to bring warm layers or serious snow gear. Eldorado, Sahale, Sherpa and Argonaut were all incredible climbs we did during this season in years past.

So after many weeks abroad, we were back in Seattle for Labor day and eager to get in at least one epic climb before the snow started to fall. Cassondra managed to secure a Saturday night permit for Boston Basin and we decided to try Forbidden Peak.

Crossing Boston Creek

Finding a way across Boston Creek

The weather was chilly, with summit temperatures forecasted to be around 40 degrees with 15 mph winds and a chance of an afternoon misting totaling 0.01mm of accumulation. It wasn’t a great forecast for standing around and belaying the 1000’ or so of climbing but we knew what to...

Continue reading →

How to find the current time for any location using Mapbox free tier

shademap.app simulates shadows based on the current time of day, but the current time of day in Seattle is not the current time of day in London. When it’s morning in Seattle and the shadows are cast to the west, it’s already evening in London and the shadows are being cast to the east.

While ShadeMap has always displayed the correct shadows, it has never adjusted times based on the location of the map. This meant that if a user from Seattle wanted to view 7AM shadows in London, they would have to set the time slider to 11PM Pacific Standard Time (which is 7AM in London). This is confusing as most people would not consider 11PM to be an early morning time. You can see an example of this below.

ShadeMap user time

ShadeMap needed to display times using the map’s timezone, not the user’s timezone. In this case, September 22nd in London, the correct timezone to use is British Summer Time. Using British...

Continue reading →

Chromecast and Motorolla MG7700 cable modem

Writing this down in case someone else experiences the issue.

I recently bought a Motorolla MG7700 cable modem to replace our Xfinity xFi Advanced Gateway (XB6). I configured it to use a single SSID for both the 2.4ghz and 5ghz frequencies and right away we noticed that our 1st generation Chromecast started having connectivity issues. We could stream videos from our phone but the pause and fast forward controls would immediately stop working. After about 15 minutes of video the Chromecast would always error out. Afterwards, there was no way to reconnect to the Chromecast without factory resetting it.

To solve the issue we gave dedicated SSID’s for the 2.4ghz and 5ghz frequencies. The Chromecast uses the 2.4ghz and ever since the two frequencies were given unique SSID’s, it’s worked flawlessly. This was an important lesson that it’s safer to manually choose which frequency to connect a...

Continue reading →

A new Walden


When I’m outside

I don’t need to create a new account to see the sun rise
There’s no 6-digit verification code to climb the next ridge
An upper case letter, a number and a special character,
are not required to swim in the rivers
There’s no callback to schedule when I want to breathe the cold air
No need to verify my email before I can smell the ocean

I want to live deliberately
Front only the most basic technology
And find the marrow of life

View →

I like e-bikes

I sold my van before heading to Europe for the summer. I’m looking to buy a hybrid or plugin hybrid for my next car. I considered a full electric but our apartment complex does not allow anyone to use the 110V sockets next to the carports. I’m not sure why they were installed there in the first place. We could use the Level 2 and Level 3 chargers at UW-Bothell, but my understanding is that fast-charging reduces the lifetime of a battery.

RadRunner 1 with LCD display

RadRunner 1 with LCD display

I bought a used RadRunner 1 on Facebook Marketplace. It was a bargain, but it came with several defects. The front fork was bent so I visited the local Rad Power Bikes store and bought a new one for $45. The rear tire had a slow leak that I located and patched. The rear disk brake rotor was bent but it was easy enough to reshape using an adjustable wrench. It was also missing the rear torque arm and bolt which Rad Power...

Continue reading →