2012 Year in Review: Side-Projects
– 31 December 2012– 1622 words
One of my favorite pastimes as a programmer is to work on personal projects outside of work. I use side-projects as a creative outlet to work on new and interesting things. I also use them as a learning exercise. If I start a side-project, there must be "one new thing" about the project I don't know how to do already. This can mean learning a new language, API, framework, algorithm, whatever. The end result is that I level up my skillset with each project. I recommend this system for every programmer.
Here is a list of side-projects that I started, developed, and shipped in 2012:
BankersBox
I wanted to learn about HTML localStorage for storing local preferences in internal web apps at Twilio. After finding the localStorage APIs a bit lacking, I wanted to write a Redis-like wrapper around localStorage to make it easier to handle.
Date: March 05, 2012
Link: http://www.twilio.com/engineering/2012/03/05/open-sourcing-bankersbox
Source: https://github.com/twilio/BankersBox
Stack: javascript (for source), coffeescript (for testing)
One New Thing: HTML localStorage
Notes: I consider this a side-project because it was never an official task inside of Twilio. I worked on it around my other assignments after hours on nights and weekends. Since I developed BankersBox to help with internal apps, it was open-sourced under Twilio's umbrella.
Mailblog
I wanted to know how difficult it would be to create your own Posterous-like "blog-by-email" system. Combining a few puzzle pieces made it fairly easy.
Date: March 12, 2012
Link: http://blog.jazzychad.net/2012/03/12/create-your-own-posterous.html
Source: https://github.com/jazzychad/mailblog, https://github.com/jazzychad/mailblog-files
Stack: php, ruby (jekyll), mailgun, S3
One New Thing: Learning to use Mailgun's webhook system
Notes: I worked on this project over a weekend. I published the post describing it Monday morning, and later that day Posterous announced it had been acquired by Twitter. The timing was purely coincidental.
ExportMyPosts
After Posterous was acquired, it occurred to me that there was no easy way to export your blog data. People were worried what would happen to their blogs during the transition to Twitter. I built ExportMyPosts in response to provide a simple one-click export tool.
Date: March 20, 2012
Link: http://exportmyposts.com/
Stack: php, Redis, S3, Posterous API, Stripe API
One New Thing: Using Stripe to take online payments
Notes: I built this site in the four days between my departure from Twilio and starting at Exec. I published a post describing the making of the website shortly after it launched. There have been ~$550 revenue on ~50 sales so far. At this point it is about break-even with the server costs. I may take it offline soon as the rate of sales has slowed way down.
dcpubin
When Notch announced his new game, 0x10c, he released information about a in-game computer called the dcpu which players could program to affect their environment. The dcpu programming spec was in its own assembly language. I love assembly, so writing an emulator sounded like a fun project. I also thought that players might want to share code back and forth in an easy manner, so I created a specialized pastebin for dcpu code.
Date: April 07, 2012
Link: http://www.dcpubin.com/
Source: https://github.com/jazzychad/dcpubin
Stack: node.js, mongodb, heroku
One New Thing: dcpubin spec
Notes: Around the same time, another dcpu emulator pastebin appeared at http://0x10co.de/. It had more features and took off much more quickly with the 0x10c community. I abandoned the dcpubin project, and it is mostly filled with spam at this point.
node-heroku-express
I was starting to write several node/mongodb/heroku apps in my spare time, and each time I had to jump through the same hoops to get it up and running. Finaly I just decided to create a boilerplate starting point repo for these types of projects.
Date: April 25, 2012
Source: https://github.com/jazzychad/heroku-node-express
Stack: node.js, mongodb, heroku
StepStats
I had a Fitbit for about six months, but I was not extremely motivated by the data because the default graphs on their website are not very insightful. I wanted graphs with longer bigger data sets and trendlines, so I created the graphs I wanted using the Fitbit API and set it up as a website anyone with a Fitbit could use.
Date: April 30, 2012
Link: http://stepstats.com/
Stack: node.js, mongodb, heroku, Fitbit API, flot.js (graphing)
One New Thing: Fitbit API, flot.js (ok, that's two new things)
Notes: I have asked to be added to the Fitbit app gallery several times, but each time I have had no response.
Pixit
During a vacation in June, I ran into a problem I'm sure many people have when out and about with friends. People were taking fun pictures with their phones that I wanted to post to Facebook or Twitter. Asking them to send me the pictures from their phone is somewhat cumbersome and takes many steps. I thought up an app that would make it extremely easy to send many pictures to a group of friends in one go.
I wrote a beta version of the app that I use with my family, and it works great. It just isn't polished enough for mass release. I'm not sure if it would be worth the time and effort to wrap it up and ship it. The monetization model is not clear (probably ads?) and the hosting costs for photos would be non-trivial. It is extremely useful, though.
Date: June 2012
Stack: Objective-C, Parse, Facebook API
One New Thing: Parse framework
Adian
When app.net released their API, I decided to throw my hat into the ring of iOS clients. I took my codebase from TweetFire and refactored it into an app.net specific client. It was the second app.net client available in the App Store.
Date: August-September 2012
Link: https://directory.app.net/app/32/adian/
Stack: Objective-C, app.net API
One New Thing: app.net API
Notes: Adian has sold ~1,000 copies since release. Once Tapbots released Netbot (their port of TweetBot) it decimated sales of just about every other client on the market. I dropped the price from US$5.99 to US$1.99 and now it sells maybe 1 copy every few days.
AdianBugs
During development of Adian, I was getting too much user feedback to keep up ad hoc. So, I built a bug report/feature request system for users to give structured feedback.
Date: August 2012
Link: http://bugs.adianapp.com/
Stack: node.js, mongodb, heroku, app.net API
One New Thing: Create a custom ticket system
TunesPost
I wanted to learn about the Apple Scripting Bridge system in OSX, so I thought up a little task bar utility app that could read the currently playing song in iTunes and then post it to app.net.
Date: September 01-03, 2012
Link: http://longposts.com/1226802
Stack: Objective-C, app.net API
One New Thing: iTunes Scripting Bridge
SpotCast
Someone suggested I build a system that would allow someone to be a DJ using Spotify. One person would play music, and others could "tune-in" to their channel and their Spotify app would change songs along with the DJ. Just like turntable.fm, but using Spotify to supply the music instead. I thought, sounds cool - why not? It works incredibly well, and I love having someone else queue up my music throughout the day.
Date: September 03-05, 2012
Link: http://gist.io/3625870
Stack: Objective-C, Tornado framework (for real-time message bus)
One New Thing: Spotify Scripting Bridge
Notes: I did not realize that there was already a Spotify app called Soundrop that did exactly this. Oh well.
LongPosts
Over the app.net Weekend Hackathon, I created an "instant blogging platform" for app.net users. Since app.net posts support annotations of up to 8k characters (still waiting, Twiter... lol), it seemed like a good way to store longer-form blog post data. So, I cooked up an annotation format to support blog posts and just store them in app.net post objects. I found that longposts.com was available, so I grabbed it and built a frontend website around the annotations.
Date: October 20-21, 2012
Link: http://longposts.com
Source: https://github.com/jazzychad/longposts
Stack: node.js, mongodb, heroku, app.net API
One New Thing: Use app.net post annotations
Notes: So far ~170 posts have been written on LongPosts. On December 20 I open-sourced LongPosts so that others can contribute to its ongoing development.
CEGuideArrow
As part of the Pixit app, I created a custom UI arrow control that would point at different parts of the interface during the onboarding/tutorial phase of the app. Pixit was never released (yet?), but I thought others might enjoy the arrow control, so I cleaned it up and open-sourced it.
Date: November 04, 2012
Link: http://www.cocoacontrols.com/platforms/ios/controls/ceguidearrow
Source: https://github.com/jazzychad/CEGuideArrow
Stack: Objective-C
One New Thing: CoreAnimation framework
Notes: Gained 74 stars and 7 forks on GitHub after being published on CocoaControls.
Bridge Trainer
At some point I looked around and decided I was doing too many side-projects. I wanted to improve my life skills in some other fashion than programming. I have always wanted to learn how to play Bridge, and so I decided to make that my next long term side-project. However, while learning about the bidding system, I needed a way to train myself since there are many rules to learn. So, what do I do? I break my rule of no more programming and write my own training software (at least it is Bridge related, right?).
Date: November 2012 - Present
Link: http://bridge.jazzychad.net
Source: https://github.com/jazzychad/bridge-trainer
Stack: BankersBox, coffeescript, Bootstrap, S3
One New Thing: model the game of Bridge in code, create a completely client-side web app
Notes: Currently only opening bids are covered by the trainer. Once I feel confident in my abilities there, I will move on to adding responses and rebids. Then will come the defensive bids. During the course of development I also got a Makefile update accepted to Bootstrap.
So there you have it. 2012 was a busy year. Hopefully 2013 will be a bit slower with non work-related programming, and I will start earning my first Bridge Master Points.
Further discussion on Hacker News.
— Fin.