Software

The Fortuna Random Number Generator

Contents

Introduction

This page describes an implementation of the Fortuna random number generator in the Go programming language.

Fortuna is a cryptographically strong random number generator (RNG). The term cryptographically strong indicates that even a very clever and active attacker, who knows some of the random outputs of the RNG, cannot use this knowledge to predict future or past outputs. This property allows, for example, to use the output of the RNG to generate keys for encryption schemes, and to generate session tokens for web pages.

Moon-buggy

Moon-buggy is a simple character graphics game where you drive some kind of car across the moon's surface. Unfortunately there are dangerous craters there. Fortunately your car can jump over them!

The game has some resemblance of the classic arcade game moon-patrol which was released in 1982. A clone of this game was relased for the Commodore C64 in 1983. The present, ASCII art version of moon-buggy was written many years later by Jochen Voss.

Wisent: a Python parser generator

Contents

Introduction

When writing a computer program, implementing methods to read data from input files with a complex structure can be surprisingly difficult. For example, if the input data comes from an untrusted source, errors in the input file often need to be dealt with very carefully. If your program is written in Python and if the input data is sufficiently structured (i.e., if the format can be described by a context free grammar), Wisent can help you to implement parts of the input processing of your program.

A Simple Tracing Framework for Go

The trace package provides a simple tracing framework for the excellent Go programming language. Code using this framework can emit diagnostic messages using the trace.T() function. In normal operation, calls to trace.T() have no effect and are very fast. When tracing is enabled, in order to track down a problem or to explore the inner workings of a program, listeners can be attached to record and display all trace messages.

Main features:

The SHA-256d Hash for Go

The sha256d package provides an implementation of the SHA-256d hash algorithm (also known as "double SHA-256") for the Go programming language. SHA-256d is a cryptographic hash, first proposed by Ferguson and Schneier in the book "Practical Cryptography". The SHA-256d hash is used in the Bitcoin protocol and in the Fortuna random number generator.

The SHA-256d hash is obtained by applying the SHA-256 hash twice, i.e. by first applying SHA-256 to the data and then again to the resulting hash.

The JvJsDoc Documentation Generator

Contents

Introduction

JvJsDoc is a program to extract documentation from JavaScript source code and to present the collected information in a set of HTML pages. It is meant to be used together with the Google Closure Library and the Google Closure Compiler. Features of JvJsDoc include the following:

The development of JvJsDoc is still at an early stage, and there are still several known shortcomings of the program (e.g. inline JSDoc comments are not yet handled), but it works well enought that it is already useful for day-to-day work.

jvqplot - a very simple data plotting program

Contents

Introduction

Jvqplot is a data plotting program, resembling a simplified version of gnuplot. It is very simple to use, but it can only plot simple data files. The format and scaling of the plot are automatically chosen and cannot be changed. One of the main features of jvqplot is that the plot is automatically updated whenever the data in the input file changes.

Usage

Jvqplot can plot data from files. The input file must consists of numbers, arranged in columns. The first column corresponds to the horizontal axis. For each of the remaining columns a line is plotted which displays the corresponding values on the vertical axis.

PSFile: Generate PostScript files with Python

Contents

[psfile test image]

Figure 1. Output of the script from example 1, below.

new jvlisting release

jvlisting is a LaTeX package which provides an alternative to LaTeX's built-in verbatim environment. The new release, version 0.5, fixes some bugs and cleans up the TeX source code a bit.

I hope you find this package useful. Bug reports and comments are very welcome!

Jvterm

Introduction

Jvterm is a terminal emulator, somewhat similar to the Linux text console or the XTerm terminal emulator. Usually it runs in fullscreen mode, so you can use it to make your X11 desktop look like a boring text console ;-)

Some distinctive features of jvterm are the following:

Jvterm was implemented by Jochen Voss.

Jochen's Sliding Picture Puzzle

Contents

Introduction

Jochen's Sliding Picture Puzzle is a puzzle game which you can play in your web browser. It is implemented as an HTML5 app and requires a modern web browser with good HTML5 support to play.

[webpuzzle screenshot]

A screenshot of Jochen's Sliding Picture Puzzle

Programme

Für meine eigenen Programme verwende ich meistens die Programmiersprache C, manchmal auch C++ oder Python. Einige Programme, die ich im Lauf der Zeit geschrieben habe, finden sich auf dieser Seite. Vermutlich lassen sie sich nur auf Unix-Systemen compilieren. Über Kommentare oder Verbesserungsvorschläge zu den Programmen würde ich mich sehr freuen.

