Side Projects

One question that often comes up at when chatting with other programmers I've met since moving to Vancouver is: "What are you working on?". The vast majority of people seem to have side projects that they work on even if employed full time, and it's a convenient conversation starter - one of the reasons I switched to being a student was having more cycles to pursue these types of projects, so it seemed worthwhile documenting what I've been up to - either just for information, or also hopefully there's some interest overlap with others looking for projects. So, ordered roughly on how useful they are:

Line Tracker (http://linetracking.appspot.com/)
I've always tracked my budgets (how much I'm spending, how much I have saved, and where it's stored) but the spreadsheet I was using grew out of hand when I started work (new bank accounts, super, and $US shares) and even more when I changed country, so I wanted to automate it. You create 'lines', and enter values of the line over time - these can then be graphed, but also used to generate other lines (e.g. by adding or multiplying). See here for more details.

Status: Open for use. Fairly stable, I'll be making changes as users (mostly: me) need them.
Language: Java (App engine) and Javascript. In a private github repo, but I plan to open source once I can ensure the data protection logic is secure.


go-sound (https://github.com/padster/go-sound)
The main motivation for this is better tools for audio mixing - I have a soundcloud account where I occasionally post song mashups, but the editing process (all using Audacity) isn't that great: it's hard to tweak already edited songs (the edit steps are forgotten) and a bunch of the effects don't sound as good as they could. That, plus programmatic sound generation and analysis is cool, plus it's nice to practice guitar/piano too.

Status: Simple features are ready, and active development adding more (e.g. pitch detection, and jack integration for audio in/audio out).
Language: go


eego (https://github.com/padster/eego)
I'm studing cognitive systems, so it may not be a surprise that I have acquired both EEG (muse) and EMG (custom arduino) devices to play with. This library will be the dumping ground for all my code that processes these - both for handling the data (i.e. streaming from the devices, and storing runs) but also for processing algorithms (e.g. classification / learning).

Status: Very early, but I expect this to grow once I start doing actual experiments, and hopefully uni projects using the devices too.
Language: go


Task Tracker
This is a younger sibling for Line Tracker. It's another project that is a custom solution to stuff I do manually already: right now, I keep track of lots of small tasks in the Google tasks desktop UI - the easy of creating + moving tasks, plus heirarchies, are great for keeping track both of Uni work, and also the TODO items for all the projects mentioned here. I'm worried the Tasks UI will be killed off, and needed to brush up on my Ruby / Rails knowledge before tutoring, so took the chance to build a task tracking app in Rails.

Status: Mostly ready, needs OAuth2 user login before I can release and open-source.
Language: Ruby Rails backend, Javascript/Polymer frontend.


Touch Footy, a.k.a Pat Fute Mobile (G+ community)
An android version of a game I've written multiple times, a physic simulator soccer game where the players are circles and everything bounces around the inescapable pitch. It's a simple, small game that I use to learn development environments on new platforms, so I used it for Android and the game was fun enough to be worth putting on the play store.

Status: Currently in (inactive) Beta - I put it on hold due to the huge popularity of Rocket League which is also a physics-based soccer game in an inescapable pitch. It's tricky to figure out how to pitch it now - e.g. how to make it different enough that it's not easily dismissed with "Hey, this is a bad rocket league clone".
Language: (Android) Java


Project Ion (https://github.com/padster/projection)
This is a project I've had in mind for a long, long time, born out of the frustrations with Web app development - an attempt to automate as much as possible (ruby-style) but through inspectable, generated Java code that can easily be shared between client and server. Includes things like realtime OT syncing, data store generation, reactive UI binding, ...-

Status: On hold due to being low priority. I'm not writing many web UIs nowadays, so I'm not as frustrated with the development environment inadequacies, and the priority of this has dropped below the go library projects. Hopefully it'll pick up again once I start writing more web apps.
Language: Java, transpiled to Javascript (using GWT)


Scannesters
This one is still just a concept, but hopefully I'll be able to implement it this year. The idea is simple: I get almost all my food from the Nesters supermarket next door - but I have no simple way to know how much I'm spending on food, or what types of food I'm getting. Luckily, the receipts should be easily OCR-able, so the plan is to make an Android app (probably using Tesseract) to take photos and store / index what I'm buying.

Status: An idea waiting for the chance to be implemented.
Language: (Android) Java.


Android Watches (https://github.com/padster/android-watches)
To be slightly blunt, I've never really liked Android API design - there seems to always be a huge gulf between how I think I should be able to write something, and how I need to for it to work on Android. Android watches bridges that gap for the custom watchface APIs, making it so you just define your active and passive face draw methods, and it does the rest.

Status: Complete? I've written a bunch of watch faces already, although I don't really wear my android watch. I want to add a few more API wrappers (e.g. a simpler location API) but I don't really have much motivation until someone needs them to add new faces.


That's pretty much it currently - not surprisingly, the list is too long, and I've even left some other things off, so I need a better way to cull / prioritize what I'm working on (or...more time to churn through the backlog!). If you want any more details on any of the above, are interested in helping out, or want anything added to the released ones, let me know! I'll be curious to look back in 1 / 2 / 5 years to see how far any of these has progressed...

Comments

  1. Heh, my bachelors thesis was basically a combination of two of your projects: it was an app to track expenses, and besides manual input, you could take a photo of a receipt and it would scan it. You can see the code here: https://github.com/rolisz/receipt_budget
    Originally I had plans to actually use it myself, but after the amount of time I spent looking at receipts while developing, I got fed up with the whole thing.

    I ended up developing my own "OCR engine" for it. I looked into using Tesseract, but I could never get good enough results out of it. Maybe the fonts used in romanian grocery stores were weird and maybe the language model for Tesseract was not trained on the romanian abbreviations, but I think it was also that it was not trained to deal with images of receipts, which are often crumpled up and taken under weird lighting conditions.

    ReplyDelete
    Replies
    1. Nice, thanks! And yeah, I'm a bit doubtful a how well tesseract will do, but at least for my personal usage I can control the receipt conditions quite well (flatten them, zoomed in, good lighting...). Hopefully custom code isn't needed, although simple scaling and matching against letter templates might work ok too, the receipts have a predictable format.

      Delete
    2. Having receipts from the same shop would definitely help. You can then train Tesseract on that specific font, which would help a lot. I wanted something more general, and that's why I had problems.

      Delete
  2. That was a long time between posts! Sounds like a lot of diverse and interesting things.

    ReplyDelete

Post a Comment

Popular posts from this blog

Beans!

Comment Away!

Sounds good - part 1