BeastieBoy

FreeBSD, Lisp, Emacs, PostgreSQL & co.

Stuff I use, 2017 edition

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.

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.

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…).

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.

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!

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.

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).

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.

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.

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.

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.

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.

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.

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…

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).

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).

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.

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.