___________________________

                     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.