Projects


I love teaching myself new technologies, and I learn best by doing. As a result, I always have at least three or four side projects on the go. Below are a few that managed to make it to a semi-finished state.

For a full list of all my side projects, check out my profile on GitHub.

Also, a quick note - these are all personal projects. Unfortunately, I can't include any of my professional projects here since they're all proprietary! However, you can take a look at my résumé to get a feel for my professional experience.

Inspirograph

This project earned me a few minutes of internet fame in 2014 when it trended on sites like Hacker News and Reddit. I wrote up a more detailed post about this project which you can read here.

CoolToJS

One of my most rewarding projects, but perhaps one of the least flashy. CoolToJS is a Cool-to-JavaScript transpiler, written for an online course I took for fun (Stanford's Compilers by Alex Aiken.). This project helped me develop a much deeper appreciation for the compilers I use every day.

Theremin

When I saw the first demo of the Leap Motion controller, I was hooked.

A Leap Motion controller
A Leap Motion controller

This little device tracks a user's hands in full 3D with incredible precision, opening up a whole new class of human-computer interaction. And it retails for about $80!

Around the same time, I discovered the Web Audio API. I have always been fascinated with the intersection of technology and music - I grew up in a musical family and even considered pursuing music professionally (I play the cello). I began brainstorming side project ideas that would make use of this technology when I ran across a video showcasing the creepy, futuristic sounds of the theremin, an electronic instrument that is played without any physical contact:

"Over The Rainbow" played on a theremin.

What a perfect application for the Leap Motion controller! I immediately began building an in-browser theremin powered by the Web Audio API that used the Leap Motion device as a controller.

Since these devices haven't really taken off (yet), it's probably safe to assume you don't own one. That's okay, because I made a little demo video to showcase the project:

A demo of Theremin using the Leap Motion controller.

Origins

A small web application that hosts a QBasic environment inside the browser (using DOSBox) and runs all the little programs I wrote as a child when first learning to program. I wrote a blog post about this project which you can read here.

Roggle

My Canadian girlfriend fiancée wife and I dated long-distance for about a year before I made the leap across the border to Prince Edward Island to live closer to her. As a result, we spent a lot of time on Skype. Since five hours of non-stop conversation can be a bit exhausting, we would often play video-chat-friendly games to pass the time.

One of our favorites was a little project I built called Roggle, a digital clone of Boggle built with React. The project used WebSockets to synchronize the board between countries to ensure my wife and I were always looking at the same set of letters.

Alexa Skills

I couldn't resist building a few Alexa skills when Amazon offered free Echo Dots for creating skills. The end results were simple, but fun!

WebGL Chess

The final project for a graduate course I took at ISU (HCI 557: Computer Graphics and Geometric Modeling) while working towards my Masters. Here are a couple of bullet points stolen from the project's README on GitHub:

  • Utilizes Stockfish Chess AI (in the form of stockfish-js) to generate chess moves for both players client-side
  • Full camera navigation using mouse (click + drag and scroll wheel), keyboard (arrow keys and - and +), and mobile gestures (drag to pan, pinch to zoom, two-finger rotate)
  • Supports standard chess play - castling, substitution, check, etc.
  • Written in vanilla WebGL - no wrapping or abstraction libraries used

Before you ask - unfortunately, no, you can't move the pieces yourself! The Stockfish engine plays for both players.

nfjs

A naïve attempt at a client-side binding library, based on Knockout and Vue. Built to teach myself how JavaScript binding frameworks are implemented.

Should you use this library? No, definitely not!

nathanfriend.io

Little needs to be said about this project - you're currently experiencing it first-hand!