Here you'll find some of the projects I've worked on, from academic to professional to personal.

iSnap [ Website | Code | Datasets]

Snap is an online, bock-based programming environment designed by researchers at UC Berkeley to make programming more accessible to novices. iSnap augments the environment with intelligent features including logging, data-driven hints and subgoal support, with the goal of supporting novices working on creative, open-ended programming problems.

iSnap supports logging to the console or a database and can be easily extended to support more backends. The data can then be browsed online to easily understand how students are completing assignments. It can also used to create automated, data-driven hints based on how past students have solved problems. These hints are available to students as they work, providing help even when instructors are not available. iSnap also scaffolds the decomposition of a problem down into subgoals through a helpful interface, which also provides extra data that can help create more targeted hints.

Émigré [ Website | Video ]

Émigré is a prototype game to teach the history of immigration to the United States. The game currently follows Hind, and Lebanese immigrant at the turn of the 20th century, making here way from Mount Lebanon, through Beirut, Marseilles, and eventually Ellis Island to reach the United States. Along the way, she encounters challenges and friends, reflecting the real-life stories of similar immigrants who have made the journey. The game focuses on narrative to tell Hind's story, but weaves in resource management, exploration and random events to keep the game interesting. The game is currently in a prototype phase, and follows Hind only though the end of Beirut.

PlatForge [ App | Code | Art ]

PlatForge is a an Android app that allows users to make, play and share games on their mobile phones and tablets. The app was the product of my undergraduate honors thesis, in which I investigated the applications of game making for the purpose of learning STEM subjects. The goal of PlatForge is not to teach STEM directly, but rather to expose students to concepts like vectors, 2D geometry and programming in a positive, informal setting. This is done in the hope that some of those students will be more receptive to those same concepts when they encounter them in formal academic settings.

The app itself focuses on the 2D platformer genre and includes a built-in physics engine, menu-based scripting, character classes and a customizable UI. It also comes with a set of art assets, from animated character sprites to tilling backgrounds, to allow users to dive right into the game making process. PlatForge has tutorials to get users started, and its menu-based scripting is easy to pick up. The art and code are both licensed under the CC-BY-SA 3.0 license, which means they're available for anyone to use in a non-commercial product.

Comparing Textual and Block Coding [ Textual | Block | Paper ]

Block-based visual programming languages, like Scratch, Alice, Blockly and SNAP! are becoming more popular for teaching novices how to code for the first time. These languages replace the textual syntax of programming languages with drag-and-drop blocks or menus that eliminate syntax errors. Intuitively, this should make programming easier for novices, but little research has been done to compare block languages with their textual counterparts. Tiled Grace is a programming environment that supports both textual and tiled programming, and even switching between the two. It also gives us a great opportunity to isolate the effects of a block-based interface on novices. I've adapted BJC's Hour of Code exercise to use both the textual and tiled versions of Grace, so we can run controlled studies comparing the two.

Clashroom [ App | Code ]

Clashroom asks the question, "how can a serious game make learning more fun, regardless of the subject?" The result is a videogame meant to augment classroom learning by adding game-like elements, with minimal effort on the part of the teacher. Students take the role of a dragon trainer, in an RPG-style arena game. Players can earn items and experience for their dragons by completing educational quests designed by the teacher. Think of these quests as the kind of assignments a teacher might give as extra-credit to encourage more in-depth learning outside of the formal bounds of the syllabus. For instance, a teacher might ask students to research an important figure in their discipline, or ask a librarian what resources are available. Every week, players are assigned into balanced teams and pitted against each other to let players show off their dragons. Clashroom is the brainchild of Dr. Shannon Duvall at Elon University. I was lucky enough to help her implement the pilot version, along with a small team of undergraduates.

TuxBlocks [ Web | App | Code ]

TuxBlocks aims to be both a fun math game and a virtual manipulative which can help students visualize algebra problems in a new and useful way. The game plays like a traditional tower defence style game, with players building mazes out of a variety of towers, each with their own special ability, to prevent enemies from crossing from one side of a grid to the other. However, in TuxBlocks, the way the player acquires new towers is by solving algebra problems. Instead of simply asking the player for the solution the equation, forcing them to do a little math as the price for the game content, TuxBlocks integrates the solving process into the gameplay. The equation is represented by movable blocks, which the player can pick up, move around, simplify and modify to help solve the equation. The game rewards successful solving, not only with towers for the tower defence, but also with levels up, which allow players to skip easier arithmetic. TuxBlocks has a variety of difficulty levels, both for the gameplay and the mathematics, allowing students of many achievement levels to enjoy the game. TuxBlocks also features a "Build" mode which allows players to construct their own problems, perhaps even homework problems, and use the solve mechanics in the game to help find a solution.

