Software Projects


Trash Panda

Technologies Used Unity, C#
Links Play on, Ludem Dare
Screenshots [1] [2] [3]

Trash Panda was made in one weekend for the Ludem Dare 52 game jam.

One man's treasure is another panda's trash. You are a raccoon who has dropped out of adventuring school. For revenge, you are now plotting to take your neighbor's treasures. Don't get caught!


Real-Time General

Technologies Used Unity, C#, Telepathy
Links Website, Trailer
Screenshots [1] [2] [3]

It's WWII — June 6th, 1944. You're a General, and all you have is a map, a radio, and four hundred other players. Will D-Day be a success, or will the Allies be pushed back into the sea?

Real-Time General is a massively-multiplayer collaborative strategy game where each campaign lasts two-months in real-time. ALL actions take however long they would in real-life — digging trenches takes hours, fighting can last days.

My role in this project was primarily to work with the server-side code relating to networking, but I also optimized various aspects of the game's implementation to ensure thousands of units could be simulated and shown on screen at once, and I transformed geographical and street data into a format suitable for displaying for the game. I additionally built several tools to monitor and manage the online server infrastructure.


Pause Play Runner

Technologies Used Unity, C#
Links Play on
Screenshots [1] [2] [3]

Run, jump and swing your way through various levels. Watch out for obstacles and try to finish as many levels as you can before time runs out!

I contributed to the overall design of this game and implemented systems relating to experimental data collection and player controls, as well as designed dozens of the levels. This game was used for two publications, one in 2020, and another in 2023.


Radio General Cooperative Multiplayer

Technologies Used Unity, C#, Steamworks
Links Website, Steam

Radio General is a real-time strategy game where you are a general in a tent with a map and a radio. Radio General takes the idea of incomplete information to the extreme — not only do you not know exactly where your opponents units are located, you also do not know the exact location of your own units. Instead you must routinely ask units to report their status and issue orders without knowing for sure if they were successful.

I implemented the online cooperative mode for the game, where players can play through the entire campaign with a friend. I used the Steamworks API to implement lobbies as well as for the networking (using the networking sockets interface).


Karden Industries: A Walking Simulator

Technologies Used Unity, C#
Screenshots [1] [2] [3] [4] [5]

During my PhD, I was apart of the first cohort of students to take what would later become CMPT 406 at the University of Saskatchewan. This course has students form teams similar to what one would encounter at indie game studies and creating a game over the term. I was the tech lead for our seven-person team, where we created a walking-simulator game with an emphasis on evoking an unsettling emotional response — essentially, a not-quite-horror game.


Bride of Frankensystem: A Framework for Online Games User Research Open Source

Technologies Used Python, Flask, SQLAlchemy, HTML, CSS, JavaScript
Links GitHub

When I joined the University of Saskatchewan's HCI lab in 2014, they were beginning to use Amazon's Mechanical Turk to run experiments online. The experiments consisted of a task or game implemented in Unity and presented using the Unity Web Player along with questionnaires before and after. There are a number of online survey systems, but none of them integrated well with this sort of task. The workflow involves creating questionnaire definition files in JSON, custom pages as Flask routes, which could be any kind of task, and then defining a sequence in a config file. The project is implemented as a Flask extension that is installed system-wide, so that the base code can be shared amongst different projects. This minimizes code duplication and makes it easier to maintain each individual deployment.


Presayo: A Management Information System for Label Printing

Technologies Used C#, WinForms, Python, SQLAlchemy, PostgreSQL
Screenshots [1] [2] [3] [4]

This project was a complete rewrite of the web application I made way back in 2005. I decided to implement the user interface in C# using WinForms and the DevExpress desktop components, to maximize usability and to be able to add in new features quickly. For the backend, I decided to implement my PostgreSQL database access via SQLAlchemy, which required the use of Python.NET.

The features are largely the same as the old PHP application, but designed with usability and flexibility in mind and engineered and implemented using current best practices.


Data Analytics Dashboard

