GOPHERSPACE.DE - P H O X Y
gophering on gopher.beastieboy.net
      ___________________________

       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] file:stumpwm.org

[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%3
Ddefault&format%3Dhtml

[grep]
https://www.freebsd.org/cgi/man.cgi?query%3Dgrep&apropos%3D0&sektion%3D0&manpath%3DFreeBSD%2B11.0-RELEASE%2Band%2BPorts&arch%3D
default&format%3Dhtml

[ack]
https://www.freebsd.org/cgi/man.cgi?query%3Dack&apropos%3D0&sektion%3D0&manpath%3DFreeBSD%2B11.0-RELEASE%2Band%2BPorts&arch%3Dd
efault&format%3Dhtml

[ag]
https://www.freebsd.org/cgi/man.cgi?query%3Dag&apropos%3D0&sektion%3D0&manpath%3DFreeBSD%2B11.0-RELEASE%2Band%2BPorts&arch%3Dde
fault&format%3Dhtml

[etags]
https://www.freebsd.org/cgi/man.cgi?query%3Detags&apropos%3D0&sektion%3D0&manpath%3DFreeBSD%2B11.0-RELEASE%2Band%2BPorts&arch%3
Ddefault&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