Wednesday, August 9, 2017

Goodnight Server Room Lecture

Here's a talk I gave about the history, motivation, and execution of Goodnight Server Room.

Saturday, July 1, 2017

Ranking my Kids' Toys by Utility

We're re-finishing our basement. It's a dusty job and my three year old frequently wants to help. I gave him the job of sweeping, and soon discovered his broom was often more useful than mine.

I went through his toys and determined their practical usefulness to an adult. Everything in this list is plastic or cloth unless explicitly noted.

I don't have
  • Sifter
As useful as mine
  • Cups
  • Broom
  • Guitar
  • Metal Hammer
  • Scissors
  • Buckets
Less useful than mine
  • Plastic Hammer
  • Spoons, Forks, Knives, Plates
  • Tape Measure
  • Ruler
  • Flashlight
  • Tent
  • Shovel
  • Drums
  • Pliers
  • Screwdriver
  • Bike/Trike
  • Drill
  • Food
  • Trucks/Cars
  • Computer
  • Stuffed Animals
  • Jackhammer
  • Saws (Jigsaw, hacksaw, hand saw)
We share
  • Legos

Friday, June 23, 2017

An Android Convert with an iPhone

I'm a couple of months into iPhone ownership. The honeymoon period is over, so it's time for a review.


The iPhone 7 is stable. This was my primary goal in switching from Android, and Apple has held up their end of the bargain. I used to have to restart my LG G3 every day or two to keep it from slowing down. In weeks of continuous uptime I have yet to notice a slowdown in the iPhone.

Now that we've gotten the headline out of the way, it's time to air some grievances.  If you know fixes for these, let me know!

Features I Miss

Automatic contact lookup by dialing (e.g., dial 5-6-7 to start autocompleting J-O-R and suggest the contact "Jordan").

Swipe typing is not available natively. I don't trust non-standard keyboards, since they get all of the text I enter.

Notifications are Inconsistent

When viewing from the lock screen, users dismiss notifications by swiping left and pressing "clear". When viewing pop-up notifications from an application window, users swipe up to dismiss the notification.

Icon Arrangement is Frustrating

When you remove or rearrange applications on the iPhone, you can't just move one at a time. The icons stack, so if you remove one the others all move into the unoccupied space. When I've gotten used to a particular app in a certain spot in my home screen, it's really frustrating to have to rearrange my home screen just because I removed an app.

Touch tone Interfaces are Unintuitive

Pushing these keys will leave you confused and angry

During an active call, the iPhone typically darkens the display. When prompted to "press a key to make a selection" the obvious next step is to unlock the display and press the "phone" icon. However, pressing buttons at this point does not send touch tone signals. During an active call pressing the "phone" icon still tries to initiate a new call, rather than connecting you to the active call.

Cross-App Launching is Limited

If I click on a Washington Post link in Facebook, I want to launch the Washington Post app (for which I have a paid account). Instead of opening the Washington Post app (or even prompting me to decide what to launch) I'm stuck using a web browser within Facebook that is not associated with my Washington Post account.

Sharing is Limited

I frequently want to send a web link to my wife. I send lots of texts with Google Voice, and perplexingly Google Voice does not appear as a sharing option. Similarly, uploading to Google Drive does not appear as an image sharing option either.

Inconsistent Back Button Locations

The back button is in the upper left, then it becomes a camera, then it moves to the upper right

I think the thing I miss most from Android is the back button. Since iOS has no standard back button, applications get to put it wherever they want. They can hide it, or in Facebook's case, even move it around.

Friday, May 5, 2017

A name was lost, in a heartbeat

I remember the scene clearly and I can pinpoint exactly where the conversation happened. There were two brothers, both older than me, who lived a few blocks from my childhood home. Let's call them Joe and Chris. Joe was the oldest. He was stocky and aloof, a near-adult to my seven year old eyes. Chris was younger, just a year or two older than me, and lean.

My childhood summers were spent on the playground of Cooper elementary school in Minneapolis. I did not usually play with Joe and Chris, though sometimes Joe let me join the football games he played with the other bigger kids, and sometimes Chris would join me on the playground. Mostly I played with kids closer to my age or made up obstacle courses to run by myself.

