Coding Projects
Recipedia
A work in progress. A php/MySQL website that will (someday) allow users to store, sort, search, and categorize recipes.
    Check it out here.
    Check it out here.
More Efficient Trace Matching through Data Sharing
(Winter 2008, Course project, supervised by Laurie Hendren, and
Eric Bodden)
    Tracematches are an extension to aspect-oriented programming which offer more flexibility by making it possible to observe the history of a computation. Using tracematches, it is possible to execute advice after observing a certain sequence of events in the computation, while still preserving the conciseness and readability of the code [1]. Unfortunately, these new features come at a cost. In their current implementation, tracematches require that several generated classes be woven into the original code, causing significant overhead in terms of execution time and memory usage.
    When several different tracematches are woven into the same piece of code, these costs are magnified, since each tracematch operates independently of all others. There is also a high probability that these tracematches share many similarities. This means that there may be a significant amount of overlap in the computations being done by each tracematch. In this case, if the tracematches were able to share data between them, rather than operating independently, it would be possible to reduce both the runtime and memory costs of the tracematches.
    The goal of this project was to develop an algorithm for data-sharing in tracematches, by means of merging the underlying structure beneath the tracematches (finite automata). In addition to this, some preliminary results are presented to validate the approach.
    Project report is here. Slides can be found here. Supporting code can be found here.
    Tracematches are an extension to aspect-oriented programming which offer more flexibility by making it possible to observe the history of a computation. Using tracematches, it is possible to execute advice after observing a certain sequence of events in the computation, while still preserving the conciseness and readability of the code [1]. Unfortunately, these new features come at a cost. In their current implementation, tracematches require that several generated classes be woven into the original code, causing significant overhead in terms of execution time and memory usage.
    When several different tracematches are woven into the same piece of code, these costs are magnified, since each tracematch operates independently of all others. There is also a high probability that these tracematches share many similarities. This means that there may be a significant amount of overlap in the computations being done by each tracematch. In this case, if the tracematches were able to share data between them, rather than operating independently, it would be possible to reduce both the runtime and memory costs of the tracematches.
    The goal of this project was to develop an algorithm for data-sharing in tracematches, by means of merging the underlying structure beneath the tracematches (finite automata). In addition to this, some preliminary results are presented to validate the approach.
    Project report is here. Slides can be found here. Supporting code can be found here.
Cross-Platform Cribbage Game
(Fall 2006, course project, supervised by Martin Robillard )
    A cross-platform cribbage game, with graphical user interface, implemented in java.
    UML diagram here. Java executable here.
    A cross-platform cribbage game, with graphical user interface, implemented in java.
    UML diagram here. Java executable here.
Simple Shell
Code (in C) for a simple os shell, on an emulated disk (really just a giant text file of 0s and 1s). The following commands were implemented: my_pwd: prints present working dir, my_md: creates a new dir, my_cd: change dir, my_rd: remove a dir, my_mount: mount an existing dir, my_ls: list dirs, my_ln: create a link.
Source Code here.
Executable here.
Source Code here.
Executable here.
AI Projects
Agents implemented to play Breakthough (a variation of checkers) and Yahtzee. Breakthough agent uses minimax search with pruning, and a weighted heuristic to break ties. Also does exhaustive search during endgame to look for wins.
    Yahtzee agent uses SARSA (state-action-reward-state-action) algorithm to learn a policy, while simultaneously discovering states and exploring actions.
Breakthrough (Java).
Yahtzee(C++).
    Yahtzee agent uses SARSA (state-action-reward-state-action) algorithm to learn a policy, while simultaneously discovering states and exploring actions.
Breakthrough (Java).
Yahtzee(C++).