Tools used for this website

Last edited:

The main plan for this website was to build it using an old netbook, running a small Linux distro, using only terminal tools. Here’s some details about that stuff.

Hardware

As mentioned above, the development machine for this site is a little old netbook that was sat on my shelf for a while. It’s an ‘e-machines’ netbook i.e. it wasn’t even great when it was new with an Intel N450 Atom processor, 1GB RAM and a 10 inch screen one of those shiny things that pick up fingerprints really easily .

If you’re reading this from outside my home network then the site is being hosted from a Raspberry Pi Zero. Yes, the “production” box for the site is even lower powered than the dev box.

The Pi also hosts a couple of other vanity websites and copes quite well with the (admittedly minimal) load. Given that in total it cost about £15 Pi Zero, SD card, wifi dongle, USB shim, PiBow case for a small Linux web server, I think they’re pretty amazing little computers!

Operating System

The Pi is running Raspbian raspbian.org - Get a Pi, get a NOOBS card, have a play, you’ll love it . Not much more to say about that - if you’ve got a Pi you know about Raspbian. They’ve done a great job making my favorite Linux distro work on my favorite little computer.

The laptop is running MX Linux mxlinux.org - Give it a go . This is one of the less well known Debian-based distros, but it seems to have a good reputation for making older and underpowered PCs perform nicely, so I’m giving it a go.

So far it’s doing very nicely, even did a Jessie to Stretch dist upgrade without much complaining. There are a few niggles, mainly with packages that are well known for being a pain NetworkManager, I’m looking straight at you

Software

As the site name suggests a major goal for this site was to create and manage it using only tools available within the terminal - no GUI dev tools, IDEs, etc.

Partly this is for practical reasons. The laptop is not powerful and doesn’t have much spare disk space, so terminal tools are noticeably more responsive and reliable.

Also most dev tools and processes are inherently commandline based anyway. Even when using GUI tools there’s often still a commandline based process going on behind the scenes.

Importantly, if you can do it on a commandline, you can automate it. You can also do it over SSH and in any other situation where a full dev environment isn’t available.

A final reason is that I’ve spent many years using various GUI dev tools, so I thought it’d be a challenge and good for my soul to go back to a commandline. Hopefully it’ll also improve my typing and maybe even help me focus on the content.

Jekyll

Jekyll is a static site generation tool. That means it “compiles” the site you work on into the HTML+CSS+JS that gets served as a website.

The site pages are created as Markdown text, using Liquid as the templating framework, which is written and extended in Ruby. The styling is written as SCSS files and the Javascript is, well, just Javascript for now.

“Compiling” the site (“jekyll build”) converts the Markdown/templating into HTML pages and the SCSS into CSS. The resulting files, along with any Javascript/images/etc are copied into a target directory.

The resulting site can be served via a local web server from the target directory or copied across to a production server I’ve set up a script to build and rsync the target to the Pi server . For local dev, Jekyll can also start a minimal web server just to serve the target directory (“jekyll serve”) and monitor the site content for changes to rebuild.

Jekyll is the first static site generator I’ve used. Until now my site development has either been small static sites created directly as HTML+CSS+JS files, or large dynamic sites constructed as “web apps”. This “create dynamic, serve static” approach is new to me, but very appealing.

tmux

This was another new tool for me to play with for thisa project. I’ve used the older “screen” Unix tool before, but tmux appears to be a nicer and newerr approach to the same kind of job.

Essentially it lets you run multiple terminal sessions within a single terminal, using panes to tile the sessions on a single screen. If you’ve used or seen a tiling window manager before, same thing, only no window manager :-)

I’ve only scratched the surface of what tmux can do (haven’t tried sharing sessions across different ssh sessions or users, for example) but it feels like a very neat way to “window-ify” any terminal.

nano

Yes, I know about Vi and Emacs, I’ve used them both in the past. But Emacs makes my brain hurt and Vi just annoys me. Nano is simple and installed by default on almost all the Linux boxes I deal with these days.

Also there’s a Markdown syntax highlighting file for it, so I at least get pretty colours while I’m writing all this nonsense.

Tufte Jekyll Theme

Jekyll has a massive number of themes available. I thought I’d probably go for one of the styling frameworks I’ve used before: Bootstrap or Foundation. However, I noticed one which was named after Edward Tufte.

The Tufte Jekyll theme is built on some raw CSS styles called tufte-css which in turn are based on the original styling rules professor Tufte uses for his books and presentations.

If you haven’t heard of Edward TufteEdward Tufte is his website and his books are available all over the place. before and you create any kind of design, documentation or information displays, go read and look at some of his writing, it’s amazing.

Tools used for this website - Adam Carless