Software

My newest stuff is mostly here on Github. The most interesting thing (which is actually used by others :-) is probably the GrokConstructor written in Scala, and the mini-doodle-clone-with-a-twist GroupChoices, but here is also some older software I've written for fun or related to projects I've done: a Sudoku solver, an encoder that helps to memorize numbers with the master system, 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.

If you are interested, here are also my questions and answers on stackoverflow:

profile for Dr. Hans-Peter Störr at Stack Overflow, Q&A for professional and enthusiast programmers

GrokConstructor

The GrokConstructor, deployed at http://grokconstructor.appspot.com/, is a tool for semiautomatic construction and debugging of a special kind of regular expressions, that is used by the nifty Elastic Stack to parse logfiles. I wrote that in Scala, which is an amazingly well designed and productive language that combines functional and object oriented programming. When I write programs in Scala, I'm often amazed that an complex algorithm, which I would have been prepared to spend some debugging time on, works right out of the box. This is mostly since functional programming is way closer to the human thought processes than iterative algorithms, and because of Scala's powerful library for that.

GroupChoices

GroupChoices, deployed at http://groupchoices.appspot.com/, is a little exploration which was created mostly in a Hackathon at T-Systems Multimedia Solutions. This is a tool that supports making choices in a group by allowing all members of a group to specify ratings for all possible choices, without needing registration and trying to capture your email address.

Caution: This was done mostly in the spirit "let's hack around with Scala and Twitter Bootstrap". So the source is more or less "write only code", though I maintain to an Scala adept it is still more readable than most even well written Java Code, since it is much more concise and to the point.

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 argument 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.