My Top 10 Side Projects from 2014
It’s 2015 now (dang!) and I’ve been reflecting on the past year. Turns out I was pretty productive in the realm of side projects. 4 of my 5 most popular GitHub repositories came out of 2014. I’d like to recap not only those but also some of my other favorites.
Be sure to click on the project name if you want to do a deeper dive on any of these projects.
Craft
Craft is a Minecraft clone for Windows, Mac and Linux. It is written in about 5,000 lines of C and uses modern OpenGL (shaders). Online multiplayer support is included using a Python-based server.
Although I first started Craft in 2013, it was really in early 2014 that it all came together. My motivation for this project was just to learn more about OpenGL and 3D development. I figured Minecraft is mostly cubes, so it would be a pretty easy starting point. I’m pretty proud with how it turned out, and I’m definitely much better versed in modern OpenGL now.
Now, if I could only make as big of a splash with something more original…
Quads
Computer art based on quadtrees.
When I developed Quads, I was aiming to produce some sort of computer art that I could get printed and hang on the wall. The idea that I came up with was to accept a target image as input and then chop the image up into quadrants. Each quadrant was filled in with the average color from the original image. Whichever quadrant had the highest mean-squared error would be recursively split up into four more quadrants. This process repeats as many times as desired.
The end result is that detailed regions are repeatedly refined while low-contrast, low-detail regions remain as large, solid colored shapes. It also looks cool using circles instead of squares.
Once I successfully implemented it in Python, I also created a web-based version. Try it!
Tiling
Tilings of regular polygons and their dual tilings.
Continuing my pursuit of interesting computer-generated artwork, one day I stumbled on a Wikipedia page that covered tiling regular polygons.
Initially, I wasn’t quite sure how best to perform these tilings programmatically. After letting it simmer in my brain for a few days, I came up with a pretty neat little API for generating these tilings and their dual tilings. Check out the README on GitHub for details.
Punchcard
Generate GitHub-style punchcard charts with ease.
This project was motivated by a need that I had at work. Pretty straight-forward, implemented in Python using Cairo for rendering. There’s even a command line interface to generate a .png punchcard from .csv input.
pg
pg is a lightweight, high-level OpenGL graphics framework for Python.
I’ve been a long-time fan of Pyglet for 3D Python applications, but it’s starting to show its age. It’s built on deprecated OpenGL and isn’t being very well maintained these days.
After working on my Minecraft clone, I had the idea of working on a new OpenGL library for Python. pg is still a work in progress but I’ve already used it to rapidly create some very interesting OpenGL apps, including the next two side projects shown below.
HiRISE
Fly through 3D renderings of HiRISE Digital Terrain Models (DTMs).
The Mars Reconnaissance Orbiter has an awesome camera onboard called HiRISE — High Resolution Imaging Science Experiment. This camera captures imagery of the Mars surface up to 0.3m/px resolution. Most awesomely, you can freely download Digital Terrain Models on their website.
After figuring out how to parse their data format (using GDAL), I wrote code to generate 3D triangular meshes and normal maps. Then creating the flythrough was relatively easy.
GPS
Real-time 3D renderings of GPS satellite locations.
I overheard some of my co-workers talking about GPS and how it works. This gave me an idea that it would be cool to plot the GPS satellite positions in 3D. So I bought a USB GPS receiver on Amazon. I wrote a parser to parse the NMEA GPS sentences, performed some trigonometry and successfully rendered the live satellite positions.
MisterQueen
Mr. Queen is a chess engine written in C.
Back in college, I wrote my own chess engine. It even played online on the Internet Chess Club. But it wasn’t very strong, because my search techniques were very basic.
A few months ago, my co-workers and I started playing chess. So, naturally, I wanted to try my hand at writing a chess engine again. Mister Queen is the result, and although it’s still pretty weak among other chess engines, it can beat me every time.
GameFrame
Simulates the appearance of the Game Frame while you are busy pixel editing.
The Game Frame was an awesome Kickstarter project that I backed. It’s a 16x16 RGB LED display meant to show off 8-bit, pixely artwork.
While waiting to get my very own Game Frame, I developed a simulator in Objective-C, so you can see what your 16x16 bitmaps will actually look like when running on the hardware.
GraphLayout
Graph drawing using simulated annealing for layout.
This project was motivated by my frustration with Graphviz, namely its ugly default output. Here I tried using simulated annealing to perform the graph layout. It works pretty well for simple graphs. I haven’t done much with this project, but it was fun.
Final Thoughts
2014 was a good year for side projects! Looking forward, I want to try to work toward more deliberate goals rather than whatever strikes my fancy at the time. We’ll see what 2015 will bring…
Happy coding!