The people who use our boards.
The people who use our boards.
Ethan SpoelstraDevOps Consultant
Who are you, and what do you do?
Hello my name is Ethan Spoelstra and I am a gadget addict. I grew up reading lots of sci-fi and eventually got started with my own computers and electronics and after using my computer primarily for entertainment (playing video games, reading early e-books from text files, watching movies, and listening to music) for a few years, but with my passion for challenges and learning new things I soon turned to helping others better utilize their technology (computers/phones/tablets and other gadgets) to solve their personal challenges. Since first volunteering in a computer shop in high school I’ve taken a winding route from IT support and system administration to programming and currently I consult for businesses wanting to adopt a DevOps mindset and culture.
DevOps has many definitions (see “The Phoenix Project” and DevOps.com) but is essentially still “support”, in my experience this ranges from supporting developers that are trying to deploy applications on servers, to helping them understand the destination deployment environment (Linux/AWS/“serverless”) and how to run a similar configuration on their local machine so that they can see exactly how things will behave, as well as implementing monitoring and metrics to ensure that once an application is deployed that it remains available for users and doesn’t experience outages even during upgrades or migrations. Achieving this level of sophistication involves various technologies like virtualization and containers on multiple platforms like AWS or Azure and across operating systems like Windows and Ubuntu Linux.
What hardware do you use?
I’m happy to use whatever hardware my consulting clients provide or request which has typically been Dell laptops or a Macbook Pro. My personal hardware preference from a cost/performance perspective is typically a Dell Precision 15” (I currently own a Precision 7510 with 64GB RAM) or an XPS 13/15 machine with the maximum amount of RAM and the fastest CPU (I also utilize an XPS 13 9360 as a portable dev machine).
Depending on the required development tools I will occasionally settle on slightly lower specs for a system if it significantly improves battery life as I enjoy the freedom of working remotely from any location, and battery anxiety can frequently lead to carrying multiple laptops or several backup battery packs which greatly increases the weight of my laptop bag.
And what software?
My preferred operating system is Linux, though macOS isn’t horrible and I can still be fairly productive in it, and even Windows with the “Subsystem for Linux” becoming more mature is at least bearable, though if I have the option I will ALWAYS run Windows in a VM rather than as my primary OS.
I tend to do the majority of my scripting and text editing in vim or neovim, because the efficiency of moving around using only the keyboard and avoiding the mouse is very liberating. I almost always use tmux to give me more “tabs” in the terminal and often end up using i3 as my window manager because it can be fully controlled via the keyboard and helps me focus on a single task at a time while also being able to find and switch to any application window with a couple of keystrokes. I typically use Chrome/Chromium because I also do some development from ChromeOS devices like the Pixelbook. With the Vimium extension I can navigate my many browser tabs just as easily as I can my application windows from a quick search box.
When I’m doing “serious” development I’ll usually open a JetBrains product like PyCharm or IntelliJ to take advantage of the wide variety of plugins, though on some projects I end up using Visual Studio Code instead since it is more lightweight and still has very nice completion and a robust extension ecosystem. In either editor, the first thing I do is to find and install the plugin to enable Vim bindings.
I mostly work in Python or Bash for scripting and simple applications, but have worked on Ruby/Java/Groovy for various projects over the last couple of years, and have manipulated lots of data in YAML/JSON for configuration management tools like Ansible, Chef, Puppet, and SaltStack.
What’s your keyboard setup like? Do you use a custom layout or custom keycaps?
I have WAY too many keyboards, and I’m pretty sure if my wife ever saw them all together at the same time and knew how much I’d spent on them she would put out a hit on me and use the proceeds from selling the hardware to cover the cost.
I didn’t really get interested in mechanical keyboards until I saw a mention of an ErgoDox online. I ended up pre-ordering both the ErgoDox EZ and the ErgoDox Infinity, but while they were supposed to show up about the same time, the EZ ended up winning due to some production delays on the Infinity.
While I was waiting impatiently I ended up picking up a Kinesis Advantage which was sort of the inspiration of the ErgoDox (and was much cheaper than a Maltron which was the precursor to the Kinesis) and while it was a very nice keyboard, the delay introduced when remapping keys ultimately lead to me selling it once I had the ErgoDox EZ in my hands. I initially pimped out my EZ with custom keycaps to go along with my custom QWERTY based layout that was similar to the Kinesis layout with a couple of tweaks. While trying to find the optimal switch type (from all the options like Cherry MX Brown/Red to the other manufacturers) I ended up trading my EZ but keeping all my keycaps, and even though I’ve ended up getting another EZ (or two), I still haven’t gone through and redone the initial layout that was nice to look at and had some additional benefits like making modifier keys easier to find when doing multiple key “chords”.
After all this time I’m still using a layout very close to the one I originally set up, and even though I have three different versions (from different manufacturers) of the ErgoDox keyboard I run pretty much the same layout on all of them. I would like to learn Colemak at some point, but what I’ve found is that I’m a fast enough typist with QWERTY that it wouldn’t really benefit me to switch except for ergonomic reasons, and the ErgoDox really helps alleviate some of that anyways so it is a case of diminishing returns.
With all that said, I recently made a modification to my EZ that I use at work and it has been working out really well to help me get my arms off the desk and maintain good ergonomic posture.
First, some history: A friend of mine that also fell deep down the mechanical keyboard rabbit-hole has used his EZ in various positions including vertical, and told me that he really liked the tenting but taking it further afforded additional benefits. A while ago while he was showing me a clone of the Roost laptop stand that he had picked up and we discussed some ways of attaching the EZ to it, like Velcro dots or strong magnets. Soon after, I ended up getting the same stand and after using it a few times with the EZ I decided that I really liked having the keyboard halves vertical as it is a more natural resting position for my hands when typing. Initially I stood the halves up alongside the laptop stand and then I tried attaching the halves to the stand with Velcro as we had discussed but it wasn’t very stable, especially if you didn’t have a sturdy table and a laptop with a bit of heft on the stand.
Eventually I had the bright idea of using the EZ legs and a piece of PEX (water-rated plastic PVC pipe) to provide stability with or without the laptop stand in the middle, but when I brought one of the legs to a hardware store I couldn’t find a piece of PVC the right size. Never one to avoid putting square pegs into round holes (pun fully intended) after wandering the hardware store some more I discovered that 1/2 inch PEX was really close and with some experimenting I discovered that by taking the rubber feet off the legs and inserting them into a 1/2-inch to 1/2 inch-brass coupling it ended up being an almost perfect fit and the legs were really secure.
My initial width was basically making it long enough to fit outside the Roost stand, but that also ended up being a fairly comfortable width in general. It also turned out that the PEX between the couplings ended up being the width of a piece of “Letter size” paper, around 8.5 inches.
After a day or two of typing with just one crossbar and feeling it wobble a little bit even with the laptop stand being Velcro attached I went back to the hardware store and picked up some more couplings to add another crossbar (PEX comes in 4-5 ft lengths so I had plenty of that left over), and with the added stability the second crossbar brought I only end up bringing out the laptop stand if I actually need it, otherwise I just use the keyboard. I also discovered that the TRRS cord for the ErgoDox EZ was really close to being the perfect length when coiled snugly around the crossbar and it also helped keep it out of the way.
Another cool benefit is that the angle of the ErgoDox EZ thumb cluster and the height of the leg screws actually allow for balancing a small laptop/Chromebook in the crook at a really nice angle for viewing and typing. This comes in really handy for laptops with smaller very high-resolution screens like the Dell XPS13 9360 at 3200x1800, the Dell 9370/9380 at 4k (13”), or the Chromebook Pixel LS at 2560x1700 (12”) and other similar pixel-dense devices where having it at native resolution makes it really difficult to see at arm’s length.
Current results are pictured, I also tried using a narrow (top/number row) to wide (thumb cluster) positioning but I found that even though it is comfortable to have your arms almost on your sides I ended up hitting too many keys unintentionally when moving the keyboard around so I went back to the parallel layout. I’m hoping if I make another set of crossbars with proper length offsets to keep things stable I’ll be able to use that style.
I very recently added a stabilizing bottom strap to help with overall stability, but I need to go back to the parts store and search through the fasteners to see if I can find a flat-head screw with a very short “shoulder” to attach the strap without sticking out as far as the EZ thumbscrews do (as seen in the closeup image below).
I’ve also considered widening out the crossbars just enough to put the vertical halves directly on top of the speakers of a 15” Macbook Pro so that I wouldn’t have to use the terrible built in keyboard but could still access the touchbar and touchpad between the halves without bumping into things. In addition to widening it I’ve wondered about some padded or plastic L-brackets fastened with the low profile screws that could keep the keyboard from sliding side to side if placed on top of a laptop.
What would be your dream setup?
I’ve had some wonderful setups at client sites with three to four 4K monitors on arms connected to multiple systems using Synergy so that I could utilize a single keyboard and mouse to control all of them. In a similar vein, the new Acer insane “scorpion chair” reclining gaming rig sounds like a fantastic option for a development environment as well. Having a comfortable chair with multiple monitors and a high-powered desktop system for running my editors and application stacks in Docker/Kubernetes as well as connecting to AWS/Azure/Google Compute Engine for remote deployments sounds perfect. I would also add a laptop slot where I could dock my laptop and use a single Thunderbolt 3 cable for a couple of the displays as well as charging, mouse and keyboard input, and a wired network. The single cable would make it extremely easy to remove for mobile development.
Useful cables for the EZ
Short cable (tested and working wonderfully), great if you have a USB-C on the right side of your computer (eg Macbook Pro).
Longer cable (3ft on order for PCs with left side USB-C), available in 3ft, 6ft, and 10ft, good if you need more distance, but avoid going too long if not necessary, if the cable isn’t well shielded too much interference/noise could lead to funky and hard to diagnose typing/communication issues.
These can be used to create the build described above — feel free to experiment!