Projects through the Ages
Projects through the Ages

Update: This page is way out of date, sorry. :(

Okay, here's the deal. I have tried doing a "me" page, well, about four times now. Of course, they get way out of date, I hate what I say, or (like the last one) I never finish it. To remedy this, I'm removing all the personal stuff from this web page and just putting a projects page up.

This projects page will probably get out of date fairly quickly, but it will still accurately reflect stuff I have done. You can probably guess that I keep doing projects and if this isn't updated for a long time, you can guess that I've started a few new ones on the side. If nothing else, this page will give you some interest about the diversity of my interests and areas of expertise I have developed over the years.

With all that said, here is some stuff I've work on, with a general idea of the timespan that I was involved with it:

  1. Miscellanous Projects
  2. University of Illinois Classical Fencing Club
  3. LLVM Compiler Infrastructure
  4. Advanced Raytracer
  5. kORBit Project
  6. GPF
  7. GRAS
  8. Operating Systems Web Page
  9. MagicStats II
  10. Lexer/Scanner written in Haskell
  11. Advanced Compiler in Java
  12. MagicStats 1.0
  13. High school senior project
  14. Graphics Programming Series
  15. General Web Site


Miscellaneous Stuff ...Ongoing...

In addition to the larger projects I have worked on below, I have contributed to a number of pre-existing projects.

  1. I have submitted several minor patches to the Linux Kernel
  2. I implemented the collapsing toolbars in Mozilla
  3. I wrote the CL5464 Laguna Chipset KGI driver for the LinuxGGI project (back when GGI was "the" framebuffer implementation for Linux)
  4. I have submitted patches to GCC and libtool
  5. I submitted several errata reports for the book "C++ in a Nutshell", including the first "serious technical mistake". Despite the presence of nit-picky problems, the book is still quite excellent though! :)
  6. I contributed clarifications to the Lex and Yacc HOWTO.
  7. I contributed several patches to Icarus Verilog while working on an MP3 decoder in verilog.
  8. While working at a large blue company, I ported the linux kernel to run in user space one of their unices. This provided 100% compatibility with Linux applications, emulating the entire system in a sandbox (very similar in idea to User Mode Linux, but very different in implementation). Unfortunately it was never productized, and is thus unavailable...

University of Illinois Classical Fencing ClubJanuary 2002-Spring 2005

I'm was the president of the University of Illinois Classical Fencing club. With considerable help from John Mainzer, I helped raise a new class of ~15 fencers from the ground up. This includes a lot of basic footwork & bladework drills, discussions on technique, and teaching the real purpose of fencing: to learn how to kill someone without killing yourself in the process. :)

When I originally wrote this, I fenced approximately 12 hours a week: 4 hours of 1x1 training for the Juniors, 4 hours helping John lead group practice, a 2 hour 1x1 practice with John, and a 2 hour 1x1 practice with Luda (another senior fencer).

Apr. 24, 2004: Here are some pictures from a tournament I attended in St. Louis. I ended up winning 2nd place over all out of about 25 competitors in the senior bracket. One of the students I helped train won 1st place in the junior bracket, out of 15 competitors.

LLVM Compiler InfrastructureDecember 2000-Ongoing

I am the primary architect of the LLVM Project, which I'm using as the basis for my M.S. and Ph.D. research. I am writing a vast majority of the code (over 250k lines of high-level C++ code, and rising), made most of the fundamental design decisions, and continue to be the primary "implementor" for the project. It is now reaching a critical point, where it is becoming useful for other people and their research. LLVM was used as the compiler infrastructure for the Advanced Compilers course at the University of Illinois, and the Advanced Compiler Construction class at the University of New South Wales in Sydney Australia. Note that LLVM is available for public download.

I am the author of several paper publications linked off of the main LLVM page.

Advanced Raytracer November 2000 - April 2001

Okay, okay... so everyone and their cousin has written a raytracer. So have I. :)

Mine is nice because it can do some advanced operations and shapes and stuff. I've put up some history and pictures on the Project Page...

kORBit November - December 2000

I was one of the main conspirators for the kORBit project... an experimental project to find out what would happen if you could write CORBA programs in kernel space. To acheive this, we ported the GNOME project's Orbit ORB to the Linux 2.4 kernel. We were able to expose kernel CORBA objects to user space, invoking methods on them from C and Perl user space programs.

