Hello! Welcome to my projects page. Here you will find all of my projects for the past year, but I am going to try and keep it updated as I complete new projects.
If you made it this far, you probably have a copy of my resume, since I don't give this link out anywhere else, due to the fact that it has lots of my precious source code on it - not that I'm paranoid :)
Please feel free to look around, and download what you please. If you have any questions or comments, please email me.
Completion date:
April, 2000
Technologies:
Java, XML
Description:
04/14/00
This project grew out of a larger class project (see Guelph News System, below) in my fourth year Distributed Systems course at the University of Guelph. We wanted to use XML to structure our data for network communications, but needed a way to convert the XML objects to java objects. After scouring the web, I soon recognized this concept as Data Marshalling, and found some interesting references on Sun's website (see Links). The bad news, however, was that there was no API available as of yet for Java-XML Data Marshalling.
I was determined not to be put off by this finding, and I presented an informal proposal to my classmates for developing my own framework for converting XML to and from Java objects. They agreed to the idea, and I began writing the code. I decided early on that it was important to design a generic Data Marshaller, independent of the rest if the Guelph News System, and I have succeeded in doing just that. My Java-XML Data Marshalling Framework can be used with any XML stream, provided that corresponding Java object skeletons are created for each object. A more complete explanation of this API is given in the javadocs.
Currently, this system validates XML Documents to DTD's using Sun's XML Sax parser (jaxp) API. Since the new W3C schema was not yet available when I began this project, it was not considered for compatibility. Sun has, however, made a proposal to design a Java-XML Data Marshalling API which will validate to the W3C schema (see Links).
Online Javadocs:
I have javadocs online for this project. Check em out. I've included the skeleton objects (gn_*.java) that we used in our Guelph News System to better illustrate how to use the API.
Class Diagram:
Check out this class diagram of my Data Marshalling Framework.
Code:
The code can be found in the gnews/ca/uoguelph/news/shared directory of the Guelph News download.
Links:
Completion date:
April, 2000
Technologies:
Java, [Java-XML Data Marshalling System - see above]
Description:
04/14/00
I played the leading role in our Guelph News System class project, overseeing the communications integration for all groups and leading both the Communications and Nameserver groups. I designed and implemented the Java-XML Data Marshalling System outlined above, which was the communications engine for the entire Guelph News System. The entire project involved all thirty-two students in the class, and consumed just over 16000 lines of java code, 5000 of which were written by me. Here is a brief outline of the Guelph News System Nameserver component:
Our Guelph News system was designed to replace the present Usenet news system by using a more lightweight, distributed architecture. One of the key components to our new architecture is the Nameserver. The Nameserver acts like a DNS server, only it resolves newsgroup names to IP addresses and ports.
Each nameserver represents one node in the system, ie: comp is a nameserver, comp.lang is another nameserver, comp.lang.java is another nameserver, but comp.lang.java.announce is a newsgroup. Using this example, the comp nameserver hold the information regarding the comp.lang nameserver, the comp.lang nameserver holds the information regarding the comp.lang.java nameserver, and the comp.lang.java nameserver holds the information about the comp.lang.java.announce newsgroup.
Each nameserver can service two types of requests: Node Information requests, where the requester wants the IP and Port for a specific node; and Node Name List requests, where the requester wants a list of all the child nodes (their name and node type).
For a detailed description of the individual classes, check out the Readme.txt file in the gnews/ca/uoguelph/news/mware/ns.
Code:
The Guelph News Nameserver code can be found in the gnews/ca/uoguelph/news/mware/ns directory of the Guelph News download. I have made available all of my code, but code that was written by my fellow group members is not available.
Links:
Completion Date:
December, 1999 (Version 1.0)
Technologies:
Java
Description:
04/14/00
Mental Blox is an old two-player board game (probably early eighties) that was made by the Canada Games Company. I played the game a few times when I lived in residence at the University of Guelph in the fall of 1997, and I had decided that I would some day 'transpose' it into a computer game. Well, fall of 1999 rolled around and I started our fourth year Artificial Intelligence course. Part of the course evaluation was to design a piece of software that uses some of the artificial intelligence concepts we learned throughout the course. I saw my chance, and took it! At the time I didn't know what it would take to create an AI player for Mental Blox, but I was determined to take on the challenge. By the end of October, I had most of the game already coded for two human players. All that was left was to fix some minor bugs and then design an AI Agent that could win. By the end of November I had succeeded (in my own mind, at least) in creating an AI Agent that had a reasonably intelligent strategy and could win in MentalBlox some of the time. I still remember standing behind my prof while he play-tested the game, and watching him lose to my AI three-times in a row! Thank goodness he gave up at that point because I was having a hard time holding a straight face.
I won't go into the details of Mental Blox, because they are all included in my software. Check out Help->Rules of the complete list of rules, and ENJOY! I have plans to incorporate network play at some point in the future, so stay tuned if you're a fan...
Code:
The code you've been waiting for is HERE. It's been tested under Linux and Windows, but it's Java so anything goes!
Links:
The Game AI page is very cool.
Completion Date:
December, 1999
Technologies:
ASP, Access/SQLServer, VBScript, Javascript, HTML
Description:
04/14/00
While I worked for the University of Guelph Department of Athletics as Network Administrator, I got a pretty good feel for their business processes. It didn't take long to discover several ways in which I could develop computer systems to make life much easier on the Athletics Staff. I started developing a mental plan of how to transform their static, aging web-site into a dynamic state-of-the-art website with a backend data information system. Unfortunately, my timing was bad, and due to internal politics and departmental priorities, it never took off. However, at the time I needed a topic for my Human Computer Interaction project, so I decided to go ahead with the first stage in my development plan - the Online Message Board System.
The Department of Athletics is running an NT/Novell Network, so I decided to use Microsoft's ASP for server-side scripting. I also decided on developing the database in Access, since it can easily be converted to SQLServer at a later date. With these design decisions out of the way, I started developing the Online Message Board System around these requirements:
- There need to be 5 message boards: Recreation, Facilities, Intramural, Intercollegiate, and Interest Classes.
- Each Board should be viewable by the general public on the Department of Athletics web site.
- Each Board should be easily updateable by an assigned staff member on a daily basis, without any knowledge of web programming.
- Each Message should display the date, and a brief title, and should remain on the page until manually removed by a staff member.
With these brief requirments in hand, I created (from scratch) the Online Message Board System. The web graphics were done by the current Athletics webmaster. All the ASP scripts and the database were designed by me. The site includes a comprehensive login and password authentication system, including users and groups.
Take a look at my online demo.
Online Demo:
Check out my Athletics Development Page
Code:
All the code is available here. Note that the Access database is the same database used for my Athletics Intercollegiate Scheduling project. For info on opening the database, read the README_DB.txt in the zip archive.
Completion Date:
October, 1999
Technologies:
Flex, Bison, C
Description:
04/14/00
This was a pretty cool group assignment for our fourth year Theory of Computation course. I've included it on my projects page because I wrote all the C code in the Yak/Bison file "automaton.y", and it is the most recent example of C code that I have. Here is a brief outline of what the assignment does:
The automaton.l file contains the lex/flex lexer input. It defines the symbols that our grammar will recognize. We designed it to recognize the entities that make up an FSM definition, so that our Finite State Machine will know what it's purpose is.
The automaton.y file contains the yak/bison input. It defines all the actions to take when a specific symbol is recognized, and finally it contains the main function for the Finite State Machine. One of my group-mates came up with the Bison skeleton, based on the automaton.l file. I wrote all the C code in the file (which takes up most of the file) which fills in the rest.
Code:
There are just two source code files: automaton.l and automaton.y.
Completion Date:
August, 1999
Technologies:
Microsoft Access
Description:
04/14/00
This project began as a Y2K solution for an old DBase database which had been used by secretaries for the last few years. As I started working with one of the secretaries to ensure I understood all of the requirments, I began to find new information to include in the database, and new ways to simplify her job. What unfolded was a database system much more comprehensive than its predecessor, saving many wasted hours a week for the secretaries involved.
The database is primarily for scheduling all Varisty games, both home and away, for the University of Guelph. It consists of 14 tables, 28 queries, 17 forms and 18 reports, although the user is not overwhelmed with all of these. Most of these are intermediataries that the user doesn't need to know about. The user generates 6 main reports, ranging from game schedules, to team rosters, to rental van and bus requests. Most of the development was done in close contact with the users, and the requirements were met gracefully.
Code:
The Access database is available here in zip format. The rest of the code is for my Athletics Online Message System project. For more info, read the README_DB.txt in the archive.
Completion Date:
March, 1999
Description:
04/14/00
This little project actually didn't have anything to do with programming. It's a little electronics project I took on as a hobby to satisfy my curiousity about electronics. The Universal Infrared Receiver is a device designed by Ties Bos as a grad project. It is a small infrared device that you can attach to your serial port, and it comes with a Winamp plugin, also programmed by Ties. So in a nutshell, the UIR allows you to use any household remote to control Winamp. Very cool. One of my friends stumbled upon the UIR website one day in the summer of 1998, and I was instantly hooked.
What Ties has done, is publish an electronics diagram on the web, the hex dump of his custom microchip, and the winamp plugin, and challenged others to build his UIR. For some people it is probably an easy task - but for someone with no prior electronics experience it is not. Since I build my UIR's last year, this site has really taken off. Newcomers have a lot more information at their disposal than I did a year ago. I'll give a brief description of what I had to do to build my first UIR:
As I said before, all I had to work with was an electronics diagram, a hex file of assembly code, and a windows dll (the winamp plugin). For the first few weeks I looked around on the web and in the phonebook, trying to find a place where I could buy all the parts I needed. Since I didn't know much about electronics, it was excruciating because some of the part numbers were for foreign parts, and I had to figure out what the domestic equivalents were. I soon discovered a mail-order company, Digi-key, that had a massive inventory if electronics supplies and provided me with everything I needed.
I quickly realized that my biggest road block was going to be programming a microchip using his assembly code. I started searching the net, and after a few weeks of looking around, I decided that the only economical way to accomplish this was to build a microchip programmer. I decided to build a serial port microchip programmer from another design I found on the web. So, once I was satisfied with my planning, I ordered all my parts from Digi-key - for the programmer and one UIR. It took pretty much a full Saturday afternoon to build, but believe me I had been prepping my mind for the occasion for the entire week. Once I built the programmer, I had to test it. I had downloaded programming software from the same web site, so it was time to give it a try. I popped a blank microchip into the programmer, hooked it up to my serial port, and started the little dos program. It appeared to be doing something, but I couldn't be sure. When "Programming complete." came up on the screen, followed by a dos prompt, I started to get excited - but I had no way of knowing whether my chip was 'burned' properly! The only thing I knew to do was build a UIR and see if it worked.
The next day (Sunday), I devoted the entire day to building a UIR. Having just build the PIC programmer, I already had a bit of experience under my belt. I started building the UIR around noon, and by 3 pm I was ready to test it out. I was excited at this point, but I really didn't think it would work, since it was my first time doing any electronics, and I had build two different devices, both of which need to work perfectly in order for the UIR to work. Nevertheless I inserted my microchip into the UIR, and proceeded with the final test. Are you in suspense?? Probably not, because I'm not an english major... anyway it worked. Yippee! I think I was one of the lucky ones though, since the UIR mailing list is constantly bombarded with sob stories.
Since that victorious Sunday, I have built 10 more UIR's and sold them to my friends. Ok, well most of them I gave away for Christmas so I really didn't make a profit. It was a very satisfying hobby though. I still have some parts kickin' around somewhere for a rainy day.
Links:
Check out Ties Bos' Universal Infrared Receiver site.