Computer Stuff

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.

Free/Open-Source Software

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 MovementWhat Is Free SoftwareFree Software Definition, Licenses, GPL v2.0, GPL v3, GNU Project PhilosophyGPLv2 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 LicenseWhy use a BSD style license, commentsOSI, Definition, LicensesComparison of licensesLicense Quick Reference Chart |

Understanding Open Source Software

Explanation of free and open source software, comparison of various licenses (groklaw).

Understanding Open Source and Free Software Licensing

O'Reilly Open Book — full text freely available on line (in PDF)

FOSS Licensing

…How to Make the Source Free or Open

International Open Source Network

An initiative of the United Nations Development Programme (UNDP)

Windows-to-Linux roadmap

From IBM’s website, for developers making the transition to Linux

Creative Commons Licenses

Similar to Free/Open-Source licensing, but for human-language (fiction, non-fiction, etc.) writings.

Greplaw

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.

EFF

Electronic Frontier Foundation - “lawyers, volunteers, and visionaries working to protect your digital rights.”

Systems / Infrastructure

UNIX

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 & TimelineEvolutionHistoryThe UNIX warsTimeline & linksOpen SystemsUNIX 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 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 ::

Debian

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. | DebianDebian Doc Projectwikipackagesmail-listsaboutdebiandebian-administrationDebian System |

Xorg

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.orgFAQmail-listXorg(1)xserver(1)xprop(1) |

i3

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.

Linux Console

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 ConsoleLinux Console ProjectFramebuffer HOWTOVideo-Terminal Info |

ctheme

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). | homepaged5, d6, l2, l3 |

GNU screen

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. | homepagewikimail-listmy .screenrc |

ncurses

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. | homepageFAQannouncementprogramming howto |

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. 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. | homepagewikimail-listzsh-lovers |

Utilities

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. | homepagedocumentationman pagemail-listtutorial |

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! | homepageuser guideman pagedeb |

vfu

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’. | homepagedebvfu.confdir_function |

less

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! | homepageFAQless(1)deb |

Text, Typesetting

Vim

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. | homepagedocumentationFAQmanualwikimail-listmy vimrc |

TeX

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 pageTeX Users GroupWikipedia entry |

ConTeXt

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). | homepagehelp pagedocumentationmail-listPragma 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-listoriginal implementationSmartyPants |

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 (it’s what Reddit uses).

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, LaTeX, ConTeXt, groff man, RTF, DocBook XML, and S5 HTML slide shows. Very active and knowledgeable community.

Console Fonts

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 customized sgiscreen-9x20, which is 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 are already getting a bit thin at 125 ppi. Before moving up to a higher resolution display I’ll need to find a larger font with thicker line widths.  | psf formatbdf formatpsftools |

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 sgiscreen-9x20.psf. This is my favorite Linux Console font for now, but it’s a bit thin on higher-resolution displays, especially when displaying dark text on light background. Next I’d like to tweak the 10x18 bold version of this (ScrB18) for a font with thicker line widths. These fonts can also be found here (in bdf format) and here (in pcf format).  | screenshotsgiscreen-9x20.psfsgiscreen-9x20.txtsgiscreen-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 a new ThinkPad’s higher screen resolution rendered it too small.  | screenshotcrispy-8x16.psfcrispy-8x16.txtcrispy-8x16.notes.txtoriginal 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.  | screenshotproggyclean-7x13.psfproggyclean-7x13.txtproggyclean-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 here, or within Debian you can install the fonts-droid package: aptitude install fonts-droid. Inconsolata is a “humanist sans design” open source font designed by Raph Levien and released under the SIL Open Font License. It is designed particularly for use in print, with an “attention to detail for high resolution rendering”. Envy Code R…haven’t looked at this one too closely, but it looks good. And last but not least, if you find yourself on a MS Windows machine, you’ll might want to use the excellent Consolas designed by Lucas de Groot.

[Fonts, Typography, Encodings]

On snot and fonts

A lot of info & links about typography and fonts on this site!

FontForge

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

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.

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

Electronic Font Open Laboratory

“The Open Laboratory for exchanging information about electronic fonts. We also develop electronic fonts and related programs.”

XFree86 Font De-uglification HOWTO

“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.”

Alan Wood’s Unicode Resources

“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

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. Basically, this is the closest thing to something like 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. | homepagemanpage |

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. | homepageREADMEforumconfig, keymap, color theme |

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. | homepageFAQdocumentationmanpagemail-list |

Internet / Web

The World Wide Web Consortium (W3C)

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.

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.
homepagemanualmail-list |

HTML tidy

A utility to clean up HTML/XHTML/XML. Corrects coding errors and generates a visually clean, indented W3C compliant markup. | homepagemanual pagequick referenceoverview |

Nginx

Bare Bones Guide to HTML

Concise guide for looking up the correct forms of tags when creating Web pages.

Index DOT Html & Css

Lots of information on HTML and CSS

Characters and encodings

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

IRT.org

Articles, FAQ’s and other resources on a range of internet related technologies.

A List Apart

“…explores the design, development, and meaning of web content, with a special focus on techniques and benefits of designing with web standards.”

Web Style Guide

Online book covering many aspects of website design

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 (ISOC)

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.

Email

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 wikiMutt mail-list |

“mbox” is a family of several mutually incompatible mailbox formats

CAUCE

Coalition Against Unsolicited Commercial Email

E-mail Spam

Wikipedia entry on the what, why, where & how of spam…lots of detailed information.

Essays on Junk E-mail (Spam)

Enkoder

When posting an email address on a webpage, this application helps foil email harvesting robots by converting the address into encrypted JavaScript code. (view the source html of my contact page to see an application of this)

Misc

ImageJ

Image processing and analysis, Open Source Java application, Mac OS X & OS 9, Linux and Windows.

GMT (Generic Mapping Tools)

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.

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, General Public License (GPL), available for Windows, UNIX and OS X.

MediaWiki

The software used by the Wikipedia free content encyclopedia and others, released under the GPL.

OpenEEG project

Plans and software for do-it-yourself EEG biofeedback devices, available for free (GPL).

Building Packages From Source

Linux Ecology HOWTO

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.

Nature Oriented Computing

Discussion of how to make more efficient use of computer resources, advocating the environmental advantages of using light, small, efficient software over ‘heavier’ software.

Software That Lasts 200 Years

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

Grid Computing FAQ

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.

Quantum Computing

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.

O'Rielly Books

Publisher of quality computer reference books.

A Nice Screensaver Image

Saturn’s C and B Rings From the Inside Out, a recent image from the Cassini mission. Try the 200.4 kB jpeg.

Kinesis Contoured Keyboard

A computer keyboard with excellent ergonomics. Takes a little while to get used to, but very comfortable to use.

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.