I have had my
DNA
analysed at
deCODEme.
They found out that my maternal ancestry is determined by mitogroup
K1a1
.
My paternal ancestry is of the Y-group
I1a kind,
which is usually attributed to the Vikings.
I have grown up in a small village in the northern part of Germany
(Taaken,
where my father has a
fruit pasture).
Most of the time in school I spent at the
Ratsgymnasium Rotenburg.
In 1989, I received a diploma in Computer Science from the
Technische Universität Berlin.
After receiving my diploma I spent 18 months at AFB
(Arzneimittelforschung Berlin, now part of
Parexel
) doing real-time data
acquisition and analysis of EEG with humans. This work led my way
into 4 years as research engineer at the
Neurologische Universitätsklinik Tübingen
(
SFB 307B8).
There, I took part in every aspect of medical research from experiments
with human subjects, data acqusition, statistical computations to writing papers.
In 1995 and 1996, my focus of attention shifted towards building up
computer networks. Integrating Windows PCs and Unix machines via TCP/IP
payed off quite nicely. From summer 1996 until spring 2001 I worked as
development engineer at STN Atlas Elektronik GmbH
(now split up as Rheinmetall Defence Electronics)
in their
Simulation Division. STN Atlas (now Rheinmetall DE) builds
educational simulators like
ELTAM
and it was my task to take care of sound synthesis and the communication
system. This kind of work got me even more involved
with diverse aspects of Unix systems programming (Linux SMP, real-time
simulation, networking, acoustics and DSP). During these years, I also wrote
some documentation for the GNU AWK project and got involved with retrieval of
information from bioinformatics data bases. From spring 2001 to spring 2002,
I spent a year at iSenseIt, a company which
developed software for
bioinformatics applications
Since then, I have been working at
Orthogon on a product called
SMCF (System Monitoring, Control, and Failover).
I am willing to admit that ..
I have learned programming with the Texas Instruments
TI 57
programmable calculator
my first programming language was BASIC(Sharp MZ80K)
but Pascal and Modula formed my way of programming,
while practicing C and ADA pays off best nowadays.
in an earlier life, I fought with Transputers and Occam,
willingly learned languages of the future like Lisp and
Prolog
once programmed contemporary processors like the Z80, 6802,
6809, 68HC11, 68000, DSP56000 and even
an old PDP 11 (Pascal, assembly, microcode)
Compiler Construction
Like it or not, XML seems unavoidable (read this
Survey of APIs and Techniques for Processing XML
as an introduction).
When reading XML files, most developers write parsers following the
DOM approach with all its
disadvantages (large memory footprint, slow processing).
Developers prefer the DOM approach because it allows them to
implement the parser in a conventional style (reading one token
after the other). The well-known
expat parser
(implemented in portable C)
is built upon the event-based SAX approach, which most programmers
do not like inspite of its many advantages. The SAX approach
forces developers to implement their parser as a set of functions,
reacting to tokenized events in an asynchronous way. Such an event-
based scheme destroys the control flow of the parser (it is just
hard to understand and maintain, watch this
this example in C).
Building upon expat, I have designed a simple streaming pull-parser
(xml_puller.tar.gz)
which avoids the disadvantages of both approaches. The basic principle
of the API resembles the one implemented by
Aleksander Slominski in Java, but mine is implemented in portable C and
available under the GPL.
It is called a pull-parser because it allows
you to read one token after the other, making it possible to implement
the control flow in a more conventional style.
It is called a streaming parser because it allows you to read
an XML file as a stream of tokens, avoiding the need to allocate memory
for the entire XML file at once.
Some years ago, I started writing a code generator for
lcc,
the retargetable ANSI C compiler. Unlike most other code
generators for lcc, this one is not implemented with the aid of
the lburg tool. It is written as a back end that reads lcc's
output (target symbolic) and converts it into a hardware description.
The hardware description is coded in the language ABEL and implements
a dedicated processor, which executes exactly the compiled algorithm
and nothing else. A nice example is the
Euclidean algorithm,
compiled to fit into a CPLD.
Scripting Languages
The XML parser mentioned above is the basis of an
experimental extension
of the GNU Awk language. I wrote the extension because I needed a simple
tool for processing XML files. If you are interested, you can
download
the
patch
and apply it to
GNU Awk 3.1.3.
Stefan Tramm has described the procedure in a bit more detailed way
here.
When dealing with all those languages, do you also suffer from
syntactic diarrhoea sometimes but cannot afford to consult a
professional psychotherapist ? Try to talk to
Eliza, a computer assisted psychotherapist.
This JavaScript implementation resembles the famous program
by Joseph Weizenbaum.
TCP/IP Networking from routers to sockets
In the late 1990s, I have implemented an experimental feature of the GNU AWK programming
language (as of GNU AWK 3.1 it has been integrated into the official distribution).
Whereas networking in languages like C and Perl is rather
complicated and cannot be done without correct handling of many functions
from the socket API, the GNU AWK way of networking works without any special
functions. Here, you can download a
PostScript version, a
PDF version, or read
the online version of the documentation.
Bioinformatics
In 2001 and 2002, I worked for a company in the bioinformatics field.
Our aim was to supply an
integrated application
for processing data that comes up when dealing with
microarrays
(rectangular arrays of oligonucleotides, used for detection of specific DNA sequences).
A related application is the script I wrote for the GNU AWK manual.
This GNU AWK script is called
PROTBASE
and uses the BLAST service of the NCBI for retrieving information
about a particular DNA sequence.
Digital Signal Processing
Nonlinear Dynamics
Numerical Mathematics
It has been often said that a person does not really understand
something until he teaches it to someone else. Actually a person
does not really understand something until he can teach it to a
computer, i.e., express it as an algorithm.
Donald E. Knuth
Raytracing
Epistemology
Tax Deduction
In Germany, people like me receive only about 50 % of what our employer
pays us. The other half is taxes and all kinds of mandatory social insurances.
Here you can see how I avoid much of the taxes
legally. With this JavaScript table, you can also compute how much income tax
you would have to pay here.
The avoidance of taxes is the only intellectual pursuit that
carries any reward.
John Maynard Keynes
Surviving a Mixed Economy with least effort.
Capitalism is the extraordinary belief that the nastiest of men, for
the nastiest of reasons, will somehow work for the benefit of us all.
John Maynard Keynes
An overview of the documentation for
XMLgawk
(the experimental extension of GNU Awk with an XML parser) has become
publicly available. You can find a
project description
there and documents
in HTML, PDF and PostScript.
An abridged version of the
online documentation
that I wrote about the networking feature of GNU AWK has appeared.
In May 2001 as chapter 14 of the
O'Reilly book on GNU AWK.
This book is the third edition of the official GNU AWK documentation and
it is the first one to be published by O'Reilly.
An unabridged version of the original documentation is available
as a small booklet (
TCP/IP Internetworking With gawk.
).
This book is available from Lehmanns Fachbuchhandlung GmbH in Germany only.
In my free time, I like to read books about the topics mentioned above.
Sometimes, these books inspire me to write software which implements some
of the ideas presented in the books. Another outgrowth of reading books,
thinking about them, and writing software is writing articles about it all.
For some of the articles, I have prepared a preprint for you (in PostScript).
Most people associate Nonlinear Dynamics with fractals and colourful pictures.
But research in this area (in conjunction with the availability of extremely
powerful processors) has led to real world applications. Today it is possible
to aqcuire data with a PC sound card and analyze it in real time. This article
presents basic algorithms and a modular software for testing assumptions
like linearity and determinism:
You have probably seen a picture of a fractal somewhere, a visualization
of the behaviour of a system, which is ruled by nonlinear forces. But have
you ever listened to a chaotic system ? This article presents
a nonlinear (Duffing-) oscillator which produces chaotic sound in realtime on
several platforms (Linux, IRIX, Win32). Besides a nice plot of a
fractal attractor
(Poincaré section, computed in realtime),
you can find some advice on writing portable applications in the article.
In a short overview article, I have also presented the above mentioned
contributions to the GNU AWK project. This article is meant as an introduction
for Linux users.
Years ago, at times and places so far away that it looks like a different
life, I was involved in medical research and co-authored some
extremely uninfluential papers that no one will ever read nor benfit from
(except some co-authors):
Altenmüller, Gruhn, Parlitz, Kahrs; Music learning produces changes in brain activation patterns:
a longitudinal DC-EEG study;
IJAM 5 (1) 28-33
Gerloff, Marckmann, Kahrs, Altenmüller; Dipolanalyse bei DC-Potentialen: kortikale und subkortikale Generatoren
während Sprachverarbeitung;
Z.EEG-EMG 24, 193 (1993)
Altenmüller, Marckmann, Uhl, Kahrs, Dichgans; DC-Potentiale zeigen entwicklungsabhängige Änderungen kortikaler
Aktivierungsmuster während Sprachverarbeitung;
Z. EEG-EMG 24 (1993) 41-48
Jobert, Kahrs, Jähnig, Krayenbühl, Felder; Optimale Filterung und Verarbeitung von EMG-Signalen:
Ein Verfahren zur Quantifizierung der EMG-Aktivität;
Z. EEG-EMG 24 (1993) 167-173
I like books. Books can span distances in time and space.
They can present and preserve insights and attitudes.
But a book as such is just a pile of paper -- unless you read and
take care to understand it. I know, reading and understanding is hard work.
I feel a deep respect for the writers of these books, who have often
struggled hard and sacrificed precious times of their lives writing them.