Ted Piotrowski

Code to live. Live to spend time outdoors.

Read this first

Yosemite: Snake Dike

New Project.jpgSnake Dike route (red section was roped, blue was unroped)

We woke up just after 3am. Trying to stay quiet, we put on our packs and made our way out of the sleepy campground. After a mile on flat ground we started the 2000 foot ascent to Nevada Falls. The darkness revealed no other headlamps which meant that we were the first climbers on the trail. With snow forecast in the late afternoon, we wanted to avoid waiting in line at the base of the route. In the darkness, my maps.me app forced us to turn off the John Muir trail a bit too early (on the way back we spotted a cairn about half a mile up the trail) and we made a roundabout way across the lower slabs of Liberty Cap, finally descending to Lost Lake via a steep gully. A few minutes later, the nearly vertical SE face of Half Dome appeared towering above our heads.

IMG_8925.jpgQuick break while ascending the base slabs

Making our way up the...

Continue reading →

Tahquitz: White Maiden’s Walkway

IMG_8879.JPGLooking at the route from the parking lot

This past weekend I completed my first “long” trad climb. Six pitches and 800 feet of climbing is more lead time than I’ve ever completed in a single day, so let’s celebrate 🎉Rated as 5.4 overall with some brief 5.6 moves, White Maiden’s Walkway is one of the easier climbs in Tahquitz. Most of the challenge comes from route finding and dealing with a bit of exposure on the upper pitches.

IMG_8880.JPGSorting gear. Love peanut M&M’s.

Ilona and I drove up the night before and found all the campsites in Idyllwild booked out. Luckily, we managed to find a forest service road just outside of town that led to a great camping spot. I woke up at 5:30 am to cook breakfast and Ilona was up by 6. We packed up camp and arrived at the trailhead at 7:15. I’d done part of the approach with Rav a few weekends back and the buttress where the route starts was hard to miss.


Continue reading →

Thoughts on engineering culture


Photo by Anna Samoylova on Unsplash

Recently I’ve been thinking about running an engineering team and what practices it should discourage. Most of these ideas are rooted in past experiences I’d like to avoid.

One I especially dislike I call guarding. I’ve seen this behavior at almost all the companies I’ve worked with, some especially bad. Guarding is when someone suggests an idea with no intention of implementing it and then refers to this suggestion at some later time to gloat. An example:

Engineer: “We should change that password from Password123 to something more secure.”

(Engineer does nothing. Company gets hacked 2 weeks later)

Engineer: “I told you guys we needed to change the password. If only people had listened.”

Of course, changing a password is relatively trivial. A more realistic example might be: “We shouldn’t store passwords in plaintext. They should be salted and...

Continue reading →

Enabling TLS for SAC Alerts notifications

FYI: Transport Layer Security (TLS) keeps hackers from seeing your internet traffic including the contents of the emails you send, your account passwords and the websites you read.

I aimed to keep costs low when building Steep and Cheap alerts because revenue was $0. I configured my own Postfix mail server instead of paying for services like Twilio, Mailgun and Sendgrid. My $20/month Linode server can easily host the website and handle several thousand outgoing emails per day. One downside of self hosting is having to tweak the mail server occasionally as best practices change. This happened recently when I noticed that Gmail was putting a scary broken red lock on SAC Alerts emails because the transmission was unencrypted.


The fix

Unfortunately, I didn’t tackle this issue for a few months because I’m not an email expert. There was a risk of unintentionally breaking the alert...

Continue reading →

Interviews: Take home projects


While interviewing for a new role I encountered the dreaded take home project. Just to clarify, I found the experience very enjoyable, however, I must acknowledge that some engineers have called it “working for free”. The requirement for this take home project was building a multiplayer network game. Players connecting to the server are automatically matched with another anonymous player and proceed to duel it out in a game of Connect 4.

Back when I used to conduct interviews at Atlassian, I had misgivings about the ability of a 90 minute pair coding session to expose the traits of a mature developer. My current belief is that good developers are ones that demonstrate an ability to manage complexity. Meanwhile, most coding interviews still test a developers ability to codify an algorithm within a certain time limit. My ideal interview at Atlassian would be to provide the candidate...

