The Shake Stick is a NIME (New Interface for Musical Expression) implemented in C++ and SuperCollider on a Raspberry Pi B+. This repo contains all of the necessary code and data to run a Shake Stick. This project was produced as part of a directed study with Dr. Abram Hindle at the University of Alberta. You can read a pre-print of the resulting paper on PeerJ.
Cryssake is a simplified C++ build system written in Python. It Understands very basic configurations of C++ executables and libraries. The guiding principle of Cryssake is that by adding structure to the project being built, we can simplify the build system. Unfortunately, C/C++ code tends to have complex requirements from the underlying operating system, available libraries, etc, and structure cannot be enforced in those areas. Ultimately, I determined that this project, though it works well for very simple C++ builds, would need to rapidly grow in complexity to accomodate more complex configurations. At that point I gave up and learned CMake.
Go has a build system that works sort of how I wanted Cryssake to work, but even better. Rust has a similar build system called cargo that is even closer to what I wanted for C++, but also handles packaging/dependencies: nice!
Zap is multiple prototype CMSes that lets you edit locally and deploy your site using git. The guiding principle of ZAP is to keep your content in git. The rest is still being explored. Currently, ZAP is still being prototyped, with two branches that you might find interesting:
This is a fairly complete CMS that provides an in-browser editor powered by AngularJS. Content is stored in your file-system and you are expected to manage it via git. Editing is done locally and a copy of ZAP must also be running on your server in read-only mode to provide search, rendering etc. This version also has fairly good test coverage.
Ultimately, this became overly complicated and unwieldy, with an annoying dependence on Elasticsearch (this was needed even while editing your site offline).
A rewrite that includes some of the lessons I have learned from the master branch. Currently implemented as a static site generator, it reads files from your project folder and assembles the website as you wish. Extra features such as SASS/LESS compilation, GUI editor, search are not implemented and likely will never be. This removes complexity from ZAP and lets tools that are good at those things (Makefiles, gulp.js, your text editor, etc.) handle those parts. Features:
- very nice error messages for the user
- explicit over implicit
- specifically designed to make it easy to host your website through github-pages.
This version of ZAP is used to build both my website and my resume!
Haiku is a new open-source operating system that specifically targets personal computing. Inspired by the BeOS, Haiku is fast, simple to use, easy to learn and yet very powerful.
This is not a project that I started, nor am I the biggest contributor. Far from it. GitHub can show you my commits if you are interested. However, I did do quite a bit of work on Haiku. All programming was in C++, and I worked on:
- the interface layout API (grids, groups, alignments, that sort of thing)
- refactoring many built-in applications to use that API
- updating a linear programming-based layout manager to a newer version of the layout API
- documenting the layout API and fixing bugs
At this point, I no longer work on Haiku, but it was a great experience. I not only learned quite a bit about C++, but this was the period of time when I first became interested in Software Engineering (as opposed to simply computer programming), design patterns, maintainability, etc.. I also formed a good understanding of how open source can work, and had some very cool doors opened for me, such as going to New Zealand on a scholarship to work on Haiku there.
This repo provides a self-contained indexer for adding documents to an Elasticsearch index in Golang.
This repo houses a few simple experiments in controlling the Raspberry Pi GPIO using C++. Maybe it will be helpful to someone else trying to do the same thing!
Written in 1 hour, this repo provides an example of HTML5, CSS, and REST usage. This simple application written with AngularJS monitors the issues on its own GitHub repo via the GitHub JSON API.