Battmon Now Available on Google Play!

Feature image

I, like most other people, have been playing a lot of Pokémon Go recently. As a result I, like most other people, am charging my phone at every possible opportunity. Sometimes it's on my desk, sometimes it's in another room with my fast charger, and sometimes it's in some far-flung corner of a car, underneath a pile of my friends' phones. I like knowing how much charge my phone has so I can plot out my Pokémon safaris, so I looked for an app that would let me use my LG G Watch to monitor my phone's battery remotely. Shockingly, no such app existed, so I took it upon myself to cook one up. The result is the (copyright-lawsuit-baitingly named) Battmon! It shows your phone's current state of charge, power source (AC/USB/Qi/battery), and battery stats like voltage, temperature, and current. Check it out on the Play Store here!

The source code is available here.

Feature detection algorithm diagram
Diagram of the feature detection portion of the algorithm

Machine learning is extremely useful in daily life -- Google uses it to fight spam, Facebook uses it to automatically tag your friends in pictures you upload, and many scanners use it to identify handwritten letters in documents to be automatically converted to searchable text. It also requires a huge amount of computation. Input sizes of hundreds of thousands of samples are commonplace, and to fully analyze even small samples can take a long time.

This past semester I took ECE408: Applied Parallel Programming, a class which covered GPGPU computing, specifically CUDA. The final project was very open-ended: we could do whatever we wanted, as long as it used the GPGPU concepts we discussed in class. My group and I looked into some machine learning applications and decided that one, specifically the training phase of object recognition in images using Haar-like classifiers, was both embarrassingly parallelizable and easy to find a large, preformatted training set for. So we planned out our approach and got coding.

Full post >


I'm currently enrolled in Astronomy 499 at UIUC, and for the final project my group decided to investigate the effects of adaptive optics on images taken on our telescopes. The writeup, raw data, and generated graphs are available on the repo. The code is really slow, but it's also very readable and should be easy to modify if you ever find yourself analyzing pictures of stars, but for some reason don't want to use a more professional tool.

Knockout.js is a fantastic MVVM framework that handles observables, templating, styling, and more. It's easy to learn, but getting good performance out of it in larger apps can be difficult. Not to worry though, a few easy tweaks can make your app almost as responsive as a native app!

The web team at TigerText uses CucumberJS, Selenium, and Webdriverio for its unit tests. However, I was unable to get it to run on my machine; Selenium would open a Chrome window to the url "data;,", then do nothing. After hours of Googling and headaches, the problem ended up being that some of the files the tests use had syntax errors in them. Webdriverio didn't spit out any error messages whatsoever, which made finding the problem difficult. I couldn't find any mention of this on the internet, so I thought I'd post my findings for the good of everyone.

Happy unit testing.