Software Suggestions and Links

On this page I note, and provide links to, software that I use regularly. Also included are some programs which I have good reason to believe are of high quality, but with which I haven't had extensive experience. This page will grow and mature with time. The immediate motivation arises from recognizing that my software environment, and the approach to daily computing tasks that it embodies, while certainly not unique, is sufficiently different from that typical of users of operating systems other than Linux or UNIX to be worthy of explanation. Both in person and on mailing lists, I find that people who aren't familiar with UNIX-centric ways of working, even if they have relatively good knowledge of computing in other respects, need more than the mere mention of which programs are involved in order to gain some understanding of how this kind of software combination provides a highly effective and comfortable working environment.

Operating Systems

I run Linux exclusively at home. To give proper credit, it should rather be called "GNU/Linux", acknowledging the decisive role of Richard Stallman and the Free Software Foundation in its development. Until recently, I kept an old PC running DR-DOS, the only purpose of which was to drive my braille display. However, following recent collaborative work with Dave Mielke to add support for my display, an Inka from Baum Retec AG,, I now operate it entirely under Linux. Thus, the DOS machine is now redundant; I plan to give it to a worthy party after transferring old files, dating from the early to mid 90's, from the hard disk so they can be archived.

My desktop computer has Debian GNU/Linux installed. On the other hand, my new laptop computer is running Gentoo Linux. Both of these GNU/Linux distributions furnish excellent software packaging systems. Gentoo differs from most other Linux distributions in that almost all of the packages are downloaded in the form of source code, then compiled locally during the installation process. While packages are also available in "binary" (i.e., executable) form, Gentoo is usually installed and updated directly from the source code. This simplifies the task, on the part of developers, of preparing software packages for distribution, while also helping to eliminate subtle dependency conflicts among installed libraries and other software components.

Debian is another excellent distribution, with a wealth of packages and a very convenient package management scheme. Like the equivalent system in Gentoo, the Debian packaging system often allows any given piece of software to be installed with a single command; all necessary dependencies are downloaded and installed automatically. This, coupled with a high degree of reliability and a large collection of packages included in the core distribution, makes Debian an excellent choice. On the negative side, the Debian project is notoriously slow in making stable releases, but that, one might say, is due to the entirely commendable principle of releasing software only when it has reached desired standards of quality, rather than being driven by externally imposed schedules. This is one of the many merits of free and open-source approaches to software development.

A new Linux distribution, called Ubuntu, which is based on Debian, has rapidly become popular over the past few years. The developers of Ubuntu have publicly stated their commitment to maintaining and improving the accessibility of their distribution. Ubuntu is a choice that should be seriously considered by new or experienced Linux users faced with the prospect of setting up a new system.

The Benefits of Linux

The advantages of Linux, and of operating systems derived from or compatible with UNIX in general, are substantial. However, to appreciate these, it is necessary to understand the fundamental differences that separate such operating systems from popular alternatives. Inevitably, from a user's point of view, much of the unique value and flexibility of running Linux (or a similar UNIX-like system) derives from the text and language-based tools available from the command prompt.

The following references together comprise a thorough and insightful overview of the goals and characteristics that make the Linux/UNIX software environment unique, while answering the question of why experienced users often become so passionately fond of it.

Braille and Speech Technologies

For braille access I now use BRLTTY, which allows text appearing on screen to be read via any of the supported braille displays.

To provide speech output, I use T.V. Raman's Emacspeak software. This is an extension to the GNU Emacs environment that creates a genuine spoken interface, distinct from, but parallel to, the visual one. Thus, Emacspeak is not a screen reader; rather, it provides a truly speech-oriented interaction experience, achieved entirely without modifying the underlying Emacs software. See T.V. Raman's papers describing Emacspeak for a full explanation of this solutions and its implications.

When straightforward access to the shell prompt is needed, outside an Emacs environment, I run Yasr. Written by Mike Gorse, Yasr is exactly what the name stands for - "yet another screen reader". It is small but effective, with all of the necessary features required to give spoken access to the Linux console.

The speech output itself is generated by a DECTALK Express speech synthesizer. Since the demise of Digital Equipment Corporation, the rights to the DECTALK speech synthesis software have changed hands several times. The current owner is Fonix Corporation, from which the technology is available for various operating systems, including Linux. A hardware-based synthesizer, which can be connected to a computer by way of a serial port or a USB interface, has been developed by Access Solutions, and is reputed to be a reliable product.