Continue reading →

Learning React Native by building a Stacker clone


I made React Native game over the weekend. It’s a simple clone of Stacker and you can play it by installing Expo Client on your phone and following this link.

If you don’t want to install the app, you can play the text based browser version here (warning: it’s not pretty). Here is the source.

The goal of the game is to stack boxes on top of each other. Each time you tap the screen the currently moving box stops and another box above it starts moving. Wait until the moving box is on top of the stack and tap the screen. If the boxes don’t align over the top of each other you lose. Get to the top of the screen and you win. Here is a video:

How I built it

I found an amazing tutorial at http://www.reactnativeexpress.com/. It takes about a day to complete and covers sufficient material to create advanced phone applications. I especially liked the intro section where you actually get a...

Continue reading →

3D printing revolution


I just completed the two week 3D printing revolution course. Week one was a good overview of what 3D printing is, while week two highlighted applications of 3D printing. I took a 3D printing class at Duluth Maker Space two years ago and completed a small project. My opinion at the time was that it is a crude tool suited for hobbyists and incapable of manufacturing retail products. I must admit that the course altered my opinion significantly and now I believe that 3D printing is indeed revolutionary.

The first thing that swayed my opinion is that there are many different methods of printing, some of which can produce well polished products. Previously I was only aware of Fused Deposition Modeling (FDM) which is analogous to squeezing plastic toothpaste out of a small tube in progressive layers to create a 3D object. This leaves a crude layered finish on a product. However...

Continue reading →

Bachelorette motivations

Screen Shot 2018-06-08 at 11.27.51 AM.png

The Bachelorette season is upon us again. I must say I enjoy the show. It advertises itself as a path to finding lasting love but its success record is less than impressive. And thus it satisfies my formula for great television:

Expectation fails to meet reality == great television

Some of the antics on the show also make me wonder how much of the show is scripted and which of the cast are looking for media exposure versus true love. Lets look at some data.

I wrote a script to aggregate data from the contestants’ Instagram accounts. Five of the 30 contestants either deleted or never had an Instagram account leaving us with 25. Of these I looked at total followers and number of Likes gained on their most popular post (to indicate newly gained followers).

It looks like Grocery Joe and mule wielding Blake Horstmann are crowd favorites, each gaining 10,000 additional likes on their...

Continue reading →

Ghosts in the machine

”One of the biggest differences between hobbyists and professional programmers is the difference that grows out of moving from superstition to understanding.”
-Stephen McConnell

In my early days of programming I often fell into the trap of refreshing a broken application multiple times to make sure it was “really broken”. In hindsight this seems silly. A computer does not behave randomly, however, deterministic behavior can lead to some interesting quirks.

function getGreeting() {
  const hour = new Date().getHours();
  const greetings = [
    [22, 'Working late?'],
    [18, 'Good evening'],
    [12, 'Good afternoon'],
    [6, 'Good morning'],
    [4, 'Whoa, early bird!']
  return greetings.find((greeting) => { hour >= greeting[0] })[1];

Do you see the problem? (Hint: This will work flawlessly during office hours but result in a late night support call) Along the same lines...

Continue reading →

Use a professional IDE

At some point in their career programmers stumble upon VIM and find the boost in productivity to be so great that they treat the find like an epiphany handed down from above. I personally love VIM and think everyone should have a go at learning to use it effectively. However, do not stop evaluating other editors that may be better suited for you specific language or project. If you’re getting paid to code, don’t be opposed to the idea of paying for a professional IDE.

Recently I’ve been frustrated by the following argument: “I only use VIM because it’s super fast and lightweight. It feels closest to the bare metal of the machine.” After this statement I watched the developer navigate to find the definition of a class used in another file as follows

  1. gg - two keystrokes to navigate to top of file
  2. look at import statements
  3. :e . - four key strokes to open file navigator
  4. /Libr - five...

Continue reading →