BeastieBoy

FreeBSD, Lisp, Emacs, PostgreSQL & co.

Stuff I use, 2022 edition

Stuff I use, 2022 edition

It's been five years now since I wrote Stuff I use. A lot has changed in the meantime, in part due to how my life has taken a new turn, of which I talk a little about in Renaissance, and in part simply because the tech world has evolved, and so have my tastes. Well, some of them. I mean, when you have such good taste, there's only so much worth changing, right?

Operating System

I still run FreeBSD everywhere for myself: laptop and servers. I did away with my desktop, or rather, the poor thing died a sudden death and I chose to not replace it. I explain below why. At work, I am now lucky enough to use the latest MacBook Pro M2, with macOS. I could have gone and used Linux, or even FreeBSD, but given how many corporate software expect you to not run anything else than Windows or macOS, I opted for the safer route.

FreeBSD continues to amaze me: not only it is always extremely stable, it's also very straightforward and easy to upgrade. Combined with the ever-growing collection of ports available (now over 57 000!), this really makes for a little heaven for demanding users.

At work, everything runs in Google Cloud and the usual stack of Docker, Kubernetes and Istio, with Alpine Linux as the most common starting point.

Window Manager

I am not using StumpWM any longer, even though I might return to it in the future. I've simply run into some upgrade issues, decided I wasn't going to spend time determining where the fault lied between sbcl, StumpWM or myself (the most likely option, to be honest), and installed i3wm. I find it an adequate Window Manager: I have no complaints, but am not being tempted to do anything more with it than, well, managing windows.

Email

I still use Gnus to read my email, which nowadays is mostly mailing lists. It's been some time since I have tried getting it to interface with GMail, using it only for the mail sent to my domain, but this is typically something I might pick up in the future.

One thing that I have however discarded and have no plans coming back to, is running my own mail server. I gave many reasons for doing so in I don't run my own mail server anymore, and still stand by everything I said there. As much as I do not like having my email indexed, scrutinised, chewed and spat out for money by Google, the pain of setting one up and maintaining it seems just too high.

Web browser and Gopher browser

I find myself using eww, the Emacs Web Wowser, more and more. I find the rendering fast enough, very clean, and I get to use it in a very emacsy way. Pages visited are managed as buffers, can be bookmarked and fonts, colours and images can be separately toggled on and off. Another useful feature is similar to the "Reading mode" found in other browsers: eww can try and figure out which parts of a document are actually text, and proceeds to get rid of the rest. eww also integrates well with desktop files, and will save sessions there so all open buffers are restored the next time emacs starts. In short, it simply feels great and I highly recommend it.

Whenever I cannot use eww for some reason, I usually turn to Firefox. I am currently trying to give Safari a chance, but I do like to be able to find all my tabs and bookmarks in one place. As I'm obviously never going to use Safari on FreeBSD, Firefox has a clear advantage here. I also get to use various plugins for Firefox, the most important being OverbiteFF. I also used to use Enhancer for Youtube, but since I'm now subscribed to Youtube, I don't have to rely on a tool to skip ads.

I use DuckDuckGo as my only search engine, and never need to use Google for anything. As it happens, DuckDuckGo is the default search engine used by eww!

When it comes to Gopher, I find elpher, in emacs, to be an excellent client. Just like with eww, it integrates perfectly well with the rest of emacs and just feels right. The client I started using in late 2017, gopher.el, is not maintained anymore and, if I recall correctly, went with a message inviting people to switch to elpher.

Editing

I, of course, still use emacs for just about everything, including editing text. Not much more to add here!

Website

The website and the gopherhole are built using org-mode, which is a fantastic and quite unique emacs application to manage just about everything in your life: lists, reminders, calendars, linking pieces of information together (email, notes, bookmarks…). As the website says, "your life in plain text". I rely on some quick elisp to generate the pages (either in HTML or in text for the gopher), and to publish them on the server.

The website is served by nginx, which remains incredibly easy to get going, and the gopherhole is served by gophernicus. This Gopher server is probably the best I've seen, on par maybe with the venerable pyGopherd. However, I do intend to switch soon to my own little server, marmotte. I'm almost there, just need a little more testing…

Terminal emulator

I have switched from using ansi-term to eshell. Using eshell really delivers on the promise of a seamless integration with emacs: the ablity to run emacs functions and shell commands indifferently helps bringing emacs just that close to feeling like the cosiest OS possible. On occasions, when I do need better capabilities, I start an xterm, but that's pretty rare.

Music

Interestingly enough, music is one domain where I still use emacs from time to time, but not so much as before. When I need or want to listen to some music (or audio file) on the laptop, I still definitely use emacs and EMMS, but the fact is that I now listen to music more and more on the phone, via a streaming service (these days, Youtube). It feels like having a poor man's Hi-Fi, but I do find this setup rather convenient. My mp3 collection is still safe and sound (if I may say) on an external drive, but I haven't imported it on my laptop when I bought it. One thing I might do in the future is put it on my NAS (where it actually belongs) and resume using emacs to play it.

Video

I still rely on good old mplayer to play my videos, but I now interface with it via emacs and EMMS. As I mostly play videos on the laptop when I'm coding, I never have to leave the comfort of emacs to load videos during my coding sessions.

Shell

In 2017, I had switched from tcsh to korn93. Well, I have switched back! Using the korn shell was a fun episode, but I just find tcsh to be more to-the-point, less complex shell to use. I of course do not use tcsh for scripting, only for interactive use. I write my shell scripts against /bin/sh, with the benefit of ideal POSIX portability.

Filesystem

