Tuesday, November 17, 2009

I've written this text originally over 10 years ago but just wanted to preserve here. It shed's a bit of light on my long history of computers, coding, hacking etc.

Phil's story of his life


I was born on the 11th of august 1970 in Esslingen a.N., South Germany. My family only spent three years there until we moved to a small village called Kirchentellinstfurt close to Tübingen, a city only about 20 miles away from Esslingen as my father got a job there as a university professor and teacher for gymnastics.

I had a rather uneventful and standard youth but with parents which after looking back now really did a good job.

The big change in my life which put me on a different path than most of my childhood friends happend when i was introduced to computers in 1981. It was at our mid school (called Gymnasium in Germany) where we had an old Pet 2001, a machine with a 6502 CPU with 1 Mhz and 1KB of main memory. At the same time a friend of mine bought an Atari 800XL on which we played a little and typed in BASIC games from game magazines which we utterly didn't understand and sometimes just randomly changed lines and values (which actually sometimes lead to really interessting results). During that year Commodore released the C64 in Germany for a very reasonable price and so i asked my mother if i could get one from my saved money and she agreed.

I guess that was here first and only big mistake she made ;) (just kidding).

After i bought the C64 together with a tape drive i started also typing in programs from magazines and changing stuff again, but it was very dissatisfying that i didn't understand what and why things happened, so i started buying books and read them. Over the period of several years and spending nearly every afternoon and evening in front of the machine i started understanding the machine and at the end knew every single register and all the peeks and pokes of it. During that time i also first started writing own programs in BASIC, but after a while and with the need for more speed i switched to assembly language.

The books included logically Rodney Zak's "Programming of the 6502" and the big books of Data Becker, a German publishing company which did a pretty good job on books about the C64, the Atari 800XL, the Atari ST and the Commodore Amiga later on. I still have nearly all of my old books at home, although most of them are very outdated by now.

After about 5 years i nearly knew everything there was to know about the C64 and basically programmed everything i needed on my own, so i began to feel the need for a new challenge.

Again by pure coincidence Commodore came out with the Amiga in 1986, and due to a serious motorcycle accident i had in that year where i spent 4 weeks in hospital i got a good amount of money of the lawsuit against the driver and i was able to buy one of the first Amiga 1000 in Germany.

This was now a whole new dimension for me, the Motorola 68000 CPU with 7.44MHZ and 512KB of main memory. I now could do things i never was able to do on my C64 and started the same process as on my C64, mainly learning the BASIC dialect of the included BASIC and getting accustomed to the machine. But just the operating system itself was already much more complex and getting to know the rest of the special hardware took again some more books and time.

I started learning C and Assembly on the Amiga as well, but never quite grew comfortable with the whole system itself and at that time wasn't able to appreciate the underlying multitasking system with which i would be confronted later in my life again, namely UNIX, but more about that later.

The few mid and later high school friends who also worked with computers during that time nearly all switched to the Atari ST which had a little more speed and basically was much cheaper, so after 1 1/2 years i also got an Atari ST in 1987.

Here i felt comfortable much quicker as the Atari was much more like the old C64 than the Amiga, a much simpler design and architecture, so i started doing most of my work on this machine, also because the few computer people i knew mostly all worked with the Atari and so we were able to exchange information and learned from experiences of the others as well.

We started a small "group" for which we did some projects and demos which in turns we then displayed at the Atari fair in Duesseldorf every year and had a lot of fun there hanging around. Sometimes to push our abilities to the limit we did small coding competitions where we set a goal for a project and whoever did the best/fastest code won. During that time i learned a lot about very low level optimization techniques, real time computing and algorithms. The things i did included 3D vector and pixel routines for starfield and object simulations, scanline colormap switching to get really nice color effects, very fast sprite routines for arbitrary objects, 2- and 3D function plotters, fractal programs, a few small board and card games with AI and various simulations based on articles of A. K. Dwendey in Scientific American, one of my favourite authors up to today. I probably did a lot more things with my Atari and my Amiga but nearly 10 years have past since then... Man, time really flies by doesn't it?!

At the end of my high school time in 1989 i did my first commercial software for a company in our area. They needed a program that build a cross reference list for their variables in their special BASIC dialect. I didn't get a lot of money for it, but i learned a lot about project plans, deadlines and a quite a few other things. After i finished high school and a few very productive years in very low level programming i started my studies of computer science at the University of Tübingen in 1990. There i was confronted for the first time with UNIX machines and the Internet which should change my view of computers once more.

I had already done a lot of stuff with my modem at home but mainly with BBSs' so the impact of the Internet really hit me after a while. At first i didn't really get it, but after long night hours in Nightfall, a M(ulti) U(user) D(ungeon) running on one of the UNIX machines at our university i started to understand the concept of multiuser and multitasking systems like UNIX and how and what a network was and how the Internet resp. TCP/IP worked.

