Difference between revisions of "User:Gabba"

From The Battle for Wesnoth Wiki
(Team projects)
m (Networked Pinball)
Line 64: Line 64:
 
=====Networked Pinball=====
 
=====Networked Pinball=====
 
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.
 
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.
*Video of [http://docs.google.com/leaf?id=0B3kerkXfqhATN2M0ZWQ1NTgtYzY4Ny00YWNlLWE0YjEtZmJlMTM2MjE2ZGU0| some marbles falling], shows the Bullet engine physics debug view I integrated to our game.
+
*Early video of [http://docs.google.com/leaf?id=0B3kerkXfqhATN2M0ZWQ1NTgtYzY4Ny00YWNlLWE0YjEtZmJlMTM2MjE2ZGU0| some marbles falling], shows the Bullet engine physics debug view I integrated to our game.
*Video of [http://docs.google.com/leaf?id=0B3kerkXfqhATNWY0M2MxZDAtOTczMS00MWNiLTg3NWMtZGJhNTQwYmUzYmRm| 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.
+
*Early video of [http://docs.google.com/leaf?id=0B3kerkXfqhATNWY0M2MxZDAtOTczMS00MWNiLTg3NWMtZGJhNTQwYmUzYmRm| 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.
 
*[http://docs.google.com/leaf?id=0B3kerkXfqhATMTdiOTZiYTctZGY0ZC00ODc0LWE2YWQtZDAzM2JkNzVmZjI1| 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,
 
*[http://docs.google.com/leaf?id=0B3kerkXfqhATMTdiOTZiYTctZGY0ZC00ODc0LWE2YWQtZDAzM2JkNzVmZjI1| 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,
  

Revision as of 07:13, 5 April 2010

This page is related to Summer of Code 2010
See the list of Summer of Code 2010 Ideas



Contact

IRC: gabm

  • 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.

Introduction

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.

GSoC Projects

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 May 1st on. Therefore I have an extra free month before the official beginning of the summer of code.

Possible plans for what to do with this month include:

  • take a summer course that'll keep me busy until the end of June; since it'd occupy about half my weeks I could compensate the time lost in june by starting the GSoC as soon as may 1st, so in total I would still have a full 12 weeks to work on my GSoC project
  • or, start the GSoC at least two weeks early, and use that "credit" to go on vacations at some point in the summer -- a little mountain hiking helps refresh the mind after weeks of programming! Of course if I do that I'll inform my mentor of my vacations period several weeks in advance.

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.

Experience

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.

Work

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 Pascal (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.

School

Team projects

I was team leader on several 5-people school projects, with good results.

Robot

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.

3D Pinball

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.

Networked Pinball

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,

Solo projects

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 very 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.
  • 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.

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:

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.

Gaming experience

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.

Communication skills

Language

French is my mother tongue, but I'm perfectly fluent in English, both written and spoken. And I can hold a conversation in Spanish.

Social skills

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.

Practical considerations

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.

Other languages

I'm also pretty fluent in Java, C#, OpenGL, bash scripting, and I can code in Assembly and Pascal if needed. I can write html and xml/dtds, too.

Other libraries

I've worked with Bullet, Raknet, Irrlicht, Box2D, Xerces, FMOD and Apache httpclient and log4cxx, among others.

IDEs

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.