Programming

Some of the language headings here are links to pages with more details -- this is just a summary of what is there.

C++

I use C++ for my larger projects, or when efficiency is a concern.

I don't have much stuff on C++ as yet; for now there is some general information about the Standard Template Library (STL), a beginning of a tutorial on STL I am writing, and a review of many C++ libraries, by Marco Pace. To see what is there, go to C++

Python

Python vs Perl

For quite a few years now I have been touting the wonderful language Perl, and I still think it is a very good language. The OO extensions sometimes feel klunky syntactically, and in Perl5 there seem to be many more idiosyncracies (just because the language is bigger). My main problem with Perl5 is that its interface to Tk is difficult to use. There is really almost no documentation, and it is relatively difficult to get the Tk library working with Perl.

At Mark Weaver's recommendation, I tried Python. Python is as good as Perl in most respects; its regexp handling is not as nice, and it is not always as concise, but it is much cleaner and easier to understand. The syntax is very regular, the modularization is clean, and it offers similar high-level operations to Perl: smart array manipulation, slicing, associative arrays, mapping, object-oriented support, dynamically evaluated code and garbage collection.

To anyone who wants a high-level scripting language, I strongly recommend that you look at both Python and Perl5 (as well as Tcl and Scheme) before choosing.

Perl

Perl was originally designed as a high-level scripting language to replace shell-scripts. It has since exploded into a full-blown language, with object-oriented support in the new version, Perl 5.

I never write shell-scripts any more; perl scripts are almost always faster to run, faster and easier to write, and perl is extremely portable. If I can, I use python; if not, perl, and sh only for trivial things or when neither perl nor python is available (very rare these days on Unix systems).

This page includes links to manual pages and information pages on Perl 5, various perl libraries such as Tkperl (a high-level windowing package) and CGI (world-wide-web utilities).

S-plus

S-plus is an extremely powerful object-oriented statistical programming language/environment; it has a huge library of statistical and graphics functions, and provides good support for defining your own functions.

If you intend to do any serious statistical work, check it out.

Here is the CMU StatLib Index, which has a lot of public domain S-Plus code.

Zsh

I use zsh as my shell; it incorporates features from sh, csh, tcsh, and bash. It is very powerful, but I find it incredibly painful to program in, so I almost never use it for writing scripts. Here is the zsh home page One of the things that makes me stick with zsh despite its many problems is its very powerful completion mechanism (though I believe that recent versions of tcsh are comparable).

For example, almost all my C++ programs use a package called "param" that allows you to specify resources in a similar way to the X resource system. You can specify resources in a file or on the command line, and they are availabe to the programmer as members of global resource structures.

One special command-line argument "-param_dump" tells the param library to dump all the parameters it knows about, along with their values and a help string explaining what they do.

I wrote a perl script that takes executables that use this library, runs them with the -param_dump argument, and reformats things into a zsh completion command so that you can get command-line completion on any of the parameters; it even gives you the default value and the help string. I find this enormously valuable for programs that have many such parameters.

Information on shells, what some can do, and what others can't do.

Emacs lisp

My editor of choice for the last ten years has been emacs (I use version 19 now), and I have a fair amount of elisp code (4K lines or so) floating around. If you are at Brown, you can browse in /u/jak/src/elisp/mine to see if there is anything you might find useful; feel free to send me mail if you have any questions about anything there, or to ask whether I have some specific piece of code you are looking for.

Here are some resources from other sites.

You may also want to check for new things on Yahoo:
Computers: Software: Editors: Emacs: GNU Emacs

HTML (HyperText Markup Language)

I am a novice at HTML (as I am sure you can tell from these pages :-), but there are lots of resources on the net. David Baker has written a page providing information on HTML. Here is a good cheat sheet if you have just forgotten the name of the command you want. There are tons of style guides and other information available in Yahoo. Here are some that I found useful:

HTML 2.0 specification

HTML 3.0 draft specification

I have started to use a LaTeX/HTML package called hyperlatex. If anyone uses other such packages, I would be interested to hear what you think of them. The PEST overview is an example of a document written using hyperlatex.

MIA

Note: this section is principally useful (if at all) to people at Brown, since it concerns local software. However, certain pieces of MIA have been distributed as part of various packages. MIA is a project that was originally started by John Shewchuk, Moises Lejter, Glenn Carroll, Eugene Santos and myself, to write a multi-agent dungeons and dragons game. That project quickly died as we discovered that we had far too little time, but the name and semi-official status at Brown remained as a convenient repository for C++ code that we wanted to share. There are a number of pretty stable parts of MIA, though many of them will be superceded by the ANSI library when it becomes widely available. Some of the main stable pieces are:
String
A copy-on-write string class with associated regular expressions based on Henry Spencer's C regular expression package.
Param
A mechanism for defining global constants that can be specified either in a file like X defaults or on the command line.
GNUtemplates
Wrappers around the GNU container types to make them parameterized. Will soon include adaptors to STL types.
Timer
Program time counter, for benchmarking.
Random
Random number generation classes.
Socket
Socket utilities (may not be functional under Solaris).
Manips
Various io manips to print time, date, user, etc.
The source directories are /pro/mia/src/String/dist, etc. To include file, add -I/pro/mia/include to your compile line, and include files with #include <mia/String.h>. The library to link against is /pro/mia/lib/SOLB/SunOS-5.4-d/libmia.a. Contact me (jak) or Moi (mlm) if you would like to use MIA or are having problems using it.

LaTeX

Dimitris Michailidis has an excellent
web page on LaTeX.
[Brown] [Brown CS] [People] [Jak]
Jak Kirman