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