___________________________

                     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>