Hugh Sasse's Software Production Related Information Page


General information | | The GNU project | Language lists | Finite State Machines | Top Down Operator Precedence Parsing | pcre and regexp info | Toolkit for Conceptual Modelling | BASIC | C | C++ | Fantom | Forth | Fortran | Icon | Io | Java | Julia | Lisp | Lobster | Lua | Lush | Objective Caml | Object Orientation Orientation | Data, Context and Interaction | Onyx | Orc | Pascal | Pascal to C translator | Perl | Pike | PostScript® | Python | Qorum | Racket | REBOL | Ruby | Tcl, Tk and Expect | Unicon | Emacs | Vi and vim | Unix (including Shell and GNU/Linux)

General information
Alex Measday has an enormous Computing Web Sites page.
The Pragmatic Programmers.
See also Dave's Blog and Andy's blog which has some of their interesting thoughts on them. (Also of note is the original "broken windows" article, housed at
How to Prototype [a Game] in Under 7 Days
is mainly about game development, but talks about creativity, programming efficiently. As someone who tends to avoid hacks, this is a useful reminder that satisficing is OK. Found at Coding Horror::Rapid Prototyping Fun.
Brian Marick's blog.
"Silk and Spinach", Kevin Rutherford on agile software development ...
...and life in Macclesfield
Chad Fowler's Blog.
Sandi Metz's blog.
Author of Practical Object Oriented Design in Ruby.
Accidentally Quadratic.
Much better programmers than myself have made mistakes from which I can learn. Sometimes trade-offs that are acceptable early in a project become unacceptable later. These give examples of when optimisation is not premature.
trend-prof may help with this. found from this answer on Stack Overflow.
Redhanded - sneaking Ruby through the system. Thanks to the much missed Why The Lucky Stiff
See _Why's Estate.
{|one, step, back|};
Cooper Interaction Design.
Includes books by Alan Cooper. See also Extreme Programming vs Interaction Design.
Donald Norman's Home page
concerned with usability issues.
John Burkardt's pages.
An excellent collection of programs and data. .OBJ file examples is what led me here, but the Fortran 77 software alone is seriously impressive.
Creating Passionate Users.
Alas discontinued, but still contains good stuff.
This is the web site for the book "Practical Statecharts in C/C++", which describes how state machines can be effectively implemented with OO techniques.
Programming Pearls.
Code Generation Network.
Code and Personality.
Different attitudes to "life" and how the impact on code design.
Recommended Links from AI Horizon.
An introductory site some students have found helpful. Covers programming fundamentals, and is geared towards basic AI algorithms. The site doesn't seem to have been updated in a few years though, so some links may be stale. (I know that problem. Moving swiftly on!)
Delta Debugging.
See also the book Why Programs Fail by Andreas Zeller. The concepts here made it into a chapter in Beautiful Code.
Teaching Novice Programmers How to Debug Their Code.
Good points about hidden assumptions well made. It's all Scientific Method, really.
Webliography [on] Software Engineering
Literate Programming - Propaganda and Tools
Extreme Programming: A gentle introduction (
See also my software testing page for more on this.
Patterns Home Page.
The Patterns WikiWikiWeb.
Pattern Oriented software Architecture.
Patterns for Scripted Applications.
Ulrich Köthe's Software Engineering Hotlist.
Joe Yoder's Adaptive Object Modelling papers.
Of interest on the same page is The Selfish Class, by analogy with Richard Dawkins' selfish gene, how good code gets re-used. See also User-Defined Product Framework by Ralph E. Johnson and Jeff Oakes. There are more AOM links at MetaData and Adaptive Object-Model Pages. Some of this flexibility would seem to relate to Table Oriented Programming, although I don't agree with all its conclusions. For example, some of the refactoring that is claimed control tables achieve can be achieved in OO with a visitor pattern, where the object visits the data in the structure, responding accordingly.
NIST's Dictionary of Algorithms, data Structures and Problems.
Titivillus' Software Development page has gone 03-MAY-2013.
Links to interesting papers and lots of languages
Esoteric Programming Wiki.
I'm not sure how many of these things one would actually want to use for serious work, but they are "interesting" (in the mathematical sense of the word!).
Piriform, Ltd.
Produce some interesting Free software (utilities) for Windows. (cclean, recuva, defraggler).
A site devoted to free operating systems in general.
A site listing recent releases of free software
GNU Project of the FSF Home Page ( English (1), French, Irish, Mirrors)
This GNU's Not Unix. The What's New page (2), French, Irish mirrors) is worth checking regularly. The Software Directory. A list of their FTP Mirrors is available French, Irish mirrors) See also:
The GNU Scientific Library.
TkInfo: A Browser for Info Files.
The Ghostscript Home Page.
See also
Autoconfigure Tutorial.
There is a more recent version of this at The AutoToolset Homepage but it is on sourceforge. (as described in this page at The Autoconf manual is an obvious source of information. There is also Autobook a book about autoconf, automake, libtools... Autotools: a practitioner's guide to Autoconf, Automake and Libtool from Free Software Magazine looks good as well. The Autotools Mythbuster site is very good as well. There is a cheat sheet and a reference card for GNU Make, useful for the variable usages in particular.
The packages can be had from, (which has not been updated recently) or There is a French mirror Danish (
Language Lists
The Year In Scripting Languages.
A suammary of activity in different scripting languages for the past calendar year.
ACM "Hello World" Page.
That first example program in many different languages
Google Directory's Programming Languages page.
Programming Languages Research.
Dictionary of Programming Languages.
Learn X in Y minutes.
A list of programming language sites.
Learnable Programming.
Designing a programming system for understanding programs.
Keith Waclena's Programming Language Crisis
has a very personal view on a number of languages, but based on a desire to get practical work done easily (in a Unix environment, mainly).
PLNews: Programming Language News.
The Programming Langauges page -- link removed by request..
Lambda the Ultimate.
The TUNES Project Wiki.
The Languages page on the Wiki.
Free compilers list
See also info about gcc for the PC (djgpp).
See also Eli but it is on sourceforge.
Andrew W. Appel's Modern Compiler Implementation in C.
See also CUP's page about this book.
Jack Crenshaw's "Let's Build a Compiler".
A recursive descent compiler, but incrementally developed. Note: these files are in plain text, and the top several lines are blank.i The code is in Pascal, but a FORTH version is available and there is a similar series of articles based on Scheme, available. See this LTU article.
Matt Healy's languages page.
Finite State Machines
Finite State Machines in Cobol has gone (03-MAY-2013 )
this is really about implementations in COBOL, but it has good points about the general application for FSMs to problems.
Top Down Operator Precedence Parsing
An alternative to the BNF based parsers using YACC, etc.
Vaughn Pratt's paper Top Down Operator Precedence.
The O'Reilly book Beautiful Code has a chapter on this, by Douglas Crockford.
Top Down Operator Precedence by Douglas Crockford
Simple Top-Down Parsing in Python" by Fredrik Lundh
Top Down Operator Precedence Parsing by Eli Bendersky.
tinypy, a tiny Python interpreter whose parser uses this technique.
Pratt Parsers - Expression Parsing Made Easy describes how to do this in Java.
Extensible, Statically Typed Pratt Parser in C#.
Philip Hazel's PCRE package
A regular expression package with Perl-like syntax. Jeffrey Friedl's Regular Expression page has gone (03-MAY-2013 ) is definitely worth examining. See also Scriptics' "New Regexp Features in Tcl 8.1" page has gone (18-NOV-2005).
Toolkit for Conceptual Modelling (TCM)
tools for creating graphics describing a program's purpose, to aid in maintenance and specification. 03-MAY-2013 - seems to have vanished recently enough to have left broken links on Wikipedia and elsewhere.
a tutorial from CyberTechnics. See also The Gawk manual, Awk Tutorial from The Awk in 20 Minutes (from [HN:8893302]).
I know. Don't start. But for quick short jobs, with accessible simple graphics, for people who "don't really want to program" when Excel doesn't quire fit, this may be appropriate. Smallbasic looks pretty good but it is on sourceforge, has a good set of maths functions, and graphics, has mostly got rid of line numbers and is GPL. It is cross-platform. It looks like it might be useful for some engineering quick fixes that can be done properly later. The Wikipedia page on BBC BASIC refers to clones for windows, BBC BASIC for Windows by Richard Russell, and a GPL clone: Brandy BASIC Interpreter but it is on sourceforge, but it looks like it is Unix only -- a .deb and a .tar.gz file only, and dated 2007, as I write this (14-SEP-2012).
The C Book. C Programming Wikibook. comp.lang.c FAQ. SEI CERT C Coding Standard found from [HN:9820364]. GCC is the GNU compiler collection. There is advice on building GCC for Solaris (10), the most unusual part of which is for Solaris9 GMP must be told to build for Solaris7. pcc, a C99 compiler under a number of BSD licences. nwcc is also BSD licenced but it is on sourceforge. tcc is LGPL but it's development seems to be stopping. CompCert - a formally verified C compiler. Found via Absint's CompCert page from [HN:9130934]. RECC - The Robert Elder Compiler Collection found from [HN:9818374]. OpenWatcom C/C++ Compiler and the openwatcom mirror in France. C gibberish <-> English. There is a List of free programming books about C available. J. Blustein's C Programming Language Resources. Lysator's Programming in C page in particular see Other Sources. "Awesome C" -- a list of free software resources for C programming.
There are some good online FAQS, in particular C++ FAQ Lite (Dutch mirrors) ) See also Bjarne Stroustrup's homepage. There is information on GCC which has g++ supports the Standard C++ library, with some of the support coming from libstdc++ v3 (It can be had from, for example.) EGCS merged with GCC in April 1999. There are others. The C++ Annotations by Frank B. Brokken is more than just annotations, it is a good tutorial/reference. The Boost C++ Libraries are peer-reviewed to work with the STL, often by people involved in the STL's design. The Fast Light Tool Kit Home Page; FLTK is an LGPL'd C++ graphical user interface toolkit for X (UNIX®), OpenGL, and WIN32 (Microsoft® Windows® NT 4.0, 95, or 98). See also wxWindows, and The FOX Toolkit (which is written in C++). Visual C++ Developer Center. There is a List of free programming books about C++" available.
A compiled language with Ruby-inspired syntax.
A language clearly descended from Forth.
A language which is OO and concurrent. In development.
A functional language claimed to be very efficient.
Forth Web Ring. FORTH, Inc.. Starting Forth. (See comments at [HN:9855977], and also [HN:9842557] for info on Thinking Forth (CC licence).) Forth Research at Institut für Computersprachen, Forth Information on Taygeta. The Forth Research Page at Bournemouth. A Forth page from Michael Somos. The 4tH compiler. Related to this is And So Forth, a tutorial for Forth. There is a blog entry on Implementing the primitives in Itsy Forth, which is instructive, the comments showing how some of these could have been done without assembler, at the cost of space. This S.O. item on implementing SWAP in Forth has some interesting approaches. Bolo's Forth page. Forth Info on wiki. FIG UK. The Annexia Forth page, including a minimal Forth compiler and tutorial, as discussed on LtU. See also Onyx and Factor. Another minimal forth is Boostrapping a Forth in 40 lines of Lua code by Eduardo Ochs. There is a List of free programming books about Forth available. Richard W. M. Jones' Forth info., including JONESFORTH (git repository), found from [HN:9370979].
The Fortran Market.
User Notes on Fortran Programming.
GFortran the GNU Fortran for GCC-3.4.0 and later
has a wiki which explains that it was born of a fork of The G95 Project but it is on sourceforge.
GNU Fortran (G77) news.
Introduction to Modern Fortran may be used for personal study and not copied, but is clear and useful.
Clive Page's List of Fortran Resources will also be useful.
Alan Miller's Fortran Software including to_f90.f90, from Jason Blevins' website.
Fortran 90 Frequently Asked about News has a lot of links.
DMOZ Fortran page.
Introduction to Object-Oriented Concepts using Fortran90.
Guide to Fortran 90 maintained by NCAR/CISL Consulting Services Group .
PLPLOT but it is on sourceforge.
Stackoverflow: Writing robust and "modern" Fortran code looks useful.
Fortran Questions
J. Burkardt's Fortran 77 software.
The Icon Home Page is the main source of information about the language. UTSA have some good information about Icon, particularly a local guide to the language. There is a good introductory article called A Glimpse of Icon. There is a List of free programming books about Icon" available. See also Unicon.
A small, OO language with simple syntax. Found on the RubyGarden virtual machines page.
Bruce Eckel's Java site. Java Beginner's FAQ, Java Intermediate FAQ, and the complete list of FAQs from Tutorials from Sun.
A language for scientific computing inheriting from Python, Ruby and Matlab. The Julia Language. The Julia Manual. The Julia Blog. Julia source on github. JuliaOpt: an umbrella group for Julia-based optimization-related projects. See also Julia for Rubyists: Crunch Those Numbers (via Ruby Weekly #251. ).
John McCarthy's Home page.
The Common Lisp Hyperspec..
The site has News and Recent Changes pages as well. LuaNews is a summary of recent happenings on the mailing list and in the world of Lua. The book "Programming in Lua" is online, but well worth buying, IMHO. See also Rub/Lua allows the embedding of Lua interpreters in Ruby. See also Learn Lua in 15 minutes (more or less) for a one page (or thereabouts) tutorial. There is a List of free programming books about Lua" available.
Lush but it is on sourceforge.
A GPL'ed Object Orientated blend of Lisp and C, which is intended to be fast, flexible, high level, and particularly suited to engineering applications.
Looks interesting, but I've not explored it yet.
Objective Caml.
Formerly Caml Special Light. The Caml Language is a functional programming language. The Objective Caml home page is the place to look for information. See The faq, the Caml Quick Reference Guide, also The FAQ. I NO LONGER have a local copy of the manual set, because my copy was way out of data, and I have not been using the language. A copy can be obtained from the Objective Caml Distribution page. Christophe Raffalli has some Objective Caml stuff. See also Introduction to Functional Programming (1996-7) from Cambridge University. There is the book A Functional Approach to Programming which is based around Caml. There is a version of Developing Applications With Objective Caml on-line.
Object Orientation Orientation
Data, Context and Interaction.
This belongs with with OO information. It turns use cases into Context objects, so that the interrelationships between objects can be represented more clearly by constructed Interactions. The participating objects then take on roles in these interactions, when they receive some kind of trigger for setting off that use case. In this way the relationships are not scattered about the code as method calls that must be searched out. This is almost like bringing Structured Programming to Object level. Instead of having to crawl through the code base to find the interactions, the method calls, much like one had to find the GOTOs of yore, the contexts structure what happens between the objects.
Data Context Interaction: The Evolution of the Object Oriented Paradigm.
The page where I found out about this, via RubyFlow.
Data Context Interaction.
Trygve Reenskaug's home page.
He invented this design, as well as MVC.
Onyx is a language similar to Forth and Postscript, with threads, and designed to be easily embedded in C code.
A language for distributed and concurrent programing.
GNU Pascal
p2c Pascal to C translator (recovered by someone at Schneider Lab)
Perl -- Practical Extraction and Report Language.
News and Views of the Perl Community
use Perl;
Perl Reference page.
a reference itself, not a page about "\$thingy".
The Perl Mongers site.
Perlfaq Prime.
CPAN -- The Comprehensive Perl Archive Network
This link will actually take you to your mirror.
a UK copy of the comp.lang.perl.misc FAQ.
a UK copy of the comp.lang.perl.announce FAQ.
University of Florida Perl archive. has gone (16-OCT-2013).
The website to go with the book "Effective Perl Programming".
The Perl Foundation.
Perl Mongers.
See also the comp.lang.perl.misc and comp.lang.perl.announce newsgroups and home pages of Larry Wall, Randal L Schwartz and Tom Christiansen (wherever his page is), for info straight from the horse's ... er, camel's mouth. M-J. Dominus' Perl Paraphernalia. See also and Tim Bunce' Module List, or the UK copy of it which lives in Also see comp.lang.perl.modules. Also, Jeffrey Friedl's Perl page has some good utilities on it.
Another slant on OO, with pretty good string handling... It is claimed to be fast. I have not tried it yet.
See also S. G. Kleinmann's PostScript page which has gone (03-MAY-2013), the newsgroup comp.lang.postscript and the newsgroup's FAQ. See (There is interesting information at about PS as a publishing medium.) PostScript Command Summary has gone (03-MAY-2013). Another Postscript manual has gone (18-NOV-2005). PostScript Command Summary. There is an ftp mirror site at: psutils can be had from:, or
Quorum but it is on sourceforge.
An interesting language with web/ftp/email capabilities built in. See also The OSCAR Project and FreeBell but it is on sourceforge.
Tcl, Tk and Expect
Info on the Tcl ("Tickle") and Tk languages by John Ousterhout, . See also comp.lang.tcl and comp.lang.tcl.announce newsgroups, the comp.lang.tcl.announce FAQ (from ). There is a Wikibook on Tcl. Neosoft provide a WWW interface (which has gone 18-NOV-2005) to their archive which is available by ftp. There is a very well laid out manual in HTML format. and a guide to writing Interfaces in Tcl/Tk has gone . Don Libes' Expect distribution for automating dialogues with programs is build on top of tcl and tk; see The Expect Home Page. See also the Tcl Wiki Expect page. Tcl 8.6 now has OO features brought in with
package require TclOO
but at present (Feb 2013) there is little free info on their use. There is a question about this on the Google mirror of comp.lang.tcl here, and some examples on Rosetta Code in the Tcl category. There is a TclOO page on the Wiki. Useful examples include Rosettacode's classes Tcl example, a class referring to its own instance methods and variables using Tcl my, which modifies the scope rules of lookups, and also the define page is useful as well.
Tcllib but it is on sourceforge has Tcllib documentation online but it is on sourceforge, also links to Tcllib docs at The TCL Sourceforge Project but it is on sourceforge. Also see the Entropy Liberation Front. Also, there is Tom Phelps' TkMan but it is on sourceforge, a GUI interface to Unix Manuals, which allows searching of the pages, etc. There is a Tcl syntax checker, Nagelfar, which seems to be pronounced as it would be in Esperanto, from the description. Tcl the Misunderstood is a good summary, though Tcl now has dictionaries, and objects as mentioned above.
Creating an executable (starpack) from a tcl/tk script
This is done using the tclkit tools for creating starkits from I used the 8.5.8 versions as at the time of writing (01-APR-2014) the 8.6 versions were not available. So I used tclkitsh-8.5.8-win32.upx.exe which is the command-line tool, which I copied as tclkitsh.exe for short tclkit-8.5.8-win32.upx.exe which has a GUI, which I copied as tclkit.exe for short, into the directory (folder) where the script was. I also obtained the sdx.kit utility from the same site (it is listed on the left). Then then actions to perform are these:
.\tclkitsh.exe sdx.kit qwrap script.tcl
5 updates applied

.\tclkitsh.exe sdx.kit unwrap script.kit
5 updates applied

.\tclkitsh.exe sdx.kit wrap script.exe -runtime tclkit.exe
4 updates applied
Noting that the argument to -runtime cannot be the same executable as that used to invoke the sdx.kit utility, and that one needs the tclkit with the Tk bindings in for the Tk code to work as the runtime and the sdx.kit invoked from the tclkitsh.exe in order for that to run correctly.
If the sdx.kit is invoked from the tclkit.exe with the Tk bindings one gets a wish window with a prompt and sdx.kit does not seem to be invoked.
Building the tclkit for 8.6 from the instructions here and here failed for me under MinGW32 with errors in Tclwinsock complaining about undefined functions at link time. I got these building Tcl on MinGW as well. I just found this post on a Ubuntu forum which recommends adding -lws2_32 to the compilation. Adding this manually to the Makefile seems to get past this error. An alternative, which does support Tcl/Tk 8.6 is Freewrap but it is on sourceforge which will build an executable from a script or multiple script files (so far I have only tried one script). I found this was much easier in that it includes sqlite and tklib already, so picked these requirements up with no effort on my part, unlike sdx, which I could not persuade to find them. However, I found out the hard way (by not reading the documentation closely enough) that paths are hardcoded without drive letters unless you include a tclIndex file in the list of files to wrap. That can be built using:
% auto_mkindex . *.tcl
from inside tcslsh. If you are wrapping packages, you need the pkgIndex.tcl file. Anyway, read the documentation :-) for the details.
There is good information on using SQLite with Tcl, Tcl/Tk and SQLite. See also The Tcl interface to the SQLite library, and SQL As Understood By SQLite
The Unicon Home Page describes the project but it is on sourceforge. The POSIX interface for the Unicon programming language by Shamim Mohamed. There is a Unicon page at Rosetta Code.
Emacs home page ( French, Irish mirrors). On-line Emacs Manual ( French, Irish mirrors). Emacs FAQ for Windows ( French, Irish mirrors). Emacs FAQ in text (English (1), ( French, Irish mirrors). GNU Emacs for Mac OS but it is on sourceforge. Emacs Reference Materials from Xemacs.
See also The VI Pages - All About VI and its clones, and, of course,, and Vim Online but it is on sourceforge. For vim there is matchit for languages that use if...end instead of braces. See alsoThe Vim Webring, The Vim Cookbook. There is a good list of tips at Vim information for Ruby is on my Ruby page. There is also a Tutorial about using Vim for XML from
Unix, Shell, GNU/Linux
"Learn Unix in 10 Minutes".
Unix Sys Admin Resources
from Stokely Consulting.
Unix File and Directory Permissions and Modes, explained in some depth.
Useless use of cat award.
lots of examples of pointless CPU usage in the shell.
Unix Text Processing.
The Art of Unix Programming by Eric S Raymond
The Art of Unix Usability by Eric S Raymond, et al.
The art of command line.
found from [HN:9720813].
USAIL Unix System Administration Independent Learning.
Lex and Yacc page.
yacc - a compiler compiler.
The Heirloom Project but it is on sourceforge.
Traditional Unix tools, including the text processing ones, modernised to work with UTF8 and modern systems.
Autotools book website.
This is the online version of GNU Autoconf, Automake and Libtool, the print copy of which is not up to date with the current versions of these tools, according to the main page. The Autoconf manual is an obvious source of information.
Lex and Yacc HOWTO.
ELSOP Unix Resource Center
Other Unix information can be found in the comp.unix.* FAQs, and an introductory text can be found at Unix Help for users.
Unix Sysadmin Aphorisms
Google Directory's Computers > Software > Editors > SED page
Open Directory's Top: Computers: Software: Editors: SED page. Sed - An Introduction and Tutorial by Bruce Barnett featured in [HN:8851124].
A file program, because GNU fileutils doesn't have this.
(file detects file types using /etc/magic.)
The newsgroup's FAQ
"Bourne shell programming" See also Andrew Arensburger's Bourne Shell Programming page and Roger Hempel's BOURNE Shell Programming which is very comprehensive. My copy of Jeff's Unix Vault (which he passed to me when he stopped maintaining it). The document "csh programming considered harmful" ( copy) contains a lot of good tips for the Bourne Shell programmer. Solaris comes with the Korn shell. There is An introduction to Korn Shell (ksh) Programming by Peter Brown, which is mirrored here. There is a guide to ksh at, originally from fish shell. zsh, an alternative to the Bourne Shell; see also bash (English (1), French, Irish mirrors) -- The Bourne Again Shell, and its manual (English (1), French, Irish mirrors). Advanced Bash-Scripting Guide. See also Advancing in the Bash Shell Part I and Advancing in the Bash Shell Part II have gone (03-MAY-2013 ). Heiner's SHELLdorado has gone (03-MAY-2013) looks like a useful resource. Open Directory's Unix Shell page. Google Directory Unix Shell page. The Fault Tolerant Shell ftsh has useful features for handling difficult to predict failures. [HN:9183012] has info on using named pipes and process substitution, in which $grep -v '^[[:blank:]]*$" <(gunzip input.gz) >(xz output.xz) makes the grep take its input from one process and sent it to another. Only works in some shells, particularly bash.
Find Command seems to have gone.
A clear description of the find command with many examples of its use. See also Finding things in Unix and Find part 2.
This has moved off this page now.
DNS resources.
NTP - The Network Time Protocol
See also the David Mills's resources page and NTP Time Services on HP-UX which has gone (03-MAY-2013) but had a number of examples. There are further links on NETWORK TIME SYNCHRONIZATION. There is also The JANET Network Time Service. Leap Seconds from US NEOS. A Summary of the International Standard Date and Time Notation is a useful document to read. Of course, The Long Now Foundation deserves mention here, too.


Created (from existing info on my home page) on 16-MAR-2000

Last Modified:

Last Modified 22-JUL-2015 by Hugh Sasse

$Id: index.html,v 1.194 2015/07/22 09:47:28 hgs Exp hgs $