Devon McGrath

Projects

ARC2: Automatic Repair of Concurrency 2

Automatic Repair of Concurrency 2

ARC2 is a program which is designed to automatically repair two common concurrency bugs: data-races and deadlocks. ARC2 takes a Java project which exhibits concurrency bugs and a set of JUnit test cases, and attempts to create a version which exhibits no concurrency bugs (based on the test-suite provided).

ARC2 uses a genetic algorithm to attempt to find a fixed program. In the genetic algorithm, there is a number of TXL mutation operators which are used to create mutated versions of the project. The individuals are evaluated against a fitness function and the best individuals continue to the subsequent generation. This continues until either a fix is found or ARC2 reaches the max number of generations.

Details

Type: undergraduate thesis

Platforms: WindowsUnix

Languages: JavaTXL

Tags: bug-fixingconcurrency

View GitHub

Java Checkers

A checkers program made in Java - featuring a GUI, computer player capabilities, and network capabilities (for connecting games on different computers).

Java Checkers

The program features a simple, scalable, and intuitive user interface to play checkers and also manage the settings. The UI provides the ability to switch between different types of players, including human (controlled by you), computer (controlled by a simple computer-player logic), and network (controlled by a human/computer player on another instance of the program across the network).

The standard rules of checkers are implemented; available online and also in the main file.

In addition to providing network capabilities in the form of peer-to-peer, the program also implements a basic level of security using session IDs when communicating between clients. This avoids another client pretending to be an already-connected player and change the game state unexpectedly.

Details

Type: personal project

Platforms: WindowsUnix

Languages: Java

Tags: gamecheckerspeer-to-peer

View GitHub

MIDI Player

A MIDI player that is capable of visually displaying and playing tracks contained in a MIDI file on the web.

Web MIDI Player

To use the MIDI player, simply choose a valid MIDI file and click play. The user interface provides options for hiding and showing tracks, changing the playback speed, and changing the point in which the player is displaying.

Although currently it does not play any sounds, in the future I plan on implementing at least the Grand Piano MIDI patch (i.e. the default instrument). Browser limitations prevent access to the MIDI sequencer on the user's machine.

Note: due to file API limitations, it currently does not work in Internet Explorer.

Details

Type: personal project

Platforms: Web

Languages: JavaScript

Tags: midimidi-filemidi-playermidi-parser

View GitHub View Demo

Sorting Algorithm Visualization

A program to visualize different sorting algorithms. Currently bubble sort, selection sort, and bucket sort have been implemented.

Sorting Algorithm Visualization

Details

Type: personal project

Platforms: WindowsUnix

Languages: Java

Tags: sortingalgorithmsvisualization

View GitHub

Pathfinding

A simple path-finding program in Java. The computer navigates a 2D grid collecting items with a progressively more complicated grid to navigate.

Java Pathfinding

When the computer collects an item, a new 'wall' spawns in a random location (along with a new item). Over time, the grid becomes increasingly difficult to navigate. The computer can move left, right, up, and down. However, it can also optionally move diagonally (allowing for easier navigation of the world). The computer uses weight-based moves and tries to determine the best local move at each point in hopes that it will reach the destination.

Details

Type: personal project

Platforms: WindowsUnix

Languages: Java

Tags: pathfinding

View GitHub

Web Checkers

This is a web implementation of checkers which can also have a simple computer player.

Details

Type: personal project

Platforms: Web

Languages: JavaScript

Tags: gamecheckersweb

View GitHub View Demo