___________________________ STUFF I USE, 2024 EDITION Nicolas Herry ___________________________ 2024/11/10 1 Stuff I use, 2024 edition =========================== It's been two years since the last edition of [Stuff I use], and as I'm at long last resuming my activities around here, what better topic than a good old review of all the stuff I use? So, without further ado, let's go through the usual list! [Stuff I use] <file:stuffiuse2022.org> 1.1 Operating System ~~~~~~~~~~~~~~~~~~~~ As always, [FreeBSD] is my daily driver both on my laptop and on my servers. Since last time, I've also picked up gaming again, and have rebuilt my Windows laptop where I now have all gathered all my games. I'm elaborating a little on this in the section on gaming in this yearly[1] exercise, as it's now really part of my routine again. At work, I have now switched to the blandest of the blandest Windows PC, for the sake of remaining compatible with all the usual joys of the corporate world: ERP applications that look like they might still die of a sudden Y2K existential crisis any minute, dodgy HR systems put together by generations of misguided summer interns and the still inescapable Office royal flush[2]. That being said, I can't say I really like Macs any longer, and haven't for quite some time. The last time I truly saw value in the products Apple was putting out was maybe with the last G4 iBook in 2003... At work, we still run our application side in [Google Cloud] with [Docker], [Kubernetes] and [Istio], with [Alpine Linux] still serving as the base here. In addition to this stack, we also run all the ingestion part of our data pipelines in [Microsoft Azure], relying on triggers, Service Bus and function apps written in C# for most of the event-driven aspects and blobs for batch-oriented workloads. Everything is then decanted in Google Cloud and exposed there to all consumers. [FreeBSD] <https://www.freebsd.org> [Google Cloud] <https://cloud.google.com/> [Docker] <https://www.docker.com> [Kubernetes] <https://kubernetes.io> [Istio] <https://istio.io/> [Alpine Linux] <https://www.alpinelinux.org> [Microsoft Azure] <https://portal.azure.com> 1.2 Window Manager ~~~~~~~~~~~~~~~~~~ I am back to using [StumpWM]. After a small period using [i3wm], I could find the time to clean up my mess and reset my [sbcl] and [Quicklisp] dependencies landscape, and could return to my beloved StumpWM. There really is something unique in the way this Window Manager combines straightforwardness, extensibility and complexity that sets it apart from the crowd and have me call it home. Precisely what the original goal was: the emacs of Window Management. [StumpWM] <https://stumpwm.github.io/> [i3wm] <https://i3wm.org> [sbcl] <http://www.sbcl.org> [Quicklisp] <https://www.quicklisp.org> 1.3 Email ~~~~~~~~~ [Gnus] remains my mail client and as time goes by, I really cannot see how any other client can ever take over from it. As [I don't run my own mail server anymore], I have put my email in the hands of my registrar, [Gandi], with a redirector and spyware pruning filter provided by [DuckDuckGo Email]. My GMail address is, at long last, slowly taking a back seat as I migrate gradually my accounts over to this email address. [Gnus] <https://www.gnus.org> [I don't run my own mail server anymore] <file:nomailserver.org> [Gandi] <https://www.gandi.net> [DuckDuckGo Email] <https://duckduckgo.com/email> 1.4 Web browser and Gopher browser ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ I keep getting wowed by the [Emacs Web Wowser] and how it can handle most of the Web, including fairly complex pages. It's not always a perfect experience, and some websites like GitHub, for example, remain a little cumbersome to browse through. But as I was saying [last time], being able to selectively activate and deactivate all parts of the display, from fonts to images and colours really reminds of the days the Web was young and leaves you in control of your experience visiting Web sites. For trickier websites, I turn to [Firefox]. I use [Improve YouTube!], which allows to reorganise the layout of the pages of the streaming website, blocks ads[3] and generally allows to remodel the experience the way you like. I also rely on a few other add-ons to try and keep browsing the modern Web tolerable, such as [Clear URLs], wich rids URLs of trackers and such, and [Cookie AutoDelete], which allows to use all the websites that refuse to work unless they can force their cookies down your throat, and cleans them up right after you close their tab. I do not use [OverbiteFF] any longer, nor have I updated to its successor, [OverbiteNX]. The reason is not that I have turned my back on Gopher; on the contrary, I tend to use it more and more, and as a result, I simply use [elpher] in emacs. Just like eww helps make Web browsing seamless in emacs, elpher offers an ideal interface to visit gophers. The only search engine I use remains [DuckDuckGo], even though I understood recently that it relies on Bing for a good chuck of its results, which is a disappointment. That putting together a fully independent search engine that can compete with the likes of Google, Bing and such is an awfully hard task to pull out is certain, but it's fair to imagine that partnering up with Microsoft must come with some [unfortunate compromises]. [Emacs Web Wowser] <https://www.gnu.org/software/emacs/manual/html_mono/eww.html> [last time] <file:stuffiuse2022.org> [Firefox] <https://www.mozilla.org/en-US/firefox/new/> [Improve YouTube!] <https://addons.mozilla.org/en-US/firefox/addon/youtube-addon/> [Clear URLs] <https://docs.clearurls.xyz/1.26.1/> [Cookie AutoDelete] <https://github.com/Cookie-AutoDelete/Cookie-AutoDelete> [OverbiteFF] <https://gopher.floodgap.com/overbite/d?ff38> [OverbiteNX] <https://github.com/classilla/overbitenx> [elpher] <https://thelambdalab.xyz/elpher/> [DuckDuckGo] <https://www.duckduckgo.com> [unfortunate compromises] <https://www.msn.com/en-us/news/technology/duckduckgo-is-more-than-just-a-search-engine-now/ar-AA1qcK1Y> 1.5 Editing ~~~~~~~~~~~ No change here: I use [emacs] as my editor, and for basically everything else. [emacs] <https://www.gnu.org/software/emacs/> 1.6 Website ~~~~~~~~~~~ I use [org-mode] to generate the website and the gopher, as well as for managing my todo lists[4]. Some bits of elisp help get the job done, but it remains a very rough job, especially for the gopher, which is a shame. That's typically something I will need to work on. The website is still served by [nginx], and my gopher is now delivered by [marmotte], my own server. In addition to covering all the traditional gopher functionalities, marmotte also offers dynamic pages, error pages, dynamic transformers and more. I intend to resume my work on it (I can't believe it's been two years since I last touched it...) and add Gopher+, as well as various new experiments and extensions around the protocol. [org-mode] <https://orgmode.org/> [nginx] <https://www.nginx.org> [marmotte] <file:marmotte.org> 1.7 Terminal emulator ~~~~~~~~~~~~~~~~~~~~~ I almost exclusively use [eshell], and I have of course binded my `C-t c' to this shell. I only resort to using an xterm when starting ncurses applications, which remains pretty rare. [eshell] <https://www.gnu.org/software/emacs/manual/html_mono/eshell.html> 1.8 Music ~~~~~~~~~ Two years ago, I started more and more to rely on streaming applications to play music, but I have now all but abandoned this approach. I am back to using [EMMS], as well as [eradio]. If the former needs no introduction, you might not be familiar with the latter. eradio is a radio streaming client, that, like EMMS, makes use of the media player installed on the computer. It works flawlessly out-of-the-box, and I also got to discover [soma fm], a set of excellent radios recommended by eradio's author. [EMMS] <https://www.gnu.org/software/emms/> [eradio] <https://github.com/olavfosse/eradio> [soma fm] <https://somafm.com/> 1.9 Video ~~~~~~~~~ Nothing has changed here, so I will simply quote myself from last time: 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. [mplayer] <https://mplayerhq.hu> 1.10 Shell ~~~~~~~~~~ [tcsh] remains my favourite shell when I'm not using the Emacs shell, eshell. Simple, straightforward and yet powerful: tcsh really is the best standalone shell I have ever used. [tcsh] <https://www.tcsh.org/> 1.11 Filesystem ~~~~~~~~~~~~~~~ I use [ZFS] everywhere I can. A recent misadventure with a consumer-grade NAS by Synology, configured with btrfs, and that led to the loss of half of my photos helped me realise once and for all that I needed to stop giving in to peer pressure and simply trust my intuition and experience. [ZFS] <https://en.wikipedia.org/wiki/ZFS> 1.12 Lisp ~~~~~~~~~ [sbcl] remains the only Lisp implementation that I use. The project is quite remarquable as it manages to remain very stable whilst at the same time keeps evolving, improving and adding features. Very impressive. [sbcl] <https://www.sbcl.org> 1.13 Database ~~~~~~~~~~~~~ I do not use databases as much as before, but when I do need to use one, I turn to [PostgreSQL] almost systematically. The engine has come such a long way this past decade, when most people were still skeptical about it. Now, PostgreSQL support is taken from granted in any major cloud offering, and most guides online don't even bother introducing any other RDBMS. I also use [sqlite] when I'm writing non-Lisp code and need a simple way to persist and retrieve data via a relational interface. Having such a pocket RDBMS, with no deployment, no configuration really feels like a priviledge. In Lisp, I tend to use [bknr.datastore]. Its description on the GitHub page, /"An in-memory CLOS-based data store"/, doesn't do it justice: the library offers a file-backed, very fast ACID object database you can introduce at any stage of your development without any redesign of your code[5]. This makes it such a perfect fit for the kind of cycle Lisp projects thrive on: do not plan extensively, but grow organically. The one limit in the design is that in any given process, there can only be one instance of the datastore. A [fork of bknr.datastore] exists that brings notably LispWorks compatibility, and cluster-readiness, and does come with a [highly-available, replicating clustering system]. I haven't tried it yet (as I don't use LispWorks today), but might give it a go in the future. [PostgreSQL] <https://www.postgreql.org> [sqlite] <https://www.sqlite.org> [bknr.datastore] <https://github.com/bknr-datastore/bknr-datastore> [fork of bknr.datastore] <https://github.com/tdrhq/bknr-datastore> [highly-available, replicating clustering system] <https://github.com/tdrhq/bknr.cluster> 1.14 C and C++ ~~~~~~~~~~~~~~ C++ is back at the heart of some of my projects, and I am quite impressed with the continual progress made by the language and its environment. The language designers are addressing most of the long-standing pain points programmers have had with the C++, evolving its syntax from constituting the limiting factor in the equation to being a gradually more natural way to express its power. All of its facets now benefit from the effort, from memory management to type-safety, from generic programming (via template meta-programming) to networking and asynchronous design. Yes, C++ remains C++ with all its bagage, but it seems that after so many years spent chasing trends and gimmicks, it has finally found its identity as an efficient, safe and reliable programming environment. This is also why I have mixed feelings when I see Cppfront being pushed so much these days. I have nothing but admiration for Herb Sutter, the intelligent, witty and charismatic figure C++ has thrived on for a few years now, and his work in keeping the language relevant both at large and inside his own company certainly contributed greatly to C++ still seeing updates today. However, I am not certain I am interested in getting C++ to a point where it feels like a soft, mild scripting language. I know the frontend is presented as a "personal experimentation" with C++, but the fact is that this personal experimentation has a place of choice in more and more keynotes and sessions in C++ conferences. I guess we'll see where this goes, but the times are indeed interesting with [Rust] gaining some mindshare over the past few years, and the Javascript crowd having such a strong influence over general expectations in the programming field. This last part is something I will most likely come back to in another article soon. [Rust] <https://www.rust-lang.org> 1.15 Go ~~~~~~~ I keep using [Go], but only for my gopher server, marmotte. As I was writing previously, the language is well designed and very consistent, and the tooling has very quickly reached a level of maturity that makes using it a very productive pleasure. I am simply more interested in working with Lisp, but Go has been a very nice surprise. I still rely on the same modes for Go in emacs: [go-mode], [lsp-mode], [go-pls] and [flycheck]. [Go] <https://go.dev> [go-mode] <https://github.com/dominikh/go-mode.el> [lsp-mode] <https://github.com/emacs-lsp/lsp-mode> [go-pls] <https://github.com/golang/tools/blob/master/gopls/README.md> [flycheck] <https://github.com/flycheck/flycheck> 1.16 Other languages ~~~~~~~~~~~~~~~~~~~~ Not really a programming language per se (depending on how you look at it), but I use LaTeX a great deal these days, especially as I rely on it for my various publishing endeavours[6]. Of course, I still do most of my work in [Common Lisp], write some [Emacs Lisp] now and again to get things done with Emacs and... that's about it nowadays. Of course, I dabble a bit with other languages from time to time, such as [Zig], but without any other goal than satisfying my curiosity (and learning a thing or two along the way). [Common Lisp] <https://en.wikipedia.org/wiki/Common_Lisp> [Emacs Lisp] <https://en.wikipedia.org/wiki/Emacs_Lisp> [Zig] <https://www.zigland.org> 1.17 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. [fetch] <https://www.freebsd.org/cgi/man.cgi?query%3Dfetch&apropos%3D0&sektion%3D0&manpath%3DFreeBSD%2B11.0-RELEASE%2Band%2BPorts&arch%3Ddefault&format%3Dhtml> [grep] <https://www.freebsd.org/cgi/man.cgi?query%3Dgrep&apropos%3D0&sektion%3D0&manpath%3DFreeBSD%2B11.0-RELEASE%2Band%2BPorts&arch%3Ddefault&format%3Dhtml> [ack] <https://www.freebsd.org/cgi/man.cgi?query%3Dack&apropos%3D0&sektion%3D0&manpath%3DFreeBSD%2B11.0-RELEASE%2Band%2BPorts&arch%3Ddefault&format%3Dhtml> [ag] <https://www.freebsd.org/cgi/man.cgi?query%3Dag&apropos%3D0&sektion%3D0&manpath%3DFreeBSD%2B11.0-RELEASE%2Band%2BPorts&arch%3Ddefault&format%3Dhtml> [etags] <https://www.freebsd.org/cgi/man.cgi?query%3Detags&apropos%3D0&sektion%3D0&manpath%3DFreeBSD%2B11.0-RELEASE%2Band%2BPorts&arch%3Ddefault&format%3Dhtml> [global] <https://www.freebsd.org/cgi/man.cgi?query%3Dglobal&apropos%3D0&sektion%3D0&manpath%3DFreeBSD%2B11.0-RELEASE%2Band%2BPorts&arch%3Ddefault&format%3Dhtml> [ido] <https://masteringemacs.org/article/introduction-to-ido-mode> [company] <https://company-mode.github.io/> [ess] <http://ess.r-project.org/> [paredit] <http://emacsrocks.com/e14.html> [slime] <https://common-lisp.net/project/slime/> [auctex] <https://www.gnu.org/software/auctex/> [beacon] <https://github.com/Malabarba/beacon> [sqlup-mode] <https://github.com/Trevoke/sqlup-mode.el> 1.18 Hardware ~~~~~~~~~~~~~ My main laptop is a Dell Latitude 5330 i7, with 32GB of RAM and 521 GB of SSD storage. I ended up selling my Lenovo Carbon X1 in an effort to simplify my life, reduce the number of things I own and feel lighter. I would then run FreeBSD in a VM on a Windows host. In the end, I ended up grabbing the Dell my former employer had sent me for work and never claimed back, and installed FreeBSD on it. I guess you can't change one's true nature! The experience was also quite telling: just as the Synology NAS never sat right with me, trying to bottle up my usual computing life in a virtual machine only led a rather bland experience. Computing washed of all its colours. Powering a laptop, unlocking my ZFS root partition, being greeted by the Red Horny Ball and watching as the boot process unfolds before my eyes... This really feels like home. This *is* my computing home, a first-class constituent of my identity. However, I can't say I care too much for Dell computers, and they compare less than favourably to Lenovo computers to me: the keyboard feels wrong, with too much space between the keys, and the trackpad gives the impression it's just been drawn on the body of the laptop. Clicking on that thing feels like trying to squeeze the hard disk or whatever happens to live underneath. To top it all, it tends to overheat significantly. Trying not to spend too much unwisely, I'm refraining from ordering a better companion, but I might just do so soon enough, to be honest. I still run the same server, or rather, the same level of server, still at [Cloud Sigma]. The resources have migrated from Sweden to Germany, but this is the only change. Running a VPS really strikes the right balance for me, between the freedom to do as I please on the server, and just enough sysadmin tasks to keep me happy without spoiling the fun. My gaming laptop I purchased in 2020 is still with me, and given that most games that I play fall in the range of 1980-2000, I don't suspect it will prove too weak for my needs any time soon. On the menu these days are fighting games, from Guilty Gear Xrd Rev2, Fatal Fury (the whole series), Super Street Fighter II X/Turbo and Street Fighter Zero/Alpha 3. Many of these I play on Fightcade, a project I contribute to financially and offers to play arcade games online, using a network layer that, if not perfect, is extremely convincing. Given how the arcades have been dying all around the world for the past 25 years, it can be said that Fightcade contributes to keeping the old style Fighting Game Community alive and thriving. I also still play many other arcade games as well as old-school dungeon crawlers, RPGs and adventure games. I must say that I seem to have access to so many more games, and in a better fashion than I used to when I was curating my own collection of arcade PCBs, MVS cartridges and imported consoles. I sold all this in 2017, and apart from some very specific titles (PC Engine, Virtual Boy), I have managed to find everything back and more. I also don't have to put up with converters and adapters to navigate my equipment through generations and generations of technological evolution. At last, I have purchased a [Fairphone 5] and run it under [\/e\/os]. The phone itself is very impressive, and the operating system is equally an excellent piece of technology. I will soon dedicate an article or two to detailing my experience with both; this has all been *very* positive and I highly recommend the switch to anyone conscious about confidentiality and the socio-economical impact of technology. [Cloud Sigma] <https://www.cloudsigma.com> [Fairphone 5] <https://www.fairphone.com/> [\/e\/os] <https://e.foundation/e-os/> Footnotes _________ [1] I'm sure on some celestial bodies, a year can last five of our earthly years. Or two. Or however long it takes me next time to update this article. [2] Outlook, Excel, Sharepoint, Powerpoint, Mine Sweeper. [3] At least, most of them, as YouTube is once again trying to work around ad blockers these days. [4] To be more precise: my GTD system, rather than plain todo lists. [5] Simply introduce a bit of metadata in the form of slots in your classes and bknr.datastore takes care of the rest. [6] I will come back to my interest in publishing and typesetting very soon.