After long years of resistance against Intel machines in 1991 i finally decided to buy a 486/33Mhz with 8MB RAM and a 500MB IDE drive. I did this because i really was pissed by the marketing and development by Atari and Commodore because the new machines were way to expensive and didn't offer any reasonable advances over the old ones. I still have the floppy and the keyboard of my my first PC in one of the machines i am using these days now at home.

In the beginning i didn't use the PC for much else than playing games as most game companies shifted more and more to the PC. I still did all the programming and development on my Atari ST or my Amiga though.

This changed between 1992 and 1993. I already was quite comfortable with UNIX as we had some nice workstations pools there, including good ole Suns, HP and AIX machines. UNIX was really something new for me, but i already shifted more and more of the development i did to those machines due to stability and performance.

During that time i also had a job at the computer science center at our university as assistant for the C programming course exercises. I was already pretty good in C and more or less did the teaching as well as the professor who taught the course wasn't the best teacher i ever had seen to put it nicely. During that time i also won the first price in a programming competition from a magazine. The task was to write the shortest C programm to calculate and display all prim numbers between 1 and 100000. The final result was this 67 byte long program here:


main(){int i=9,j=99999;for(;--i;j%i?1:--i?i=--j:printf("%d\n",j));}

Try to figure out what happens here on your own. If you have problems feel free to drop me an email, i'll give some hints :). I probably could have submitted that line to the OCC, the obfuscated C contest, but wasn't sure about the legal stuff as i had been published in that magazine so i didn't do it.

So i really got accustomed to UNIX quite quickly due to the work there and the time i spent there to port software packages from one UNIX to another and writing my own programs, e.g. a X11 display program for the pictures rayshade, the predecessor of povray, produced.

In the summer of 1992 i accidental found out about Linux and installed it on my PC at home. Most people don't know these versions anymore, but the first kernel i used on my machine was the 0.96. Since then Linux has been my main platform for my software development and probably will stay it for quite some time more.

During those first years at the university i wrote a lot of programs on the UNIX machines to learn how they worked. One of the biggest projects i did during that time was a battleship program with a very good computer AI and a really usable text based user interface and TCP/IP network support.

In the end of 1993 i quite the job at the computer science centre due to some problems i had there with the people. I also had an offer for a much more interesting job at a workgroup at the Max Planck Institute for biological cybernetics. They were in the process of building up their system which consisted of a dozen SGI workstations and an Onyx RE 1. They needed someone to do software installations and every day jobs to get some load off the system administrator there, so i took it.

I had and still have a very nice time there as the people and especially the boss there are very open minded and flexible. A lot of it had to do with the fact that Prof. Buelthoff had been 7 years in the USA and therefore it was kind of a 'DO-IT' mentality there. If you knew how to solve a problem you just did it and didn't have to ask 1001 people and sign 1001 stupid papers before doing so. I also learned a lot more about the internals of UNIX there as in 1995 the second system administrator quit and i took over the whole job as sysadmin for a lab of 40 SGI and several Macs and PCs', including two Onyx machines as a half day jobs while i was still studying computer science. Looking back it was really hard but all in all i think i did a very good job.

Between 1993 and 1996 i also had a weekend job as a freelance PC consultant and technician where i would advise people which machines to buy for specific tasks, install new components or software and help them with hard- and software related problems. A lot of the PC knowledge i have now is due to that work i did back then.

I didn't do much own software development during that time anymore as i had my daytime job at the MPI and my studies at the university.

In 1995 i went to the USA for a two month holiday during my semester break with my former girlfriend. She came from California so we first visited her mother and her uncle in Carmel by the Sea and Monterey. After two weeks we rented a car and started our long trip through the whole country. We first drove to LA to visit another friend of her. The next stop was in Denton/Texas which is about 50 miles north of Dallas, where two friend of use lived. Then the trip took us to Boston to another friend of ours where we rested for a week and i had a chance to see the MIT and Harvard and the nice little pubs all over the place. The next stop was in Guelph, Canada, about 50 miles west of Toronto where we only stayed two days or so. Luckily we drove by the Niagara falls which was really impressive. On we went from there to Seattle where a old high school mate of Dana was living with a friend of him. On that way we passed Mount Rushmore with the four faces of the presidents on it, over the Rocky Mountains and through Montana. From Seattle we drove back over Portland and Euegene to Carmel. I think i still can say that this has been my most favourite holiday i ever had, especially as we went through more than 20 states, more than many native people do in their whole life.

It was during that time that i decided that i want to move to the USA someday and work there. It really was kinda love at first sight.

In mid 1996 the lab at the MPI finally got a new full time sysadmin and i was released from the heavy duty job. It was also during that time that i got an offer from one of the most famous computer science places in the world, the Bell Labs of AT&T. One of the guys from the MPI was doing some cooperation with a department there and they needed someone with good CS knowledge during the summer and he recommended me. Logically i instantly said yes and i had the luck to be selected.

