Download my résumé:

Bears of War

Bears of War

Bears of War (BoW) is a turn-based strategy game where Bears must fight against Canines.

The game features a mind-blowing 3D engine with deferred shading, stacked animations and fog of war. Players can play locally or remotely over network with up to 6 players. They can save and resume their games, or generate new random maps given the desired size and the number of players. Each bear and canine unit possesses its own set of weapons and statistics. The player has full control over the camera view.

BoW was created by a team of four dedicated McGill students over the semester of Winter 2009. The final product includes a printed CD, an amazingly good-looking box and a top notch commercial-quality color laser printed user manual.

BoW was programmed in C# using Visual Studio 2008 and the XNA framework.

The website you are currently viewing has been carefully crafted using (or trying to use) the best software engineering practices.


The core architecture was built in an MVC pattern and written for PHP 5.2 using object-oriented programming.
All page requests of the form "[language]/[topic]" must be processed by a front controller.
Upon receiving this request, the controller must load the main website settings, determine what language to display, load the main language-specific settings, parse the appropriate content file, process the template file using the parsed content, include the header and the footer page
and finally return the response to the user.

Content and i18n

Content files are both page-specific and language-specific in order to avoid unnecessary overhead during parsing, but also to keep it nice and short for
a translator that might have to deal with this file when translating this website.
Content files are written in the people-friendly YAML format and saved in a UTF-8 encoding.
The front controller's content parser has full support for UTF-8 encoding which means that the website could be translated in literally any language.
The parser also automatically escapes reserved HTML characters for security reasons, and offers a minimalistic formatting feature using BBCode.

The Superfluid Layout

The layout was inspired from The Perfect Fluid Width Layout.
I extended it by adding "spring tabs" that shrink when the browser window is small, and variable width left/right margins that grow on the white page when the document body is increasing from 980px through 1280px.
When resizing above 1280px in width, the white page stops enlarging and you can see a four-color gradient border appear as a demarcation between the white page and the dark gray background.
If you keep slowly enlarging the window beyond 1280px, you will also see a funny CSS animation effect of hands grabbing the white page and a head emerging from behind the white page
(although I disabled it in older browsers for compatibility issues).

Managing Development

As this website becomes more mature, the number of features and problems to keep track of increases.
And with the project size going up, it becomes harder and harder to remember all the new ideas for features,
but it becomes even harder to remember all the minor bugs and quirks out there, especially those browser-specific ones.

It was when the number of issues got too big for the time I could spend to fix them that I decided that I needed a more systematic way to remember and prioritize my development tasks.
As a result, I started using an issue tracking system.
I chose Eventum for its cost (free), its ease of use, its features and its easy setup.
For similar reasons, I also started to version the code using Subversion.


Before uploading the new features and fixes to the web, I use a testing environment set up with virtual machines using Virtual Box.
During testing phase I ensure that everything works on Internet Explorer 6, 7 and 8, Firefox 3.5, Safari 4.0, Chrome 2.0 and Konqueror.

Upcoming work

I am working hard to make continuous improvements to the website and upcoming releases will include
faster browsing provided by a caching system to prevent regenerating the same page at every request,
support for older browsers and mobile browsers,
strict XHTML that validates,
the porting of some old javascripts to unobtrusive javascript with Prototype to improve maintainability and compatibility,
and finally the implementation of a framework for automatic unit tests.

PowerPoint Extractor

PowerPoint Extractor

The PowerPoint Extractor is a web application that allows everyone to share and play PowerPoint presentations online without using PowerPoint itself. It could later be extended to support other presentation file formats.

The Windows module can be installed on its own server and provides a web service accessible over HTTP. As illustrated, the PowerPoint extractor accepts a PowerPoint file and returns a Zip file. The returned file contains a collection of picture files: one for each slide.

A user interface programmed in PHP is also provided, although one can use the extractor with their own interface.

Course Notes on Concurrent Programming

Course Notes on Concurrent Programming

Here are some notes about concurrent programming I have compiled for a course I took during the semester of Winter 2008 at McGill University. You may find the 110-page long PDF file here.

The notes were written in LaTeX using Kile and most figures were drawn using Xfig. Uncountably many packages were used so I won't recursively enumerate them here.