Software

Here is a collection of some of software I've written for fun or related to projects I've done: a Sudoku solver, an error protection program CDProtect for CD-Roms, the C++ interface ObjCal to the CAL-BDD library, my BDD based planning program BDDPlan, Inti-gmp, an arbitrary length integer class for the programming language Sather, and some useful Shell Scripts for Linux.

CDProtect

While CD error correction is quite good, you probably also have a couple of CDRs where some files are no longer readable. In many such cases the whole CD is worthless. As a remedy, CDProtect adds another layer of error protection to a CD that ranges over the whole CD. It operates in two modi. First, you can create a separate error protection file for an existing CD. Second, you can fill up a, say, 600MB Image with error protection information to the maximum 700MB that fit on the CD, and burn this. If an error develops later, you can usually reconstruct the CD.

The first mode already works for CDs (though it would currently take too much memory for DVDs). Unfortunately, I don't have enough time to carry this through. But fortunately, in the meantime there is DVDisaster around, which seems already to work good. So I think I won't continue this project. If you care, you can get the source here: errorprotect-0.1.tgz. It needs the library ecc-1.3.5.tgz for the actual ECC-correction. Of course, no warranties and so forth. ;-)

ObjCal

An object oriented C++ interface to the CAL BDD (Binary Decision Diagram) library. (BDDs are usually very compact representations for boolean functions, that can be manipulated efficiently.) The CAL library provides a rather clumsy syntax, and with ObjCal you can write more elegant code like:

Bdd b1("a"), b2("b"), b3("c"); // BDDs for variables a,b,c
Bdd res = -(b1 * b2) + b3; // BDD for not(a / b) / c
cout << res; // yields CNF-representation "abc + a*-b + -a"
Download objcal-0.1.tar.bz2 tested under Suse Linux 8.2. Tested with version 2.1 of the CAL library.

BDDPlan

This is the C++-implementation of my PhD-Thesis, Planning with Binary Decision Diagrams. It solves planning problems specified in a fragment of the Planning Domain Description Language by means of BDDs (see ObjCal). The Planner works on planning problems specified in the ADL-fragment of PDDL (the Planning Domain Definition Language).

You can find more information on a separate page. Download bddplan-0.1.tar.bz2, tested under Suse Linux 8.2.

Inti-gmp

A replacement for the arbitrary length integer class INTI of the OO-programming language Sather. I liked Sather very much, since the language was designed to allow better software quality. It contains constructs like inheritable preconditions and postconditions for methods and class invariants, that are (optionally) checked automatically at runtime. This class was written for my study thesis Berechnung der Feigenbaumkonstante.

Download on a separate page.

Shellscripts

This is a collection of some shell- or PERL-scripts I wrote that I found useful and like to share. You can download the whole collection hpsscripts-0.1.tar.gz.

  • aless displays textfiles, Postscript-files, PDF-files, Unix-Manualfiles and the contenttables of tar-files while transparently uncompressing / / decrypting / processing these files as needed. It uses the scripts dviless, pdfless and ghless.

  • hardlndir replicates a directory (hardlndir fromdir todir) recursively using minimal space: all files in fromdir are hardlinked to the corresponding file in todir. I use this as a simple way to create incremental backups with rsync: I replicate the directory to my backup filesystem with rsync -avxHS dir backup/firstbackup, and for the successive backups I do hardlndir backup/lastbackup backup/nextbackup and rsync -avxHS dir backup/nextbackup. Thus, only the changed files take additional space in the next backup; the unchanged files stay hardlinked to the last version.

  • printpath displays all programs in the PATH whose names match the given argument. The argumentZ can be a substring or a regexp.

  • findbiggest, findnewest and lessnewest are small useful one-liners. They find the newest / biggest files below the current directory or display the newest files with less. See the comments in the files.