___________________________

                    STUFF I USE, 2022 EDITION

                          Nicolas Herry
                   ___________________________


                           2022/11/05





1 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?


[Stuff I use] <gopher://gopher.beastieboy.net/0/stuffiuse2017.txt>

[Renaissance] <gopher://gopher.beastieboy.net/0/renaissance.txt>

1.1 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.


[FreeBSD] <http://www.freebsd.org>

[macOS.] <https://en.wikipedia.org/wiki/MacOS>

[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>


1.2 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.


[StumpWM] <https://stumpwm.github.io>

[sbcl] <https://www.sbcl.org>

[i3wm] <https://i3wm.org/>


1.3 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.


[Gnus] <https://www.gnus.org>

[I don't run my own mail server anymore] <gopher://gopher.beastieboy.net/0/nomailserver.txt>


1.4 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.


[eww]
<https://www.gnu.org/software/emacs/manual/html_mono/eww.html>

[Firefox] <https://www.mozilla.org/en-US/firefox/new/>

[Safari] <https://www.apple.com/safari/>

[OverbiteFF] <https://gopher.floodgap.com/overbite/>

[Enhancer for Youtube]
<https://www.mrfdev.com/enhancer-for-youtube>

[DuckDuckGo] <https://ddg.gg>

[elpher] <https://github.com/emacsmirror/elpher>


1.5 Editing
~~~~~~~~~~~

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


[emacs] <https://www.gnu.org/software/emacs/>


1.6 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...


[org-mode] <https://orgmode.org/>

[nginx] <https://www.nginx.org>

[gophernicus] <https://github.com/gophernicus/gophernicus>

[pyGopherd] <https://github.com/jgoerzen/pygopherd>

[marmotte] <gopher://gopher.beastieboy.net/0/marmotte.txt>


1.7 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.


[ansi-term] <https://www.emacswiki.org/emacs/AmsiTerm>

[eshell]
<https://www.gnu.org/software/emacs/manual/html_mono/eshell.html>


1.8 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.


[EMMS] <https://www.gnu.org/software/emms/>


1.9 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.


[mplayer] <https://mplayerhq.hu>


1.10 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.


[tcsh] <https://www.tcsh.org>

[korn93] <https://www.kornshell.com>


1.11 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).


[ZFS] <https://en.wikipedia.org/wiki/ZFS>

[FreeBSD Handbook] <https://docs.freebsd.org/en/books/handbook/zfs>

[FreeBSD Mastery: ZFS]
<https://www.tiltedwindmillpress.com/product/fmzfs/>

[FreeBSD Mastery: Advanced ZFS]
<https://www.tiltedwindmillpress.com/product/fmaz/>


1.12 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.


[sbcl] <https://www.sbcl.org>


1.13 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.


[PostgreSQL] <https://www.postgreql.org>


1.14 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] <https://go.dev>

[Rust] <https://www.rust-lang.org>

[LLVM/Clang] <https://llvm.org/>

[The Much Dreaded CMake] <https://cmake.org>


1.15 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.


[Rob Pike] <https://en.wikipedia.org/wiki/Rob_Pike>

[Robert Griesemer] <https://en.wikipedia.org/wiki/Robert_Griesemer>

[Ken Thompson] <https://en.wikipedia.org/wiki/Ken_Thompson>

[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
~~~~~~~~~~~~~~~~~~~~

 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.


[Clojure] <https://clojure.org/>

[Common Lisp] <https://en.wikipedia.org/wiki/Common_Lisp>

[Emacs Lisp] <https://en.wikipedia.org/wiki/Emacs_Lisp>

[Perl] <https://www.perl.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
~~~~~~~~~~~~~

 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...


[Lenovo Carbon X1 Gen 6]
<https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadx1/thinkpad-x1-carbon-(6th-gen)/22tp2txx16g?orgRef=https%253A%252F%252Fduckduckgo.com%252F>

[SGI Indy] <https://en.wikipedia.org/wiki/SGI_Indy>

[UltraSPARC] <https://en.wikipedia.org/wiki/UltraSPARC>

[Hydro66] <https://www.hydro66.com>

[GOG] <https://www.gog.com>

[Lenovo Legion 5P]
<https://www.lenovo.com/gb/en/p/laptops/legion-laptops/legion-5-series/lenovo-legion-5p-15arh05h/88gmy501541?org>