Thoughts from a Computer

I've spent too much time playing with Linux. My computational aesthetics drive me in the direction of software which is simultaneously very small and very robust. There are lots of ways to judge size and robustness, but that's a technicality. My software use is pretty eclectic1. Most of the time, I am drawn towards software which operates on or works with plain text. Consequently, almost everything that I use runs in a terminal window.

Presently, humanity seems to be in situation depicted in the gif below. The tongs are computers. Humanity is the cat.

./technology.gif

These are the main points interaction with my computer:

Things that I'd like to get comfortable with:

mc

mc is an ncurses based file manager. I used the command line to do most file manipulation tasks for a couple years, and recommend that practice to everyone. mc is a useful step up from direct interaction with the operating system, since it supports working with remote machines through ssh (see also, sshfs). This greatly simplifies some remote admistrative tasks, by seemlessly integrating remote and local management.

mc also helps one keep track of arguments for things like tar by giving them to you in the format of easily readable menus. Perhaps this practice hampers the development of deep UNIX-fu.

screen

Everything happens in screen. It is where all my time is spent. It is almost correct to say that screen is my primary window manager. screen is a terminal multiplexer; that is, it keeps multiple terminal windows (ptys) in the same terminal window. Thus, it is extermely helpful for for cutting down on the number of windows one needs to manage and the tedium of having to move things between various terminals. Ocassionally it can come in handy for 'dumping' the output of a command to a file.

sshfs

sshfs is magic. For most people who have never seen it before, sshfs seems to be a perfect example of Clarke's dictum: "Any sufficiently advanced technology is indistinguishable from magic." What sshfs does is actually conceptually rather simple: it mounts directories on remote file systems to the local file system. This makes working with one or more remote systems much easier.

I use the following script multiple times a day:

#!/bin/bash

# use 'sudo umount ~/sshfs/*'
# to unmount everything

LIST="ctrl-c.club pi cloudbox coxeter"

for d in $LIST; do
    read -p "Do you want to mount $d (Y/[N])?" answer
    case $answer in
        [Yy]* ) sshfs $d:/home/pgadey/ /home/pgadey/sshfs/$d/;;
        * ) echo "Not mounting $d.";;
    esac
done

It assumes a certain set up: Each host is named in ~/.ssh/config/. On each host we have an account with the same username (here pgadey). When run, the script above will prompt to user and ask whether they want to mount each host to a directory in ~/sshfs/ with the same name as the host.

Once the desire hosts are mounted, editing remotely feels the same as working locally. It makes interacting with multiple remote hosts very easy. Now, moving files between various remote machines is as easy as moving them locally. There is no need to invoke scp and its comrades.

i3wm

i3wm is an excellent window manager. It's not awesome, but it's excellent. Its main feature, in my view, is that the configuration file is pretty 'flat'. One doesn't have to learn a new language (Haskell, Lua, C, etc.) to begin configuring i3wm. The defaults are very nice, and well thought out. The documentation is very thorough and readable. It's a tiling window manager for amateurs.

Almost all daily window managing tasks can be done using just the keyboard. One very helpful mechanism that i3wm has for extending its range consists of the ability to define various modes for accepting input. I've added a mode to control cmus, which is very helpful. This music mode allows me to control the music player directly, without having to hunt down the terminal its running in.

Zathura

The killer feature of zathura is its ability to re-colour documents in a dynamic way. I've configured (almost) everything on my computer to display amber text on a black background, and zathura can do that too. The default configuration has vim-like bindings which is nice.

bake

This static blog generator was written by none other than ~philips. It is very nice indeed.

I use bake to generate my folder of notes from markdown source. The pages of notes that I keep are somewhere between a blog, a wiki, and a dump. Bake has made it easy to keep a lot of different projects notated in simple markdown with minimal hassle.

The only point that I can add to ~philips' work is meta-bake:

#!/bin/bash
find . -name 'bakefile' -execdir "bake" {} +

This one liner finds all folders containing a bakefile and runs bake there. This means that making a new statically generated blog consists of copying a bakefile in to a new directory. Moving posts between projects is moving text files around.

The ultra-simple setup of bake has made me use it in strange and novel ways. Now my notes are kept in a loose collection of directories. Each entry is easy to pull up and edit, and so the text of each post tends to grow organically. I can quickly add the smallest detail and meta-bake the whole tree of projects.

For projects that inolve a lot of photos, I keep a directory ./thumbs/ for storing small thumbnails of big pictures. The tool I use to make thumbnails is an ImageMagick tool mogrify:

#!/bin/bash
mogrify -thumbnail 100x100 -verbose -path ./thumbs/ ./*.jpg

vim

Vim is, properly considered, a religion and not a text editor. It's a model for a way of interacting with a computer. It has the steepest learning curve of any part of the usual tool set, but the time learning it is well spent. I edit a lot of LaTeX code, and it is immensely helpful at wrangling some common TeXnical issues.

One can use vim in many styles, and each person develops their own. One thing that influenced by own style of using vim was learning a little bit about ed the standard UNIX editor. Vim is the last in a line of extensions of ed, and one can learn a lot by looking back at its past. ed has very few commands, which are all supported in vim, and one learns a lot of very useful tricks from knowing ed. The main lesson of ed is: don't move the cursor in vim, use line numbers and clever substitutions to make all the edits that you need3.

The Great First Crash

[2016-02-13] Hey folks, I just logged in again for the first time since the Great Crash. I'd like to write up how I felt about the thing, because it was a really firm reminder to me. ctrl-c.club is great. This is a really swell place with great people. Things happen very slowly around here, but everything that does happen is neat. Whenever I look and see that something has happened, it is exciting.

When I first found out that the server was down, it took me by surprise. I thought that the update.html script was on the fritz for some reason. I hadn't touched it in ages and it had no reason to break, but I was pretty confused. When I went over to see if my homepage was still up, I got even more worried. It was dead?! When I found out that ~calamitous had it under control, I was greatly relieved.

It is nice to have this little club of people together on the internet. I really like what people do here. ~philips: you are awesome. You're active on a million things at once, all the time. Keep up the good hurricane of energy. You're ridiculous. ~calamitous: you are a great guy for keeping this thing going. Thanks for hosting this, and making it possible.

[1]Almost everyone who seriously uses Linux gets to the same place.
[2]I know. I know. Newb-untu.
[3]I almost never follow this advice myself, but it builds character.