Started in January, 2014
As I am reading news almost every day to stay up-to-date with the latest trends and technologies, I accumulate a huge amount of links to articles, products, libraries and more abstractly: information.
My problem is that my brain has a limited storage capacity and it was frustrating that I couldn't quickly and easily recall a particular information without having to look into my various browsers bookmarks - on several machines to complicate even more the search - and in my emails.
Therefore I made a web link extractor, which reads my emails and my bookmarks and then maintains a database of links. These links are periodically crawled and a screenshot of the whole page is made for archiving purpose.
These links are then indexed into ElasticSearch and a web frontend allows me to query the database. I also added additional semantic processing to automatically summarize and group links within topics of interest.
It's also possible to input information manually in the system and everything is fully searchable.
Bitcoin Trading Bot
Started in November, 2013
An automated trading bot, written in Scala, which is able to track the Bitcoin exchange rates. It works with various virtual currency exchange markets exposing a trading api.
Not much more to say about this project. At this stage it's just a toy to experiment with Bitcoin capabilities in practice. The initial goal was to exploit arbitrage to become rich quickly but there are many limitations on the exchange markets which render the approach dubious.
Experimental Robotic Platform
Started in June, 2013
My goal is to build a robotic platform using open-source hardware components such as: Arduino, Raspberry Pi, Udoo, Makeblock, Adafruit, Pololu and Sparkfun. And having fun experimenting in the process.
After several tries, a bit of soldering and many nuts & bolts I have assembled a working prototype. Its current shape is a small 4-wheeled vehicle with skid-steering drive.
A wide array of sensors are already functional (hardware+driver): two cameras for stereo-vision, an accelerometer, a gyroscope, a magnetometer, a barometer and an accurate gps.
I wrote a complete cross-platform embedded application framework that I use both for my Arduino programs and Linux daemons. They communicate using a home-made serial protocol.
For the fun I also wrote a Node.js application that can communicate using the same home-made protocol and expose a set of Thrift api to other clients. It was then extremely easy to write nice web-based control interfaces, including linear two-dimensional sliders generated with paper.js.
When I have time, my next objective is to use the frames captured from the cameras to build a 3d representation of the environment (points-cloud). It will then be possible to detect obstacles around the robot (moving or not) and learn to recognize them.
VirtualBox Web Interface
Started in March, 2011
VirtualBox is an open-source and cross-platform machine virtualization technology. It was initially developed at Sun and later moved to Oracle.
None of the existing interfaces (official or provided by the community) were suitable to my needs. I wanted to have a list of machine templates (disk images) and a simple and quick way to create temporary instances. Also I wanted to share the access to the host with several team members so they could spawn testing servers too.
I ended up developing a C++ client that connects to VirtualBox native api (xpcom) and export all the states I care about in xml. This is extremely fast in comparison with requesting these separately with the SOAP web-service.
Keeping things simple, the graphical interface just need a home folder to store machines, disk images and settings. It offers a convenient albeit simplified interface to manage test machines.
X.org Remote Input
Started in July, 2007
X.org is a well-known graphical display environment for Linux. My project was to support input from a given physical keyboard/mouse and dispatch it to several machines or screens with a lightweight encrypted protocol.
It works by detecting when the mouse reach the borders of the current machine screen and checking the configured topology to see if a remote screen exist on the other side.
When a remote screen is reachable the local inputs are grabbed and forwarded to the remote machine over an encrypted UDP stream.
The local input are enabled again when the mouse leave the remote computer.
Started in April, 2005
After doing a prototype at work on one of the very first end-user PDA device with a 3d accelerator supporting OpenGL|ES, I wanted to design a 3D engine from scratch - for the fun.
As I wanted to avoid as many external dependencies as possible, it took me a while to lay down the initial building blocks. Step-by-step I created a cross-platform layer, providing a virtual file-system, screen and low-level graphical setup, common data structures...
I documented and implemented many custom file formats dedicated to storing efficiently future applications settings and data. I wrote scene export plugins for 3D Studio, Maya and more recently Blender.
With the constant evolution of OpenGL (v4.4 at the time of writing) I had to rethink the internal logic to benefit from the last improvements available. I must say I really appreciate the direction OpenGL is taking recently: the api is now much more simple and homogeneous than it was before.
Winamp Remote Control Plugin
Started in 1999
In the old days when I was a kid, Windows was very popular. Probably it is still today but that's another story. Back then Windows was my primary operating system and the best way to listen to music was a software called Winamp.
It was fast, free and supported all audio file formats. It also supported plugins and later skins to customize its look'n feel. It was very popular among us.
The only thing that missed in my view was a way to control an instance of Winamp over the network. It becomes extremely useful when the computer playing the music is located close to the speakers, eventually in another room and you are sitting somewhere else. Sometimes the machine playing music doesn't even have a screen attached.
There was a need and no stable and complete solution. Hence I started developing a Winamp plugin. It became one of my very first public project.
The real cool feature in my view was that my plugin supported "guest" access: an anonymous graphical interface with the possibility to browse the list of available songs from a preconfigured library, enqueue them in the active playlist and vote for them. A very democratic way to choose the music when many are in the room.