Computer Stuff

Though it’s mechanical design & manufacturing I do by trade, not software or IT, I do enjoy using interesting well-crafted tools and in the realm of computers and software there is much to explore. Below is a smattering of computer & software related links I’ve found to be fun and useful. Some of my config files and shell scripts are here: github.com/b79

My day job requires the use MS Windows for its Office suite and CAD (SolidWorks these days). Back in 2003 I bought my first home computer, an iMac. The hardware/software integration and attention to detail was refreshing. I wrote the first version of this website on that iMac, typing up raw HTML and CSS in the BBedit text editor. At some point I installed the X Window System and started trying out various UNIX software, which led to an interest in Linux. In 2005 I got my first laptop (Dell, Pentium II… 96 Mb of RAM!) and installed Arch Linux. Since then I’ve run Linux on my personal machines, mostly Debian, though in spring of 2023 I switched to OpenSUSE Tumbleweed. My setup centers around a text terminal (XTerm) running the tmux terminal multiplexer spawning terminals for running CLI / curses applications like Mutt, Zsh, Vim, Emacs, w3m, ncmpcpp, vifm etc. I like the flexibility and control that can come from using Free/Open-Source software, being able to dial in a minimal low-distraction interface that conforms to my needs.

Licensing

Free Software

Not to be confused freeware, here “free” refers not to price but to freedom — the freedom to run, copy, distribute, study, change and improve the software. The Free software movement was founded in large part through the efforts of Richard Stallman, who wrote the General Public License (GPL). Under the GPL license, any user can change the code (add features, fix bugs, etc.), and if the changes are used publicly, the author and all other users will have access to these changes. The GNU project was launched to develop a complete Unix-like operating system comprised entirely of free software.
Free as in Freedom :: Free Software Movement :: Licenses :: GPL v2.0 :: GPL v3 GNU Project Philosophy

Open Source Software

Other approaches to software licensing focus more on the “open source” aspect of the code without requiring that all changes be made public. The BSD license for example allows code to be released for others to use however they wish, even taking it into a private proprietary code base. Additionally, software can be under entirely proprietary licenses which limit the end-user’s ability to modify and distribute the code.
Open Source Licenses :: BSD License :: Why use a BSD style license :: MIT License :: Comparison of licenses

Creative Commons Licenses

Similar to Free/Open-Source licensing, but for shared knowledge and culture beyond the realm of software (human-language fiction, non-fiction writings, etc.).

Operating Systems / Software Distributions

UNIX

A type of operating system first developed by researchers at Bell Labs. The first code for what would become UNIX was written in the summer of 1969, and the first commercial applications occurred in the early ’70s when it was used to support telephone company operations. Today, UNIX is widely used throughout the infrastructure of our society. It has a modular structure, utilizing many small tools that can be combined many different ways, providing much power and flexibility.
History & Timeline :: The Invention of Unix :: The UNIX wars :: Timeline & links :: Open Systems :: UNIX Specification

Linux

A Unix-like operating system kernel, written from scratch by Linus Torvalds and a distributed team of programmers from around the world. What’s a kernel? It’s the essential component of an operating system that manages communication between hardware and software. The kernel combined with an appropriate collection of software components forms a complete operating system, or distribution (distro).
Intro to Linux :: Linux Kernel :: Linux Kernel Homepage :: Comparison of Distros :: Linux HOWTOs

Debian

A Linux distribution committed to free software. Extensive, knowledgeable global community. Large, comprehensive collection of software packages. The debian-based Grml distro was what I first used to install Debian to disk via grml2hd. Though I’m happy with OpenSUSE Tumbleweed right now, I plan to set up an alternate machine running Debian.
Debian Doc Project :: Debian wiki :: mail-lists

OpenSUSE

The community-supported distro sponsored by SUSE, the German-based company that develops SUSE Linux Enterprise. My current Linux distro of choice is OpenSUSE Tumbleweed, the rolling release version of openSUSE. I find it to be a bit more stable than Debian Unstable or Testing, with Tumbleweed also bringing the advantage of being able to roll the Btrfs filesystem back to a previous snapshot using Snapper undo changes if an update happens to break anything. With this, the system can be updated regularly knowing it can always be rolled back to a previously known good state if need be. I put my home directory in an ext4 partition thinking Btrfs was not 100% stable, but doing a bit more reading on filesystems, I gather Btrfs is quite stable (apparently Facebook’s production network runs on btrfs). As Btrfs has advanced features such as file-data check-summing to report bad sectors, maybe I’ll revisit my filesystem choice at some point.
Documentation :: OpenSUSE Wiki :: Mailing Lists

