From time to time I get involved with various technical projects. Usually these are software related. Sometimes what gets written is code, sometimes it is a document, and sometimes it is both.

  • IEEE 1394 and the Linux Kernel
    This is a paper written by Brian Pietsch and me for our final project in CSC 550 (A graduate course in Operating Systems Design and Implementation). It covers the basic design of the Firewire Protocols as well as the first implementation that was done in the experimental 2.3 kernel series.
  • GnomeAPM
    GnomeAPM was my senior project at Cal Poly (my adviser was Dr. Elmo Keller). It was my first exercise in GUI programming using the GNOME toolkits. The GNOME libraries hadn't been available for very long, so they were both buggy and poorly documented. It was like working with an alpha version of the MFC classes, only less friendly since it was all in C.

    Source code for the final version of this project is available for your perusal here, or you could just download the tarball.

  • Linux Kernel Bonding
    As a result of some of the projects I was working on at HP, I ended up as the lead maintainer of the Linux Kernel Bonding Project. A "bond" (Sun calls it a "trunk", Cisco's term is Fast-EtherChannel) is a logical aggregation of multiple ethernet devices. The reasons one might aggregate devices would be for load-balancing (using a switch that supports the FEC standard, one can achieve almost N times the throughput of one card by bonding N cards together) or for High Availability (Active-standby) purposes. Both cases have the extremely useful feature that TCP connections are maintained as cards in the bond die; that is, if TCP connections are coming in through eth0 and the hub that eth0 is connected to loses power, eth1 can become the primary interface and TCP connections that were being routed to eth0 are now transparently routed to eth1.