On that day Chris cemented himself into my memory. We had finished playing tag and were sitting on the concrete berm nestled into the little hill between the playground and 32nd street. I do not remember our conversation. I only remember one word, and it was aimed at me: idiot.

Take a moment and think back on your adolescence. I'm willing to bet you had a handful of moments, both good and bad, where you were given a name. It might have been a nickname, assigned by your friends. It might have been a username, self-assigned when you made a Twitter account (or in my case, AOL Instant Messenger). It might have been an insult that cut deep enough to stick. These are all names, as real as the name written on your birth certificate.

My first names came from my parents. When I born I became Tyler. Soon after, I became Tiger. As soon as I could speak, I unequivocally rejected my parents' attempts to use Ty.

The first name I got from outside the confines of my family still makes me smile. I went to latch-key at Bethlehem Covenant Church and an instructor named Andy was the coolest person in the world. We played floor hockey in the dimly lit basement dinner hall of the church, and one day I was the goalie.  My memories of the game are hazy, but I did well enough that Andy dubbed me Sticky Fingers. I was six years old, and I wore that name like a badge of honor.

In high school I struggled to carve out an identity for myself. I was a good student and a mediocre athlete, but my names followed a different arc. In eighth grade I had decided to bleach my hair. My mom obliged, and I gained "frosted tips". I started putting gel in my hair to make it stick up, and AOL Instant Messenger user spikydood15 was born. I joined the swim team in my sophomore year, and when the team captains assigned everyone nicknames for their team attire, my sweatshirt read: gellin.

Out of college and in the business world, I realized that the assignment of a nickname was a mark of acceptance and welcome. I spent three years at my first professional job before I was accepted as T-Dog McSmitherton. Only a year passed at my current job before I became T-Bone and was part of the team.

Each of these names draws its significance from two sources: the namer and the named. When a teammate gave me a name, it was given and received with the weight of membership. When a superior gave me a name, it was a mark of praise and pride. When I picked a name, it was a statement of my evolving identity.

This evolution of identity, and my ability to determine its path, brings us back to the opening story.

Chris heaved word idiot at me like a boulder and I was unprepared to dodge it or catch it. The word landed on my chest and knocked me backward. I teetered, holding this word that was pressing into me and trying to become a name.

Whether it was luck, parental intuition, or a whisper from God, something inspired my dad to walk up just as Chris's insult hit the air.


My dad reached out and smashed the word to pieces with a venom I had never seen:

"My son is not an idiot."

My dad spoke with anger and authority.  He was speaking at Chris but he was talking to me:

Do not even think about accepting that name. That is not your name.

Thank you dad.

Preorder Goodnight Server Room on Etsy!

Copyright 2017 T.D. Smith

Monday, April 3, 2017

Why I gave up on Android

I got my first smartphone in January of 2011-the year after I finished college. I had been writing Java professionally for a couple of years and opted for an HTC Aria running Android. Android apps are written in Java, so I thought it would be fun to be able to write software for my own phone.


Over the next six years I had three different Android phones, each better (and larger) than the last[1]. I also wrote some Android apps, the most successful being the Pretty Good Music Player, which has been downloaded over 4,000 times in its two different forms.

Writing Android applications is a lot of fun and really rewarding. Through open source development on Github and F-Droid I met a lot of people from around the world who were willing to contribute to my application - it has been even been translated into seven different languages!

By this point you should be wondering: If things are going so well, why am I giving up on Android?

I'm ready for a phone that's not a project

With every Android phone I've owned, I've had to work to deal with the following issues:

  1. I have little to no control of what's on my device
  2. I have little say over the software versions or upgrade process
  3. There is little transparency and poor support in the hardware or software unique to each carrier and device
None of these issues are insurmountable, but I have a limited amount of time and money to spend on my phone, and I'm tired of fighting with device control, upgrades, and hardware support. 


Android is open source. In theory, that means it should be user-modifiable. I should be able to tear it apart and rebuild it as I want. I should be able to accept or reject changes to my phone, and I should have control over what's on it. This is the case with other open source projects. It's not the case with Android.

The Android ecosystem is so convoluted it's hard to get a phone that doesn't have bloatware from at least two different sources on it. Google occasionally releases a "clean" phone (the Nexus or the Pixel), but these are the exception, not the norm. At the Verizon store yesterday, I had two options for phones without "NFL Mobile" installed by default: Google Pixel (not in stock) or the iPhone.