While summarizing braille and speech-based access solutions in the Linux environment, two further projects are worth mentioning. The first of these is the Gnopernicus assistive technology, developed as part of the Gnome accessibility effort. Gnopernicus offers access via braille, speech and screen magnification to the Gnome desktop environment, widely used under Linux and similar operating systems. Related projects are underway to enable Gnopernicus to give access to popular applications such as Mozilla, notably the Mozilla Web browser, and OpenOffice. Although Gnopernicus is still very much under development, it is starting to become usable for common tasks. I haven't worked with it myself, as the only graphical application I want to use is Mozilla, access to which is improving, but hasn't in my judgment quite reached the point of prompting me to make a switch from text-mode Web browsers.

The second project that should be noted here is Speakup. This is a screen reader for the Linux console, similar in functionality to Yasr. The difference, however, lies in the fact that Speakup, unlike Yasr, is loaded directly into the Linux kernel, thereby becoming part of the operating system. This permits Speakup to become active much earlier in the process of loading Linux during the "boot-up" process, providing access to operating system messages that wouldn't otherwise be available via speech. Various speech synthesizers are supported.

Document Preparation and Typesetting

With the exception of documents destined for the Web and therefore written in HTML, all of my writing is prepared in LaTeX. To understand what LaTeX is, it is necessary to introduce first the TeX typesetting system, developed by Donald E. Knuth of Stanford University during the late 1970's and early 1980's. Essentially, TeX is a program which reads a text file containing the text of a document, interspersed with typesetting commands, and yields as output a fully typeset and formatted version of the document ready to be viewed on screen or printed. LaTeX, written by Lesley Lamport, simplifies the task of writing documents in TeX by providing commands that automate most of the default layout and allowing the author to specify the structure and content of the text relatively independently of presentation. Concretely, I write my documents in Emacs using the AucTeX package, then use LaTeX to produce files in Portable Document Format (PDF) that can be readily displayed on screen or printed by anybody who has software capable of viewing PDF documents. In practice, almost every desktop computer these days has a PDF viewer installed. The LaTeX file can also be converted easily to HTML, using tools such as TeX4HT, Hevea or TTH.

I am spared the need to write a lengthy discourse extolling the benefits of LaTeX and its superiority to conventional word processing software, as such an article has already been written by Allin Cottrell under the provocative title, Word Processors: Stupid and Inefficient. I agree wholeheartedly with Cottrell's argument and with the conclusions drawn. Related arguments are presented, from the perspective of a professional typographer, by Conrad Taylor in What has WYSIWYG Done to Us?, another thoughtfully written article which is a pleasure to read.

Online LaTeX Documentation

The following documents, both introductory and reference, may be useful to newcomers and experienced LaTeX users alike.

E-mail Handling

My software configuration for sending and receiving e-mail is necessarily complicated. While a much simpler configuration would be quite functional, it could not provide all of the features I desire. One of the advantages of running Linux consists in the opportunity it affords to customize the configuration of the system to achieve exactly the desired results. This is illustrated by the procedure for handling incoming e-mail, as summarized in the following table. Note that the entire process is automatic, and indeed quite efficient; the retrieval, filtering and delivery of e-mail takes place entirely in the background, without distracting me from other tasks I may be performing.

How an incoming e-mail message is retrieved and processed.
StepProgramExplanation
1FetchmailRetrieves messages periodically from both of my e-mail accounts.
SshInvoked by Fetchmail, establishes a secure, encrypted connection to my account on a central UNIX (Sun Solaris) server at the university, from which Fetchmail then retrieves the mail by invoking Imap.
2PostfixReceives each e-mail message from Fetchmail and places it into a queue for delivery. Postfix manages the queue and ensures that each message is delivered correctly. Until recently I used Sendmail for this purpose, but Postfix has a more modern design yielding much better performance, for example when Fetchmail retrieves a large number of messages sequentially from a server. Postfix is also much easier to configure than Sendmail; the sendmail.cf configuration file is infamous for its complexity, and even with the M4 macros provided in the Sendmail distribution to simplify matters, setting up the software to operate exactly as intended can still be a challenge.
3DspamInvoked by Postfix, dspam employs statistical techniques to determine whether the incoming message is legitimate mail, or spam. The database of tokens used to detect spam is updated, and custom headers attached to the e-mail message reporting the results of Dspam's analysis.
MysqlThis is the database used by Dspam (see above).
4ProcmailCalled by Dspam to deliver each message, Procmail applies a series of filtering rules to determine the destination of the e-mail. By means of these rules, my mail is filtered automatically into various folders according to its origin: there are folders for different mailing lists, another for mail marked by Dspam as illegitimate, and finally my default inbox, which receives (mostly) messages addressed personally to me.
FormailUsed by Procmail to detect, and hence filter out, duplicate messages. For example, messages sent both to me and to a mailing list are typically received twice, yet I only want a single copy. Formail enables other manipulations to be performed upon the headers of incoming messages and is part of the Procmail package.
5Mutt or VmThese are two alternative programs that I use for actually reading and replying to e-mail. Vm runs under Emacs and can conveniently be used in that setting. Mutt operates outside of Emacs and is a powerful tool with numerous features, including sophisticated options for replying to mailing lists and sending mail from different addresses, as when one has, as in my case, multiple accounts - one at the university and another with an internet service provider.
BbdbBbdb is the insidious Big Brother Data Base. It is an Emacs tool which attempts to extract the sender's name and e-mail address from every message that is read, and store it in a database. When writing a message, I can quickly search the database to retrieve the e-mail address of whomever I want to write to.
LbdbThe Little Brother's Database. This is equivalent to Bbdb, but designed to be used with Mutt. It can search Bbdb and a number of other sources, including its own database of e-mail addresses, collected by a Procmail rule that runs an Lbdb utility.

