Example Programs
This is the section for examples of my work. Since I can’t show the things that I’ve done under contract, I’ll be posting programs that I’ve done for myself.
Please keep this in mind as some of the things I post may still be in beta and will be labeled as such if that is the case. There will, in all likelihood, be a brief description of the program, screenshots, and a download as well as a list of system requirements and a list of functionality that I plan to add to the program in the future.
If you discover any bugs in any of the programs, please contact me via email and let me know. Additionally, if you have any requests or suggestions for the programs (extra features, changes in behavior, etc), feel free to contact me. Credit for the finding of bugs will be given in the bugfix section for that program once the bug is dealt with.
Any of the projects I post here are free for you to use if you feel so inclined.
All I ask is that, if someone inquires where you obtained any of these programs, you point them to me. If you post them anywhere else online or in a freely distributed collection, please add a link pointing back to www.jameshollingshead.com and let me know. I like to know where my work ends up at, because it gives me an idea of how useful/popular things I have worked on are.
I have also put up a list of programs which I worked on while at Ohio University. Some of these programs are also listed on my resume under the Education section, but I thought that they should be explained in a little more detail here. Unfortunately, I am unable to find the source code for my college projects and would likely feel compelled to re-write or otherwise clean them up if I found them.
Tools and Scripts
Prepend - A command line program which adds a string to the beginning of the filenames for all of the files in a directory.
Version: 1.1.0
Language: Ruby
Notes: This program was tested with Ruby version 1.8
Renamer - A command line program which replaces instances of one string for another in all filenames for all of the files in a directory
Version: 1.1.0
Language: Ruby
Notes: This program was tested with Ruby version 1.8
Sigmaker - Sigmaker selects a random quote from its array of quotes and tacks it onto the bottom of your email signature.
Version: 1.0.0
Language: Ruby
Notes: This program requires the Ruby interpreter and was tested with Ruby version 1.8.
Sorter - A command line program which sorts files into directories based on name. Also includes options for replacement of spaces with underscores and vice versa.
Version: 1.2.0
Language: Ruby
Notes: This program was tested with Ruby version 1.8.
Spacer - A command line program which replaces underscores with spaces in the filenames of all files in a directory
Version: 1.1.0
Language: Ruby
Notes: This program was tested with Ruby version 1.8
Underscore - A command line program which replaces spacers with underscores in the filenames of all files in a directory
Version: 1.1.0
Language: Ruby
Notes: This program was tested with Ruby version 1.8
Zipper - A command line program which individually zips files. Like Sorter, it also includes options for replacement of spaces with underscores and vice versa.
Version: 1.2.0
Language: Ruby
Notes: This program uses rubyzip by Thomas Sondergaard and was tested with Ruby version 1.8.
Just For Fun
Sometimes I like to write programs just for the heck of it. That’s why I have this section.
These are, by and large, just toy projects. They aren’t meant to be a real indicator of my skills – they simply exist because I got bored and wanted to do something different. The GUI (if a program here has one) may not be completely polished, but the program should have a full feature set.
I hope you enjoy them.
FunLibs – a MadLib* style word game in which you can chose a story and supply the missing words.
Version: 1.0.2
Language: Java
Notes: MadLibs is a trademark of its owner
This program is no longer being updated. Use FunLibs2 instead =]
FunLibs 2 – a MadLib* style word game in which you can chose a story and supply the missing words and an improvement upon the original FunLibs.
Version: 1.0.1.0
Language: C#
Notes: MadLibs is a trademark of its owner
Ohio University Projects
Notes: I am only listing the non-trivial projects which most people will actually find interesting that I worked on while attending Ohio University. Unless otherwise specified, all programs listed here written for the Solaris platform.
Fish Tank Ecosystem (team project) – Distributed simulation of a fish tank with relatively realistic physics (gravity, momentum, etc). The tank and each individual fish were all separate programs running on various machines on the network.
Fish consisted of two classes – carnivores and herbivores, had scripted AI in order to hunt for food and avoid predators, and were capable of experiencing death due to starvation.
Duties on the project were largely shared across the board, though I have to admit that I took quite a lot of pleasure in having a little extra focus on the programming for the various Carnivore class fish =]
Languages: C++ with OpenGL graphics
Note: For fun, we decided to see how many fish we could get to run simultaneously. We had approximately 100 fish running in the tank at one time before getting tired of adding fish.
RoboCup Jr. (team project) – Soccer playing robots created from Lego Mindstorm sets. I was responsible for most of the AI and locomotion portions of the robots' programming as well as being involved with the design of the robots themselves.
Each team consisted of two robots: a goalie and a center, each requiring separate specialized programming, which played on a field covered with a black and white gradient ranging from completely black at one end to completely white at the other. The goal, naturally, was to score more goals than your opponent while keeping the other team from scoring.
Robots were equipped with two IR sensors – one of which was required to tell the robot where it was on the field in relation to either end. The other IR sensor was used to find the ball which was covered with IR emitting LEDs. The robots were also equipped with bump sensors at one end in order to tell when it had run into a solid object (the ball, the walls of the field, another robot, etc).
It may sound simplistic, but there was a great deal of algorithmic work for the ball finding, ball handling, and locomotion considering the constraints on the robots as well as determining position on the field.
Language: NQC (a Variant of C/C++ which runs on the BrickOS)
Note: The code was developed on both Unix and Windows platforms to run on BrickOS for Lego Mindstorm. It should also be noted that we won the competition between the code teams by a fairly large margin. For fun, we invited the grade school and high school aged children of several of the professors in the Computer Science department to build their own robots and code them (with their parents’ help) and compete against us afterward. All in all, it was a lot of fun.
TFTP Client – implementation of a file transfer client using the Trivial File Transfer Protocol over UDP port 69 as described in RFC 1350.
Languages: C and UDP
TCPDump Packet Reader – a packet header reader for the data supplied by TCPDump, It displayed all the information in the header.
Languages: C and TCP/IP
Notes: This program used pcaplib
Web Server – a fairly simple web server used to serve web pages and CGI scripts which allowed for serving the page with a 200 OK signal, sending a 404 error if the requested page was not found, and allowed for sending a 403 error if an attempt was made to access forbidden content.
Languages: C and TCP/IP
Note: Amusingly, this was my professor’s idea of a fun and easy project for the end of the quarter. According to most people working on it, it may have been fun but was not particularly easy especially since a friend and I found a bug in the provided code. =]
Shell – a basic shell for running programs, setting the path variable, and parsing arguments in Unix.
Languages: C, Flex, and Bison
Note: This program taught me just how difficult it is to debug a program which a debugger will not run properly on (gdb did not play well with Flex and Bison). It was very easy to miss the “$3” that should have been a “$2” in the parser section among all of the other code. As a result, I now take great comfort in the knowledge that a debugger can run on most of the programs that I write =]
Oracle Project – Program written to interface with a database in Oracle (7, if I remember correctly). It used canned transactions both with and without variables which could be defined by the user.
Languages: C, Pro*C, SQL
Chinese Checkers – two player version of Chinese Checkers (computer vs. player and player vs. player) with ascii graphics
Language: C++
Note: This program also worked under Windows