___________________________

                     STUFF I USE, 2017 EDITION

                           Nicolas Herry
                    ___________________________


                            2017/03/27





1 Stuff I use, 2017 edition
===========================

  I've always liked reading about other people's habits: what
  software and hardware they use, how they use it to get their job
  done (or just to have fun). I discovered about a lot of software
  that way and I figured I could do such a list so that other
  people could, too. Not convinced yet? Alright, then I guess I
  just want to do a bit a ritualised navel-gazing. Anyway, on to
  the list!

  Since this is the very first edition, I also include a bit of
  information on where I come from on each topic.


1.1 Operating System
~~~~~~~~~~~~~~~~~~~~

  At home: [FreeBSD] 11 on the desktop, laptop and server.  At
  work: Windows 7 on the laptop, and Linux CentOS 7 on the server.

  I am very happy about FreeBSD, as to me, it manages to strike the
  right balance between cleanliness, performance and usability. I
  used to use [NetBSD], which is the cleanest OS I've ever seen,
  but not always the most practical ([TeX] can be a bit of a pain,
  X can lag quite a bit as well, for instance). I've also used
  [OpenBSD], but I ended up wanting more performance on my
  multi-core machines (meaning a rock-solid SMP subsystem). Quite a
  few years ago, I also used to run Linux ([Slackware] 3-7, mostly,
  and a bit of [Debian] Potato), but the overall messiness of the
  whole thing encouraged me to give it a wide berth rather early
  on. Also, something like ten years ago, I placed some hope in
  OSX, as seeing a piece of technology genuinely interesting and
  pleasant to use gain acceptance among the general public was
  quite exciting, but Apple quickly managed to spoil everything by
  turning the OS into the slow, boring, opaque little prison we
  know today.


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

[NetBSD] <https://www.netbsd.org>

[TeX] <https://www.texlive.org>

[OpenBSD] <https://www.openbsd.org>

[Slackware] <https://www.slackware.org>

[Debian] <https://www.debian.org>


1.2 Window Manager
~~~~~~~~~~~~~~~~~~

  I mostly use [StumpWM], a manual tiling window manager. It was
  first written in Common Lisp by Shawn Betts, after [he realised
  actually writing a window manager directly in Common Lisp was a
  much saner option than writing one in C and have it grow slowly
  towards a lisp interpreter]. StumpWM has been designed from the
  start to be emacs-friendly and to provide a full lispy
  experience. This means you an interact directly with the running
  process, straight from emacs. I've written a post here detailing
  the [steps required to install StumpWM on FreeBSD].

  From time to time, I still have the itch to use a clean, simple
  and straightforward Window Manager, and to me, [Window Maker] is
  the answer. It's fast, it doesn't drown you in an endless stream
  of features and I must confess I really like the blocky
  aesthetics very much. I like the fact that it's not a moving
  target and it hasn't changed much over the years. I get new
  features, bugfixes but I never have to re-learn everyting. In
  fact I like it so much that I've been keeping the source code of
  a small dockapp for controlling Music Player Daemon and I've even
  made [a proper port for it for FreeBSD] (only available from my
  GitHub account, for now)!

  I think I will always have a sweet spot for Window Maker, as it
  has been my default window manager since I started using Linux
  and UNIX back in 1997 (and back when I had so little VRAM, I had
  to choose between 640x480 32-bit and 800x600 24-bit... Ahh, the
  memories...).


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

[he realised actually writing a window manager directly in Common
Lisp was a much saner option than writing one in C and have it grow
slowly towards a lisp interpreter]
<https://github.com/stumpwm/stumpwm/wiki/Background>

[steps required to install StumpWM on FreeBSD] <gopher://gopher.beastieboy.net/0/stumpwm.txt>

[Window Maker] <https://www.windowmaker.org>

[a proper port for it for FreeBSD]
<https://github.com/yogsothoth/wmmp-freebsd-port>


1.3 Email
~~~~~~~~~

  I use [Gnus] to read my email (as I'm rebuilding my server at the
  moment, I'm temporarily left with GMail only, but I'll be back to
  the usual scenario where I run my own mail server in a few
  weeks). I've been using Gnus for a few years and I've been using
  a variety of email clients before that: [vm], [alpine], [mutt]
  (back when I was a vim user) and Thunderbird. I don't see myself
  changing from Gnus, even though I keep reading everywhere that
  mu4e is the way to go now. Gnus is stable, solid and I know my
  way around it pretty well for my usage. What I *do* plan to
  change though is how I retrieve my mail: so far, I've always been
  connecting directly to the mail servers through POP3 and then
  IMAP, but it seems that separating the retrieval from the reading
  would be a good idea. This means that instead of just using Gnus,
  I will be using a combination of Gnus + [offlineimap] (or
  something equivalent). This should make it easier to backup the
  mail, connect alternate clients (might be useful when I'm working
  on Windows at work), etc. Another argument in favor of this setup
  used to be that a problem with Gnus resulting in it hanging would
  hang the whole emacs process. However, recent developments in
  emacs seem to indicate this will no longer be the case! We'll see
  how that goes.

  On the server side, I've been running a combination of [Postfix]
  + [Dovecot] and don't plan to change that when I set up my mail
  server again.


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

