Below is a representative sample of the work I've done. This portfolio is still a work in progress. Comments and questions both on this page and the works it points to are welcome. Contact: dfaden@gmail.com.
TTECEventViewer
Summer 2001
The TTECEventViewer makes it easy to browse through a file of data from a run of the PHENIX detector. The viewer was built upon the earlier work of the PHENIX team, mostly that of Dr. Alexander Lebedev, who has continued to maintain and improve the library. My code added the GUI for browsing, including tabbed views (suggested by my boss Prof. Marzia Rosati), the ability to zoom in on a view, and the ability to skip to a certain event out of the run, amongst other things. The code takes advantage of ROOT's clone of QT's signal/slot mechanism, dramatically reducing the code's length and complexity.
PHENIX, the Pioneering High Energy Nuclear Interaction eXperiment, is one of four detectors situated around the Relativistic Heavy Ion Collider in Brookhaven, New York. RHIC is the particle collider that some feared would destroy the world in 1999. Although RHIC failed to accomplish bringing the end times, its experiments have provided strong evidence of the production of quark gluon plasma, a strange form of matter in which quarks and gluons are free to move about.
Of the files in libtec, I am the author of GetUniqueName.{cc, h}, TDragZoomTH2F.{cc, hh}, TSignalingTButton.{cc, hh}, TTECEventDisplay.{cc, hh}, TTECEventIterator.{cc, hh}, TTECEventViewer.{cc, hh}, TTECSectorSideEvent.{cc, hh}, and TTextInputDialog.{cc, hh}. Dr. Lebedev and I amongst others have made subsequent modifications to these files.
PostgreSQL Perl
Fall 2003
This collection of Perl scripts works with a PostgreSQL database to get and set information about the status of the detector. They make use of the DBI module to dynamically create and execute SQL queries.
displayFitOnMass.C
Spring 2004
This C++ macro uses RooFit to fit a data set for the purpose of estimating the number of J/psi particles produced.
SearchToHTML
May 25, 2001
The SearchToHTML search applet searches a given set of files and then prints the results out as HTML using JavaScript. I believe it is still unique amongst all search applets both in presenting its results in HTML, a form familiar to users from regular Internet search engines, and by the degree to which it allows the Web master control over the appearance and behavior of the applet and display of the search results.
JulianCodeApplet
June 4, 1999
The JulianCodeApplet encrypts its input using a simple substitution cipher. The cipher is determined by a key provided by the user. While not especially secure, the method is effective enough to thwart casual eavesdroppers.
SiteSearcher
May 28, 1999
My first search applet, this one just does a simple search of the files specified by the Web master. Still it offers some features not commonly found in search applets: displaying the file size and last modification date of matching files.
Selective Proxy Server
Summer 2000
This HTTP proxy server forbids access to all but a preselected set of addresses. If I had to do this project again, I would do a lot differently, but the code still seems to be functional.
KMPMatcher
Spring 2002
An implementation of the Knuth-Moriss-Pratt string matching algorithm. This set of files includes a JUnit TestCase.
Q.java
Fall 2003
A Java quine -- a program that prints its own source.
UnicodeApplet.zip
ReadMe
Summer 2004
UnicodeApplet takes text and converts it to either Java or HTML-style Unicode escapes. I've found this useful in writing test cases that require non-ASCII text. This is still a work in progress.
ColoringAlgorithmsApplet (zip)
Summer 2004
This applet allows the user to experiment with algorithms for coloring images of the Mandelbrot Set. It includes a parser built using Java CUP and JFlex and an Ant build file. This is still a work in progress.
Listen as your songs evolve. This Java Swing application has you stand in as the guide of selection for a collection of music-generating neural nets.
Wolfram Cellular Automata
Spring 2004
This script allows the user to explore the world of cellular automata. It uses Steven Wolfram's method of encoding the update rule.
Pickover Dot Sculptures
Spring 2004
This script allows the user to produce dot sculptures, as described in Clifford Pickover's book Computers and the Imagination.
These scripts depend on the following utility scripts:
FractalAnimator
Spring 2004
FractalAnimator allows the user to create QuickTime movies of zooms across the Mandelbrot Set. This is still a work in progress. When it is complete, it will feature a wide range of fractals and greatly expand the user's control over the drawing of the fractals.
MakeHtmlSafe
Spring 2004
MakeHtmlSafe takes text as input and replaces characters that have special meaning in HTML -- '<', '>', '&' -- with the corresponding HTML escape sequences. MakeHtmlSafe registers itself as a service making it available in applications across this system. I find this facility particularly useful for preparing code for posting in online forums.
JuliaScreenSaver
Spring 2004
This screen saver cycles through views of Julia sets.
Php Editor
Spring 2004
This editor allows you to execute PHP code without resorting to the command line. This is still a work in progress.
Render L-systems as SVG
lsystem1.pl
Spring 2004
This CGI script allows the user to fiddle with the parameters of an L-system and view the result as a Scalable Vector Graphic.
I've been fascinated with L-systems since I saw a math professor give a presentation on them my freshman year of college. They appeared previously in my work as my final project for a graphics course, and I've got many more projects involving them in mind for the future.
Roughly, an L-system is a string of characters, called the axiom, plus a set of rules. Each rule says something to the effect "character x should be replaced with string abc." To produce a picture of an L-system, we first apply the rules (in parallel) to the axiom a given number of times. This gives us a new string which we then feed to a graphics turtle. Each character in the string corresponds to a simple command: "Turn left", "turn right", etc.
Compose a MIDI
compose.pl
Summer 2002
fetchMp3s.py
Spring 2004
This utility script fetches all of the mp3s from a given URL and saves them in the given directory.
Z40 Encryptor/Decryptor
Spring 2004
This code provides methods to encrypt and decrypt text using a cipher based on Z_40, the group of integers under addition modulo 40.
Fortran Mandelbrot Set Explorer
Spring 2004
This code demonstrates a method for implementing a CGI using Fortran 90.
JavaScript Pop-Up Quine
Summer 2003
GPA Calculator
Summer 2004
Calculate your gradepoint from your course grades. This script uses DOM to allow you to add as many class slots as you need while being compatible with browsers all the way back to Netscape 2.0.
342 Course Work
Fall 2001
Over the course of this course, we built up an interpreter in the Scheme language. The teacher, Prof. Gary Leavens, led us with the mantra "Follow the grammar." That is, when parsing a language, write functions that mirror the structure of the grammar.
This course was useful to me because it strengthened my knowledge of parsing and gave me a chance to experiment with many of Scheme's features. We were also required to annotate our function definitions with type declarations using a system invented by the professor. This work with types helped me to see types more abstractly and to better understand their use.
Wimpy Shell
Fall 2002
Threaded Encryption
Fall 2002
Messenger
Fall 2002
Spiral
Fall 2002
This OpenGL program draws a galaxy of translucent objects that spiral out from the center across the screen.
Mesh
Fall 2002
This OpenGL program renders objects described in ASCII format. The program allows the user to rotate and scale the displayed object.
L-systems
Fall 2002
This OpenGL program allows the user to experiment with L-systems via mutation. Repeated mutation often produces pretty interesting images. Some examples are below.
Intranet Search
Fall 2002
For this project, we were required to implement several search algorithms to be run on a simulated intranet Web site. I believe my code demonstrates proficiency with the Java class libraries, in particular with the Collections classes. If I had it to write again, I would rely more on the API of the Collections interfaces than on concrete implementations, per the advice of Joshua Bloch in Effective Java. I would also rewrite the CoefficientsEvolver class to be more object-oriented than procedural.
Decision Trees
Fall 2002
Solving 3D Sliding Block Puzzles Using IDA*
Summer 2004
This code is a follow up to my 472 course work. It searches for optimal solutions to 3-dimensional sliding block puzzles using the IDA* search algorithm. It includes several JUnit TestCases. These have proven useful in evolving the design. This is a work in progress.
Maintained by David Faden.