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!

LEGO GitLab Tanuki

Here's a non-programming project to add some variety to this page. This LEGO rendition of the GitLab Logo took a few hours to build using some ancient software from my high school days.

Unfortunately, I don't yet have all the pieces necessary to build a non-digital version of this model. Want to help me out?

nathanfriend.io

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