You've stumbled upon a list of my Non-MOMA projects! These have no relation to Monitors of Modern Art, and the reason they're stored on this website is principally because I have the website anyway so I might as well use it for this and save the money of buying another.

Thank you, and please enjoy!


A complete implementation of Minesweeper, as an ongoing Javascript project. While the assets were shamelessly borrowed from the prebundled Windows XP version of the game, all code (besides a couple of snippets from StackOverflow, clearly commented as such) was written by hand. The driving motivation behind the project was to create a less frustrating version of Minesweeper, with no threat of missing a 50/50 guess at the end of the game; the highlight of this implementation is an AI running in the background that will detect any situations in which progressing with pure logic is impossible (when the player is forced to make a guess), and if the player guesses wrong, it will reshuffle the board to make it so that they do not lose, making it feel as though the player guessed correctly all along. If the player makes an incorrect logical deduction, the AI will highlight the tiles on the board that it would have clicked, so as to provide a teaching aid in what further logical deductions could have been made.

In the future I may update this project to include more features, most notably differently shaped boards (e.g. with hexagons or triangles instead of squares). I consider this project useful as a continuing experimentation ground for Javascript to explore new technologies (including HTML canvases, Angular.js, and modular programming paradigms) and continue to get a better sense of the language and its capabilities.

The project's github repository can be found here.

Click here to view this project.

Basic 3D Vector Calculator

A project created for HackNC 2016 with the help of several acquaintances. This collection of three slightly different playgrounds allows the user to experiment with vectors by drawing them from a central axis on a 3D graph. It also allows usage of various vector operations.

Its GitHub repository can be found here

Click here to view this project.

Monitors of Modern Art

This very website. It should speak for itself (feel free to explore it using the menu links above), but as a token explanation anyway: This is an art website. It used to be entirely handwritten, from the HTML to the CSS to the Javascript, for the purpose of making it simple to create a script to manipulate it later (using a website builder tool may have presented a nicer-looking product with less effort, but the code would have been very complicated and would not have afforded me the independence and flexibility I now have). For those manipulations, I wrote an automated update script in python, which had to be run manually - not by necessity, but because user input is required to write the weekly description blurb and to decide which new collection is pushed to the website. Otherwise, it handled uploading all the relevant new pages to the website, and changing the existing ones to accommodate new additions (with one exception: when it tried to upload the top-level index.html page, it failed and uploads 0 bytes. I have no idea why, and neither does StackOverflow, apparently. Never figured it out). The GitHub repository for the first version of the website can be found here.

More recently, I rewrote the website as a Django webapp, and that's what you're looking at now. The templates it uses are still more or less the same as the old version - with a few small quality-of-life upgrades for users - but the important part is that it's dynamically generated from a database of images, rather than painstakingly compiled from myriad HTML documents. This makes actually changing things - the descriptions of various works, the fundamental design of the pages, and in general updating the website - much easier. The webapp also has a companion project, a standalone desktop python script (with a GUI made in TkInter) that makes updating the website as easy as typing in the descriptions and pressing the button - no disappearing index page this time. The current version's base GitHub repository can be found here

This website also uses the few Javascript scripts, including one to automatically resize images to fit the user's screen size, and another that runs the infinite slideshow of works. Those serve as examples of things I've accomplished in Javascript, outside of my Minesweeper project.

More recently, I created an instagram account for this website, and wrote a script using Instagrapi to regularly take a random work from the website and upload it there.

Click here to view this project.

Homework Planner

A personal project created in January 2017, for organizing homework assignments. The program is designed to show the due dates and estimated completion times for various tasks, along with the ability to sort said tasks in different ways to aid in prioritization and organization. I completed this project entirely by myself, in Java using the Javax Swing architecture for the GUI. There's no online version, but the app can be downloaded as an OS X or Windows executable from the github repository below.

Click here to view this project.

Undergraduate Research: Forensic Speaker Identification

Under Dr. Robert Rodman, during the semester of Fall 2015, I attempted to make a program capable of detecting similarities between disguised voices (e.g. using a voice modulator) and non-disguised voices. My approach mainly involved comparing the waveforms using fast Fourier transforms, looking for rhythm and cadence similarities between the given disguised speech samples. My algorithm managed a better-than-average success rate at corresponding disguised voice samples to real voice samples.

The report I wrote at the end of the semester can be accessed at the link below. Resources are available on request.

Click here to view this project.

Undergraduate Research: Cross-Cultural Communication Training Simulation

Under Dr. Chris Martens, during the semester of Fall 2017, I and a fellow student worked with NCSU's Global Technological Initiative to create an interactive visual novel aimed at training players in fluent cross-cultural interaction. The main technical aspects of the project involved manipulating the RenPy visual novel engine to accommodate complex cultural orientation values of conversation participants, and trust changes between them, as well as visual interfaces to display this information as it changes. Our solution was to build a framework around the RenPy engine: the program we made converts a properly-formatted script and several source files (to define the characters and cultural orientations to be included) into a runnable RenPy visual novel. Thus, we created an easily-extensible and adaptable solution for making simulations of cross-cultural conversations that accommodate the different cultural orientations and dispositions of conversational participants.

Unfortunately, due to privacy considerations from the GTI, the GitHub repository for this project is not available to the public. I may, however, be able to provide resources on request - and the paper we wrote at the end of the semester summarizing the project can be found below.

Click here to view this project.


An open-source Python library to fill a niche that, at the time, I hadn't seen anything fill. This module (ranges on pypi) provides a set of classes based around containing continuous ranges of values, with defined start and endpoints - Range for a single one, RangeSet for multiple ranges, and RangeDict for a dictionary-like datastructure where you can input a single key and get out the value corresponding to the range that contains that key. Where applicable, these data structures conform to the same interface as the data structures they imitate (set for Range and RangeSet, and dict for RangeDict). They also support any comparable value, not just numbers - strings, dates/times, and custom comparable types work as well, and the library also provides a special Infinity representation that can be compared with (and will compare as greater than) any type of object, and serves as the default endpoint of ranges. This project's github repository can be found here.

Click here to view this project.