Mathe

  • Fast-dm ist ein Programm zur Parameterschätzung für Ratcliff's Diffusionsmodell.
  • Ich habe die Ziggurat-Methode zur Erzeugung von Normalverteilten Zufallszahlen implementiert.
  • Die Bibliothek jvrand enthält einige Routinen zur Erzeugung von Zufallszahlen und zufälligen Permutationen in C-Programmen.
    jvrand version 0.6.1, 2005-07-24
    jvrand version 0.6, 2005-07-05
  • Kommandos zur Erzeugung von Zufallszahlen beziehungsweise zufälligen Permutationen. Die Kommandos sind als Hilfsmittel für die Programmierung von Shell-Skripten gedacht. Das Packet benötigt die jvrand Bibliothek, die es ebenfalls hier gibt.
    random-utils version 0.5.1, 2005-06-12
    random-utils version 0.5, 2002-10-13
  • Das Programm XIsing simuliert ein stochastisches System, nämlich das Ising-Modell. Das Programm benötigt das X Window System.
  • Das Programm graphcrypt implementiert als Spielzeug ein Verfahren der Visuellen Kryptographie. Es benötigt die Bibliotheken jvrand (von hier), SDL und SDL_image.
    graphcrypt version 0.2.1, 2005-05-30
    graphcrypt version 0.2, 2001-09-18

TeX

  • Ich habe einen TeX-Zeichensatz entworfen, der nur Symbole für die natürlichen, ganzen, reellen und komplexen Zahlen enthält. Es gibt auch ein Style-file um den Zeichensatz leicht unter LaTeX verwenden zu können.
    jvfonts version 0.4.2, 2004-07-01
    jvfonts version 0.4, 2002-10-27
  • Ich habe einen TeX-Zeichensatz entworfen, der nur aus den sechs möglichen Augenzahlen eines Würfels besteht.
    dice version 1, 2007-05-27

Spiele

  • Das Programm golist enthält Scripte zum verwalten einer SQL Datenbank mit Go-Spielergebnissen. Es versucht dann, die Spielstärken der beiligten Spieler zu schätzen. Das Programm benötigt im Moment einen MySQL-Datenbankserver und die Python-Entwicklungsbibliotheken.
    golist version 0.4, 2003-07-19
    golist version 0.3, 2001-09-01
  • Das Spiel Moon-buggy wird auf der Moon-buggy download page beschrieben.

Sonstiges

  • Wisent ist ein LR(1)-Parsergenerator für Python.
  • Jvterm ist ein Terminal-Emulator, ähnlich der Linux-Textconsole oder dem Programm XTerm.
  • zettel ist eine Mischung aus TODO-Liste und Terminkalender. Das Programm läuft im Text-Modus und ist in Python programmiert.
    zettel version 0.2, 2005-05-29
  • Das Programm SandUhr ist eine Art Wecker, der das X Window System und die GNOME Arbeitumgebung benötigt.

Parallel

Contents

Introduction

Most modern desktop machines have considerable computing power, provided by one or more multi-core CPUs. Parallel, the program described on this page, provides a simple way to use this parallelism in the case where just a number of independent programs needs to be run. Parallel has the following features:

  • Parallel reads a list of commands from a file,
  • it starts as many of these commands as there are CPU cores in the system, and
  • as soon as one of the jobs finishes it starts a new command from the list until all jobs are processed.
[jobs]

Figure 1. This is an example of how 12 jobs could be scheduled over 3 cpus.

SandUhr

Introduction

[sandfig1]

SandUhr is an alarm clock, which is designed as an hourglass. The program uses the X Window System and the GNOME desktop environment. The alarm is delivered to you by either ringing the console bell, by playing a sound file, or by starting an external program of your choice.

The program is fully integrated into the GNOME application framework.

  • It uses the GNOME help system to provide an extensive manual.
  • Use of CORBA: The program features a full-grown CORBA interface. So you may control the SandUhr from within your own programs or plug in custom alarm actions.
  • It has support for the GNOME window manager hints.
  • Drag and drop: you may drop a color onto the timer to change the sand's visual appearance.

SandUhr was implemented by Jochen Voss.

new LaTeX package "jvlisting"

A while ago I finished my first home-made LaTeX package. The new package is called "jvlisting" and provides a replacement for LaTeX's verbatim environment.

This package provides the LaTeX environment listing, an alternative to the built-in verbatim environment. The listing environment is specially taylored for including listings of computer program source code into documents. The main advantages over the original verbatim environment are that

  • The listing environment automatically fixes leading whitespace so that the environment and program listing can be indented with the rest of the document source, and
  • listing environments may easily be customised and extended.

You can download the package and its documentation from my webserver or from the jvlisting page at the Common TeX Archive Network (CTAN). I'd be happy if you could give my package a try. Comments about jvlisting are very welcome!