Software Applications

X.org

A server that handles the input and output for programs (X clients) running on UNIX and Unix-like operating systems that require a GUI (Graphical User Interface) for interaction. The X server “draws” graphics on the screen and interprets mouse & keyboard input events and sends them back to the X client program. The Development of the X Window System began at MIT in 1988 and became the de facto means for running GUI applications on Linux and UNIX systems. More recently, the Wayland Display Server has been gaining traction as a replacement, though not all applications are compatible with Wayland.
X.org :: mail-list

Wayland

“Wayland is a replacement for the X11 window system protocol and architecture with the aim to be easier to develop, extend, and maintain. Wayland is the language (protocol) that applications can use to talk to a display server in order to make themselves visible and get input from the user (a person). A Wayland server is called a “compositor”. Applications are Wayland clients.”

KDE Plasma Desktop

A desktop environment (displays windows, toolbars, icons and desktop widgets, launches programs, etc.) created by the KDE international free software community. Runs under both the X Window System and Wayland. An alternative to KDE is Gnome, which is also quite popular. It comes down to personal preference, but I prefer the KDE for it’s more classic understated no-nonsense look.

Vim

Highly configurable, efficient text editor, evolved from the vi editor. Friendly, knowledgeable & very active community, open source & free. Available for UNIX, Linux, Mac, MS-Windows and other platforms. My first exposure to free/open-source software was using Gvim on an iMac. My decision to settle on using the Vim editor was inspired by reading My life with text editors.
homepage :: FAQ :: manual :: wiki :: mail-list

cwm window manager

“cwm is a window manager for X11 which contains many features that concentrate on the efficiency and transparency of window management, while maintaining the simplest and most pleasant aesthetic.” This is what I used most recently before switching over to the KDE Plasma desktop environment.

i3 tiling window manager

I used this prior to cwm. You might want to check it out if you like using a tiling window manager. There is also the Sway window manager, which runs under Wayland and is a drop-in replacement for i3.

tmux

“tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached.” A terminal multiplexer is very useful if you spend much time at all working in a text terminal. I use it as a sort of text mode “window manager”. I used GNU Screen a whle back, but switched to tmux for its better unicode support and configurability.
tmux github :: tmux mailing list

GNU screen

A terminal multiplexer, runs in a console or terminal emulator creating multiple full-screen windows with a virtual terminal in each one.
homepage :: wiki :: mail-list

zsh

Powerful interactive shell. What’s a shell? It’s the program that interprets the command you type in & passes them to the operating system — the UI of a command line interface.

mutt

“Small but very powerful text-based mail client for UNIX operating systems”. Steep learning curve, takes a while to configure, but worth the effort. Another option is Pine, now known as Alpine. Here is an interesting comparison of Mutt versus Pine. Mutt wiki :: Mutt mail-list

rsync

An incremental file transfer program. Because it copies only the parts of files that have changed (rather than the whole files), it can synchronize files and directories between two locations quickly and with minimal data transfer. Useful for backing up, mirroring whole directory trees and filesystems. For example, synchronizing a website on a remote server to the master copy on your local machine.
homepage :: documentation :: man page :: mail-list :: tutorial

ncdu

A fast way to browse directory trees and see which directories are using how much space and interactively delete files & directories. An ncurses application, runs in a text terminal. Very handy!

w3m

A text mode web browser & pager. Fast, lightweight, a quick way to browse the web without leaving the terminal. Also useful for paging plaintext files (tip – press : when paging a file that has plaintext urls and they become links that w3m will follow). Opens multiple pages in tabs, renders frames & tables, runs cgi scripts locally (to test html output withput a webserver), SSL support, cookie support, Japanese language support, displays inline images.
homepage :: manual :: mail-list

HTML tidy

A utility to clean up HTML/XHTML/XML. Corrects coding errors and generates a visually clean, indented W3C compliant markup.
documentation :: quick reference :: overview