Perhaps understandably, this caused quite a stir among the open-source/free software community, which somehow thought we violated the sanctity of both projects. You can read some of the (both positive and negative) feedback we got on slashdot.org, Gnotices, and Linux Today, along with my original announcement.

Interestingly enough, kORBit has been used as the basis for several other projects, and is now included in the FOLK kernel patchset.

GRAS February 1998 - 2000

Well now, I could rant on this topic for a long time. GRAS is a "Graphical Robotic Animator and Simulator", that I wrote in Java. It simulates a Puma or Pegasus robot (it's programmable and customizable with different data files) and renders it for manipulation. It performes direct and inverse kinematic calculations, looks nice and is pretty dang cool.

I could rant on this topic for a long time for two reasons. The first is that the professor (Mech Engineering prof, little programming exprience) that was supervising me (I use that phrase loosely...), decided it would be fun to A. steal credit for the paper I wrote and published, without even telling me B. Force me to withdraw from a robotics class that I had already passed with flying colors, and C. cause the University of Portland (the highest false proclaimers of ethics in the world) to completely ignore me and my repeated attempts to get anyone to do something about this. It's a long story, if you want to know more, I have a 6 page document I wrote that details everything that transpired down to the day. Just ask me, I'd be happy to send it to you.

The second thing that happened is that a man named Jeff contacted me and asked for a few enhancements. He was going to use it for the basis of a masters project he was doing, but didn't know java very well. I enthusiastically offered to help (like I said, I'm easy to redirect. :), and provided what he needed... I didn't hear back for a while (he's a busy person), but eventually he emailed me and ended up sending me a check (!) for my work... amazing, and a wonderful suprise. It remains the only compensation that I have gotten for my "efforts" (not that I'm particularly looking for money mind you, I'm just quite happy. :).

Operating Systems Web Page December 1998 - Ongoing

It was early December of 1998, after finals week. I realized that my long lived, long stale OS web page really was in need of help. I received a suprising number of hits to the site and had a fair number of comments and questions about the articles I had written for that section of my page... that I felt really guilty for not keeping it up to date.

So, I set out to create a better site. I decided that I couldn't be the sole contributor anymore (duh, I wasn't writing anything for it anymore), but I had a LOT of text files and various tidbits of info lying around that would probably be helpful for people. I decided to put up something like a library, where people can browse for the stuff that they are interested in, hopefully finding everything they need in one place.

