My Work Setup

Explains what (mostly free) software I install on each Windows machine I get my hands on.

C++ Compiler

I'm mostly a Windows C/C++ programmer. As such I mostly use Microsoft's Visual C++. I've also used Borland's C++ Builder. Whenever I have to develop on UNIX (lately I've been doing some Linux and Solaris programming), I use the FSF's GNU Compiler Collection (GCC).

Scripting

I do a lot of scripting. An example would be this Ruby script (CppLineCount) to count lines of code in my C++ sources.

Some years ago I used AWK, but later on I switched to Perl. If you're working on Windows, you'll want ActivePerl. On UNIX, there's a fair chance that your system already comes with Perl by default.

I stayed with Perl for several years and haven't found a compelling reason to switch untill I heard about Ruby. Instead of telling you how good Ruby is, you can read about it yourself in this nice DDJ article, written by the Pragmmatic Duo. Andy and Dave also have a very nice Ruby site, where you can download their book "Programming Ruby". I recommend you buy the print version of this great book too (I did it).

Editor

Even though I spend a lot in the Visual C++ IDE stretching dialogs and doing other menial tasks, I don't really want to use it as general purpose editor. I normally use GNU Emacs for NT. This is kind of a religious issue, so I'll mention that some colleagues seem to prefer NEdit or even Vim.

The important thing here is that the editor should be extensible and allow syntax highlighting of source code in a big variety of languages. I use Emacs for Perl, Ruby, C/C++, Java, SQL, HTML, XML, ...

A nice example of the power of Emacs is the htmlize.el Lisp script that allows converting any text file that Emacs understands into syntax-higlighted HTML.

Utilities

Ghostscript, Ghostview and GSview
Lots of documentation on the net is in PostScript format. If you've got a PS printer, you can just copy the file to the printer, but if you're printer isn't PS, you're stuck. Unless you've got the Ghost* utilities. They allow previewing and printing of Postscript files on lots of Windows printers.

MiKTeX Project Page
MikTex is a version of Knuth's Tex typesetting system that runs on Win32. It's particularly useful if you want to create nicely typeset documents on the fly (with AWK, Perl or Ruby). An classical example would be a form letter generator. MikTex comes with .dvi viewers and .dvi to .ps converters. A simpler alternative, in this www days, might be to generate a .html document and use a browser to print it. But if you've seen printed MikTex output, well...

Eraser
Eraser is an advanced security tool (for Windows), which allows you to completely remove sensitive data from your hard drive by overwriting it several times with carefully selected patterns.

The International PGP Home PageThe PGP Logo
From the FAQ:

PGPi is the international variant of PGP (Pretty Good Privacy), a public key encryption program originally written by Phil Zimmermann in 1991. Later PGP versions have been developed and distributed by MIT, ViaCrypt, PGP Inc., and now Network Associates Inc. (NAI). PGP is the de-facto standard for email encryption today, with millions of users worldwide.

The GNU Privacy Guard
GnuPG is a complete and free replacement for PGP. Because it does not use the patented IDEA algorithm, it can be used without any restrictions. GnuPG is a RFC2440 (OpenPGP) compliant application.

PuTTY
PuTTY is a free implementation of Telnet and SSH for Win32 platforms, along with an xterm terminal emulator. It is written and maintained primarily by Simon Tatham.

Lynx
Lynx is a text browser for the World Wide Web. It is a nice way to check the design of your web site and also useful when you need to convert html files into plain text.

The Apache HTTP Server
According to the Netcraft Server Survey, by far the most popular Web server. And it is open source.

Cygwin
Cygwin is a UNIX environment for Windows. It consists of two parts:

  1. A DLL (cygwin1.dll) which acts as a UNIX emulation layer providing substantial UNIX API functionality.
  2. A collection of tools, ported from UNIX, which provide UNIX/Linux look and feel.

Dependency Walker
Steve Miller is the author of this nice Windows utility. Take an EXE or DLL and it tells you all the DLLs it depends on. Includes information about imported and exported functions and missing entry points. The latest versions support a command-line interface that I've used to automate some dependency analysis.

DBWin32
Andrew Tucker is the author of this utility that allows viewing OutputDebugString output without having a debugger installed. Handy to debug on client sites. Mark Russinovich has a much more elaborate utility called DebugView, but it requires administrator privileges to run on NT.

C++ Libraries

STLPort.org
High quality port of the original STL to many platforms.

The Apache XML Project
Includes such libraries as Xerces (XML parsers) and Xalan (XSLT stylesheet processors).

CppUnit
CppUnit is the official C++ XP Unit Testing framework. For some reason http://www.xprogramming.com/software.htm still recommends using version 1.5 which had some serious deficencies that made a lot of people abandon this library altogether. Now there is a much improved version available on Sourceforge. One annoying thing that still hasn't been fixed is that the main testing macro they use is called assert. Even the original author already recognized this was a bad idea.

Boost.org
Taken from the Boost web site:

The Boost web site provides free peer-reviewed portable C++ source libraries. The emphasis is on libraries which work well with the C++ Standard Library.

The ACE Toolkit
The Adaptive Communication Toolkit is an OO Network Programming Toolkit in C++.

Libeay
Eric A. Young is the author of the Libeay cryptography libraries. They are part of SSLeay. SSLeay again is the basis for the open source OpenSSL toolkit. You can find some nice SSLeay documentation at Ariel T. Glenn's web site.

Crypto++ 4.2 - a Free C++ Class Library of Cryptographic Schemes
More crypto algorithms than you'll have time to use. Impressive although at times the source code feels over-engineered.