|This page is related to Summer of Code 2010|
|See the list of Summer of Code 2010 Ideas|
- 1 Contact
- 2 Introduction
- 3 GSoC Projects
- 4 Disponibility this summer
- 5 Experience
- 6 Open Source Involvement
- 7 Gaming experience
- 8 Communication skills
- 9 How I work
- 10 Practical considerations
- I'll be on IRC approximately from UTC 15:00 to 22:00.
Wesnoth forums and GNA!: gabba
Languages spoken: French, English, Spanish
Skype: I'll provide my Skype handle on request.
Telephone: Will submit it with my application to Google.
I'm on my third year of a four-year bachelor's degree in Software Engineering at Polytechnique Montréal, in Québec, Canada. This is my last summer as a student, since I graduate next winter.
I've been itching to contribute to Wesnoth for a long time, but the lack of time and especially the size of the codebase were a serious barrier. The Summer of Code seems like the ideal opportunity to start what I hope to be a long-term commitment.
I have submitted two proposals:
This said, I'm available to work on any other project that helps improve Wesnoth, in case you have something else in mind for me :). I should mention that I was also interested by the Eclipse Plugin, the WML debugging, Rewrite wesnoth network stack using boost::asio and the New alliance system, but I had to settle on something.
Disponibility this summer
I'm available for the whole GSoC period, from May 24 to August 16. That's 12 weeks of work: 8 before the mid-term eval, 3 between the mid-term and the unofficial pencils down date, and a last week between that and the official pencils down date.
In addition, I'll be free from final exams from April 26 on. Therefore I have an extra free month before the official beginning of the summer of code. My current plans for this extra time are:
- take a summer course that'll last from May 3rd to June 17; it'll occupy about half my weeks, taking away 4 "half-weeks" from the GSoC
- to make up for those I will start the GSoC as early as April 26, thus gaining 5 "half-weeks" for the GSoC
That leaves me with a balance of 1 half-week to spend sometime during the summer to have an extended weekend.
Overall I intend to follow a regular work schedule as if I was doing an internship at a company's site (like last summer), and therefore I'll work at least 7 hours a day, 5 days a week on Wesnoth. Knowing myself I'll probably have the project in my head the whole time and keep adding stuff on weekends, though.
Google Summer of Code
I haven't participated in a Summer of Code yet.
I did submit a GSoC proposal to Wesnoth last year (Improving Savegame WML), which didn't get accepted, but allowed me to take a good look at Wesnoth's WML-related code and the structure of savegames.
I've worked a year and a half as assistant webmaster for a large company, so I'm able to deal with tight schedules, dealines, and having to manage several projects at a time.
Last summer I did an internship for a scientific group that does research on product lifecycle analysis. My job was to deploy the Geos-chem (http://acmg.seas.harvard.edu/geos/index.html) software at their site, and then do some modifications to it that were necessary to their research project. The technical side: I worked in Fortran (gasp!), Java, Bash script. Human side: I delt with various on-site experts, with the fine folks at Harvard, and with a few software suppliers.
- A java app I wrote last summer to automatize the use of a scientific acidic deposition simulator that only allowed you to do one simulation at a time, by manually entering data into a GUI (fortunately it allowed saving and loading data from text files, so I could trick it into doing what I wanted). The goal was to use it to realize thousands of simulations, with input data from an Excel/.csv file. The data outputted by each simulation had then to be organized into a results .csv file.
- The program in itself is clean but entirely procedural (no object-oriented in there), and not a wonder of engineering.
- However it does demonstrate my ability to find innovative solutions in a short time to problems that are thrown at me out of the blue. In this case the end result is an app that pilots the simulator's GUI through the Java "Robot" class. It is configurable through command-line options, as well as from a text file (autoprofile_input_format.txt) that determines how to format a line of excel data into an input file for a single simulation. In case of an update of the simulation program, the users would have been able to upgrade the input format even if I was gone.
- I can't distribute the simulator app, so this one won't be executable, sorry.
- The source comes with the netbeans project I used to code the app.
I was team leader on several 5-people school projects, with good results.
Assemble a robot complete with motor, wheels, microcontroller and sensors, and program it to follow lines traced on the ground and detect and avoid obstacles. This was developed in C/C++ under linux, and cross-compiled for the microcontroller.
Program a 3D Pinball game and an editor to create different pinball tables. The choice of technologies was imposed: C++ (for the backend) and Java (for the editor's interface), with JNI and JAWT to glue them together. We used XML to save the pinball tables (using the Xerces library), the Box2D engine for the physics simulation, OpenGL for graphics, FMOD for sound, and a couple smaller libraries for things like calculating the convex shell of a 3D model. We modeled our objects in 3d Studio MAX.
Refactoring of our earlier pinball game to add multiplayer gameplay on the network. We chose to implement a client-server architecture where the physics would be calculated on the server; all players share a dome-shaped table and compete for points. Technologies used: the server runs under linux, and we have a Windows XP client and a Windows Mobile 5 (Pocket PC) client. We coded in C++ and C# this time, and we used the RakNet (network), Bullet (physics) and Irrlicht (graphics) libraries.
- Early video of some marbles falling, shows the Bullet engine physics debug view I integrated to our game.
- Early video of the editor prototype, for which we modified an existing open-source editor. I wasn't the only one to hack on this, stuff I did personally was for instance the code that ensures objects are placed on the 3d surface of the table which can have arbitrary geography.
- Some component diagrams and a class diagram that I did as lead designer/project leader for a part of the game's architecture. It's a bit "design pattern-heavy" and with fresh eyes I think they have a messy look, but those diagrams were rather effective. They helped everybody have a precise mental image of our game's structure, and the end-result was close to what I had designed,
I also completed successfully a large number of solo projects, here are some samples. (Normally you just have to compile and execute those, but if you have trouble with some of the samples, contact me. Comments in the source files are either a mix of french and english or all french, sorry if it makes reading the code more difficult.)
- A self-extending Eclipse plugin that dynamically loads classes containing file operations, and adds them to the contextual menu in the Navigator view. It's self-extending, in that it declares an extension point and uses it itself.
- Note: to load the Eclipse project successfully, you'll need the full distribution of Eclipse 3.5, or at least Eclipse 3.5 with the whole plugin sdk.
- I consider this to be well engineered, efficient code.
- An OpenGL selection demo, that puts the Composite pattern to good use. The main.cpp is not very clean, but the Composite pattern files are ok.
- Note: it's a glut cross-platform app. Open and compile with Visual C++ 2008 under Windows, or under Linux, open with Netbeans C++ or just run make and look for the executable under dist.
- Graphics are reduced to the bare minimum.
- See also my other code sample in the work experience section.
Open Source Involvement
Battle for Wesnoth: I'm on the forums since 2005. I played a lot, of course, and mainly contributed ideas, especially in the domain of AMLA (units improving beyond their maximum XP level). More recently I submitted a few patches and gained commit access to the wesnoth svn repository.
Submitted patches and commits, most recent on top:
- r41947 I fixed the recently added widescreen indicators to include 16:10 aspect ratio screens.
- r41946 I tidied a bit the preferences dialog and improved on my patch 1528
- https://gna.org/patch/?1528 I added the ability to name hotseat players something else than Anonymous Local Player, which really looked silly especially in dialogs.
- https://gna.org/patch/?1556 I added an option to activate Delay Shroud Updates on game start.
- https://gna.org/patch/?1162 I added a WML option for configurable village support. (Credits to Kegie for maintaining it for a long while and adding many missing elements. I still have to update this patch to the latest trunk and commit it. The latest version of the patch lives here: https://gna.org/patch/index.php?1381)
TA Spring (http://spring.clan-sy.com): Contributed a lot of ideas, many of which were implemented; for instance the terrain map that determines regions of the map that hinder or accelerate unit movements. I also submitted one or two small patches.
Irrlicht engine (http://irrlicht.sourceforge.net/): submitted a patch.
RakNet engine (http://www.jenkinssoftware.com/, public source code but not open-source): submitted a patch.
I'm very passionate about games, and I like collecting and playing all the classic games in every genre, be they recent or old. I also love playing open-source games and following their development. My favorite genres are strategy games, RPGs, and shooter/RPG hybrids. As far as opponents go, I prefer playing against an AI, however I regularly have LAN parties with my friends (and yes, we play Wesnoth!). I also play online from time to time.
In games, I like a good mix of story and gameplay. Up to now I've mainly focused on creating the gameplay part of games, but I'm a pretty good writer (at least in my mother tongue) so that could change.
Wesnoth playing experience
I've played the main campaign (Heir to the Throne) several times, as well as A Tale of Two Brothers and The South Guard, and a lot of user-made content. I'm particularly fond of UMC cooperative RPGs. As said above I regularly have a game of multiplayer Wesnoth.
French is my mother tongue, but I'm perfectly fluent in English, both written and spoken. And I can hold a conversation in Spanish.
I'm familiar with forums and the flame wars that can erupt; I generally keep my cool and try to be diplomatic, until people calm down and start reasoning instead of shouting. I give and take constructive advice, but I don't follow every random suggestion that's thrown at me either.
How I work
Overall I'm a very autonomous person, who likes to do a lot of preliminary research. If the specifications are not clear, I'll also discuss a project a lot before getting started on it: I hate wasting effort. This said I recognize the value of risk-management, and I'd rather waste some time prototyping to test several technical alternatives, rather than blindly selecting the first one that I like.
I'm not easily discouraged and I don't drop a project without extremely serious reasons.
Tools are very important for me: I like spending time to set up my development environment, to read enough documentation to use a library properly, and so on. I often make choices that take more time now but will pay off in the long run. Looking back, I'd say this has usually been a good choice.
I have a good comprehension of software development as a process, and the various methodologies (agile, UP) that exist. When designing software I base myself as much as possible on design patterns such as those of the GoF.
I am familiar with most languages and tools used in Wesnoth:
- Subversion: used on a daily basis. Now I'm trying to get started on git-svn.
- C++: 3 years of experience
- STL: I don't see how I'd program without this
- Boost: Read up on it a lot (especially the various safe pointers), want to use it, haven't used it much yet.
- SDL: Never really worked with it
- Python: Can read/modify it without problems, haven't used it extensively.
- build environments (eg cmake/autotools/scons): I can write a basic Makefile, and I've compiled Wesnoth with both Scons and Cmake. I've delved a bit into the options for both.
- WML: I studied savegame WML in detail.
- Lua: Can read/modify it without problems, haven't used it extensively.
I'm also pretty fluent in Java, C#, OpenGL, bash scripting, and I can code in Assembly and Fortran if needed. I can write html and xml/dtds, too.
I've worked with Bullet, Raknet, Irrlicht, Box2D, Xerces, FMOD and Apache httpclient and log4cxx, among others.
I work with Netbeans, Eclipse, Visual Studio, Notepad++, Kate, Geany and everything except Windows Notepad. Currently I'm using Eclipse + Ubuntu GNU/Linux to hack on Wesnoth, and it works pretty well.