Portfolio This is a collection of many of the programs that I've written over the years.
It is just what I think that someone could find interesting or useful.
It is not meant to be professional quality, but it should generally work. Note that the Projects section is a subset of this.
2008 Winter- GPG UID extractor. On my own.
Went to a PGP keysigning party and needed a way to send out people's signatures properly.
This will encrypt your signatures of other people's keys and put it in an e-mail to them,
so you can send it to them to verify that they can read from that e-mail address
and have the private part of that key. Unlike other similar scripts, this extracts
each UID separately, finds the e-mail address from that, and then sends only
your signatures and the self-signature. It does not send anything extraneous. Python script (sig)
2008 Spring- Easy Money. On my own.
Updated Easy Money to use PostgreSQL as a backend and added some much needed clean-ups.
It is still intentionally very simple and minimal, but works well for tracking basic expenses
and balancing the check book. PHP script - Bash Escape. For a friend.
Escapes command line parameters so Bash can properly read them back in.
This is handy when sending commands over ssh. Source - Image Finder. For a friend.
Recovers images that have been deleted from cameras, for when the file system gets messed up
or you accidentally click delete. It is very simple and just searches for the Exif data
in the JPEG header. It can be trivially modified if you are trying to recover other
types of files. It assumes that the files are fully contiguous, which for most cameras,
they should be. The output is a shell script that extracts each file, so you can
fine-tune it if needed. Perl script - Friend Grapher Facebook Application. For work.
Graphs the relationships between your friends on Facebook in different ways.
It can make it in a circle, cloud, and show different cliques.
It also makes a table of the cliques and dicliques. Source, Facebook - Java Unix Domain Sockets. For work.
Provides support for Unix Domain Sockets in Java on Linux,
allowing you to make servers and clients.
It is fairly basic. Source
2007 Winter- Filename Case Converter. On my own.
Converts the given filename to lowercase, as long as it doesn't cause it to overwrite another file.
If given a directory, it will work recursively. This is useful for handling files from Windows,
where the filenames have strange cases in them. Perl script
2007 Fall- File Association Converter. On my own.
Converts Gnome file associations into Firefox file associations.
It does this by reading through the mimeinfo.cache, globs,
and desktop files as described in this article to extract the MIME types, file extensions, and programs to run
and printing it out as an RDF for Firefox. This was made because Firefox
was having problems extracting the information directly on 1 computer. Perl script - BrainF compiler. On my own.
Translates BrainF into LLVM, which can then be optimized and compiled
into native code for different platforms. This was done as an exercise
to teach myself how to use LLVM. It supports array bounds checking.
It was accepted into the main distribution of LLVM. LLVM webpage
2007 Summer- Seating Arrangement Finder. For a relative.
Allocates chairs at a table to people based on how much they like each other.
It is very basic and uses a simple local optimization scheme. Webpage, Source - PITI Calc. For Karen Walker, attorney at law.
Calculates how much to pay on a loan per month, including interest, taxes,
and insurance. This is made to be run on a PDA, but works on any web browser
with JavaScript support. Right-click the link below and select "save as"
(exact wording may vary by browser), then save it to your desktop.
From there, you can click-and-drag it to your PDA.
You can also double-click it to run it on your computer. Webpage
2007 Spring- IIT logo generator. For work.
Generates a version of the IIT logo of whatever dimensions you need,
up to the accuracy of single precision floating point.
You can easily change the color or number of lines across.
This is well suited for making a version of the logo for posters.
Note that this is my recreation of the logo and thus
is not official. Perl script, SVG, PNG - XSudo. On my own.
Runs programs as another user but still using your X server.
Normally sudo erases the environment and the user that you
are switching to does not
have your X cookie, thus running programs that are X clients
is tricky. With this script (and some modifications to
your sudoers file), you can easily run graphical programs safely
and securely as another user. BASH script - Tiger compiler. CS 541, Compiler design.
Compiles the Tiger language into AMD64 assembly.
It has register allocation and simple optimizations.
The types of variables, record fields, function arguments, and
function return values are inferred.
Functions can call themselves and contain new function definitions. Source - RSS Title. On my own.
Downloads links from RSS. It has a simple XML configuration file
to specify which links should be downloaded. It is a short and
simple Perl script that should be suitable for modification
if you need a custom script. Perl script
2006 Winter- Fractal compiler. On my own.
Natively compiles formulas given as S-expressions into shared objects
(dynamic link libraries) so they can be run quickly to draw a fractal.
The library is loaded and then used to render the fractal into an
X11 window.
It uses GCC to compile and libdl to load the library after it is created.
If it cannot connect to the X server, it will still render the image,
but it will only print out how long it took instead of displaying the image.
This is intended as a demo. Source
2006 Fall- LED cube. With a friend.
Displays in 3D using a 4x4x6 array of LEDs.
It was built by Aaron Collard and runs
using an ATMEL 8515 chip. We both programmed it.
It is programmed in assembly. To aide development,
I wrote a program in Bigloo Scheme to generate assembly.
We have a simple program that plays movies where a frame
consists of a delay and whether each LED is on or off.
The cube lights one plane at a time. Video (mkv) - SXML. On my own.
Processes S-expressions into XML similarly to XSLT.
It is a library for Bigloo Scheme.
It is much more flexible than XSLT in that an ordinary programming
language may be used. It is what is used to generate this website. Source, Presentation
2006 Summer- Parallel Dispatch. For work.
Runs many different slices of a job in parallel and prepends
the slice number to each process' STDOUT. It is useful for
whenever you have a bunch of different slices of a job that
need to be executed, such as data parallel computations.
It is intended for calling mpirun with
a machinefile containing a given number of CPUs,
but can be used for other purposes, such as
downloading 3 files at a time out of a list of many files. Perl script - access_log to SQL. On my own.
Converts Apache's access_log file into SQL.
This makes checking through the log much easier and faster and allows
for queries much more complex than what a simple grep can do.
It takes access_log in the default format on STDIN and
outputs SQL to STDOUT. This is intended for use with MySQL,
but should work with other databases. Dates are converted by
subtracting out the timezone offset specified in the log file. Ruby script
2006 Spring- Film Importer. For work.
Combined ImageMagick, MPlayer, BASH, SANE scanimage, and some custom
software together into a program that scans in film,
chops it into frames, applies filters, and outputs it as a
standard movie file playable on a computer, such as MPEG-2 in
a MPG container or H.264 in an MP4 container (with MP4Box). I wrote the
custom software in C++ to cut scanned film into individual frames
by tracing along the sprocket holes. If you need a program
like this, please contact me.
- XML Fix. For work.
Repairs simple errors in an XML file.
It can add missing close tags or omit an extra close tag.
However, it will only look ahead by 1. It is written in Bigloo Scheme. Program and source
2005 Fall- PDF NUP. On my own.
Converts PDFs to have multiple pages on a resulting page
using BASH and LaTeX.
It supports selecting out pages, rotating, scaling,
and concatenating PDFs. It is also handy when trying
to print something that is on the wrong size paper. BASH script
2005 Summer- Plug-in block. On my own.
Blocks all plug-ins from Gecko-based browsers.
To accomplish this, it uses XUL, JavaScript, and CSS.
All elements that are used for plug-ins are replaced
by a message saying that it was blocked. It can be
clicked to unblock it, or you can click on the full window
button to make it fill the window. If it is Macromedia Flash,
a navigation bar is added. Hopefully it will make your
browsing a little more comfortable. Source, Browser Extension - IMTalk. On my own.
Used NCurses and pthreads on Linux to make my own version of the talk command.
It is in a more instant-message-like format. It communcates with
Unix-domain sockets, so it only works on a local machine. Program and source, ebuild
2005 Spring- Easy Money. For Karen Walker, attorney at law.
Customized Easy Money to fit the needs of Karen Walker.
It allows her to track her expenses and calculate her
taxes more easily.
- Optical Character Recognition. CS 512, Vision.
Recognizes characters from a TGA image.
It uses OpenGL and GLUT in C++ on Linux.
It can be compiled on Windows as well.
It locates characters of a specific size, normalizes them, and
allows you to tag them. Then it outputs an ARFF
for use with WEKA.
It achieved 98.8% accuracy with WEKA's neural net. Program and source - Image filter and edge detector. CS 512, Vision.
Filter TGA images (from a test corpus) using C++ and OpenGL. The image can be
downsampled and smoothed (the Gaussian pyramid) and the
difference taken between consecutive levels of the
Gaussian pyramid (the Laplacian pyramid). The gradient
can be shown on the image and the edges can be detected
using the Canny edge detector. It also attempts
to use the Hough transform to find lines in the edges. Program and source - Napster- and Kazaa-like filesharing programs. CS 550, Advanced Operating Systems.
Used pthreads and TCP sockets in C++ on Linux to make a simple
filesharing program. It supports searching
for files with the query as a substring.
File transfer takes place by blocks, so if a peer
goes down during the transfer, it can resume from
another peer. It will give up if it can't find any.
All transfers go directly from one host to another.
There is no P2P level routing. There is nothing
to handle NAT's. Napster-like, Kazaa-like - Easy Money. On my own.
Learned PHP and made a simple interface to MySQL to
track different accounts and balance my checkbook
for me automatically. It also can list outstanding
balances.
2004 Winter- Questionnaire. For my brother and his company.
Converted requirements into a questionnaire program to help
the company go through and answer questions about compliance
programs and billing and coding for Peak Health Solutions.
I used my anchor layout in C++ for Win32.
2004 Fall- ID3 tree and neural network. CS 584, Machine learning.
Made modules for WEKA in Java that learn using ID3 and neural nets with a single hidden layer. ID3 program and source, neural network Program and source - B+ tree with Buffer Manager. CS 525, Advanced databases.
Implemented several different parts of a database in C++ for Linux and Windows.
This includes a buffer manager for handling buffering of disk access
using 5 different strategies, support of schema using int, float,
and char, NULL values, and using a B+ tree to keep the tuples
sorted by their first element for quick access.
Only inserting into the B+ tree is handled, not deleting. Program and source - Maze game. On my own.
Wrote a simple maze game written in C++ using NCurses for Linux.
It implements line-of-sight and calculates the length of the
shortest path. It randomly generates a new maze each time. Program and source
2004 Spring- Information extractor, Part-of-speech tagger,
and Word Sense Disambiguator. CS 585, Natural Language Processing.
Wrote programs to read in SGML tagged documents and perform
different NLP tasks on them. The corpus used was tagged with
part-of-speech information. The types of words were used
to try to find indicators of specific types of information.
The transformation rule was used to find parts-of-speech,
which was then tested by cross-validation. Word meanings
were clustered using the Expectation-Maximization algorithm.
- Additions to Minix. CS 551, OS Implementation.
Modified Minix to support pausing processes, use next fit
memory algorithm, support the Win (Super) and Menu keys,
and use the HLT instruction in the idle process so that
it does not always use 100% CPU. Bootable diskette image
2003 Winter- Partial unlambda interpreter. On my own.
Taught myself some lambda calculus from here and wrote a simple interpreter for the language. Went through the constructions
and derivations to make a header file for the interpreter. Program and source
2003 Fall- Gaussian elimination and 2D convolution. CS 546, Parallel Processing.
Implemented a parallel version of gaussian elimination using MPI,
pthreads, IRIX, and High Performance Fortran and the
2-dimensional convolution using the fast fourier transform using MPI
- Scheduler. CS 480, AI.
Wrote a program to approximate solutions to the NP-complete
scheduling problem
2003 Summer- Alphametics, Hangman, van der Waerden's theorem. For Rutgers REU program .
Investigated various games and puzzles in a summer
program at Rutgers University. Wrote some programs
and designed a webpage. Webpage
2003 Spring- Requirements Management System. CS 487, Software Engineering.
Designed a database to store and manage project requirements
including subrequirements, multiple projects, associated test plans,
and a simple query generating interface to find requirements.
- AKS Primes in P algorithm. CS 549, Cryptography.
Implemented the Primes in P algorithm in C++ from scratch.
Made own modular polynomial class to carry out arithmetic.
- ATMan. For Professor Argamon.
Worked with Marin Šarić to build a system that can download posts from Google groups and convert them into Attribute Relationship Formatted Files (ARFFs)
for use with WEKA.
It constructs features from groups of text attributes as specified
in an XML file. We also made some modules for WEKA to
process the data. Program and source - Arabic stemmer. EnPRO.
Worked on a team developing a stemmer for the Arabic language.
Helped make it 5.6x faster and increased accuracy and lexicon.
2002 Winter- AnchorLayout. To help me with a project.
Made a java class that allows to components to be positioned
based on the position of the other components. I decided to
translate it to C++ and assembly. This makes resizing windows
much easier, as it takes care of the scaling. Assembly, C++, Java - SeTime. On my own.
Made a small program that will automatically set the computer's
clock from a remote server. Program and source
2002 Fall- OSP functions. CS 450, Operating Systems.
Implemented the different functions for managing programs
running in a virtual environment, called OSP.
These functions handled tasks such as: managing allocation
of space on the disk, CPU scheduling, and managing working
sets for the programs.
2002 Summer- Search engine compression with SimpleIR. Undergraduate research.
Implemented several different compression algorithms on
my enhanced version of Dr. Grossman's SimpleIR.
Also added several useful functions and classes
to make future additions easier.
- Robot Wars. On my own.
I made a newer version of Robot Wars.
It includes a simple virtual machine to run the robots in
along with a compiler to make programming the robots easier. The old version is at ACM. Install program, Source
2002 Spring- Enhanced SimpleIR. CS 495, Information Retrieval.
Worked on Dr. Grossman's SimpleIR and added several features,
such as: multiple search algorithms, command-line options,
stemmers, stop words, etc. Also made many bug fixes.
- 3D OpenGL Scene. CS 411, OpenGL..
Designed a 3D enviroment with smooth vertex-based lighting capable of
manipulating multiple objects (loading, scaling, moving, etc.)
- Simple 8-bit RISC CPU. CS 350, Assembly.
In a team of 3, we designed an 8-bit CPU. We also included
an assembler with a preprocessor and some programs.
The CPU had some extra features, such as shifting and xor.
It was selected as 1 of the top 3 CPU designs in the class.
2001 Fall- Master Boot Record program. On my own.
It prints a message, waits for a keypress, and reboots.
It also destroys the partition table of the disk. Master Boot Record - Shortest path and scientific normal form. CS 330, Discrete structures.
Shortest path finds the shortest path between two points
on a graph using Dijkstra's algorithm.
SNF checks the number given and tells whether it is in
Scientific Normal Form or not and gives what is expected next.
It uses a finite state automaton to check.
- CGI scripts. CS 100, Intro to profession.
Wrote a simple counter and a very simple message board
(that does not perform error checking of any kind.) Program and source
2001 Summer- Dr. Mario. For a friend.
Wrote a simple Windows version of Dr.Mario that supports multiplayer
so my friend could practice on his computer and challenge friends at
a great distance. Program and source Information about the algorithm for generating pills can be found here.
2001 Spring- Cinchy Server. On my own.
Wrote a very simple server program using WinSock that understands
the GET method, supports resuming, and can handle files up to 15MB. Program and source
|