Working on a Laptop Only Goes So Far….
Welcome again to my blog on working as the CTO of ModelOp while living off the grid at 10,200 feet in Colorado. See my previous blog post for more details on how I got here, and feel free to peruse the About Me section for the background information on where I am, and how the place runs.
One of the first things I missed upon moving up to my off grid cabin is my desktop PC at home. It had 32 gig of memory, 4 monitors, an SSD drive, and it was really quite speedy. I develop enterprise software in Kubernetes as microservices, so memory can become an issue between Kubernetes, IntelliJ, and all of the other items you need to run on your machine (Slack, etc). It is doable on a 16 gig laptop, but really bogs down and building and deploying.
I had my slim laptop up here with 16 gigs of memory and a fairly fast processor. It was great for business travel and working on a plane, but wasn’t really designed to be a primary development machine. I also had a USB monitor so I had two screens, but really found it bogged down, ran very hot (causing it to throttle), and was generally slow on the builds and deployment. If I kicked up a big build and a test run, I would have to put a USB powered fan behind it to keep it running cool. Once a month had passed, and I realized we were going to be here for a bit, I determined I had to get something better up here.
The challenge is, however, I needed it to run on DC power, like a laptop. I wanted as much RAM as I could, and wanted to use solid state storage, to save more power. I also wanted it to be generally expandable, and be able to support multiple monitors. It had to be as energy efficient as possible as energy is precious when off the grid. I knew this was a big ask, but decided to dive deep to see what I could find.
I first looked at laptops, and found that most top out at the 16 gig of memory, and the ones that didn’t were large beasts that were crazy power hungry, and quite expensive and heavy, as they carried a battery that had to support their requirements. Further, they usually had proprietary power requirements and connectors that made it hard to adapt to my DC environment.
Then I stumbled onto the solution…..
The Intel NUC
When I stumbled upon the Intel NUC, which stands for Next Unit of Computing, I new I had a real contender. First off, they offered a barebones kit so I could build out exactly what I wanted. Next off my list was it ran on a single DC voltage, being 19v. This would allow me to do a simple conversion from either 12 or 24v. Finally, it had some really great specs.
A Powerhouse in your Palm
They offer a choice of a few processors, but I was really looking for a powerhouse, so I went with the top of the line. They offer a Core i7 chip that has six cores, and 12 threads of execution. More importantly, it is Comet Lake processor so when idle, it really sips on the power, but can power up and handle a big load when needed.
The memory options were great since you could go all the way up to 64 gig of memory, running at 2666MHz, using normal laptop memory.
It had solid state storage through an M.2 connector, which was my preference for speed, but also has space for a laptop drive as well if I ever needed more bulk type storage internally.
It would support up to 3 displays, including 4k support, and has a 1 gig ethernet port, WiFi 6, and tons of ports. This thing literally is a desktop in the palm of your hands and was clearly the right choice for me.
Now to build the rest of it out, as I was starting with the barebones model…
- Core I7-10710U, six cores, 12 threads 1.1 GHz Base, 4.7 GHz Turbo
- 2 DDR4 RAM slots up to 64g Memory
- 2 SATA ports, one is M.2, one traditional
- 2 USB3.1 Type C, one supporting display port/thunderbolt 3
- 3 USB3.1 Type A ports
- HDMI/Ethernet/Wifi 6 802.11ax/Bluetooth 5
Memory to the Max
One of the biggest reasons for building this machine was to get more memory for running k8s and my development environment on the same machine. Honestly, 32 gig would have been enough, but I figured since I was in this deep, I might as well max it out and buy memory just once, rather than multiple times. Officially, Intel only supported one specific manufacturer’s memory. I could find no information on the compatibility of any other modules, but did see some loose references to the corsair based memory.
So I decided to take a chance and go with the CORSAIR Vengeance 64GB (2 x 32GB) 260-Pin DDR4 SO-DIMM DDR4 2666 (PC4 21300) Laptop Memory Model CMSX64GX4M2A2666C18.
It was cheaper than the suggested memory, and was in stock. This would get me fully populated up to the 64 gig max.
Fast Low Power Storage
For storage, I didn’t need something huge, just sufficient. I definitely did not want a spinning disk, due to the power usage, and wanted solid state for sure. With the M.2 slot available, I decided to go that route as it should provide me the fastest storage.
Looking at costs, Intel actually had a great solution in the Intel 660p M.2 2280 1TB NVMe drive (SSDPEKNW010T8X1). It would fit nicely in the full length slot, and with 1TB, that is plenty of space. I keep my media on my plex server with a 5TB drive, so I just need space for my documents, code, etc.
I also have USB 3.0 drives up here if I really needed to do something to store more stuff, and still had the laptop drive slot if I wanted to get a larger SSD at some point. This would be good for now.
Time to Interface With the Computer
Finally, I needed to interface with the computer somehow. I already had a USB 3.0 monitor I was using with my laptop (ASUS MB169B+). It works OK, and is useful, but the color rendition is not great. So it makes a great portable monitor, but is not nearly as sharp as I would like.
So I expanded and got a USB-C based portable monitor that is a gaming monitor so is quite sharp and clear. I ended up with the MSI Optix MAG 161V. It is clear and sharp.
I think my next upgrade will be to replace the USB monitor with a portable USB-C 4k monitor as several have now come out.
It is nice to have the portable monitors, as it is a small cabin, and I can just quickly stack them together at the end of the day, and it only takes a minute to set them up again.
Putting it All Together
I finished it off with a cherry switch based gaming keyboard, as I prefer mechanical switches. In the early morning hours though, I am sure my wife would prefer a membrane based keyboard… Then I already had a Logitech Bluetooth based trackball for my mouse.
As you can see, it sets up nicely on the table and gives me a small footprint multi-monitor solution that is really a very productive machine, and I have a great view of the woods while I work. My largest distraction is the 20+ hummingbirds buzzing outside the window all day long.
Well let’s get back to my original goals. First and foremost, I needed it to be a significant improvement over my laptop for development, while balancing that with the power requirements. I think it was overall very successful.
You will see my power measuring device quite a bit in these series. You really can’t rely on any specs you see out there for determining what any given device actually uses, as they will always state the maximum, without looking at the overall usage. This simple device gathers not only the reading at the instant, but also gathers use over time so you can tell how much your device will gather in a day. I will go more into this in a later blog post on indispensable tools.
At idle running two monitors and just with normal slack, emails, browser, and IntelliJ up, it sits at around 23 watts of power, which is very low. So all good on that.
At running a big compile, including building docker images and deploying them to k8s, we can see that it ramps up to a maximum of just about 100 watts, which is still very reasonable. So on the power front, we have a winner.
As far as performance goes, most of the benchmarks out there I find to be pretty synthetic and don’t really give you much to go on. So instead, I just am comparing the actual real world usage over my laptop, and the gains were very significant. Our microservices based solution would load onto k8s in about half the time as on the laptop, without any overheating problems, and compiles were a fraction thereof. Further, responsiveness was crisp using productivity apps while under load. So for sure it met my needs.
Answering the Question I Know Someone Will Ask
So I know someone is going to notice that I am running Windows 10 pro on my machine, and is going to ask me about why I choose that for development.
First off, Mac does not have a comparable offering in this space that I can build up myself and modify as I go. That is just not their market.
Linux is great, and in fact as I will explain in a minute, I use Linux extensively. But being at the exec level, I constantly am dealing with Microsoft Office documents. It’s just the way the world works, and it is unavoidable. Rather than deal with incompatibilities and such with open source solutions, I just go along with it. There are bigger battles to fight.
Finally, with this spring’s release, MS introduced WSL2 (Windows Subsystem for Linux 2). It is a game changer for me, in that Kubernetes now supports this. What this means is I don’t have to run a VM for my k8s instance, so there is no pre-allocated memory. It shares the memory with the rest of the OS so I can run all of my docker images in native linux, and have it share the space with Windows. It really is quite nice so far, and gives me the most bang for my buck.
Plus, I do get linux right on the box and run Ubuntu shells and do a ton of my work there. So for now, anyways, it really does give me the best of all worlds in that I can blend the productivity apps that I have to use, with the Linux I love to use.
In next week’s blog, we will diverge from the tech side of thing, to a bit about managing the land up here. I will talk a bit about how beetle kill has devastated the area, and how I am doing my best to put it to good use….
Thanks for joining me in this second blog,