2016 was a big year for me. I didn't blog or take as many pictures as I would have liked, but I'll try my best to give a decent recap, and then talk about some of my goals for 2017.
I started off the year by moving to NYC with my girlfriend, Lola. We spent 2 weeks looking for an apartment before finding a short term sublet. It was in a nice neighborhood, but was pretty far from the subway and not as cheap as I would've hoped.
In February, I started my time at the Recurse center. The Recurse Center is a "writer's retreat for programmers", a place for hackers of all sorts to gather, work on projects, and take a sabbatical. Being a Recurser was great for me in a lot of ways, although I definitely could have gotten more out of it. To start with the good things: I coded a lot (averaging about 4 commits per workday), I "finished" a couple of small projects (inasmuch as a project can ever be finished), and I met a lot of really cool people.
Here are some projects that I worked on, in no particular order.
Gif - This was a project that let people search for and view gifs in their terminal, similar to the Giphy bot in Slack. I felt pretty good about this project - it has close to 6000 downloads, a real CLI interface, and some Github stars. The way it works on the built in macOS Terminal is by converting a gif from Giphy into a series of JPEG frames, converting the JPEG frames into colored spaces, and then printing out each converted frame to the Terminal. In iTerm 2.9+, it can actually natively display the gif, which makes for a much smoother and high resolution experience. I wrote a blog post about it here.
Rainbow Theremin - This project was really fun. It is a web app that tracks motion through the user's camera and lets them "paint" on their screen. It uses X/Y/X coordinates to control the pitch and volume of a theremin as well as the size and location of an onscreen paintbrush. It ended up being really hard to make good theremin music while painting, and really hard to make good paintings while making theremin music. The coolest part about this was that I could show it to non programmers and have them be interested. I also got to use p5.js, which is super awesome; I'd love to play around with it more in the future. I wrote a blog post about it here.
Gamecube IO - This is a semi-unfinished project to make set up scaffolding for writing bots to play Gamecube games. I initially wanted to write a bot that played Super Smash Bros. Melee, but I reduced the scope of that idea to just setting up the scaffolding for detecting information about the game state and sending virtual inputs to the console. At some point I'd like to revisit this project, but for now I'm letting it be.
ZenTypr - This project is a typing website that has you type out Zen Koans in a relaxing manner. It was fun to build and fun to use, so I'm pretty happy with it. It also gave me some inspiration for another side project that will be launching in 2 weeks. The Github repo can be found here.
Other miscellaneous small/unfinished projects: I wrote a Self-Referential Hash in Ruby, a code golfed Markov Chain (127 bytes of Ruby, reads from STDIN), a half finished implementation of miniKanren, a (now defunct) Twitter bot that sends SciHub links to people using the #icanhazpdf hashtag, and an almost finished Huffman Tree.
In April, right after my stay at the Recurse Center ended, I took a job offer at Opentrons. Opentrons is a robotics company that builds "Lab robots for biologists" - which currently means an automated pipetting robot. I learned a lot of new technology while at Opentrons; I built two cross-platform desktop apps with Electron, built a client side application with Vue (which is an amazing framework), used Python, Flask, and Webpack in production for the first time, and learned a lot about CI, Python executables, Pipetting, Biology.
Perhaps best of all, 90% of the code that I wrote is Open Source! Some of the projects that I worked on included the Opentrons 2.0 App, the Opentrons 2.0 API, the Opentrons 1.0 App, the Opentrons 1.0 API, and the Email Server. Some fo the work I did is not yet Open Source, such reducing the old marketing website's load times by 90%, making it cross-browser compatible, and creating the new marketing website.
Something else I got from working at Opentrons is the ability to work remotely and autonomously. I worked most of the week remote from my apartment in Philadelphia (which I love! so happy I moved here) and hung out on video chats and Slack to communicate with the team, and then came in to the Brooklyn office for important meetings. This is most definitely a skill, and something a lot of remote workers take for granted when they start working remotely. In other words, I am much better now at working remotely than when I first started. It's hard for me to imagine not working remotely now - I've grown to really appreciate the freedom it gives me.
Lastly, I got to help shape the engineering culture at Opentrons. When I first joined, there were no Pull Requests, no unit or integration tests, no code reviews, no standups, and very little process whatsoever when it came to the engineering team. By the time I'd left about a year later, I'd helped to implement all of the above, in addition to regular release cycles, Semantic Versioning, Issue Tracking, and a remote-friendly culture.
That about sums up my year - I moved to New York City, did a fellowship at the Recurse Center, and spent 10 months at Opentrons. The biggest surprise of the year to me is the fact that almost all of the code I wrote is Open Source - everything at Recurse and almost everything at Opentrons was completely Open Source. Here's to another year of Open Source!