Software Projects

Here is a collection of various programs I wrote (the latest versions, you can find the rest in the archive). All of them have been developed under the Linux operating system and usually in a fairly portable way, so they will probably run on other Unices as well. Most programs are distributed under the terms of the GNU General Public License.

CheckMail – nothing more than a smart textual menu allowing easy browsing through a set of mailboxes/maildirs, displayed together with numbers of all messages and new messages. In addition to that, it can notify you when a new mail arrives by beeps, keyboard leds and OSDD. Simple, but very handy. Git
The Name Server Configurator – a set of utilities and M4 scripts for easy maintenance of DNS configuration and zone files. Supports IPv6, DNSSEC, classless delegations and other quirks. Git
The PCI Utilities – a set of programs for listing PCI devices, inspecting their status and setting their configuration registers. It comes with a library for portable configuration register access. Git
Isolate – a sandbox built to safely run untrusted executables, offering them a limited-access environment and preventing them from affecting the host system. It takes advantage of features specific to the Linux kernel, like namespaces and control groups. Primarily designed for testing programs in programming contests. Git
Odevzdávací Systém Matematické Olympiády: A web system for the Czech Mathematical Olympiad: administration, submitting and grading solutions, generating score tables, etc. Git
The Postal Owl: A minimalistic web site for submitting homework and grading it. Built around Markdown and KaTeX. Git
PaperJam – a program for transforming PDF files. It can re-arrange pages, scale and rotate them, put multiple pages on a single sheet, draw cropmarks, and many other tricks. Git
Minsk-2 – an emulator of a beautiful Soviet-era mainframe computer. You can try it online. Git
SuidGW – a wrapper for running set-uid scripts securely. Git
Trivial Tea Timer – a simple GTK application for timing brewing of your cup of tea or anything else. Git
UCW TeX Macros – not exactly a program, but a collection of TeX macros I use in my daily life. This is a reincarnation of my old mjmac.tex. Git
Arexx Data Logger Daemon – a deamon for reading data from Arexx BS-500 data loggers. Git
VESA EDID decoder: Decodes EDID data sent by monitors and prints it in human-readable form. Git
Subauth – a daemon for authenticating sub-accounts. Allows users to set up different authentication credentials for access to specific system services from specific devices. Git
Bouncer – a simple daemon for kicking out unwelcome guests, who try to guess users' passwords by brute force. Git
Network Who – a simple replacement for rwho (who via network). This one uses a centralized server and doesn't trust broadcasts, so it works even across routers. Git
The UCW library – a library that makes the life of a C programmer happier. It contains various generic data structures (e.g., lists, trees, hash tables), a configuration file parser, fast implementations of several standard algorithms (most notably sorting), fast buffered I/O, memory pools, transactions and many other goodies. Git
Git Tools – a small collection of tools for managing Git repositories. Includes an update hook for comfortable mailing of push notifications. Git
BEX: The Batch EXecutor is a simple set of scripts for running commands and shell scripts on sets of machines. Sysadmin's delight :) Git
Ursary: An experimental daemon for control of my home audio system using the Novation Nocturn control surface. Git
Swiss-Army Knife for CSV-like files – a utility which handles data in column-oriented text files, converts them between formats, justifies them to tables and so on. Git
On-Screen Display Daemon – a daemon which receives messages from other programs and displays them using libxosd. Unlike other such daemons, this one handles message attributes (e.g., colors), keeps its eye on message timing and since it uses X properties to pass messages, it works over SSH. Comes with a couple of clients. Git
Yet another who command: Shows lots of things about the system and all logged-in users including commands they run. Git
Sherlock Holmes – a universal system for indexing (not only) web pages and searching in them. Look at its home page for more details.
The DNS Sleuth – a tool for automated checking of DNS zones for errors. I worked on it in the early 2000's, so it supports the DNS standards of that time. This means no IPv6 and no DNSSEC, so its use is currently limited. If you want to bring it to the 21th century, you are welcome.
Metaclip – a simple distributed clipboard for the X Window system, using an ordinary HTTP server to share the contents of the clipboard.
SIP Logger – a simple passive monitor of SIP traffic, which sits at a router and reports all calls via e-mail. I use it to log lost calls when I am not at home. Git
KillerD – a simple daemon for automatic killing of login shells with idle time exceeding given limits, runaway processes and other system hogs. Almost everything can be easily configured.
MailDups – a small utility to be plugged into your procmailrc for easy filtering of duplicate mail based on Message-ID's. Git
Moe – a simple environment for running programming contests. Git
Netgrind – a tool for further analysis of packets collected by tcpdump. The current version is able to reconstruct TCP streams including precise timings, to dissect HTTP connections to individual transactions and log them, again including precise timings, and also to calculate lots of other statistics. The tarball includes several tools for filtering the statistics and visualizing them using gnuplot. Git
Sock – a simple interface between shell (or the command line) and network sockets. Git
File Mapper: A bunch of utilities for creating snapshot of directory structure (including MD5 hashes of files if requested) and finding differences between the snapshots. Useful for security audits and mapping changes performed by automatic installers.
System News: The superuser places a news file to a spool directory, the users are notified when they log in.

Obsolete programs

These are probably useless these days, but it's still possible somebody will find inspiration in them one day.

Usher: A couple of enhancements for the Majordomo list server: better queueing, list archival a'la Listproc and integration with SpamAssassin to fight spam.
Simple User Authentication System – a solution (not an ideal one, but a usable one) for authentication on a network containing one central server and lots of diskless machines. Communicates with a NFS server and tells it which UIDs to accept from which machine. Used at our faculty for a long time, if you'd like to try it, please ask me first for the latest version.
ADSP Tools: An assembler and some tools for the Analog Devices ADSP 2181 signal processor. Almost ready to be distributed, but no documentation exists yet. Seems to work very well and much faster than the original DOS tool pack.
A Linux driver for MOXA C218 multi-port serial boards from the dark ages when MOXA was refusing to give even a snippet of specs. Probably superseded by the current driver in Linux kernel.
Startup and Shutdown Scripts: A very simple, yet more powerful replacement for the zillions of startup scripts used by today's Linux distributions – consists of a configuration file describing all system services together with shell commands used to control them (everything has a reasonable default, so to describe an usual daemon, it's enough to write a single line with its name) and a simple C program which handles all system state transitions (generalization of run level changes) according to these rules. It probably still should be considered experimental, but I use it on all my machines for several years and I'm perfectly happy with it. Worth a try, but beware, the documentation is minimal.
An experiment in Syntactic Compression: compress Pascal programs by parsing them and encoding the parse tree statistically. Instead of decompressing to the same program, it generates an equivalent one.
Simple LInux Clustering Extensions are a relatively short patch to Linux Kernel 2.2.x which supports clustering with respect to maximization of computing power. Written as a term program for OS classes, but I don't have time to maintain it any longer.
Flop – a tool allowing direct floppy disk mounting and unmounting by normal users. Supports automatic disk format and filesystem recognition.
A power-daemon for certain (now hopefully almost extinct) UPS monitoring cards. Can be a good example of how to write a power daemon.
Display contrast control – a utility for notebooks equipped with Cirrus Logic LCD controllers.

Other operating systems

When the world was young, I was programming for Spectrum, Amiga and MS-DOG.

This page is maintained by Martin Mareš