FreeBSD anybrowser Valid XHTML 1.1! Valid CSS! Vim logo
Last change: 24-Jul-2013
 Table of Contents What you will find here

 Self Portrait  (in FAQ style)

Q: Where do you want me to send my love letters, job offerings, cheques, birthday gifts and whatnot?

A: snail: Teckstra▀e 20, D-71384 Weinstadt, Germany. You can email to schweikh@schweikhardt.net; for confidential information, please use my public PGP key.

Q: I can't wait to hear your voice!

A: Home: +49 7151 909516.

Q: Where is your CV? Do you have any references?

A: Here you can find my CV and references (in German).

Q: How old are you and when is your birthday?

A: I'm 45. Check this page regularly to find out when the number bumps. Alternatively call, write a postcard or visit me.

Q: I'd love to see a picture of you! Can I?

A: No problem, just ask me in em@il and I'll tell you the URL with a pretty picture of me. If this is too much hassle for you then you're not really interested in seeing me...No, I don't have to hide from anyone, on the contrary, but I'm not the exhibitionistic kind. I just want to keep the girls from running down my door :-)

Q: Any plans for Saturday night?

A: Depends. On the Saturday.

Q: Where do you work?

A: Starting Jan 1st 2013 I am employed by Tesat Spacecom, engineering high-bandwidth optical communication links between satellites. Yes, lasers in spacecrafts :-) Starting May 1st 2009 I was employed by Rohde & Schwarz. Starting November 1st 2008, I was employed by Sun Microsystems as a software engineer improving Sun's virtualisation product, VirtualBox. Beginning Jan 1st 2001 I worked as a software engineer in the systems software field for Marconi Communications. Marconi was acquired by the swedish Ericsson in January 2006. We built SDH equipment (the hardware that switches fiber or radio traffic) and other telco gizmos and chances are it is used to transmit the packets for this html page you are seeing right now. Before that I worked at the Network Operation Center of the DFN. To put it in a nutshell, the DFN provides IP services to almost every university and research institute in Germany. It's the largest national ISP in Europe. My tasks were detecting, analyzing and debugging wide area networking problems, writing software to deal with various networking related questions, designing and implementing security solutions, administering our workstations and lots more beyond.

Q: Would you do some contract programming for me?

A: If it's in Standard C (+POSIX, any Unix API) or Perl or just using the Unix tool box, I'm the one to make it happen.

 Scientific Career E=mc2

I have studied Physics at the University of Stuttgart, Germany. After the mandatory basics like classical mechanics, thermodynamics, mechanics of continua, quantum mechanics and electrodynamics I have specialized in synergetics and quantum optics. Quantum optics, especially in conjunction with lasers and holograms is a fascinating subject (I bought me a laser and recorded holograms at home), hence I wrote what we call Diplomarbeit in Germany (a one year scientific project) on the subject "Digital Holography Using Liquid Crystal Displays". It's written in German, of course. You can download that beast, it's a 4.4 megabyte gzipped PostScript file. It describes my results using conventional LCDs (which you find in video cameras) as spatial light modulators to produce phase holograms. Yes, it works!

Since early 2001 member of the Institute of Electrical and Electronics Engineers (IEEE).

 My philosophy about computers Are you master or slave?

I view a computer as a tool to get work done. In order to be efficient I have refined the environment in which I work over the years. At the risk of stating the obvious: the software I work with everyday must be powerful, flexible and reliable. The most basic components are in my opinion (in decreasing order of importance)

  1. the operating system
  2. the shell
  3. the editor
  4. the window manager

The OS must not get in the way when heavy work is due - no limits, not on file size, not on memory, not on processes, not on diskspace, not on cpu usage. A powerful development environment consisting of more than just the basics, like compiler and debugger, is essential. I have found UNIX to meet all my requirements and it provides me with a lot more beyond. The flavor is secondary. At work our group uses Solaris with lots of additions from publicly available sources. Every now and then I have to deal with AIX, HP-UX, OSF/1, IRIX, or Cray's UNICOS. At home and in my spare time I used to work with Linux (from the 0.99pl14 days to 1.2.13). In 1995 I switched to FreeBSD, God's own operating system, motivated mostly by the clean development cycles and the ports concept, which is a marvelous Good Thing™ for someone like me who compiles just about any software himself. You will have a hard time convincing me to touch anything other than a UNIXoid system.