Because of this, I started raking information in from all over the web. I culled organized and abstracted (and abstracted, and abstracted some more...). Soon I had a pretty decent collection of stuff and "went public". I had a lot of feedback and keep adding stuff... soon however, keeping the page formatted nicely became a real pain. So, I wrote some perl scripts to read the stuff I need out of a flatfile database (abstracts, authors, basically everything on the indexing pages), and have been very happy since. Lately I added an updates section (to keep me feeling guilty if I don't update it frequently enough), and have been doing a few minor things here and there...

You'd be suprised how many people ask how to get a boot sector copied over onto a floppy though... maybe I need a FAQ! :)

MagicStats II June 1997 - 2001

MagicStats 2.0 has had an exciting history... that has culminated in it becoming open source. Check out its Project Web Page!

Haskell Dynamic Lexer Engine March 2000

The Haskell Dynamic Lexer Engine is a project I did for my senior CS seminar class. I wrote a lexical analyzer package from scratch in the language Haskell. If you are not familar with it, it's a functional language... which means that it is very different to program in that a standard imperative language (like C or C++). It's also a fun language because of the power and elegance of the language.

Anyways, this program consists of four modules, the DFA module, the NFA module, the RegEx module, and the Lexer module. You compile a lexer by giving it a list of regular expressions and some tokens... and you can later use the lexer to lex text. It has its own homepage here. It's quite the powerful library... if you are doing text processing in Haskell, take a look, it could save you some time!

Advanced Compiler in Java January 1999 - November 1999

During the spring semester of my Junior year of college, I took our required compilers class (and loved it, btw). We worked through creating a fairly boring compiler that compiled the Tiger language (from Andrew Appel's book "Modern Compiler Implementation in Java"), into a pretty simple [made up] stack machine named "SAM". We wrote everything from scratch, and spent most of a semester doing it. For extra credit, I threw in a SAM peephole optimizer (extra credit excitement? maybe not).

Not being satisfied with just one semester of compilers, I asked my professor and a friend if they would like to do directed study advanced compilers class. The professor is a compiler nut, so he happily went with it, and we started back in on it the next fall semester. Anyways, to make this somewhat short, here is what it does now:

  1. Compiles Tiger or IRWIN to intermediate representation
  2. Can perform IR level optimizations, such as constant prop, function inlining, SSA, dead code elimination, code reordering, and probably a bunch of stuff I have forgotten about
  3. Can emit code to IRWIN [IR text format], SAM, or native 80386 gas assembly (compiles and runs under linux)
  4. Peephole optimization at several stages
  5. Garbage collected runtime support
  6. Other forgotten neat stuff

News: A professor of a compiler class requested that I make my code available on a request only basis (to avoid students working on similar projects from "borrowing" code). So if you'd like to have a look, just let me know, I'd be happy to oblige.

MagicStats 1.0 June 1997

MagicStats 1.0 was born because I found a site using a log analyzer named AccessWatch and was impressed. Then at 1.30, AccessWatch was a Perl program that ran through the log file gathering statistics about hits. I wrote MS1.0 mainly because I didn't like some things about Access Watch, mainly performance and the fact it is written in perl (I didn't know perl at the time).

At the time, I wanted to learn C, so I decided that it would be an opertune time to start. I had a book for a long time, but not compiler to use... now that I was using linux very regularly, I had lots of free compilers and I had time, so I started in. I remember struggling a lot because the book I had used (SAMS "C, Step by Step") nasty ancient K&R style function decls, where they don't put the variable types in the function declaration line... and I *hated* it... oh, that and I kept doing (*structptr).member to get out members...

Eventually I learned learned about the sane way to declare functions and even the -> operator. We started using it on magic for all stats processing and worked well... but of course, I built up a lot of ideas, wanted to learn C++ and eventually ditched MS1.0 (it always had that wierd monthly graph bug too... which never got fixed, oh well). Anyways, a tarball of the source is available if you want it. It's not pretty, nor is it representable of what I can really do (first C program and all), but everyone is welcome to it (GPL license).

High School Senior Project Spring 1996

This project was one of the graduation requirements for my high school. I ended up doing a game named SpiffyPilot along with some research. It is written in Turbo Pascal with liberal amounts of inline assembler. SpiffyPilot has been rated a "Top Dog" by Home of the Underdogs! Check it out!

Graphics Programming Series 1994-1996

Originally written because I wanted to get more traffic to my web site and to "give something back" to the internet, I started my GraphPro series back in late 1994. I published articles about the basics of graphics algorithms and code optimization on the Turbo Pascal/i386 platform. It was fun, I learned a lot, and definately brought more traffic in (real content, wow!).

I was so psycho about it, I wrote an HTML parser in pascal that recursively recognized languages... allowing me to embed Pascal or x86 assembly in HTML and have it syntax highlighted for me... which would get very old if it had to be done manually! Eventually however, my interests led to other things, I lost my love for Pascal, and I stopped writing.

The most common questions generated by that web site were, and continue to be: "How do I use SVGA modes under Pascal?" [it's painful with banked VESA modes], "When are you going to write more 3D articles?" [ I'm not, I'm through with Pascal!], "I HATE PASCAL C RUUULZZZE!!! I AM 31337!" [Good for you, I liked it, I had a compiler, and it supported inline assembler... aka it worked for me], and "Can you zip the whole thing up as a single package" [I hate doing that!].

General Web Site 1993 - Ongoing

I have been running a web site for a long time... okay, maybe a freakishly long time. I started out a lamer HTML person, who was only slightly above using the <blink> monstrosity, but eventually I matured (laugh if you want to...) into the web designer I am today.

Nowadays fancy graphics and DHTML bore me, as I find raw content much more valuable and interesting. HTML itself has improved to the point that it can replace most of the uses for graphics in the past... a simple table can accomplish much. CSS can be way fun. :) Anyways, this is getting pointless, so I'll stop now.


  • Created by Chris Lattner, 2000, 2001, 2002, 2003
  • Last modified on Tuesday, 13-Nov-2007 23:04:30 PST