I now use ZFS everywhere. It is now the default filesystem for new FreeBSD installations, and I just look like a fool for not having adopted it earlier… Simply put, ZFS is the best experience I've ever had with a filesystem and a volume manager in my life, all systems and environments put together. The documentation in the FreeBSD Handbook is, as always, a model of conciseness and exhaustivity. The books by Michael W. Lucas and Allan Jude, FreeBSD Mastery: ZFS and FreeBSD Mastery: Advanced ZFS are, as always here also, a work of art in how to efficiently distill complex information in an accessible, usable and entertaining manner. It goes without saying, but I also now use ZFS for my new server (see below).

Lisp

I still use sbcl as my sole Lisp implementation. All the good things I had to say about it being stable, modern and well-supported in 2017 still hold today.

Database

PostgreSQL is still my RDBMS engine of choice, and given the wave of enthusiasm it is enjoying these days, it now seems the world has come to their senses and prefer it over MySQL or MariaDB. The possibility to download container images (that is, to get it pre-installed) certainly helped making PostgreSQL mainstream, and there is I think a lesson to learn here, in how distribution has now become a key factor to being successful. Convenience has always helped tilt the balance, and this aspect should not be underestimated.

C and C++

I am not doing much C++ these days, as my focus is now on Go and, soon, Rust for systems programming. Still, I rely on the inevitable duo here, LLVM/Clang and The Much Dreaded CMake when I want to flex my muscles<Programming<CPP<Modern>>>(code).

Go

Go is a new entry here. It's a language I used extensively at work, and that I find has been extremely well designed. The language is famously quite opinionated, coming from people like Rob Pike, Robert Griesemer and Ken Thompson, and every corner of it feels like a C language whose rough edges have been smoothed and polished by the decades of frustrated experience and creativity of these three giants. And the language, well, is both rock-solid and a gem of elegance. Can you do everything with this language? Probably not. You can already do more that what was envisioned at first, but the design is rich with hard choices and decisions made to fend off all temptations of featurism. And that alone is a breath of fresh air.

In emacs, I use go-mode combined with lsp-mode, go-pls and the ubiquitous flycheck to get on-the-fly compilation, error checking and error reporting.

Other languages

Other languages I use include Lisp, of course: I have used Clojure professionally in the past, and I have programmed in Common Lisp almost exclusively for the last two years, up until I started my new job. Whenever I need to get something done that I feel would feel nice in emacs, I cobble together a few lines of Emacs Lisp. I have used many other languages over the years (literally, dozens), but these are the ones I use the most today. I do not code in Perl anymore, unfortunately. One reason is that I have such fond memories of coding in it, that I don't want to spoil them by trying too hard to force myself to stick to it, if that makes sense.

Various utilities

As nothing has changed in this department since 2017, I am going to be lazy and simply quote myself:

I download stuff with fetch, I grep using, well, grep (even though I've heard of ack and ag), I still use etags (even though I've heard of global, again), I use ido, company, ess, paredit, slime, auctex, beacon, and sqlup-mode (which I contributed some code to), among other things.

Hardware

I use a Lenovo Carbon X1 Gen 6 as my laptop and daily driver, and as usual, it works really well with FreeBSD. Slightly larger than what I normally use, with a 14" screen, it comes with an Core i5-8250U running at 3.40GHz, 8GB of RAM and a 256GB SSD. Even though this PC is now almost four years old, it still feels as smooth and quick as on the first day. This certainly has something to do with my activities on the machine, not too demanding, usually, but maybe also with some kind of plateau we may have reached in terms of resource-hungry innovation in the recent years. There are a couple of things that do not work and that I should mention. The WiFi works out of the box, but I couldn't get the driver to offer 802.11n, and remain stuck with 802.11a instead. Not a disaster, but by today's standards, that can feel a bit slow when downloading larger files. I also do not use Bluetooth devices with this laptop, and my guess is that trying to do so would require spending a bit of time configuring the whole thing, which is not the kind of intuitive, instantaneous experience one expects when powering on a Bluetooth device. At last, I could not get the docking station recognised by the system, or at least, I couldn't get the network adapter to show up. Granted, that was with FreeBSD 12, and I haven't tried again with FreeBSD 13. I will give it a go, but I'm not holding my breath.

I have done without the desktop, though. As time passes, I find I tend to favour keeping my environment as neat and tidy as possible, and a desktop, with all the running cables and screen, would work against this. This is in contrast to how my environment used to look like some twenty years ago: I used to live in a flat crowded with an SGI Indy station, two UltraSPARC stations (an UltraSPARC II and a UltraSPARC IIIi, if memory serves), complete with their 19" and 21" CRT monitors, a PC desktop and two PC laptops. This little dream zoo was living next to two arcade systems, constantly plugged in two large-ish CRT monitors, with one resting on its side, dedicated to vertical shmups. And an Amiga 1200. Ah, the youth! I also should mention that I never got used to using more than a single monitor, as X Window Managers have always offered multiple virtual screens. Now working exclusively on laptops, I basically used only the laptop's screen, and to me, the smaller the better. Scarce, constraint real-estate tends to help focussing on tasks and avoiding virtual clutter.

My server today isn't physical but virtual: it's a 2-core, 4GHz unit running in Hydro66. I wanted to avoid any of the big names, and also find good service around an OS that is not the ubiquitous Linux. I will be writing more on running machines in alternate clouds in a future article, but suffice it to say today that I'm fairly happy with my choice here.

I also have purchased another laptop, dedicated to playing my shamefully large collection of games I bought on GOG. Even though GOG now has moved on and propose original creations and new games, I have mostly purchased games that echo their original motto, "Good Old Games": all the Might & Magic, the Lands of Lore, Eye of the Beholder, Myst, and so on. This laptop is a Lenovo Legion 5P, ridiculously overpowered to run Might & Magic III, but I do indulge, sometimes…