Projects worked on for Option NV
(April 2011-October 2012)
Option is a well established belgian technology company. It focuses on cellular based technology and a wide range of IOT and USB products. I've worked on various projects there as a full stack developer.
Option created a new 3G security camera with linux based firmware called VIU2. For this project I did some kernel driver work to implement image flip 180 degrees with 20fps h264 hardware. Further did a lot of server side and backend work as well.
For VIU2 I did most server side software in ruby on rails and python. We have an administrative and OTA firmware upgrading site. Developed a mobile site for watching events, clips and snapshots from 3G enabled security cameras called VIU2. I've also developed a json api with sinatra rails and that is being heavily used by Android and iPhone applications to manage the custumer's VIU2 (he can add guest users and toggle motion detection etc. on his 3G camera) watch live streams and recorded clips of his camera etc. The ota administration site allows management of the cameras (moving clips from one camera to another if one fails, doing batch upgrading to new firmware versions etc.). With the json API I wrote full regression and automated smoke testing and that saved us a lot of time. We lost more time on debugging python code that lacked unit tests than it took to implement all tests in the ruby sinatra json api.
So it's a good example that a little extra development time during startup saves a lot of debugging time in the end. Any time we found something not working in the json api we immediately saw which tests failed in the regression tests and we're much quicker to find the culprit (this could go from database schema not up to date to other external components not obeying the api specifications etc.). The reason I chose for Ruby On Rails on the web and json api work is because it's a well written framework with the right balance between convention over configuration and has all the features to integrate into existing platforms (any convention can be overridden if it's necessary, but going with the flow saves a lot of development time that can be spent on well written tests).
On the firmware side of VIU2 I implemented a modified kernel module to do the image flip feature of the 3G camera. The camera VIU2 runs embedded linux on an arm processor (with busybox/buildroot etc.) and by diving into the graphics chip driver code I was able to implement an image flip feature so people can hang the camera on the ceiling and still get their snapshots and video clips/live streaming right side up. Apart from that it was mostly integrating and server side software connected to mysql database (all on linux variants, centOS, debian and ubuntu distributions). This consisted of a json api written with sinatra/ruby to connect to android and iphone's where people can watch their clips and tune the motion detection levels. A complete administration site (in rails) to manage firmwares, do ota, managa data usage. Different administration levels here. for instance the top level admin can watch videos and snapshots of all cameras while others can only delete or move clips and change passwords etc.
APM (Application Policy Manager) was an ambitious project for AT&T to do traffic monitoring and traffic shaping by running software embedded on each android device. About 2 million devices in the field. Server side we used python twisted due to reactor pattern (basically what nodejs/express is all about these nowadays to get high performance). We had 8 dedicated servers and a machine learning app on the device side to allow traffic shaping to be done on the AT&T network).
The APM project has 2 hidden android applications running in background one that starts a native c program (written with ndk arm gcc compiler) to communicate with iptables and connect to a python backend. The other is a simple notification service to give users notifications. There are 12 dedicated servers running at AT&T that connect to these clients and through an administration web based frontend firewall rules can be pushed and traffic traces can be requested on these devices that have the clients installed. There is also a machine learning component (server side) to analyse the given traces and construct new rules to push to clients to block certain types of traffic. For instance a user can be notified by AT&T that he's using an application not allowed on their network and that it's now blocked (this is then done with the iptables component).
Also we deployed to 3 seperate Oracle database (most projects I tend to use mysql or postgress) so this was also a bit of learning as oracle can be picky on limiting queries for pagination on large datasets. Luckily we solved all issues in moving from mysql to oracle in just a few days thanks to ruby ActiveRecord and a good python oracle connector.
APM android app
Some work done on my first android application together with another contractror. It was a small app for getting debug information to show on screen for devices that had the APM software installed (which ran as a daemon on the android firmware itself and was normally invisible to the end user) .
It was really fun working at Option and would it have been closer to my house in Antwerp I probably would have stayed a lot longer. However the traffic jams were a real pain to overcome each day with the commute so when an opportunity showed to work on a large Ruby on Rails project in Antwerp near my home I felt it was time to leave Option.
During my work at option I also worked a few months on a holiday e-bidding site. With automatic PDF voucher and invoice generation and had the ability to do bidding on auctions.Weekend/spare time work done BiedMee
My next larger customer became PlayPass