Projects
[ Chris Fallin ]
- my undergrad research
codebase -- facial recognition, specifically, automatic
fiducial point selection for Elastic Bunch Graph
Matching. This served as the basis of my undergrad honors
thesis, which is currently in draft form and will be posted
here when completed. The codebase is about 3500 lines of
ANSI C and is likely not too useful as a whole but may
contain very useful pieces: data structures, K-means
clustering, Gabor wavelets and convolution, image I/O, and
the like.
- comparch, a pipelined
CPU in Verilog, dynamic translation firmware for a custom
ISA implementing a stack-based machine on RISC hardware, and
some system-level tools (simulators, assemblers) from the
Computer Architecture two-semester sequence at ND in
2007-2008. I'm including only my contributions to the group
projects (though these are large, functional pieces). Mostly
a curiosity, though the pipelined core might prove useful to
someone.
- digilight, a
microcontroller-based low voltage halogen lighting system
controlled via DMX (in practice, using a USB adapter).
- speck, the small,
portable, efficiently-coded kernel: a hobby in later middle
and high school. Mostly useless except as a toy. It runs on
bare Intel hardware.
- cflat, an implementation of
the
C-Flat
language as specified in the Compilers class at Notre Dame in
fall 2008. It is a very basic compiler, comprised of a
flex-based scanner/lexer, a bison-based parser, very simple
resolver and typechecker stages, and a nearly-braindead code
generator. However, it works well, and I wrote most of the
backend in a few hours at a coffeeshop (long live Lula's).
Maybe this will be useful to someone.
- ubergame, a simple "game
framework" (if it may be called that) that provides an OpenGL
and Newtonian physics framework to a Lua (scripting language)
environment. This was my final project in CSE 20212,
Fundamentals of Computing II, in spring 2007. The point was
not to develop a nifty game but to demonstrate the use of SWIG
interface/wrapper generation and cross-language programming
together with the capabilities of rapid prototyping provided
by a dynamic scripting language. The included demo script sets
up a few spheres, one of which the user can move, and provides
for gravity and collision detection.
- pong
(browse Verilog source), an implementation
of the classic game of Pong in hardware for
a Digilent FPGA board
with a Xilinx Spartan3E
FPGA. It displays to a VGA monitor and takes input from a PS/2
keyboard. The game logic for Pong is remarkably simple --
maintain ball and paddle coordinates, detect collisions, flip
velocity on bounce -- and the real challenge was in getting
the VGA timing right. I created this as a final project in an
independent study in place of CSE 20221, Logic Design, over
summer 2007.
- cfallinfs
(browse source tree), a very (VERY)
simple filesystem that runs as an userspace process on Linux,
providing services
through FUSE. Developed
as the last project in CSE 30341, Operating Systems, in spring
2008. The filesystem is a linked-list allocation table design
inspired by FAT that does not support subdirectories.
- sudoku solver (and
tutorial-style writeup), a little
toy in Python that took me a few hours. Circa junior year of
high school (2005). It's a CGI script with a fairly
primitive online interface; the source is linked. I use a
simple recursive backtracking algorithm that alternates
between reduction (finding the sets of possible values for
each unknown cell with given knowns) and recursion. In
practice, solves most puzzles instantaneously. The writeup
was written as part of a mini-project for my high school
math teacher, but I think it stands alone as a nice piece on
the intuition and philosophy behind recursion.
- libcif, a collection of
high-quality, well-tested data structures and basic routines
in pure ANSI C. I use these as the basis of several
codebases, most notably my research codebase. Yet Another C
Data Structures Library, but this one is mine.
- pwtk, the Python
web toolkit. This was my attempt at a continuation-based web
application development before I knew about
continuations. My intuition told me that the traditional GUI
model could work a lot better for web apps than managing
state manually; turns out a lot of other people had done
this before me, and better. This is a fairly compact
implementation of the idea that serializes a Python object
hierarchy into a MySQL table on every request (yikes!). Hey,
I was young (15) and clueless...
- my .emacs file. I thank several
Emacs devotees at Cypress for making me a lifelong
addict.
- STS, the Speech Tournament
System. I wrote this in middle school (summer 2002) for my
school's regional speech tournament: its most interesting
component is a full room-scheduling algorithm for
contestants that handles multiple constraints (such as
minimizing the number of contestants in the room who have
seen each other in prior rounds). The web interface is
clunky and the whole thing is a mess of Perl that requires
ActivePerl's ASP plugin and Microsoft Access (not my
choice!), but it is a curiosity.
- Some corporate software bits that are actually pretty
nifty, but that you can't see (nor can I, anymore!).
- A bunch of abandonware and toy projects. I'll spare
you.