___________________________

                    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>