Developing the Shim

I have Stroustrup [1] at my side while I code; his book is a superb starting point from which to learn C++. That language is in my opinion the first and still the best multiparadigm [2] [3] programming language to become widely available, and I'm fortunate to be able to write programs with it.

Beyond my tremendous intellectual debt to the originator of C++, a number of other texts were of direct help in the design and implementation of the shim.

There is no other algorithms text comparable to Cormen [4], and I would not have been able to write the library components for the shim without the lessons I learned from that text back in graduate school. Daniel Sleator [5] provided the initial code for the splay tree component § C.4.3, and Bob Jenkins [6] [7] the initial code for the hash code algorithm § C.2.2. In each case only their generosity in releasing the sources without restriction made it possible for me to borrow from their work, and any remaining problem with those components reflects on my implementation only, and not in any way on their original work. Stevens [8] is the ideal reference for Unix system calls; it was much harder to write programs to the Unix api before his text appeared. Comer has not only written a superb introduction to TCP, but in addition his applications text [9] is a great starting point for the development of any program that uses TCP sockets.

For anyone wanting to write programs using the MySQL C client library, the Doorstop [10] by Dubois is an invaluable help; he's even been kind enough to put the critical chapter online. The transaction processing text by Gray and Reuter [11] provided a critical contribution to our efforts to eliminate dbms-related race conditions.

When you need make to work right, there is no good alternative to the O'Reilly text by Mecklenburg [12]. I look forward to acknowledging at some future time a working debt to the New Rider's Gnu autotools [13] text, though at this point we don't yet have a ./configure build process in place; it's on our list of tasks not yet done.

It will be obvious to any reader who's compiled the documentation, or even recognizes the Computer Modern fonts, yet I'll say it anyway: this manual wouldn't exist without the extraordinary expenditure of time and effort Knuth [14] devoted to TEX.

I use other tools to build on this foundation: Lamport's latex [15] macro system for TEX, Emden Gansner's dot [16] graph layout program to create figures, and Drakos' latex2html [17] converter to produce the hypertext version of this manual.

I mentioned Stallman earlier, and his invention of the GPL, and how recent events prove its importance more than ever. Closer to home, the licenses for latex2html and gnuplot, whether considered truly free or not, (their terms seem problematic to me when considered in the light of the last two of the Four Freedoms) demonstrate how the General Public License is the right way to protect free software. In this vein I'd also like to offer my thanks here to Eben Moglen, and his efforts on behalf of version 3 of the GPL. Those of us who write -- or, for that matter, use -- free software owe a great debt to the activists who struggle on our behalf.

Bill Pippin 2010-01-14