For compatibility reasons, a Bourne compatible shell is a must. Apart from that, who wants to have a different syntax for interactive use and programming? I have found the GNU Bourne Again Shell (bash) to be an amazing improvement over ksh. Recently I read the docs for zsh. The zsh programmable completion looks like a labour saving device to a command line fetishist like me and I'm thinking of switching to the zsh because of this promising feature. [In 1998 I gave zsh a try and immediately fell in love with the programmable completion. It's a life saver once you get used to compctl syntax.]

I'm at home on more than a dozen of UNIX workstations so my choice of editor is clear as can be. Nothing beats vi or one of its clones like nvi or vim. Admittedly, I was not very comfortable with vi the first month - no, this is an understatement; I hated and cursed vi. After a while however I got used to the modes and became more proficient every day. When I realized the elegance of the design I started to actually love vi and advocate it. Today I would not want to live without it and I would invent it if it weren't already...

Don't you know this too: no default suits your needs; you frob every knob until you are satisfied? That's the reason I use ctwm, a highly configurable twm clone. Popup menus can be bound to keys, as well as switching between virtual screens. I just like to keep my fingers on the keyboard. The interpolated menu colors are really a screamer.

About Bugs

Experience has shown that Murphy is right - there's always one more bug. However I can't stand having bugs in the software I use. So whenever I find one and can fix it within reasonable time then I do so. If this is impossible like for proprietary software without source or because I'm not too familiar with the code, then I write a bug report. Yes this sometimes is a daunting task. Getting someone from <random vendor> to listen to you is often frustrating. Seeing bugs persisting in the next release, however, is even more frustrating so that's no reason for me to keep quiet. Apart from that there is lots of free software for which reporting bugs is no hassle at all. For example, bash comes with a bashbug script. One reasonable bug tracking system I found so far is FreeBSD's send-pr (actually GNATS) to mail a problem report to the development team. For every report I ever sent I got an instant reply and some time later a fix. You can inspect the bug database and see whether it is already known and who is working on it. This is one reason why FreeBSD has become so stable over the years. An open ear for bug reports, what a Big Win.

 Programming in C My #1 expertise

That's where I'm really bad at. In fact my C programming skills are so below average that I have won three awards in the International Obfuscated C Code Contest in 1996. With the first hat-trick in the thirteen year history of the IOCCC I have entered the Hall Of Shame.

I can hardly believe it myself. As of June 11 1999 I was informed that I won a second hat-trick. That's two in a row. Why is it so hard to decide whether to be proud or embarrassed? Why am I a C programmer and not a tennis star?

The saga continues. In the 2001 contest I was awarded a prize for the Best One-Liner.

See below for my uncensored original IOCCC entries.

As if this were not enough, I keep confusing C newbies and old farts in the newsgroups comp.lang.c, comp.lang.c.moderated, de.comp.lang.c (in German) and comp.std.c with my uncalled-for advice :-\

I have written a chess problem solver engine; it's designed to solve "White (or Black) mates in N moves". The urge to write it came over me because no chess program whatsoever does what is needed. Namely, understand en passant capturing, underpromotions, and possible castlings. Apart from that, no chess program or computer I've seen gives me a complete answer, just the first move. The result of my engine is a move tree showing all possible moves and answers leading to check mate, if any, or a move tree showing all escapes. You could use it to check or debug your own problem compositions. No, it doesn't play chess at this time; there's only a move generator and a simple position evaluator. The source is 100% ISO C89 with optional POSIX extensions for timing measurements. For some reason I don't think it's ready for prime time and I give it only to people asking me explicitly. Nevertheless I ran it against a 1001 problems database and feed it our local newspaper's weekly problem. It performs excellent, IMHO.

 The IOCCC An international C Programming contest

Why I like the IOCCC

It's a contest that doesn't require resources only a few people on earth can spend, like:
  • heavy machinery (like you need for the fastest crossing of the Atlantic Ocean or travelling around the world in a balloon). Just a small bitty box with a C compiler and I'm set.
  • Loads of $$$ (see previous paragraph). Having a few good books handy, among them a C reference or The Standard itself, is enough.
  • Physical power (like going for the weight lifter world championship) or endurance (Ironman Triathlon). Playing volleyball and doing some cycling every now and then seems to help, though, as my case demonstrates...
  • Perfection is reached not when there is nothing more to add, but when there is nothing more to remove. The size limit encourages this philosophy in our world of bloat.