The handling of outbound e-mail is much simpler: the message is composed, then sent by either Mutt or Vm, depending on which program I happen to be using to read and respond to e-mail at the time. The actual delivery is performed by Postfix, which forwards the message to a mail server maintained by my Internet Service Provider.

Web browsers

The table below outlines which Web browsers I have found to be useful, identifying their respective features and advantages.

Useful Web browsers.
ProgramEnvironmentDescription
Lynx 2.8Console (text-based)The oldest of the Web browsers mentioned here, Lynx provides straightforward, text-based access to the Web. Tables are rendered linearly; HTML forms are well supported. Lynx sometimes provides access to Web pages that are difficult to read with more sophisticated alternatives. Although it is still maintained, development is slow.
Emacs/W3Emacs/XEmacsCombined with Emacspeak, Emacs/W3 offers auditory style sheets: distinct elements in the document are rendered with different voices. Table browsing by row and column is also supported via Emacspeak. The rendering of large HTML documents is slow, however. Client-side XSLT style sheets can be used to reformat HTML pages before they are displayed by the browser, allowing modifications to be made that enhance accessibility, for example by restructuring tables or adding, at the top of the document, a "table of contents" linking to all of the headings on the page.
ElinksConsole (text-based)A much updated and improved descendent of Lynx. Unlike the other browsers mentioned above, Elinks also includes preliminary support for Javascript. Tables can be displayed spatially or linearized, depending on settings in the configuration file.
MozillaX Window System (graphical environment)Mozilla is a sophisticated Web browser, supporting (X)HTML, CSS, Javascript and other technologies, including, soon, Scalable Vector Graphics (SVG). Mozilla is becoming increasingly accessible to users of braille and speech software, thanks to the Mozilla accessibility effort and the emergence of Gnopernicus. Work is also underway to integrate features that will make interactive Web pages based on Javascript more accessible.

Miscellaneous Software

Xpdf
A PDF viewer. I use the included Pdftotext utility to extract text from PDF files, which I can then (attempt to) read with braille or speech. Whether the results are at all useful depends on the nature of the original PDF file and the quality of the conversion.
Wv
Converts Microsoft Word documents to HTML. This is how I handle MS-Word files sent to me by people who are sufficiently clueless to believe that everybody uses Microsoft Word and that it ought to be considered a universal document format.
Git
Having used several revision control systems over the years, Git is undoubtedly my favourite. Its decentralized approach, flexibility, and richness of functionality ensure that it merits its place as my revision control system of choice. I am using Git to manage all of my writing, including my research and these Web pages. Moreover, Git is ideal for tracking (and, where necessary, reverting) changes to system configuration files. Of course, it is equally suited to source code maintenance; this, after all, was its original purpose. Naturally, I keep all of the code that I write, for example shell scripts and Emacs Lisp functions, in yet another Git repository.
HTML Tidy
Checks the validity of HTML documents and performs a number of other tests, including several related to accessibility. It can also convert HTML documents to XHTML. The original author, Dave Raggett, is one of the editors of the HTML 4.01 specification.

The value of Software Freedom

I am in broad agreement with the ethical and legal arguments advanced by the free software movement, and by its founder, Richard Stallman, specifically. My thinking in connection with htese issues has also benefited from a reading of Eben Mogeln's work.

For details of Stallman's arguments, I suggest reading Free Software, Free Society: Selected essays of Richard M. Stallman.

Whenever I purchase computer-related products, including hardware, I give preference to those from companies that support free operating systems such as Linux, or which demonstrate a commitment to ensuring accessibility for people with disabilities. I also prefer free software to proprietary, unless the functionality which I require is only available, at least temporarily, from the latter.

Web site navigation

[Jason's home]