This page is a copy of the Projects section of my LinkedIn profile. The other sections can be found on the main page.
Projects
Revenge of the Cyclic Cicadas
May 2024 - Jun 2024
(C++ and HTML/CSS/JavaScript; solo)
- Reimplemented an old animated data visualization of cicada populations across U.S. states as a modern web app
- Added more user control over the app, including animation speed, and took accessibility and responsiveness into account
- Preprocessed the raw data ahead of time using a C++ program, eliminating redundant computations that the original version did in every run
- Made use of recursive templates, avoiding an instance of code duplication, and implemented a JSON serializer having an imperative interface
- Try it out yourself
- GitHub repository
Proofs About Particular Programs (Work in Progress)
Dec 2023 - Mar 2024
(Coq; solo)
- Experimented with writing proofs in Coq about how specific programs in a small functional programming language behave
- Tried two different implementations, one closer to an interpreter and one closer to an operational semantics
- Represented continuations in a way that acts like a zipper, but looks like a call stack to give it a clearer structure
Mar 2019 - Feb 2024
(solo)
Designing Computer Languages
Aug 2018 - Jul 2023
(solo)
- Worked out the details of a markup language serving as an alternative to XML, taking influence from languages like JSON and AsciiDoc
- Invented an educational programming language for learning how memory works in C++ while being more familiar to Java/C# coders
- Contemplated and experimented with several other general language designs and features, particularly object-oriented ones
- Experimented using example code to test language constructs for simplicity and expressiveness in both syntax and semantics
Function Subtyping Doesn't Necessarily Sabotage Parametricity
Jan 2023
(solo)
- Corrected a blog post's subtle mistake by discussing how function subtyping intersects with parametricity and type cardinality
- Intuitively explained the difference between bound and free type variables without using the conventional mathematical jargon
- Check out the full post
A Mechanized Proof in Coq of the Type Soundness of Core L³
Jan 2018 - May 2018
(Coq; solo)
- Worked on translating the type soundness proof from a research paper into Coq so it can be machine-checked
- Experimented with different encodings (lists, functions, etc.) to see which one was easiest to use in the proofs
- Project report
- Slide decks of class presentations (targeted at a general computer science audience)
Oct 2017 - Dec 2017
(JavaScript/Three.js; solo)
- An inverse kinematics program animating limbs’ internal joints to resemble the given motion-capture data
- Iteratively improved animation via trial-and-error, switching from FABRIK to CCD and adding constraints
- Videos of the program in action
Visual Studio Code Jump-to-Definition extension for MLton
Sep 2016 - Dec 2016
(TypeScript; solo)
- Used the Visual Studio Code Extension API and the Language Server Protocol to add one IDE feature for SML code
- Read from the "Def-Use" file generated by the MLton compiler to connect uses of identifiers with their definitions
Elm Fireworks
Jul 2015 - Aug 2015
(Elm; solo)
- A procedurally-animated display of multicolored fireworks made up of operators found in Elm code
- Created a monadic interface for Elm's random generation and used Elm's Model-Update-View pattern
PokéNet
Feb 2015 - May 2015
(C#/WPF/PostgreSQL; team of 3)
- A fan-made, persistent application for managing Pokémon and coordinating Pokémon trades with others
- Designed the database using ER diagrams, created scripts to populate the database, and wrote GUI code
Processing Typing Game
Jul 2013 - May 2015
(Processing (Java); solo)
- A simple typing game, geared towards typing programs, even simulating simple code editor features
- GitHub repository
Frame-by-Frame Animation Application
Jan 2014 - Apr 2015
(Processing (Java); solo)
- A drawing application I created to use for my 2D Animation course instead of Photoshop
- Features onion-skinning to facilitate creating frame-by-frame animations, and also includes a color palette and a fill tool
- GitHub repository
Math Fusion
Sep 2014 - Dec 2014
(C#/Unity 2D; team of 4)
- A number manipulation game with a food theme where the player plays as a chef
- Used the State design pattern to implement game screen navigation and evaluated UI/UX approaches for simplicity
- GitHub repository
Yu-Gi-Oh! Card Stat Correlations
May 2014
(JavaScript/DOM API; solo)
- A dynamic HTML/CSS grid visualizing the stats of Yu-Gi-Oh! Monster cards, which also includes filtering and links to more info about each card
- Try it out yourself
- GitHub repository
Cyclic Cicadas
Mar 2014 - Apr 2014
(Processing (Java)/SVG; solo)
- An animated map of the United States showing extrapolated cicada populations in each state based on prior data
- GitHub repository
Popular Languages of GitHub vs. Stack Overflow
Mar 2014 - Apr 2014
(JavaScript/D3.js/AJAX/Web Workers; solo)
- A plot of various popular programming languages on a 2D graph based on their popularity on GitHub and Stack Overflow
- GitHub repository
2048Game.hs
Mar 2014
(Haskell; solo)
- A command-line version of the popular 2048 game written in Haskell, a functional programming language
- GitHub repository
Greebles
Feb 2014
(CoffeeScript/Processing.js/Underscore.js; solo)
Shape Periodic Waves
Aug 2013
(Processing (Java); solo)
Tilecar Runner
Apr 2013 - May 2013
(C#/XNA; team of 5)
- A race against the clock game with various power-ups and effects
- Implemented numerous power-up effects and explored using a custom rectangle type with XNA's API
HTML Editor
Mar 2013 - Apr 2013
(Java/Swing; team of 4)
- A tabbed HTML editor with file and edit options and a dynamic, collapsible tree view of HTML elements
- Coded parsing of HTML, tag insertion, and part of the HTML tree and learned about UML diagrams
Viking Charge
Mar 2013 - Apr 2013
(C#/XNA; team of 5)
- A bullet hell game where the player charges at cannons to destroy them
- Contributed in group programming sessions and practiced using vector math in basic game physics
Underwater Tunnel Maze
Jan 2013 - Feb 2013
(C#/Unity; solo)
- A procedurally-generated 3D maze of corridors that fish swim through by following flow fields
Whale Echolocation
Dec 2012 - Jan 2013
(ActionScript 3.0/Adobe Flash; solo)
- Attempted to invent a Craig Reynolds-esque steering behavior using sound pulses that bounce around and are "heard" back
Pizza Delivery System
Sep 2012 - Nov 2012
(Java/Swing; team of 6)
- An application that simulates taking, cooking, and delivering food orders, and changing manager settings
- Developed much of the CLI and GUI for the cashier and learned about the software engineering process
Puzzle League Revival
Mar 2012 - May 2012
(C#/XNA; team of 5)
- A block-swapping game, as well as a GUI to create custom puzzles
- Helped code gameplay mechanics and learned how to integrate multiple features in an application