In my primary job I use PC’s running MS Windows (required for CAD, mostly SolidWorks these days), but for personal projects I use Linux (Grml, a Debian based distro). I like the power and flexibility of using Free/Open-Source software, and prefer the minimal low-distraction interface of a character-cell terminal running cli and ncurses applications. I typically use the framebuffer console running applications like Mutt, Vim, ELinks, w3m, mpd and vfu inside a Screen session. I’ve found this to be a rather fast, resource-efficient and usable setup. When the need arises for graphical applications, the i3 window manager does the job. My configuration files and shell scripts are on Github: github.com/b79
Below is a smattering of computer & software related links I’ve found to be fun and useful. In some cases I’ve included my config files, notes, links to project home pages, wikis, email-list archives, etc. The software linked here has (to me) an optimal combination of usability, functionality & minimal resource usage. Unless otherwise noted it is all is Free/Open-Source software. Places to search for more of such software would be the Debian packages repository, the FSF Software Directory, SourceForge, Freshmeat, Github, Gitorious (like Github, but more project-based & built on an open source infrastructure)…or just browse through the man pages.
Here “free” refers not 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), founded the GNU Project (“gah-new”), and founded the Free Software Foundation (FSF). More about Stallman and the free software movement can be found in the books Free Software, Free Society and Free as in Freedom. The GNU project was launched to develop a complete UNIX-like operating system comprised entirely of free software, and the GPL is one of the most widely used licenses for free and open source software today. Under the GPL license, any user can change the code (add features, fix bugs, etc.), and if the changes are used publicly, provides the author and all other users access to these changes. | Free Software Movement | What Is Free Software | Free Software Definition, Licenses, GPL v2.0, GPL v3, GNU Project Philosophy | GPLv2 vs GPLv3 (pdf) |
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 “private” into a closed proprietary code base. Apple’s OS X operating system for example, utilized the BSD UNIX system, but not all the changes they made to it are released openly for others to use. The Linux kernel on the other hand was released under the GPL v2.0 license, and so any changes made to it and used publicly must be released for others to use. The Open Source Initiative (OSI) was founded in 1998, professing a more pragmatic approach in contrast to the philosophical idealism of the FSF, using the term “Open Source Software” rather than “Free Software”. The Cathedral and the Bazaar is well-written introduction to the Open Source development model. | BSD License | Why use a BSD style license, comments | OSI, Definition, Licenses | Comparison of licenses | License Quick Reference Chart |
Explanation of free and open source software, comparison of various licenses (groklaw).
O'Reilly Open Book — full text freely available on line (in PDF)
…How to Make the Source Free or Open
An initiative of the United Nations Development Programme (UNDP)
From IBM’s website, for developers making the transition to Linux
Similar to Free/Open-Source licensing, but for human-language (fiction, non-fiction, etc.) writings.
Interactive forum for dissemination and discussion of legal news concerning information technology, a production of the Berkman Center for Internet & Society at Harvard Law School.
Electronic Frontier Foundation - “lawyers, volunteers, and visionaries working to protect your digital rights.”
Systems / Infrastructure
An operating system 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 | Evolution | History | The UNIX wars | Timeline & links | Open Systems | UNIX Specification |
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 software components forms a complete operating system, or distribution (distro). :: Intro to Linux :: Linux Kernel :: Kernel Homepage :: Top 10 Distros :: Comparison of Distros :: DistroWatch :: TLDP HOWTOs ::
A Linux distribution committed to free (as in freedom) software. Extensive, knowledgeable global community. Large collection of software packages. Some Debian-based distributions that look interesting to me are Grml, AntiX, Aptosid and Siduction. Currently I use Grml installed to disk via grml2hd, but reading this makes me think using smxi and installing straight Debian could be a good option. | Debian | Debian Doc Project | wiki | packages | mail-lists | aboutdebian | debian-administration | Debian System |
The 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 also interprets mouse and keyboard input events and sends them back to the X client program. The Development of this, the X Window System, began at MIT in 1988. Today it is the de facto means for running GUI applications on Linux and UNIX systems. The most widely used implementation of this system is sponsored by the X.Org Foundation. | X.org | FAQ | mail-list | Xorg(1) | xserver(1) | xprop(1) |
A tiling window manager, this is what I use when I run X. Having tried a variety of window managers (ion, wmii, fluxbox, IceWm, Xmonad…), I’ve settled on i3. I find it to be lightweight, well-designed, well-documented and actively developed by a smart & friendly community. And though I haven’t spent too much time configuring it yet (mostly I just use it to run Firefox or Chrome full-screen), I found the defaults to be comfortable & sane.
AKA “virtual console” (VC) or “virtual terminal” (VT), this emulates a character-cell terminal. A typical Linux system has seven VTs numbered tty1 - tty7 (tty referring to old-school teletype machines), allowing separate logins on each VT. The most anyone will use a VT for is to just log in and start up a graphical interface (if that — most systems will automatically start up the X Window System at boot), but there is a lot that can be done within a console without even starting X. Particularly with a framebuffer console (rather than a plain VGA console), which allows for the display of images & movies as well as a wider range of font sizes, a larger number of glyphs in a given font, and more control over colors. | console(4) | console_codes(4) | gpm(8) | The Linux Console | Linux Console Project | Framebuffer HOWTO | Video-Terminal Info |
A utility for adjusting the color palette of the Linux console using escape codes. Switch between multiple color themes. Create special effects like a “blended flash” (fade from one color to another). Below are a few themes I made up (remove the .txt file extension before using them). | homepage | d5, d6, l2, l3 |
A terminal multiplexer, runs in a console or terminal emulator creating multiple full-screen windows with a virtual terminal in each one. 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”. And although I’ve heard a lot of good things about tmux, for now screen serves me well. | homepage | wiki | mail-list | my .screenrc |
Provides a more “graphical” user interface for text mode consoles & terminals, similar to a GUI, but using text and symbols rather than individual pixels to compose the display. This is known as a TUI (Textual User Interface). ncurses is a programming library providing an API (Application Programming Interface) that allows character-cell terminals to behave more GUI-like, providing multiple windows, colorful layouts, mouse usage, etc. Some programs that use ncurses are vim, mutt, irssi & ELinks. | homepage | FAQ | announcement | programming howto |
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. The Grml distribution comes with a great default Zsh configuration, and fortunately work is under way to package this up in a stand-alone Debian package. | homepage | wiki | mail-list | zsh-lovers |
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 |
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! | homepage | user guide | man page | deb |
A console (text-mode) file manager for UNIX/Linux. Fast one-key commands, filename completion & wildcard expansion, file-type colorization, shows directory tree with sizes…and more. Mostly I use it as a quick way to zoom around directory trees and look at files. To navigate with the cursor keys, type ‘o’ while running vfu and set the ‘lynx style navigation’ option to ‘YES’. To exit to the shell in the directory you’ve navigated to, set a function in your bashrc or zshrc as described in the vfu FAQ ‘How can I exit to new directory from vfu’. | homepage | deb | vfu.conf | dir_function |
A pager, for viewing text files in a terminal. Lots of handy features: render html and groff files, view compressed files, search text using regular expressions, customize key bindings. When viewing a file you decide you’d like to edit it, just press ‘v’ and the file will be loaded in your default editor for editing. Very convenient! | homepage | FAQ | less(1) | deb |
Highly configurable, efficient text editor, evolved from the vi editor. Friendly, knowledgeable & very active community, open source & free. Available for Unix, Linux, Macintosh, MS-DOS, MS-Windows, Amiga, OS/2, 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 largely influenced by reading My life with text editors. | homepage | documentation | FAQ | manual | wiki | mail-list | my vimrc |
A typesetting system capable of generating high quality output suitable for the professional publishing of books. 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 |
A TeX-based typesetting system developed by Hans Hagen at Pragma ADE. ConTeXt is well suited to desktop publishing, and generates high-quality PDF output — 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, ie, you can write a document mixing ConTeXt and TeX syntax (LaTeX isn’t compatible in this way). | homepage | help page | documentation | mail-list | Pragma ADE |
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 |
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 (it’s what Reddit uses).
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, LaTeX, ConTeXt, groff man, RTF, DocBook XML, and S5 HTML slide shows. Very active and knowledgeable community.
A character-cell terminal requires the use of monospaced fonts, and in the
Linux Console, only bitmap fonts can be used. Because no anti-aliasing is
involved — just a rectangular grid of on/off pixels — bitmap fonts
are less computationally intensive to render. This is less of an issue these
days given how powerful even small pocket computers have become…but on a
stripped-down system running in a Linux console, a well-designed monospaced
bitmap font is key to providing a usable interface that’s easy to look at for
extended periods of time. Below are listed what I’ve found to be some of the
most readable monospaced bitmap fonts. One challenge I’m finding is that as
screens move towards higher and higher resolutions, fonts are 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 a need for a larger font. This drove me to create the
SGI Screen fonts
These fonts, designed under the auspices of Silicon Graphics and released
under the X/MIT license, are some of the nicest, most readable bitmap
monospaced fonts around. I grabbed the 9x18 size from
this page 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
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 a new ThinkPad’s higher screen resolution rendered it too small. | screenshot | crispy-8x16.psf | crispy-8x16.txt | crispy-8x16.notes.txt | original ttf version |
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 |
More bitmap console fonts…
The console fonts listed above are what work best for me, but this is a matter of taste, here are some more to check out. Terminus comes in a wide range of sizes, covers many language & encodings and looks nice, but to me it’s a bit too square and lacking in “white space”. Tamsyn comes in a wide range of sizes and looks ok, but I still prefer the Crisp & SGIScreen fonts that I customized. Tamsyn does strike me as a good effort and is actively developed. The sheldon & profont fonts look interesting in the small sizes, but the larger sizes strike me as a bit too “blobby” and spaced out. Zevv-peep is a very nice 8x16 font…had I discovered it earlier I might’ve used it instead of Crisp. Sigma-consolefonts are a bit too “blocky” for my taste, with not enough white-space, but cover a wide range of language sets including Cyrillic, Vietnamese and some African glyphs (also see this page). The 8x14 Lisp Machine main console font is a recreation of the console font used in the Lisp Machines of yore. Intlfonts are “International fonts … for all characters that Emacs 20 can handle…classified into several categories (e.g Asian, European), with one sub-directory for each category.”
…and some non-bitmap monospaced fonts
Vector fonts — defined by curves rather than a grid of pixels — can be
smoothed with anti-aliasing and scaled to a range of different sizes. For very
small font sizes I still think bitmap fonts can look better, but when using a
terminal emulator like xterm or a gui text editor, vector fonts make a lot of sense.
Here I’ll list just a few free vector monospaced fonts that I like.
DejaVu Sans Mono, part of a family of
fonts that includes serifed and sans proportional fonts, covers a wide range of
characters and is under a free license.
Droid Sans Mono is part of a family of fonts designed for use with the Android mobile operating system.
Licensed under the Apache License, you can find them on
this github page
or within Debian you can install the fonts-droid
[Fonts, Typography, Encodings]
A lot of info & links about typography and fonts on this site!
An outline font editor, allows you to create and modify PostScript, TrueType and OpenType fonts, save fonts in many different outline formats, and generate bitmaps. Open source, runs in the X Window System (X11), under Linux, OS X, and MS-windows (via cygwin).
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.
“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.”
“The Open Laboratory for exchanging information about electronic fonts. We also develop electronic fonts and related programs.”
“How to improve X Window fonts. Various tips for improving font handling for XFree86, including sections on TrueType fonts, Mozilla, font servers and related topics.”
“Unicode and Multilingual Support in HTML, Fonts, Web Browsers and Other Applications” Includes lists of characters to test the Unicode support of your Web browser and fonts.
Sound / Music
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. Basically, this is the closest thing to something like iTunes that runs in a text console.
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 | manpage |
“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 | config, keymap, color theme |
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 | documentation | manpage | mail-list |
Internet / Web
An organization charged with developing common protocols for the World Wide Web. Check out the specifications for HTML 4.01, XHTML 1.0, HTML 5 (in progress), CSS 2.1, and CSS3 selectors (proposed). Tip: download these documents for handy, comprehensive off-line HTML & CSS references.
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.
Concise guide for looking up the correct forms of tags when creating Web pages.
Lots of information on HTML and CSS
Character code issues, special characters in HTML, character problems in web authoring, ASCII control codes, ISO 8859 character sets, guide to the Unicode standard, characters in SI notations
Articles, FAQ’s and other resources on a range of internet related technologies.
“…explores the design, development, and meaning of web content, with a special focus on techniques and benefits of designing with web standards.”
Online book covering many aspects of website design
What the DNS is and the importance of universal resolvability.
A list of international top-level domains by country, including links to sponsoring organization’s name, and technical and administrative contacts.
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.”
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.”
Links to hundreds of different points of access for the traceroute utility, probe the paths data packets take through the Internet.
An essay on the global net of cables and wires spanning the continents and oceans, connecting the world wide web.
“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 |
Coalition Against Unsolicited Commercial Email
Wikipedia entry on the what, why, where & how of spam…lots of detailed information.
Image processing and analysis, Open Source Java application, Mac OS X & OS 9, Linux and Windows.
Open source mapping software for generating maps, UNIX application requiring command line input. A gui option is provided by iGMT, with an X11 window interface. Online Map Creation is a web based application of GMT running on a server.
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, General Public License (GPL), available for Windows, UNIX and OS X.
Plans and software for do-it-yourself EEG biofeedback devices, available for free (GPL).
Discussion of ways to use Linux computers as a means to protect our environment, using its features to save power or paper, and making use of old computers.
Discussion of how to make more efficient use of computer resources, advocating the environmental advantages of using light, small, efficient software over ‘heavier’ software.
Discussion of the need to develop software more attuned to the long-term needs of society.
What grid is and how it’s different from other technologies such as Clusters and P2P. A directory of applications using Grid computing can be found at EnterTheGrid.
Scientists control a single electron’s spin in an ordinary commercial transistor chip “With 100 transistors, each containing one of these electrons, you could have the implicit information storage that corresponds to all of the hard disks made in the world this year, multiplied by the number of years the universe has been around” Evidently it has something to do with a qubit.
Publisher of quality computer reference books.
Saturn’s C and B Rings From the Inside Out, a recent image from the Cassini mission. Try the 200.4 kB jpeg.
A computer keyboard with excellent ergonomics. Takes a little while to get used to, but very comfortable to use.
“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.