I designed and built TuxBlocks during Google's Summer of Code 2013, working for the Tux4Kids project. The game remains one of my largest solo endeavors. A newer version of TuxBlocks is in the works, including a story mode, hints and math guidance.

NC Sunshine Center App [ Android | Code | iOS | Code ]

The Sunshine Center of the North Carolina Open Government Coalition helps inform citizens and the media about the NC "Sunshine" laws, which allow access to public information. It also informs government officials of their obligations under these laws and helps them comply. The Sunshine Center app puts this information into an easy-to-access mobile app for Android and iOS.

I built the initial version of both the Android and iOS apps, working closely with my contacts at Sunshine Center to ensure it met their needs. One of my favorite parts of my discipline is getting to work with clients that are doing good work, have a vision, and need someone to help them make it a reality.

PlayN Platforms [ XNA | iOS ]

PlayN is an open-source, cross-platform game engine for PC, Web, Android and iOS. I used PlayN to build TuxBlocks and was impressed with their straightforward API and inventive approach to cross-platform functionality. I've developed a (mostly complete) implementation of the engine for the XNA platform, allowing developers to use Monogame to target even more platforms. I've also partially developed an iOS backend for PlayN which does not require an expensive MonoDevelop license, but instead uses j2objc to translate the app directly to objective-c. Game engines are one of my favorite projects to work on, and these implementations have presented some unique and enjoyable challenges.

PaperEngine [Code]

PaperEngine is a prototype 2D game engine I've been working on in my free time. The objective is to create a component-style game engine in the style Unity3D, but to target it solely at 2D games. There are a number of great game engines already out there (this one is built on PlayN), but PaperEngine is also a development environment. The object of the engine is to allow developers to manage assets and build levels visually, while coding reusable components. The project is only an experiment at the moment, but there's something particularly appealing to me about plug-and-play components that can be shared by developers for an open-source game engine. So when I have some free time, I work on PaperEngine.

Team Fractal [ Web | Code ]

I have a long-standing fascination with fractals. I like to say the first program I ever wrote was a TI84-BASIC program to render the Mandelbrot set in grainy black and white. (It took the better part of 40 minutes too!) TeamFractal was a weekend project that came out of a desire to make a super-high-resolution image of the Mandelbrot set. The website uses javascript to render the set, and then saves any rendered images to its database. The more people who use the app, the less rendering there needs to be.

Gaggle [ Game Page | Code ]

I built Gaggle with Nathan Shirley for the 2014 Global Game Jam using the Slick2D game engine. The game is based on the idea of natural selection. The player oversees a "gaggle" of odd-looking creatures as they try to make their way to the objective. Sadly for the little creatures, there's always an obstacle in the way. The only way the player can help is by deciding which genetic material gets passes on to the next generation of creatures. (They have a rather quick lifecycle.) Starting with a random population (in both their physical attributes and behaviors), players must shape their "gaggle" to overcome the challenge of the level.

2D Lighting [Code]

I was much less satisfied with my attempt at Global Game Jam 2013. (The concept was cool: a platformer where you play as the level and try to prevent the hero from making it through... but the implementation was lacking.) When I got home, I decided I wanted to make something interesting before the day was over. Around 3am, I had this demo, a simple 2D light engine in the style of Monoco. I'm sure there's a better implementation somewhere around the internet, but I don't want to look for it. I'm happy with my own small creation.

Awesomenauts Utils [ Replay Parser | AwesomeScript ]

Awesomenauts is a delightful and silly game. Think League of Legends or DotA as a platformer that doesn't take itself seriously. My friends and I wanted to keep track of our stats, so I wasted the better part of two weeks' evenings trying to parse our replays. The files were bit-packed and had no documentation. The only clue I had to go on was that coordinates were 13-bits each. Well, I'm far from discovering all of their secrets, but darned if I didn't get the positioning information out of the replays. It's a silly parser for a silly game, but I'm proud of it.