My goal is to become a systems administrator. I enjoy working on computers, especially in education environments such as Indiana University. My dream job would be to administer the computers for the Computer Science department of a mid-size university such as IU Bloomington.
I have significant experience with administration of systems, including Linux and Solaris. I have managed many installations of Linux and Solaris x86 as well as software that runs on them. I have configured Apache http (web) servers, Tomcat Java Servlet servers, NNTP (news) servers, mySQL database servers and more.
My other passion is making things easier to use or do. Computers were designed for one purpose: to simplify the lives of their users. If they are not doing this, something is wrong with the system you are using. I often write small Perl scripts to do repetitive tasks. The color coded source view on the add32 program was generated with a Perl script. My websites are backed up daily using bourne shell scripts.
This website is dedicated to displaying the work I have done in computer science. This consists of the programs I have written and my current resume.
Table of Contents
- Java Programs
- C/C++ Programs
- TI-89/92+ Programs
- PHP Programs
- Perl Programs
- Motorola 68000 Assembly Programs
- Scheme Programs
- Objective Caml Programs
Java Programs
This program is used to decode SNES emulator .CHT files, the files which encode cheat code data such as PAR and Game Genie codes. It can take the file and decode it to plain ASCII text.
Confetti is a small program I wrote in an introductory Java programming course demonstrating the use of graphics in Java. You can click on the screen and draw colorful dots.
Connect Four is an implementation of the popular Connect Four game. This was my final project for an introductory Java programming class.
Continuation Passing Style Scheme Interpreter
The same as the scheme interpreter, but employing continuation passing style, and the call/cc primitive.
Design Oriented Server / Java Open-Client
This is a set of two programs, server and client, that I wrote for a networking class. The server demonstrates routing over a network in an NNTP-like setting. The client allows you to work with the server. It is based on the NNTP protocol, but is not an implementation of it.
Another set of two programs, client and server. This one demonstrates the Observer design pattern in Java. The server sends a file listing to any client who registers with it. One model, many possible views. I wrote this for a course in design patterns.
This is a progrem to encode and decode game genie codes for NES, SNES, Genesis, and GameBoy/GameGear. A useful tool for ROM hacking. Works in a browser applet, a standalone application, or in text mode for batch processing or scripting.
This is a GUI front-end to Jalopy, a popular Java code formatting tool by Marco Hunsicker. I wrote this for my students in a class I taught on Java programming.
This is a sprite editor I wrote for creating sprite images on the TI-89 and TI-92+. You draw the sprite on the screen and the program generates the code for your program. It works with black and white, and 4-color grayscale sprites with masked sprites.
This is a set of programs I wrote for a class I taught in data structures demonstrating proper design techniques and design patterns. There is an echo server and client as well as a simple web server for the HTTP/1.0 protocol.
An extended graphical text editor I wrote for a class in data structures. It employs many unique features such as always-open file dialogs, full-state restoration after a crash, regular expression search capabilities, and demonstrates model-view-controller design architecture. This is the final extension of the line editor and the visual line editor.
The line editor is a simple line editor. I wrote this for a class in data structures. It employs a custom build doubly linked list and binary search tree as specific implementations of a List and a Dictionary, respectively.
This is a news reader client I wrote to replace programs such as Netscape Mail and News or Microsoft Outlook Express, the news portion of them anyway. For years I have used programs such as these and they always seem to fall short of my expectations. As I could never find a good news reader program, I wrote one myself.
This is a simple postfix calculator. This was the first interesting program I wrote in Java. It was for a course in data structures. It contains a custom built stack.
An interpreter for a subset of the scheme programming language. This was one of the most interesting programs to write as it really stresses the fact that language is all a matter of preference. All languages are but a compound of a few simple structures and can be expressed in terms of one another. I wrote this for a course in programming languages.
This is an extremely scaled down version of ftp, the file transfer protocol. It was written for a course in networking. It demonstrates the concept of network latency. It consists of two programs, a server and a client which allow you to send a file from the server to the client in either sizeable blocks, or one character at a time.
Simple Transfer Protocol with Internal TCP/IP Stack
This is one of my favorite programs. Although it has little practical use, I have never worked harder or felt more rewarded by a project. The program is essentially the same as the simple transfer protocol, but it uses its own custom built TCP/IP stack. This was written for a course in networking to demonstrate understanding of TCP. Although the TCP implementation is slow, it is an accurate implementation of the protocol according to the specification.
Store Passing Scheme Interpreter
The same as the scheme interpreter, but instead of using the language heap, a store is passed around to allocate from.
This is an extended version of the line editor. It basically wraps the editor in a GUI. The current line is now color-coded. The searches as well. It also incorporates its own command history rather than relying on the command interpreter having one.
Return to the Table of Contents
C/C++ Programs
This is an implementation of a casino Blackjack game I wrote for an introductory course on C++ programming. It requires Windows 95 or better.
This is a disassembler I wrote for 68000 code. I could not find a good one for TI-89/92+ programs, so I wrote this one. It has been tested on Windows, Solaris, and Linux.
Another SRAM editor, this time for the original Dragon Warrior (NES) game.
This is a set of two programs, a client and a server. The server runs and waits for client connections. The client sends a message to the server which is simply echoed back to it. I wrote this for a class in operating systems. It has been tested on Windows, Solaris, Linux, and Irix.
This is another SRAM editor similar to hack4u, but is for Final Fantasy 1 (NES) SRAM states. Tested under Linux, Windows, and Max OS X, but should run on almost any UNIX.
This is a rewrite of my Java Game Genie Encoder in C++. It has all the same features. I did it to learn Qt.
Hack4u is a program to edit Ultima: Quest of the Avatar (NES) SRAM states used by NES emulators. The program is written in C++ using wxWidgets and has been tested to run on Linux, Windows, and Mac OS X. It should run on almost any UNIX.
This is a small program written for operating systems. It reads in a list of numbers and prints them back out in reverse order.
This is a program which can generate passwords for the NES game Metroid. It also does checksum repair and has many features to make creating passwords easier. Tested to run under Windows, Linux, and Mac OS X, but should run on nearly any UNIX.
This is a simple http (web) server I wrote for a course in operating systems. It supports the HTTP/1.0 protocol and several content-types. The program is a demonstration of the boss-worker model and keeps an active worker queue for speed. Speed tests were comparable to the Apache 2.0 server under Linux. The jweb http server is based on code from this program.
L.A.P.D. - Little Asinine Proxy Daemon
This is an http proxy server I wrote for a course in operating systems. It demonstrates cache replacement algorithms and supports LRU (least recently used) and LFU (least frequently used). It comes with mhttpd, which has been modified to memory map its files for enhanced speed. It has been tested under Solaris and Linux.
This program illustrates the producer-consumer problem and resultant race condition. This program is not a solution to the problem; it just demonstrates it. It has been tested under Solaris and Linux. It was written for a course in operating systems.
This was my final project for an introductory course in C++. It is a combination of an mc68000 assembler and text editor in one. It requires Windows 95 or better.
This is another SRAM editor. It edits SRAM (save ram) for the game Super Metroid for the Super Nintendo. Tested to run under Windows, Linux, and Mac OS X. It should also run on almost any other UNIX, too.
This program is used to decode SNES emulator .CHT files, the files which encode cheat code data such as PAR and Game Genie codes. It can take the file and decode it to plain ASCII text. This version is based on the Java CHTDecoder program, but is written in C++ with wxWidgets and is tested to run on Linux, Windows, Solaris, and Mac OS-X.
A cooperative compressing/decompressing proxy server for enhanced hi-speed transmissions. It enables low-speed link users (e.g. modem users) to get a faster connection to the internet with no additional hardware (e.g. cable/DSL modem, or other broadband mechanism) for normal browsing. This idea has been used in NetZero Hi-Speed and EarthLink Accelerator for their modem users. The program is also a demonstration of distributed computing, as both proxies pass off the compression and decompression work to a network of worker computers to speed up the whole process. It was written for a course in operating systems. It has been tested under Solaris and Linux.
Another SRAM editor. This one is for Zelda II (NES) SRAM states. Tested under Linux, Windows, and Max OS X, but should run on almost any UNIX.
Return to the Table of Contents
TI-89/92+ Programs
An implementation of the classic Checkers (aka Draughts) game. One or two players. The AI is not very bright though.
This is a little program I wrote that changes Game Genie codes into CPU addresses so you can see how they work.
The classic snake game for the TI-89/92+. This was the very first assembly program released for the TI-89.
A clone of the Simon® game from Milton-Bradley. Since there are no colors on the calculators, arrow keys are used.
A classic 15-piece sliding puzzle. The puzzles are randomly generated though, and I'm told this will result in unsolvable puzzles at times.
A Tic-Tac-Toe program for the calculator. Supports two players on the same calc or using the link. Computer AI to play solo.
Return to the Table of Contents
PHP Programs
My newest website deals with emulation related programs and information including emulator save states, game information, cheating programs, and emulation utilities.
My online resume website used PHP to provide consistent page formatting, although not to the degree that Techno-Plaza goes.
Another version of my Java CHTDecoder program. This one is coded in PHP and runs on my emuWorks website.
My personal website where I teach C and assembly programming for TI Graphing Calculators (TI-89, 92+, and Voyage 200). The entire site is generated with PHP back ended with an SQL database which stores program information, user information, the news page, and much more. Prior to the rewrite in PHP in the summer of 2004, it was done in Perl.
Return to the Table of Contents
Perl Programs
This is another language version of my CHTDecoder program which decodes SNES emulator .CHT files (used by ZSNES and Snes9x) into plain text. The link takes you to the CHTDecoder page which has more information. The script is available for download there.
Web-Based Library Management System
A fully-functional library management system. It handles the library catalog (movies and books), patron information, checkouts, overdue notices and fines, and other assorted information. Patrons can suggest new titles for the library to add, or browse the catalog, reserve their selections, and more. It uses Perl to create the pages, HTML for display, and is back ended with an SQL database to store the information. I wrote it as a volunteer project for a small library at Indiana University which is severely under funded. It is unfortunate they did not have the resources to use it.
Return to the Table of Contents
Motorola 68000 Assembly Programs
This is a small program I wrote in a course on computer structures. It adds two 32-digit hex numbers together and gives an answer in hex. It demonstrates how to add numbers which are significantly larger than the machine word size.
Return to the Table of Contents
Scheme Programs
This is a compiler for a subset of the scheme programming language. It compiles scheme programs into Sparc assembly and has been tested under Solaris.
Return to the Table of Contents
Objective Caml Programs
This is a type-checker for Java. This is the same job performed by the java compiler before it compiles a program.
Scheme Interpreter and Store Passing Scheme Interpreter
This is another scheme interpreter I wrote for a course in programming languages. It is the precursor to the Java versions. It's nice to see how languages are all abstract. This program has been tested under Windows, Solaris, and Linux. You will need the Objective Caml runtime environment.