Assorted Freeware
Codes of my making, without warranties (or restrictions). Please tell me if you find something you like.
Package name: ADEPT [A Declarative, Eval()-based Program Tester], v.0.9.1: A Python unit testing package that uses tuples, rather than classes, to define test cases.
Contents:
adept.py, the test engine proper;
adept.htm, a short introduction to the tool's functionality, features, and limitations;
adept.txt, the user manual;
adeptExamples.py, the user manual examples, in executable form;
adeptTestSuite.py, a 782-test-case validation suite for ADEPT, written in ADEPT; and
adept.zip, the complete package (85KB).
Package name: PISCES [Platform-Independent Socket ClassES]: A set of C++ wrapper classes for OO socket programming.
Co-author: Sridhar Koritala, now of Informatica.
Contents: An OO library for TCP- and UDP-based socket programming, along with sample codes illustrating the library's use.
Key features of library:
Extensible leaf classes for supporting standard modes of TCP/UDP programming
Classes for TCP client, server, and rollover [i.e., accept()-generated] sockets
Classes for UDP client, server, and peer [i.e., sendto()/recvfrom()-supporting] sockets
Mixin-enhanced versions of the foregoing TCP and UDP socket classes, for use with select()
Mixin-enhanced versions of the foregoing TCP and UDP selectable socket classes, for use with callbacks [scheduling policy: round-robin]
Exception-based error management, with user-friendly error messages (including WSA codes)
Supporting classes for service access point manipulation, including classes for IP addresses, DNS names, and port/address pairs.
Supporting classes for manipulating objects in program's environment: e.g., time of day, command-line parameters.
Key sample codes:
Sample programs for manipulating service access point data (get own hostname; map IP->DNS; map DNS->IP; map range of IPs->hostnames).
Sample TCP and UDP client-server pairs, with illustrative framing strategies.
Sample "sniffer" applications that pass information transparently between a client and a server program.
Sample select()-based applications that illustrate multiplexing among multiple clients.
Remarks: PISCES is extensive enough to support the development of robust, clean applications, but small enough--unlike, say, ACE--to be digested in about a week, internals and all. An isolation layer allows the library to ported readily between platforms.
Platforms: Windows NT, Windows 2000, IRIX, Linux. Should also work under NetBSD.
Known problems: I've seen PISCES's getopt.cpp module break g++ v.2.8.1 under IRIX, due to an assembler failure to support the long names generated by STL compilation.
Package name: LADEL [Layout Descriptor Language]: A set of C++ wrapper classes for dynamic I/O buffer specification and manipulation.
Primary Implementer: Ashfaq Jeelani, now of Siebel Systems.
Contents: An OO library for (1) imposing a struct-like view on an I/O buffer, and then (2) manipulating that buffer using high-level streaming operators, relative to this view.
Key features of library: A class, BufferManagementClass, that supports
a constructor that
accepts two inputs:
a block buffer
a string, written in a C-like language for specifying storage layouts [LADEL], that defines a "virtual view" of that block buffer
generates a set of objects that support streamed access to the block buffer's "virtual fields"
an operator, ^, that selects a "virtual field" from a BufferManagementClass object, returning a BufferManagementClass object
an operator, >>, that supports streamed, overflow-checked extraction from a buffer's "virtual fields"
an operator, <<, that supports streamed, overflow-checked insertion into a buffer's "virtual fields"
a method, setpos(), that resets the current byte pointer for a BufferManagementClass object
Key sample codes:
Sample programs that illustrate the use of BufferManagementClass operators.
Sample programs that illustrate the use of the buffer specification language [LADEL] to support layouts relative to buffers of variable length.
Remarks: LADEL is the outcome of a thesis project that attempted to improve on the standard bcopy() approach to block buffer manipulation. Ashfaq's thesis is available from me, if you want more information on LADEL.
Platforms: Windows NT, Windows 2000. Should also work under Unix platforms.
Known problems: The code needs far more careful commenting.
Package name: Implementation of Dijkstra's minimum spanning tree algorithm (Tarjan's version)
Remarks: C-based implementation. Includes an OO-ish implementation of priority queues and AVL trees.
Package name: Implementation of static Huffman coding
Remarks: C-based (non-PISCES) client-server pair that uses Huffman coding based on preset character frequencies to compress (client) and uncompress (server) a transmitted message.
Package name: Implementation of dynamic Huffman coding
Remarks: C-based client-server pair that uses an initial Huffman coding tree, with on-the-fly character counts, to compress (client) and uncompress (server) a transmitted message.