Ncmpcpp

An ncurses mpd client music player inspired by ncmpc. Provides new useful features such as support for regular expressions in search, extended song format, items filtering, last.fm support, ability to sort playlist, local filesystem browser and other minor functions. Think of it as something like an iTunes that runs in a text console.

abcde

A command-line audio CD encoder. With one command, abcde can convert each track on a CD to the format of your choosing (Ogg/Vorbis, MPEG Audio Layer III, FLAC, Ogg/Speex, MPP/MP+, and/or M4A), query CDDB, and name each track. abcde is a shellscript frontend to to a variety of other applications (cdparanoia, wget, cd-discid, id3), with features such as outputting multiple encoding formats from a single CD read, creating a single track from a CD, gapless encoding, volume normalization, CD concatenation, customized filenaming, playlist generation and more.
homepage :: mailing list :: tutorial

moc

“Music on Console”, an audio player that runs in a console or terminal emulator, consisting of a client and a server. The client can be detached while the server continues to run, freeing up the console without interrupting the music. Features include gapless playback, playlists, user defined keys and color themes. Supported file formats: mp3, Ogg Vorbis, FLAC, Musepack (mpc), Speex, WAVE, FFmpeg (WMA, RealAudio, AAC, MP4), AIFF, AU, SVX, Sphere Nist WAV, IRCAM SF, Creative VOC. Another interesting option is cmus, but overall I prefer moc as a basic tool for playing audio files.
homepage :: README :: forum

mplayer

A media player capable of playing a very wide variety of video and audio formats. Plays CDs, DVDs, Video CDs, Internet Radio streams and more. It can transcode a given input format into several different output formats. Primarily a command line application — you can watch movies in a framebuffer console without starting up X — but there is an optional GUI (gmplayer), as well as a variety of control options: keyboard, mouse, joystick or remote control.
homepage :: FAQ :: manpage

TeX

A typesetting system capable of generating high quality output suitable for professional publishing. Written by Donald Knuth to address the challenges of displaying mathematical and scientific formulae, it can be used for a variety of typesetting tasks. Typically, documents are not written in plain TeX, but rather using a TeX based system such as LaTeX, AMS-TeX or ConTeXt. The output format can be DVI, PostScript, or PDF.
Don Knuth’s TeX page :: TeX Users Group :: Wikipedia entry

ConTeXt

A TeX-based typesetting system developed by Hans Hagen at Pragma ADE. ConTeXt is well suited to desktop publishing, generating high-quality PDF output — both interactive and print. ”…designed with the same general-purpose aims as LaTeX, but being younger reflects much more recent thinking about the structure of the markup…ConTeXt gives more control to the ‘end user’…easier to create new layout without learning TeX macro language.” Has the advantage of being compatible with Plain TeX, i.e., you can write a document mixing ConTeXt and TeX syntax (LaTeX isn’t compatible in this way).
homepage :: beginners help page :: documentation :: mail-list :: Pragma ADE

Markdown

An easy-to-read, easy-to-write plaintext syntax developed to make it easy to write for the web. The original defining implementation—a Perl script that converts this format to HTML—was created by John Gruber along with SmartyPants, a companion script for translating plain ASCII punctuation characters into “smart” typographic punctuation HTML entities. The markdown format has gained a fair degree of popularity, to the point where there are many converters to choose from. I tend to use discount, which is implemented in C and is quite fast, or Pandoc which is quite flexible.
mail-list :: original implementation :: SmartyPants

Discount

A markdown to HTML converter written in C. Implements all of the language described in the original Markdown syntax document and passes the Markdown 1.0 test suite. Also includes SmartyPants’ functionality, and is quite fast.

Pandoc

A general markup converter, converts files from one markup format to another. It can read markdown and (subsets of) reStructuredText, HTML, and LaTeX, and it can write markdown, reStructuredText, HTML, EPUB, LaTeX, ConTeXt, groff man, RTF, DocBook XML, S5 HTML slide shows… this is an amazing and super-useful tool! Very active and knowledgeable community.

Celestia

Real-time space simulation of a 3-D universe, travel throughout the solar system, to any of over 100,000 stars, or beyond the galaxy… Free / Open Source, available for Windows, Linux, and macOS, iOS and Android.