The other ingredients (besides C compilers [note plural!] and books) for a successful career as obfuscator magnus are
  • A creative mind. You want to boldly go where no programmer has gone before. Without imagination, you're bound to run in circles or reinvent the wheel. If you wanted to become an inventor ever since your kindergarten days, you're certainly on the right track.
  • Time. IOCCC entries are rarely written at 1 KLOC/day, rather at 1 line of code per hour, if I include everything, like overhauls, debugging and testing on various implementations. Programming is comparable to doing science: the results you publish in a research journal are never those from your first measurements. The experimental setup is tweaked time and again to get at a clean signal with as few noise as possible. In the same way, the final program is never the one you had after the first successful compilation and run. Any above average program has seen many hours of fine tuning.

Here are my three winning entries of the 1996 IOCCC along with their original and complete remarks.

Best Algorithm

A special purpose expression evaluator.

Best Utility

Determines the memory allocation honesty of your operating system.

Worst Abuse of the Preprocessor

Calculate Easter dates within the Gregorian Calendar.


In fact I submitted a fourth entry, which did not win. In other words, it was a

Loser

rot13 invariant multipurpose utility.

Well, three out of four ain't bad, I think.


The 1998 IOCCC

After my first hat-trick I began hacking on more wild and unseen C programs. I've licked blood and it tasted too good. At first I was disappointed the 1997 IOCCC was cancelled due to Usenix lag but in hindsight it looks like the extra year was ideal for my entries to mature even more.

Most erratic behavior

Yet another random number generator.

Most space efficient

Samefile - find identical files that waste disk space

Worst/Best (Ab)use of the Preprocessor

stdc - test your implementation's standard conformance

Note: this source contains some formfeeds and vertical tab characters. Your browser may not adequately render those. The symptom is missing whitespace, e.g. the first line reads defineH(x) with no characters between define and H(x).

No Losers?

Yes, I submitted two losers. You won't see them here. They're just too good to waste them :-) You may see them next year...


The 2001 IOCCC

Back to normal. Just one out of three entries won. I'm proud that it is in a new category: best one-liner. Some might think one-liners are easy to obfuscate because they are so terse. Others might think they are hard to obfuscate because there is not much you can do. Decide for yourself.

Best One-Liner

match - a shell glob pattern matcher

 Contributions to the net.community Be social!

Try out Splint, a freely available ISO C89 compatible lint for which I have written the POSIX library.

Write portably. Know your names and headers in ISO C and POSIX.

Test your C implementation's headers for standards conformance with my isomac.c program.

I'm pleased to announce that the Internet Systems Consortium (ISC) has added my samefile utility to its treasure of software gems. Samefile finds files with identical contents (independent of the file name) and thus saves you many megabytes of wasted disk space. It comes with a configure script and compiles on any POSIX system. Read more about this useful program on the Samefile Home Page or download my latest version [2.12].

Need to write a manual page? Have a look at my Linux Man Page HOWTO. Also available in italiano

I have massaged the Standardized Bonehead Reply Form, comp.lang.c version. If you feel like posting it on some occasion, please go ahead!

For a good laugh, try my Swabian Compiler, a perl script translating text from German to Swabian (a German dialect.) It doesn't care what the input language is and I highly recommend feeding it your favorite man-page or love letter. Be sure to take a deep breath first, you will need it.

A treatise, Wider die Sinnmacher, on a certain philosophical dilettantism (in German only).

In April 2001 I became a FreeBSD Committer, which means I have write access to the source tree of God's Own Operating System. My interest is conformance to various standards, primarily ISO, POSIX and IEEE.

 The Human Being There is more

There's more to life than programming. In fact, hacking is far from being the most important pursuit. I am a human being living in a world with other human beings, near and far. It is important to realize our responsibility for our fellow human beings.

I am an active member in our YMCA. We offer several sports groups for people of different ages. My part is coaching our young girls volleyball team. We care for the fun part in our training lessons and maybe that is why the team has grown to almost 20 over the time. Offering this kind of pursuit for young people keeps them off the streets, is a good excercise in building team spirit, and it wouldn't be the YMCA if we didn't try to transport the Christian idea of responsibility towards our fellow human beings to the next generation.

