Skip to content

Author: Emmanuel Goossaert

Facial transformation framework on the iPhone

More than a year ago, I was playing with some Computer Vision algorithms, and I posted this: Active Appearance Models in C++ (Paamela). The framework I built back then was a bit more complete than a simple AAM implementation, and actually I went up to the point where I was able to transform the sex, age and ethnicity of a person in a picture. The code was basically sitting there, taking dust in my hard drive. I had been willing to try some Objective-C and mobile development for some time. With the use of some magic (and good cross-compiling skills), I have been able to port the code from Linux to the iPhone. I now have a fully functioning facial transformation framework running on the iPhone!

Gamification: the next revolution?

The rate at which gaming is penetrating the different layers of our societies has been rapidly increasing during the last decade. Sure, part of this is due to the fact that kids playing in the 80’s are now 30 to 40-year old, but another good part of it is a direct consequence of the vulgarization of video games in general. With the Wii and now Kinect, no need for fancy game pads and killer finger skills to play video games. A vector of this acceleration is also the recent urge in the social media world. With Facebook, social games have emerged, taking advantage of social and psychological constraints. Games are no longer confined to the virtual world, and are crushing into the real world.

Automatic repository and web server synchronization on commit

When developing a web site or web application, it is always a hassle to first commit the code to the repository, and then use FTP or SCP to update the code on the web server. Various IDEs allow to automatize this “code synchronization” process with a simple button to click, however this is still one additional step on the developer’s mind. We all went through these moments where, developing late in the night, we were trying to fix a bug and realized that we were working on the wrong version as we had forgotten to update the code on the web server. What a waste of time! For the development of a recent project, that includes sharing code with other developers, I decided to put an end to this code synchronization issue, by making it fully automatic. In this article, I first present the problem and my design of a configuration-independent solution. Then, I apply this solution to the specific context of my project, which uses Python as a web server, BitBucket/Mercurial as a repository solution, and Apache/PHP to handle the commit notifications.

Motivation

Manually updating the files on a web server after a commit is a simple and straightforward step. However, it can be the source of various errors, such as:

1. Accidentally uploading the files in a wrong location on the web server
2. Forgetting to update the code on the web server and waste time debugging a deprecated version
3. Being distracted by thinking about updating the code on the web server, and losing focus on the development flow
4. Wasting time, as even if updating manually takes only a few seconds, these seconds will add up dramatically

The actual step of committing the code to the repository can hardly be automatized, as only the developer can say when the code is ready to be pushed. On the contrary, updating the code on the web server could easily be avoided. A simple system would be to get the web server to update its files and restart automatically whenever a commit is made to the repository. Figure 1 below describes the design of this automatic synchronization system.

Figure 1 - Automatic synchronization of web server and repository on commit