Stellarium

“Stellarium is a free open source planetarium for your computer. It shows a realistic sky in 3D, just like what you see with the naked eye, binoculars or a telescope.” Can also interface to hardware and be used as a front-end for orienting telescopes, read more about that here.

ImageJ

Image processing and analysis, Open Source Java application, Linux, macOS, Windows.

GMT (Generic Mapping Tools)

Open source mapping software for generating maps. Available on Windows, macOS, Linux and FreeBSD. Source and binary packages available on GitHub.

Fonts, Typography, Encodings

A text terminal typically requires the use of monospaced fonts, and the Linux Console only allows monospaced bitmap fonts to be used. When I was first getting into using Linux, I experimented for a while doing everything text-mode in the Linux Console. Though it’s been a long while since I’ve self-imposed such constraints, I still spend a fair amount of time in a text terminal, so I find a well-designed monospaced font is key to a usable interface that’s easy to look at for extended periods of time. And even on higher-resolution displays, I find a bitmap font with anti-aliasing turned off provides for a more crisp, readable font.

Below are listed what I’ve found to be some of the more readable monospaced bitmap fonts. One challenge I found is that as screens moved towards higher and higher resolutions, the bitmap fonts I was using kept getting smaller and harder to read. The 8x16 Crisp font was fine on my 1024x768 ThinkPad X40 at a pixel density of 105 ppi, but after transitioning to an X200s with a 1280x800 125 ppi display I found the need for a larger font. This drove me to create a customized sgiscreen-9x20 font, which was just big enough. I declined the option to get a 1440x900 141 ppi display, as I felt the 9x20 font would be too small, and its one-pixel line widths were already getting a bit thin at 125 ppi. As I moved to higher resolution displays the solution was to use the PragmataPro font, which is available in a wide range of sizes.

PragmataPro

An excellent monospaced font by the Italian typographer Fabrizio Schiavi. This is what I use currently — its narrow width fits more text onto the screen, it does a good job of disambiguating similar characters (1, l, I, 0, O) and is very readable. There are other free / open source options, but unlike Iosevka, PragmataPro includes hand-crafted bitmapped fonts in a range of sizes, which I find makes for a very sharp and readable font. It’s not free, but is in my option well worth the price.

SGI Screen fonts

These fonts, designed under the auspices of Silicon Graphics and released under the X/MIT license, are in my opinion some of the nicest, most readable bitmap monospaced fonts around. I grabbed the 9x18 size from this (now extinct) webpage and customized it a bit to suit my tastes, adding box drawing characters, a few other characters to better cover the European alphabets, slightly changing the shapes of a few characters, scooting things left & right to make for more even spacing. I called this modified version sgiscreen-9x20.psf. This was my favorite Linux Console font for a while, but I found it to be a bit thin on higher-resolution displays, especially when displaying dark text on light background. I considered tweaking the 10x18 bold version of this (ScrB18) for a font with thicker line widths, but never got around to it. The original fonts can also be found here (pcf format).
screenshot :: sgiscreen-9x20.psf :: sgiscreen-9x20.txt :: sgiscreen-9x20.notes.txt

Crispy

I found the 8x16 Crisp font on the Proggy Programming Fonts page, converted it to a psf format, added box drawing characters and other glyphs to better represent the ISO Latin-1 Character Set, changed the shapes of a few characters (changed the numeral 9 which looked a bit too much like a lowercase g), and named this modified version “Crispy”. I like how the characters in this font have more space around them…less crowded and more comfortable to read. I used this as my primary console font for years until higher resolution screen rendered it too small.
screenshot :: crispy-8x16.psf :: crispy-8x16.txt :: crispy-8x16.notes.txt :: original ttf version

Proggy

I find this 7x13 font to be the most readable console font in this size (which is about as small as I’d want to go on today’s high resolution displays). I grabbed the ProggyClean version (with the dotted zero) from the Proggy Programming Fonts page, converted it to the psf format, and added a few characters.
screenshot :: proggyclean-7x13.psf :: proggyclean-7x13.txt :: proggyclean-7x13.notes.txt

Iosevka