Let us never forget that there live people on this planet whose fate is much less fortunate than our very own. For some of them even the word live could be considered a euphemism. Forlorn they rot in dungeons, are ill-treated or even totured, or await their execution. As a member of amnesty international I write letters to kings and queens, presidents and governors, ministers and generals, pointing them to the injustice done to the poor soul of a fellow human being. Can you imagine the feeling when you are informed that such a fate has been changed? A prisoner released? Torture ended? A death penalty converted? Yes, it really happens. "Everything you have done onto them you have done onto me."

 Books about Programming Each a Must Have

The following books are all on my book shelf. With the exception of C Traps (which is in my employer's library) I have bought them myself and looking back I can assure you that every buck was worth spending. It may surprise you but there is no book titled "Learn <random subject> in 21 Days", "Teach Yourself <random language>" or "<Whatever> for Dummies" among them. If I have a choice I rather go for the hard facts, in other words, a bible, standard or quasi-standard.

On C and UNIX (in random order):

Peter van der Linden, Expert C programming, Prentice Hall, ISBN 0-13-177429-8

Steve Summit, C Programming FAQs, Addison-Wesley, ISBN 0-201-84519-9

P.J. Plauger, Jim Brodie, Standard C - A Reference, Prentice Hall. ISBN 0-13-436411-2

Kernighan, Ritchie, The C Programming Language, 2nd ed.

Robert Sedgewick, Algorithms in C, Addison-Wesley, ISBN 0-201-51425-7

Andrew Koenig, C Traps and Pitfalls, Addison-Wesley, ISBN 0-201-17928-8

Kernighan, Plauger, The Elements of Programming Style, 2nd ed, McGraw Hill, ISBN 0-07-034207-5

Donald Lewine, POSIX Programmer's Guide, O'Reilly, ISBN 0-937175-73-0

W. Richard Stevens, Advanced Programming in the UNIX Environment, Addison-Wesley, ISBN 0-201-56317-7

W. Richard Stevens, UNIX Network Programming, Networking APIs: Sockets and XTI, Addison-Wesley, ISBN 0-13-490012-X

Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, John S. Quarterman, The Design and Implementation of the 4.4 BSD Operating System, Addison-Wesley, ISBN 0-201-54979

International Standard, ISO/IEC 9899:1990 Programming Languages - C

International Standard, ISO/IEC 9899:1999 Programming Languages - C, aka C99, available as a PDF file for about 18 US$ from Techstreet or from the ANSI Webstore.

International Standard, ISO/IEC 9945-1 (ANSI/IEEE Std 1003.1) Information Technology - Portable Operating System Interface (POSIX) - Part 1: System Application Program Interface (API) [C Language], Reference Number ISO/IEC 9945-1:1990(E) IEEE Std 1003.1-1990, IEEE, ISBN 1-55937-061-0

David R. Hanson, C Interfaces and Implementations, Addison-Wesley, 1996, ISBN 0-201-49841-3

John R. Levine, Tony Mason, Doug Brown, Lex & Yacc, 2nd ed, O'Reilly, ISBN 1-56592-000-7


On other programming languages:

Adobe Systems, PostScript Language Reference Manual, Addison-Wesley, ISBN 0-201-181274

Larry Wall, Randal Schwartz, Programming Perl, O'Reilly, ISBN 0-937175-64-1

Andrew Koenig, Barbara Moo, Ruminations on C++, Addison-Wesley, ISBN 0-201-42339-1

Bjarne Stroustrup, The C++ Programming Language, 3rd Ed 1997, Addison-Wesley, ISBN 0-201-88954-4

Don Libes, Exploring Expect, O'Reilly, ISBN 1-56592-090-2

Norman Walsh, Making TeX Work, O'Reilly, ISBN 1-56592-051-1

Helmut Kopka, LaTeX Einführung, Band 1, Addison-Wesley, ISBN 3-89319-644-1

Helmut Kopka, LaTeX Ergänzungen, Band 2, Addison-Wesley, ISBN 3-89319-665-X


About computers in general:

Douglas R. Hofstadter, Gödel Escher Bach (German translation), Klett, Buch Nr. 03283 9

David G. Stork (Editor), Hal's Legacy - 2001's Computer as Dream and Reality, MIT Press, ISBN 0-262-19378-7


Everything else:

The Bible

Aho, Sethi, Ullman, Compilers; Principles, Techniques and Tools, (The Dragon Book), Addison-Wesley, ISBN 0-201-10194-7

Simson Garfinkel, PGP - Pretty Good Privacy, O'Reilly, ISBN 1-56592-098-8

Craig Hunt, TCP/IP Network Administration, O'Reilly, ISBN 0-937175-82-X

 The Book about C I am Writing Coauthor wanted!

I nearly forgot! Yes, I am writing yet another (but my first) book on C which will be different from other books on C in some ways. It's not going to teach you C, at least not in the first place. Instead it will teach someone familiar with C how to use all the relevant stuff related to C. Here's an outline on the chapter structure.

  1. Standards
    1. C89
    2. POSIX 1003.1
    3. C99
  2. Compilers
    1. gcc
    2. lcc
    3. Tendra
    4. POSIX c89
    5. POSIX c99
  3. Interpreters
    1. Cint
    2. EiC
  4. Debugging
    1. self instrumented
    2. gdb
    3. ddd
    4. electric fence
  5. Lint & Splint
  6. Make
    1. Getting started
    2. POSIX make
  7. Lex
    1. Crash Course
    2. Hello World
    3. A Lexer for ISO C
    4. POSIX lex
  8. Yacc
    1. Crash Course
    2. Hello World
    3. A Parser for ISO C
    4. POSIX yacc
  9. Profiling
  10. Revision Control (RCS)
  11. Project Control (CVS)
  12. Check This out
    1. SFIO - Safe/Fast IO Library
  13. Other Tools
    1. Autoconf et al
    2. Indent
    3. Ctags
  14. Man pages
  15. A sample Project
  16. Programming for Fun and Honor: The IOCCC
If you think I am missing something, let me know. If you want to volunteer in peer-reviewing, please drop me a note. Be aware that version 1.0 of the book will be in German. An English translation is planned when the German version is completed. No, I don't have any date for you. All I can say is that I have yet to find a publisher. The C market is small; the C++, Java and object oriented language have taken over. It may never be commercially published. I may make it available for free on the 'net (but then I'd have to remove some copyrighted material for which I have only permission to publish in print.) Maybe I find a co-author to compensate my burn-out.

The first 300 pages took me about 3 hours per page, including everything, the research, the programming, whatever. My intention is to write a high quality book, not something put together hastily. The comp.lang.c regulars shall one day recommend the book. Quality does not materialize spontaneously. It needs, like any extraordinary craft, knowledge, accuracy, creativity, patience and time.

If you are working for a publishing company, I'd like to get in touch with you about an offer.

 Changelog For historians
Jul 22 2013 Bumped age
Jan 01 2013 New employment: Tesat Spacecom
Jul 22 2012 Bumped age
Jul 22 2011 Bumped age
Jul 22 2010 Bumped age
Jul 22 2009 Bumped age
May 01 2009 New employment: Rohde & Schwarz
Nov 01 2008 New employment: Sun Microsystems
Jul 22 2008 Bumped age
Jul 22 2007 Bumped age
Jul 22 2006 Bumped age
Jan 24 2006 Marconi -> Ericsson
Nov 20 2005 Link to the samefile home page
Sep 25 2005 The human being
Jul 22 2005 Bumped age
Jul 22 2004 Bumped age
Apr 17 2004 Converted to XHTML 1.1
Sep 07 2003 Links to this page
Jul 22 2003 Bumped age
Oct 18 2002 HTML validation
Aug 13 2002 More books; more about my book
Jul 22 2002 Bumped age
May 20 2002 Wider die Sinnmacher
Mar 09 2002 Another IOCCC winning entry
Jan 27 2002 Added: Public PGP key
Jul 22 2001 Bumped age
Apr 17 2001 FreeBSD committer
Jan 01 2001 New employer, Marconi
Jul 22 2000 Bumped age
Feb 18 2000 Added: astronomy/astrology discussion pointers
Sep 20 1999 Added: Ohne Erwiderung typeset in Fraktur
Jul 22 1999 Bumped age
Jun 11 1999 Added: Another IOCCC hat-trick
Oct 15 1998 More poems
Sep 06 1998 Added: Some poetry
Aug 04 1998 Added: Swabian Compiler
Jul 22 1998 Added: Chess Problem Solver; bumped age
Jun 23 1998 Added: Original IOCCC entries
May 28 1998 Added: The book I am writing
May 20 1998 Added: Bonehead reply form
$Id: index.html.m4,v 1.45 2013/01/10 18:57:28 schweikh Exp schweikh $ Stop reading here.