In the previous post I wrote about my appreciation for the Samsung phone which, day in and day out, has been going strong for me without any performance degradations for the last five years, well beyond what's expected of the modern phones.
This time, let's talk about a laptop that is double that age, that is also still alive and that I'm using to write this very blog post.
In 2018, I was hunting for a new laptop. Similarly to my woes of looking for a phone now, nothing stroke me as a particularly good deal.
Luckily, I found out about a refurbished Thinkpad market. Turns out, Thinkpads of a certain era were built so well that even getting a five-year-old one would yield you a performance comparable to modern laptops, at the fraction of the price. I found a guy who's importing them to Croatia, picked something that sounded good from his list, and got this laptop - Thinkpad T440.
It was a smaller form-factor 14-incher packed with top-of-the-line components of the time - Intel Core i7, 8 gigs of RAM and was refurbished with a brand new SSD. Shown on the image below, it also had this oversized 72 Wh dual-battery system protruding from the bottom.
I got all of that for a bit less than 400 €. Being a refurbished laptop, it was used in some capacity before. But I guess due to a great material choice, it wasn't as noticeable when I got it - it just looked like a new laptop.
Despite the smaller form factor, it was a machine for serious work. Even though it was both older and cheaper than my HP laptop at the time, it performed so much better.
At the time, I was freelancing and working on wildly diverse things, one of which was a full-stack combination of Android and Java backend developer. Anyone who's ever tried to run either Android Studio or IDEA knows how heavy they are, and yet, this laptop handled both at the same time with reasonable performance. I used it for a few years and was really happy with it.
But to be honest, it wasn't a perfect laptop. The screen was not ideal. The downwards-facing speakers were abysmal. And a touchpad so bad that people are commonly disabling it in BIOS and using the trackpoint instead. Side note: even a trackpoint is hard to use here because the trackpad doesn't have physical buttons anymore.
But worst of all, the performance started degrading. Every now and then, I would boot it up for something, and every time I would get shocked how with each Windows update it seemed to become slower and slower. Even this dual battery system would display atrocious numbers like: "Battery 100% full - 1 hour remaining". So over time I switched my computing needs to other devices, and this laptop started spending more and more time in a drawer, unused and frustratingly unusable, with no reason to boot it up anymore.
This is just how hardware dies, I thought.
But I couldn't quite accept it. This laptop is still built as a tank. Even now, it doesn't particularly look like it has endured 10 years of use. It still has no-nonsense specs which should be usable even today, a dual-battery setup that's removable, replaceable, even upgradeable, and one of the best keyboards I've ever laid my hands on. Surely there must be some use for it still.
And there it was.
Throughout the last year, bored of conventional computing, I started experimenting with its more minimal forms through various single-board computers like Raspberry Pi and Orange Pi. I already wrote about those endeavours, but the takeaway for me was that you can do a lot even with small quantities of computium.
I wanted to try the same thing here - get this laptop usable in some minimalistic, resource-aware way. Firstly this means ditching Windows for good. I felt it was Windows, and not some silicon degradation that was the main reason for the laptop becoming unusable.
But while I did have some experience with Linux desktops, I never really thought they were good. It seems like people contributing to Linux are by definition not people who know how to make good UIs. Whether it was a Gnome or Cinnamon, I always found the "eye candy" layer of Linux OS at least lacking, if not outright frustrating to use. On the other hand, using a Linux on a server in its "headless" form, while still not without its illogicalities, just works perfectly.
So I decided not to use a desktop environment - just a shell access will be enough, thank you very much. There are desktop-free variants of all popular distros, for example Ubuntu has a Ubuntu Server that comes without it. Maybe let's take that one as it's the most popular one. Or maybe let's not - Ubuntu is based off Debian, and what exactly does it bring to a table that would make it an improvement over just using Debian directly? Maybe spyware and extra telemetry? Debian is a known name, so I'm guessing it should be good enough - it's obviously stable enough that the most popular Linux distro is based on it. So let's go with Debian.
Installation went, uh, well... with some troubleshooting and having to manually reinstall GRUB, proving once again that Linux is still not as user-friendly for regular people. But eventually it went through and I got a working Linux shell.
At this point, I could use the laptop as a server and make it part of my increasingly elaborate homelab. But let's try to spend some more time to make an actual, you know, laptop out of it.
At the time, I read how Christopher Nolan has a separate computer that he only uses for writing. It only has Microsoft Word on it, and isn't, and probably can't be, connected to the internet. I was somehow allured to it. Having not a program or an app, but a bespoke device tailor-made for one purpose sounded so attractive. I imagined myself sitting in a seedy bar, writing my novel in Vim using a Thinkpad made of scraps. If I build it, the blog posts will come.
So instead of a full-blown desktop enviroment, I looked for something more lightweight but still capable enough to run normal UI apps. Proving the level of control you have on Linux, we can manually install a window system and a window manager, which are apparently two separate things. The former is called X and serves as a base layer for everything, and the latter is i3 which actually manages the windows.
The installation was done. But with a custom setup like this one, this means less than what you'd expect.
Booting into this thing did a bit seem like being dropped midway into a Nolan movie. Luckily, I have some experience with tiling window managers, so I knew how to at least get a terminal to show up. After that, it gets easier.
Doing a custom build like this one means you have to figure out a lot of things yourself. Basic things like how to change a resolution, change screen brightness and does your sound even work? It took a fair amount of days to research every single one of these things, but I got most of it.
The funny part is - six months later, I'm still not done with it. When I'm turning the laptop on, I still have to manually start X which then starts i3. Then I run the script I had to write myself that sets the correct screen resolution. I still couldn't get the time, or bother, to figure out how to automate these things so they're done on boot. It's outright not as simple as just adding it to .bash_profile. I'd have to not just Google, but actually study about Linux to figure it out. So I didn't do it yet, and instead do these steps manually every time the laptop is booted anew. It's a ritual, like drinking a coffee in the morning. Luckily, I can just sleep a laptop instead of turning it off, which avoids the aforementioned booting ritual.
I also made an initial mistake of not keeping notes of everything. After booting it after a month, I felt completely lost in my .bash_history-based workflow, so I had to relearn how to do a lot of those things. Now I'm keeping notes on how to use this computer - there's a git-commited Markdown file with 50 lines explaining how to do every basic thing and also where the config files for each of them are. I wouldn't know it otherwise.
The setup of this machine will probably never be "done". For each new thing I need, I have to figure out how to do it. Yesterday I needed to copy an image from a SD card - good luck picking one of tens available file managers to install, and then one of tens image viewer programs. Keep a note of their names, because none are logical and you'll forget them (as an example, the file manager I picked is called Thunar - logical, right?). This is an example of Linux freedom of choice being a big advantage, but also its biggest enemy.
Let's see how we can use these things to do something useful.
The i3 window manager works perfectly as an OS entry point. Using it requires a few mental hops beyond the usual draggable, alt-tabbable windows interface that we're used to, but it's good. It's minimalistic, with no fancy fluff, and probably hence, blazingly fast. I hit a WIN+ENTER and a terminal is shown. Hit it again and the second one is there, perfectly tiled side by side with the first one.
Regarding the programs I'm using, to keep with the minimalist approach, I decided to just use terminal for everything. That's crazy, you may say, but I may reply that it's not that much, depending on what you want to do with it. I wanted to write, do some light coding (well, more of a scripting) and minimal browsing. And for that you only need a terminal and a browser.
To write text and code, I started using Vim. I used it here and there before when managing servers, but this is the first time I decided to use it more seriously. I'm still picking up stuff as I go, and it hasn't turned into a religion yet, but so far it's been a reasonably enjoyable experience.
If all of this sounds like using this laptop is a torture, let me tell you that it's actually pretty awesome.
This is the ultimate single-tasker's laptop. There is not much to distract you. This is a laptop you pick to do some intentional work on it, not to loiter around. I turn it on and can either write or browse the web. And browsing the web is not much fun on a trackpad and a screen that are this bad, so I write. Here's an image of it in action, writing this very blog post.
While the screen is natively 1600x900, I'm running it in an even lower 1366x768. Why? Because the native resolution is a bit too much for this small of a screen. I guess it was made so you could fit more stuff on the screen. But I didn't want that, I wanted single-tasking, so I lowered the resolution. And also because it was easier to do that than to mess with the scaling.
I also set a font size a few points bigger than it should be. Same reason - I don't want, need, or want to need too much real estate on the screen. With a bigger font, writing on this laptop feels somewhere between writing on a paper and writing on a laptop, but with an upside that you're actually writing on a laptop. I simply like this focused view more than I would love a more expansive work surface.
And it really works. I wrote this blog post, the one before it, and the one yet to come, and it has all been a very enjoyable experience. There's really something in having a different physical device for a hobby, the one you're not using for work and the one that's unenjoyable to watch hours of Youtube on.
I didn't yet do any serious big-boy coding on this laptop. But I do have a story to tell.
A few years ago, I needed a tool to analyze a bunch of text notes I had on various subjects. As a professional habit, I decided: it has to be a web app. There was a local NodeJS app that synced the notes with the server, then a separate NodeJS app that was the server, with a bunch of heavy string manipulation to parse it all into both JSON and store it in a database, and then of course a UI to display the end results.
This is a lot of work, and it's not a wonder I never finished the project.
But using this Thinkpad has converted me to something else. When your workflow is terminal-first, you start to think terminal-first, and the idea that you need a full-fledged web app to manage a bunch of text notes starts sounding like a lunacy. When I tried to implement the same project terminal-first, I was able to achieve 80% of the features in two hours and three bash scripts, using mostly just grep and fzf.
The end result is easy to use, maintain and extend. I wonder what other things we overengineer because we don't realize they could be done in a single bash script.
Now let me tell you about one of my favourite things about this laptop - battery performance. It has a 72 Wh dual battery setup, more than most modern laptops are packing. But despite the capacity, on the latest Windows even with lightweight usage it only lasted for an hour or two. But with this minimalistic Debian/i3/Vim workflow, it can suddenly last for HOURS.
With my regular usage, having only one Vim instance open, the battery shows an amazing 14 hours of battery life. Just by ditching Windows and using more resource-aware software, you increase your battery life eightfold. And if you go full Nolan and turn your WiFi off, you get an hour more.
As long as I keep to Vim and other terminal-based software, all is good. But when I open Chromium, with no website loaded but just an empty tab, battery life suddenly goes down by three hours, down to just eleven. When you open even a lightweight site like Hacker News, it goes down by two more, leaving you at "only" 9 hours to spare. And when I open Youtube, heh, the battery gets destroyed, with full charge now only lasting for three hours.
Granted, modern browsers are heavy beasts - Chromium source code weighs 33 GB and is more akin to an operating system than a browser, a fact proven by the existence of Chromebooks. But it's still interesting that my entire Debian OS subsists on 500 megabytes of RAM, whereas opening a single empty Chromium tab doubles it.
So I guess this is where all the battery improvements over the years get wasted - by increasingly heavy software on all layers. It's a Jevons paradox - the more available a resource is, the more you end up using it, resulting in no improvement at all. This is why we can't have nice things.
So if we go backwards in time and start using more minimal software, we suddenly have a battery that lasts for 14 hours. But as you'll see, it could get even better.
I left this laptop on a charger overnight, and in the morning it was only charged to 70.51%. Huh, still not full? I left it for a few more hours, got back and it was still at 70.51%. Was the battery defective? After a while, I realized - this is the correct battery percentage. Correct because it was taking battery degradation into account. The laptop knows it has a 72 Wh battery, but it also sees that it has stopped charging at around 50 Wh - and that is the actual "full battery capacity" now. So it's showing 70.51% at full charge, a number that makes sense for a battery that is six years old.
Some might argue showing the percentage in this way is an UI bug, but for me this seems like a more honest and usable solution. Battery degradation status is for some reason surprisingly absent in all modern operating systems that I know of, so it's nice to see an honest number somewhere.
But the point of this was - if this six-year-old 70.51% battery can last for 14 hours, math tells us that a brand new one would last for 20. Moreover, this battery is not even the biggest one that this Thinkpad series offers. My combo is 24 Wh internal battery + 48 Wh external (total 72 Wh), but the external can be upgraded to 72 Wh, bumping it in total to 96 Wh. If we extrapolate that 1.3x capacity increase, we see that a single battery charge would then last for 26 hours.
Not bad for a laptop that can today be bought for 200€. Of course, if you're willing to Vim your way through it.
Using a more lightweight OS also gets us some wins on the performance side. On Windows, opening Chromium took 2-5 seconds, but here it's one second, maybe even less. And terminals, my main tools of the trade here, of course open instantaneously.
Let's see which other benefits we get by sticking to older and simpler software. Team Viewer, what is that? I can just SSH into my laptop and do whatever. Here's a video of me SSH-ing into from a Macbook and changing screen brightness remotely. Any command I can do via terminal, and I have to do mostly everything via terminal, I can do it remotely from SSH.
And I could do it in reverse way. Maybe I don't even need any local data on the laptop, maybe I can just SSH into a server in my homelab and work on data there. Unlike with Windows Remote Desktop (recently hilariously renamed to "Windows App") this would work well enough with unnoticeable lag. It would probably be good for security as well, as laptop wouldn't have any sensitive data on it except for the throwaway SSH key that I can disable on a server in case it gets compromised. I won't try this setup because it's an unnecessary overhead, but it's an interesting thought experiment.
Further on, I was surprised to see that plugging an USB audio interface worked out of the box. A better experience than on Windows where you have to install the drivers manually. This setup can be completely usable as a small music studio.
Recording some jams through Reaper works perfectly, although doing anything more complex than that is not as ergonomic. But when you connect it to an external monitor, plug in a keyboard and a mouse, it starts to feel like a normal computer.
But all of this is too normal. So let's get back on the topic of servers. Why not actually host something from this laptop? Sure, it won't hold up to the "Five Nines" standard, but who cares? In the post about Raspberry Pi I mentioned the elaborate homebrew setup of this blog and how I'm hosting it from three different servers. To up the game even more, it is now hosted from four different servers. If the links on the page are yellow, then that means this laptop is on, I'm probably doing something on it, and you're a guest reading this page hosted from it.
I very much like the idea of a lazy server that only works when the owner accidentally has it turned on. However, for the first week I'm going to leave it running for 24/7 to see how it works.
The first self-hosted version of this blog was served from a clothesline. So it's only appropriate that the latest one does so from a clothes chair.