“An open-source, sans-serif + slab-serif, monospace + quasi‑proportional typeface family, designed for writing code, using in terminals, and preparing technical documents.”
More than just a font, but also a framework for creating a customized typeface. Per Wikipedia:
”…built declaratively using custom typeface generation software, and with an emphasis on compatibility with CJK characters … available under a FOSS license … easily configurable by editing textual TOML configuration files in the custom generation software … character repertoire covers a significant portion of the Basic Multilingual Plane of Unicode”
github :: Build from Source :: Customizer tool

Cozette

“Cozette is a 6x13px bitmap font based on Dina, which itself is based on Proggy. It’s also heavily inspired by Creep. I absolutely adore Creep, and was using it up until I got a higher-DPI screen for which it was slightly too small. That prompted me to make the bitmap font I always wished existed: Cozette; a small-but-not-tiny bitmap font with great coverage of all the glyphs you might encounter in the terminal…” — nice, seems to have decent coverage. Good option to keep in mind for a free (MIT licensed) bitmap programming font.
Downloads :: Screenshot

Lisp Machine main console font

A recreation of the console font used in the Lisp Machines of yore.

Free UCS Outline Fonts

“This project aims to provide a set of free outline (PostScript Type0, TrueType, OpenType…) fonts covering the ISO 10646/Unicode UCS (Universal Character Set)…released under GNU GPL.”

Gentium

Free multilingual serifed font, a typeface family covering a wide range of Latin-based alphabets, includes glyphs that correspond to all the Latin ranges of Unicode. Archaic Greek symbols and full Cyrillic script support as well.

On snot and fonts

A lot of info & links about typography and fonts on this site! The site is longer actively developed, but all its “encyclopedic treatment of type design, typefaces and fonts” remains, fully searchable. Apparently the author had to halt work on this site in 2022 after a terrible bicycle accident. As a fellow bicyclist I wish him the best in recovery. His website is a great typography resource.

Programming Languages

There are many programming languages to choose from. Some of the more popular choices are C, C++, Python, Java, Javascript and Go. Here are a few that I find interesting. Of these, likely Babashka is what I’ll be using in the immediate future, as an alternative to shell scripting.

https://fennel-lang.org/

https://clojure.org/

https://babashka.org/

https://www.scryer.pl/

https://mlochbaum.github.io/BQN/

Internet / Web

The World Wide Web Consortium (W3C)

An organization charged with developing common protocols for the World Wide Web.
HTML Standard :: HTML 4.01 :: CSS3 selectors

A List Apart

“For People Who Make Websites … A List Apart explores the design, development, and meaning of web content, with a special focus on web standards and best practices.”

Web Style Guide

Comprehensive online book covering many aspects of website design, full-text available under the CC BY-NC-SA license. Also available as a physical book.

Domain Name System

What the DNS is and the importance of universal resolvability.

Country-Code TLD WhoIs

A list of international top-level domains by country, including links to sponsoring organization’s name, and technical and administrative contacts.

The Internet Society

Organization home for the groups responsible for Internet infrastructure standards ”…provides leadership in addressing issues that confront the future of the Internet…to assure the open development, evolution and use of the Internet for the benefit of all people throughout the world.”

ICANN

Internet Corporation for Assigned Names and Numbers ”…responsible for IP address space allocation, protocol identifier assignment, generic and country code Top-Level Domain name system management, and root server system management functions.”

Traceroute

Links to hundreds of different points of access for the traceroute utility, probe the paths data packets take through the Internet.

Mother Earth Mother Board

An essay on the global net of cables and wires spanning the continents and oceans, connecting the world wide web.

Misc

Software That Lasts 200 Years

Discussion of the need to develop software more attuned to the long-term needs of society.

A Nice Screensaver Image

Saturn’s C and B Rings From the Inside Out, an image from the Cassini mission. Try the 200.4 kB PIA05076.jpg.

Kinesis Advantage2 Keyboard

A computer keyboard with excellent ergonomics. Took me a little while to get used to, but very comfortable to use. I have two of the older models, from back when they were called the “Contoured Keyboard”.

Hole in the Wall

“We gave access to state-of-the-art personal computers to several thousand children in urban and rural India. The computers were placed outdoors, usually mounted on walls and, hence, often referred to as ‘Hole-in-the-wall’”. Minimally invasive education experiments conducted by NIIT back in 1999. Also see this Paper [PDF].