The Slippery Slope of Building Computers
Resurrecting GLaDOS
⌗
After a little over five years, the small form factor desktop computer I built back in late 2012 refused to boot properly. For a couple of months, I resisted–I have a work-issue Macbook and iPad Pro, and I don’t play nearly as many computer games as I used to. It didn’t feel all that necessary for me to have a desktop on top of all of that.
But, it turns out, it’s really quite nice to have a computer setup of your own. I ended up cannibalizing many of the parts from that desktop into a new, mid-tower sized box with 8th-generation Intel technology. And it’s actually really nice! At work, my Linux desktop is also running a circa 2013 CPU, so I legitimately didn’t know how much faster and more power-efficient desktop computers have gotten in the last half-decade.
Now, I have a near-silent, modern desktop capable of running whatever I want it to… and it only cost about $600 to build. GLaDOS
has always been a bit of a Ship of Theseus, but even so, I expected the replacement cost of a desktop computer to be considerably higher.
Building moralitycore
⌗
The week after all the parts came in for GLaDOS
' resurrection, I learned that my mom’s Dell PowerEdge small business server was having some trouble. We’d bought this machine in 2010, and it was primarily used as a Samba / SFTP server for a network of about a dozen hosts. That week, I got a frantic call saying that it had stopped responding to all requests… so I had someone reboot it and figured things would be okay for a while.
A day later, I got another frantic call. I was getting a little suspicious at this point: what had changed after so many years of good performance? I didn’t see anything interesting in the dmesg
or /var/log/syslog
, and the reboot logs didn’t record any intentional reboots. I eventually wised up and decided to check the hard drives' SMART data… and there it was. Somehow, the boot drive on the machine had managed to acquire two billion read errors and an incredible number of bad sectors. Wonderful.
At this point, I’d realized that replacing just the boot drive would probably make the immediate problems go away for a while. But I’d just built a computer, and it seemed to me that the failing HDD would just be the first of many parts to die… so I decided to rebuild it.
My sister Alina recently decided (during her first year of university) that she was going to study Computer Science. Unlike me, Alina didn’t spend most of high school acquiring esoteric computing knowledge via Internet osmosis, so I thought it might be fun to have her learn how to assemble a working computer. Thanks to the wonder of Amazon Prime two-day shipping, all the parts were sitting in Palo Alto by the following weekend.
The build went wonderfully. Alina got to see what all the parts of a computer look like first hand, and the computer passed POST on the first try. As is true of most of my machines, we decided to name it with a reference to the puzzle game Portal: moralitycore
. At this point, we still didn’t have a working operating system… but I didn’t expect that to be particularly problematic.
Eventually (two USB flash drives and many boot attempts later), we got the Ubuntu LiveUSB to successfully run and install Ubuntu to moralitycore
’s SSD. For funsies, we set up ZFS with automatic snapshotting on the data HDD, and then set up Samba and the other useful things in my mom’s office.
A digression into some programming⌗
Over the summer, Alina has also been learning how to program in C++ and to work with the OpenCV library, which is actually a pretty nontrivial task. Her laptop runs Windows, so I convinced her to boot Ubuntu in a VirtualBox virtual machine and to do her OpenCV experiments there by pointing out that she’d just built a real Ubuntu server from its base components. We also went over the use of ssh
/ PuTTY and sftp
/ WinSCP, so that she could access moralitycore
from her laptop. It’s amazing how much someone can pick up once they learn how the sausage is made!
With a little apt
magic, we got OpenCV, CMake, g++, and all the other parts of the OpenCV toolchain installed inside of her VM (and also in moralitycore
). While it’s of course possible to build programs which depend on OpenCV in Windows, especially with Visual Studio 2017’s new CMake support, the vast majority of examples and tutorials on the Internet assume a Linux-like system.
Also, since angercore
is dead, Alina’s website (as well as most of my own) went down. Single points of failure are bad, and all that. But with the power of ssh
and a handy moralitycore
with a static IP address, Alina’s homepage is back up for business!
But wait! Two computers doesn’t sound like a slippery slope?⌗
Two points make a line, but the real reason why building computers is a fun family activity slippery slope is that we got my dad to want to build one too!
While I was helping Alina build moralitycore
, our parents were hanging out in the background (and largely ignoring what we were doing). But, Dad used to work at Intel–and he still vaguely remembers things from his pre-management days (!!). So at this point, he was already pretty intrigued, especially since the total bill of materials for moralitycore
worked out to about $500…
…and then he decided he would join in on the OpenCV fun. However, we couldn’t successfully get his work laptop to run a Linux VM. The Maxim Integrated IT department managed to lock down enough of the laptop that it can’t even run Dropbox! For a couple of weeks, he struggled his way through using PuTTY and WinSCP and VIM, developing remotely off of the OpenCV installed on moralitycore
. But then, he hit a roadblock! A fair amount of debugging and tuning in computer vision requires that you can actually see the output of the processing that you have performed. But there isn’t any easy way to send graphical elements from a remote server to a Windows laptop… (yes, I know, X tunneling is a thing, but it’s unreliable and slow).
Which is all to say, Alina is going to be teaching Dad how to build his very own Ubuntu/Intel-powered desktop computer sometime next week.