This is not what "open source" is supposed to mean. If I want Debian customized with or without something, I can rebuild it myself or choose from one of its many offshoots (e.g., Ubuntu). If I want Android customized, I have to root (hack) my phone with sketchy software and install a custom Android build like the (now defunct) CyanogenMod.

Upgrades (and Downgrades)

Virtually every major Android upgrade in recent memory made my phone worse. The upgrade from Android 4 to Android 5 made Bluetooth media buttons stop working after about 20 minutes. Some aspect of Android 5 or 6 introduced a memory leak that required me to restart my phone every two days or risk apps crashing randomly.

In a normal open source environment, I could address these issues by rolling back the update or creating a fix myself. In Android, (without rooting my phone) I have few choices. It's hard to tell where the issues even originated, since my phone wasn't just running Android: It was running Android, plus LG's bloatware, plus Verizon's bloatware. One of them caused the memory leak.

The best Android option today seems to be the Google branded Pixel. Unfortunately, I have the same long term support concerns with the Pixel as with all of the others. Google has a bad habit of losing interest in a project and dropping it with little fanfare (anybody remember iGoogle? Google Buzz?)


Hardware support is the one place Android acts like an open source project: it's frustrating. There are a plethora of manufacturers, each making a wide variety of devices. Android has to support them all. Linux has a similar problem on the desktop. For example, the Linux kernel has to be written to support a wide variety of CPU types.

Android has a several major device manufacturers (Samsung, LG, Motorola) and a plethora of smaller manufacturers. At any given time each phone maker has two to four devices on the market and approximately fifteen devices within a three year support window. When you factor in the four major carriers (each pre-installing their own bloatware and network support), this makes approximately two hundred sixteen device configurations Android must support at any given time[2]. Linux gets around this issue by being transparent, employing an army of engineers, and by allowing users to handle upgrades and downgrades. Android has all of the weaknesses of open source, and none of the strengths. From a quality control standpoint, this is a nightmare.

The result of this nightmare is that new phones function well. The software on them is well tested. As a phone gets older and older, testing priority stays with the new phones - there's far more motivation for new phones to work well than old phones. For example, the autofocus on my LG G3 stopped working correctly about six months ago (around the two year ownership mark). I believe this was a software error, since the phone remained physically capable of focusing correctly, it would simply re-focus sporadically.

Why I bought an iPhone

I weighed the odds. Android has to support two hundred sixteen phones in a three year rolling window. Apple's iOS has to support eighteen[3]. The chance of frustrating problems, while non-zero, is (at least theoretically) significantly lower on the iPhone.

My experience with Android is only anecdotal, but I'm tired of poor support and buggy software. I'm tired of buying phones that wear the badge of open source but won't let me uninstall bloatware. I know that many of my frustrations have solutions, but those solutions take effort, and I'm tired of my phone being a project.

Final Thoughts

I'm in the honeymoon period with a new iPhone 7. In three years, we'll see where I stand.

1. I had an HTC Aria on AT&T, a Motorola Droid Razr on Verizon, and an LG G3 on Verizon.
2. Assuming three current devices per manufacturer with a six month device release cycle. 3*3*6*4 = 216.
3. Assuming Apple has the same release cycle as Android manufacturers and a similar testing budget.

Copyright 2017 Tyler Smith

Saturday, February 18, 2017

Concepts in Goodnight Server Room

In the upcoming children's book Goodnight Server Room, I follow the adventures of data as they flow through computers and routers, and other hardware found in a server room.

Draft of Cover Art, the Green Shapes are Data

Many of my favorite children's books pick a category (trucks, trains, animals, etc) and describe one item from that category on each page. Goodnight Server Room's category is computers and how they interact with data.

Some bits, bytes, and packets (top to bottom)

Emily Krueger and I did our best to make data as approachable and understandable as possible. The visual complexity of the data increases as the size of the data increases (a byte is eight bits, etc).

Here are some of the terms you can expect to read about in Goodnight Server Room.

  • Server
  • Router
  • Switch
  • Server
  • Cables
  • Hard Drive

  • Processor
  • Cache
Want to see anything not on this list? Let me know!