Technologies Used C#, ASP.NET AJAX, HTML, CSS, JavaScript (jQuery), Kendo UI Datavis Widgets, Telerik ASP.NET AJAX Controls
Databases SQLite, IBM DB2
  • Create dashboard widgets based on SQL queries.
  • Define parameters for the queries, which can be specified when the widget is created and optionally modifiable by the end user.
  • Design dashboard pages which can be assigned to groups or individual users, or allow the user to create their own.

In the summer of 2012, I was tasked with creating a flexible, web-based dashboard to analyse data from IBM DB2 databases. I was given general guidelines as to what the dashboard should be able to do, but both the design and the implementation was primarily handled by myself, with some support along the way.


Batch Image Resizer Open Source

Technologies Used Java, Swing
  • Resize multiple images at once.
  • Specify resize options and save options to a "preset".
  • Image's aspect ratio is always maintained, unless "stretch" is chosen.

Created in the winter semester of 2011 as a final project for a user interface design and programming course. The project was intended to allow students to demonstrate what they had learned throughout the course.

I made a few specific decisions about the design of this application based on what I had learned from the course:

  • Preset resizing options for users who may not understand exactly how to get the output they're interested in, but could potentially pick out predetermined options based upon the end goal for their image.
  • Illustrative icons to demonstrate the effects of different types of cropping and resizing.
  • Drag and drop functionality, so there is no need to navigate directory structures to find the icons you wish to resize.

I later decided to release the code as open-source, you can find the code on Bitbucket.


GPS Record Open Source

Technologies Used C++, Qt
  • Uses GPS data to calculate an approximation of both your current lateral and longitudinal accelerations.
  • Calculate distance travelled.
  • Saves raw GPS data and calculated values to a CSV file.
  • Displays your current speed on a speedometer (in KM/h or MPH).
  • Set thresholds that once met can pause or stop your recording.
  • Specify what you do and don't want to record.

This application receives data from a GPS and parses it to calculate things such as acceleration and distance travelled. That is then saved it to a CSV file. Also shows data in real time and has a speedometer to show your speed in real time (in KM/h or MPH). This is a project I did on my free time one summer and then decided to release as open source software.


Discussion Forum Software Open Source

Technologies Used PHP, HTML, CSS, JavaScript, Apache, MySQL

This was a PHP/MySQL forum that I created because I was unsatisfied with the current open source forum offerings. I couldn't find a nice balance between features and complexity. A lot of forums had all the features I could ever want, but presented them to the administrator in a way that felt overwhelming and cumbersome to me. Other, simpler, forums were missing features I wanted, and so I decided that rather than try to modify a forum and hope that it would work for me, I'd make my own to be sure that it would work for me.

I designed it in such a way so that I could use it sort of as a very low level CMS if I ever chose. And part of this is that it's quite easy to write a script that uses the user accounts, theme engine, etc. so that it fits in nicely and integrates well with the rest of the website. I took advantage of this to create a front-page for a web site that used topics in a particular forum as news articles, with the replies being comments. Something that annoys me with other websites is when a blog has a comments section as well as a discussion forum, and the two are entirely independent. If you already have an advanced discussion forum, why not use it for your blog's comments?


Label Quoting Application

Technologies Used PHP, HTML, CSS, JavaScript, Apache, MySQL
  • Estimate costs for printing flexographic labels.
  • Handle the complete workflow, from quoting, to generating packing slips.
  • Generate purchase orders.
  • Production list to schedule the presses.
  • Keep track of vacation days for employees.
  • Lists for customers, dies, materials, press rates, etc.
  • Online order tracking for customers.

Back in 2005, I started converting an Excel-based system for determining the production costs of producing labels as well as creating quotes and orders, into a database driven web application. In April 2006, the application had the ability to generate quotes, orders, and packing slips which was enough to fully replace the existing Excel-based system.

Over the next few years I worked on the application part time, adding features, fixing bugs, and eventually ending up with a full featured application which is still being used to this day.