[vm] <https://nongnu.org/viewmail>

[alpine] <https://alpine.washington.edu>

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

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

[Postfix] <https://www.postfix.org>

[Dovecot] <https://www.dovecot.org>


1.4 Web browser
~~~~~~~~~~~~~~~

  This is one area where I don't use emacs. I know there are things
  like [eww], which looks very promising, but I feel it's been more
  designed to act as an ad-hoc HTML display engine for reading your
  mail than an actual standalone web browser. As a result, I use
  [Firefox], as I don't really want to use [Chrome]. It must be
  said Firefox has become a bit of a plump recently, to put it
  nicely, and pleasure in using it has suffered quite a bit
  indeed. However, it seems the good people at Mozilla realise the
  problem and are working on getting Firefox back on the right
  tracks.

  In daily use, I rely on a small collection of plugins: [AdBlock
  Plus], [Video DownloadHelper] and [Pinboard Extension]. I also
  have [OverbiteFF] (to access gopher holes), [DuckDuckGo Plus] and
  apparently I run Firebug and Web Developer. I guess the two last
  ones come bundled with Firefox, as I have practically no interest
  in using them. I can't remember why I installed the extension for
  DDG (I rely almost solely on DDG for web searches, but I usually
  don't install this kind of extensions). OverbiteFF was fun, but I
  doubt I'll be using it for much longer, as the gopher space
  remains rather empty and not much alive to say the least...

  Firefox is a bit like Window maker to me: my default
  environment. Like many, I started with [Netscape], moved over to
  [Mozilla] when it was released and switched to
  [Phoenix/Firebird/Firefox] as soon as the first betas came
  out. Firefox is not just /a/ browser to me, it represents the
  moment open source became visible to the public, the day I woke
  up and I heard about Netscape open sourcing their browser, *on
  the radio*!


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

[Firefox] <https://www.mozilla.org>

[Chrome] <https://www.google.com/chrome/index.html>

[AdBlock Plus]
<https://addons.mozilla.org/en-US/firefox/addon/adblock-plus>

[Video DownloadHelper]
<https://addons.mozilla.org/en-US/firefox/addon/video-downloadhelper>

[Pinboard Extension]
<https://addons.mozilla.org/en-US/firefox/addon/pinboardin>

[OverbiteFF]
<https://addons.mozilla.org/en-US/firefox/addon/overbiteff>

[DuckDuckGo Plus]
<https://addons.mozilla.org/en-US/firefox/addon/duckduckgo-for-firefox>

[Netscape] <https://en.wikipedia.org/wiki/Netscape_(web_browser)>

[Mozilla]
<https://web-beta.archive.org/web/19981212031129/http://www.mozilla.org:80/>

[Phoenix/Firebird/Firefox]
<https://en.wikipedia.org/wiki/History_of_Firefox>


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

  I use [emacs] exclusively for editing text. Much has been written
  on the reasons one would want to use emacs and I will not repeat
  them here. I really don't expect to change from emacs any time
  soon, or ever.


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


1.6 Website
~~~~~~~~~~~

  I use [org-mode] to build this website. To be more precise, I use
  it to write the articles and to publish the pages as HTML
  files. I still push the thing to my server using sftp. I know org
  can do that itself and much more, I just need to get around to
  writing the configuration.

  I use [nginx] to serve the pages, as it's very easy to configure
  to get basic things working (I only had to change a single line
  in the config file).


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

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


1.7 Terminal emulator
~~~~~~~~~~~~~~~~~~~~~

  I use [ansi-term] 90% of the time, and xterm whenever something
  goes wrong (as it happens sometimes with remote ssh sessions). I
  guess I should really start using just [term], now, as I believe
  both programs are now more or less the same. Anyway, ansi-term or
  term, I won't be changing for anything else anytime soon.


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

[term]
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Terminal-emulator.html>


1.8 Music
~~~~~~~~~

  I use [Music Player Daemon] to actually index and play the music
  files on my computers. I don't use any streaming service, even
  though I listen to some music on Youtube every day. I mostly use
  [EMMS] as my music player client, as it runs conveniently under
  emacs. The only exception is when I run Window Maker instead of
  StumpWM, where in that case I use [WMmp], the small mpd client
  dockapp I made FreeBSD port for.


[Music Player Daemon] <https://www.musicpd.org/>

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

[WMmp] <http://www.dockapps.net/wmmp>


1.9 Video
~~~~~~~~~

  I use [umplayer] to play videos. It's a nice and easy to use
  wrapper around [mplayer], it doesn't come with a million
  dependencies and overall does a very good job of playing video
  files in any format I throw at it.


[umplayer] <http://sourceforge.net/projects/umplayer/>

[mplayer] <http://www.mplayerhq.hu/design7/news.html>


1.10 Shell
~~~~~~~~~~

  I recently switched from [tcsh] to [korn93]. The reason was that
  I wanted to be able to use functions, and also I wanted some
  change. Many people suggested I switch to [zsh] instead, but this
  shell always seemed to be to be a bit over the top. So far, I'm
  satisfied with the korn shell, both for interative use and for
  writing shell scripts.


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

[korn93] <http://kornshell.com/>

[zsh] <http://www.zsh.org/>


1.11 Filesystem
~~~~~~~~~~~~~~~

  I use [UFS] everywhere. I know, it's 2017 and I really should be
  using [ZFS], but honestly, even though ZFS has a ton of
  impressive features, UFS still does a very good job without
  asking for anything. I do plan to use ZFS in a few months, when I
  set up my NAS at home, though.


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

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


1.12 Lisp
~~~~~~~~~

  I use [sbcl] exclusively, as it's a modern, threaded, stable and
  well-supported implementation. everything I use supports it, I
  can find documentation for it everywhere and I can run it
  everywhere, including Windows.


[sbcl] <http://sbcl.org/>


1.13 Database
~~~~~~~~~~~~~

  I use [PostgreSQL] in projects where I need an RDBMS. PostgreSQL
  has a million features to offer, is very quick in adopting
  standards (SQL:2011, as of today), and more importantly, manages
  to be more than just an RDBMS, but a complete platform in its own
  right. You can expose your data straight from PostgreSQL, you can
  code triggers and procedure in JavaScript (V8), Python, Perl, R,
  TCL or just plpgsql, depending on what you have to do and which
  would be the most effective language, you get a very handy set of
  analytics extensions, you get a NoSQL data store (JSON) with ACID
  capabilities and actual, proper JOINS...


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


1.14 C and C++
~~~~~~~~~~~~~~

  I use [LLVM/Clang] to compile my code and, most of the time,
  [CMake] to generate build files. Clang is quickly becoming the
  standard in Open Source projects (at least, this is how it feels
  to me, I have no actual evidence of this), generated quick and
  tight binaries and provides rather helpful error messages while
  compiling C++ code, including template code. This last bit is
  probably the reason I decided to switch from GCC to Clang.

  CMake isn't exactly the dream build environment: the syntax is a
  bit odd, you rely on packages to do magic tricks for you (like
  finding and linking to a specific subset of libraries) and the
  documentation is famously not great. But there are really only
  three cases you can find yourself in. The first one is when you
  only have a handful of C or C++ files to compile and you get to
  choose the target platforms and the compiler. In this happy
  scenario, writing a simple Makefile by hand is probably the most
  straightfoward. Another case is when compatibility is a must, and
  you have to make do with the idiosyncrasies of a large collection
  of vaguely UNIXy platforms. In this case, the autotools are a
  good bet, as they've been designed exactly with this sort of
  context in mind. I wouldn't promise this will be a pleasant
  experience, but it's very likely to alleviate a lot of the pain
  down the road. The last case is everything in between: you only
  have to support a reasonable array of recent enough platforms and
  you have more than an improved hello-world to compile. Picking
  CMake then seems to me the easier way to start and the most
  manageable build system once the application has grown a bit (and
  spawned its own library, for instance).


[LLVM/Clang] <http://clang.llvm.org/>

[CMake] <https://cmake.org/>


1.15 Other languages
~~~~~~~~~~~~~~~~~~~~

  I also program in [Perl], but less so in the recent years (in
  favor of [Clojure] and [Common Lisp] and [Emacs Lisp]). I do some
  R, I have played with Haskell and used a rather large variety of
  programming languages in the course of my career (a few
  assemblers, BASIC, Python, PHP (up to version 3), a lot of Java
  and many others).


[Perl] <https://www.perl.org>

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

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

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


1.16 Various utilities
~~~~~~~~~~~~~~~~~~~~~~

  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.17 Hardware
~~~~~~~~~~~~~

  I use a [Lenovo T420] as my laptop (which works absolutely great
  with FreeBSD), with a 320GB mechanical HDD and only 4GB of RAM, a
  powerful desktop ([Intel i7 5820K], 16GB RAM, 500GB SSD+2TB
  mechanical HDD, [Nvidia GeForce GTX 970] (for which I use the
  [proprietary drivers]) and I rent a server (Bi-Xeon E5504, 16GB
  RAM ECC, 2TB HDD) from [OVH/Kimsufi].


[Lenovo T420] <https://support.lenovo.com/fr/en/solutions/pd015734>

[Intel i7 5820K]
<http://ark.intel.com/products/82932/Intel-Core-i7-5820K-Processor-15M-Cache-up-to-3_60-GHz>

[Nvidia GeForce GTX 970]
<http://www.geforce.com/hardware/desktop-gpus/geforce-gtx-970>

[proprietary drivers]
<http://www.freshports.org/x11/nvidia-driver/>

[OVH/Kimsufi] <https://www.kimsufi.com/uk/servers.xml>