It spent nearly three months there working on a project to bring an in-house software for computer learning into the Internet via a webserver and lots of tools around it. I had to do a lot of cleanup work on the code first as stability and speed were two of the major factors of the whole thing, so i had to understand the C++ library of 30 000 lines of code first and then do the necessary changes. This left only a couple of weeks at the end for the webserver project itself which was scheduled for two months, but with some late night shifts i managed to do that also in time which none of the people there belived anymore. I hacked in the last lines of code 4 hours before my plane left from Newark, and the webserver is still up and running.

The in-house software for computer learning developed there is based on a completely new idea for computer learning called the Support Vector Machines or short SVM. If you are interested in this kind of thing take a look at this page.

The people there were very pleased with my performance and work and wanted me to come back as often as possible, so since then i always spent my semester breaks there to do more work on the software itself and the webserver. They also already offered me a pretty good job there which i definitely will take as soon as i am finished with my MS in CS.

As real programmers should know all of the founders of Unix and C are employees of AT&T, namely Brian Kernighan, Dennis Ritchie and Ken Thompson. I had the unbelievable luck to meet one of them, Brian Kernighan. It's a nice story so i'll simply tell it from the beginning.

A very good friend of mine, Frank Siegert (also one of the wizards.de guys) offered to pick me up from the airport after my first trip to the Bell Labs in 1996. The day i came back happened to be also his birthday, the 1st of November. So i figured i had to get something really special for him as a birthday present. I usually tend not to give any birthday presents to anyone because i often don't know what to give and i never expect to get anything on my birthday either. But this was a little different as i knew that he was a geek as well and that i should be able to find something geeky in the Labs somewhere.

One afternoon i was talking with some of the other guys from the department and we somehow came across the fact that the founders of Unix all were still working in the Bell Labs. I instantly got the idea for the present: An edition of 'The C Programming Language' by Brian Kernighan and Dennis Ritchie signed by one of them. As i already knew a little more about Kernighan i decided to get in contact with him and ask him if he would do that. So i searched for his email address and wrote him a mail with this idea i had. 15 minutes later i got a reply from him saying that he would be happy to do that, the only problem being that he was in Boston for a sabbatical right now to teach the introductory course for computer science at Harvard. As i had already plans to go to Boston for a weekend anyway i quickly replied that i would be in Boston for a couple of days and asked if we could meet somewhere there. He responded that this should be possible and gave me his phone number there and that i should call him as soon as i got to Boston.

So the weekend finally came when i went to Boston. I had already bought three books (one for my friend, one for me and one for another German guy who was working during the semester break in the same department as i) and called him up. We fixed a date for a Saturday afternoon in the cafeteria of the CS building on Harvard campus (which i luckily already knew where to find) where i went the next day. I think the moment i saw him coming through the door of the CS building was one of the few moments i will never ever forget in my whole life. I still get tears in my eyes when i think about that moment like now. It is probably hard to understand for non-geeks, but this was like meeting your favourite actor or band member, something you might dream of but which hardly ever happens.

We first shook hands (which i didn't wash for a couple of days, honest!) and then went to the cafeteria. We talked about tons of things and he showed me the lecture hall where he held the intro course for CS. One might say a lot about Harvard, but i really have to say having Brian Kernighan do the intro course in CS is really cool and absolutely has style. He talked a little about the things he did and does, asked some questions about what i was doing, a little about my past and my future plans and things like that. Time went by much to quickly but after about one hour he had to get back home. I luckily remembered in the end why i wanted to meet him in the first place and so he signed the three books. I accompanied him to the subway station where we finally parted.

It was really something special for me and i will always remember him as a nice and humble person. He was nearly like i imagined he would be, just like a nice old professor.

When i came back to Germany and my friend picked me up i already had told him that i had a very special gift for his birthday. When he finally open his present he was at first a little puzzled and disappointed as he already had an edition of this book, so i mentioned to him to look at the first page. He nearly got a fit when he saw the signature and his hands were shaking. I guess the idea was really good :). For those of you not believing this story take a look at this image.

In 1997 and 1998 i also begun working for various companies as a freelance programmer on software projects in different areas. As i am very proficient in quite a few computer languages like C, C++, Java, BASIC, sed, awk, perl, sh, tcsh, SQL and some others and have been actively working in the CS field for over 16 years now and did nearly everything from low level assembly programming up to complete software packages i am quite busy now. It is really very satisfying to be able to have a job which started as a hobby and which i really like.

Currently (meaning summer 1998) my day job is to do my social service year here in Germany which every male has to do (or army service). This will last until end of spring next year after which i will continue my studies and want to finish them asap to finally get to the USA for good.