Google Summer of Code/2009

From BZFlagWiki
Revision as of 15:52, 16 March 2009 by Learner (Talk | contribs) (emphasize the labels)

Jump to: navigation, search

The 2009 Google Summer of Code was announced in February, 2009. BZFlag will again be applying as a mentoring organization. Given our enormously successful participation in the program in 2007 and 2008, we're very excited to be participating again and we're very happy to see the applications that were submitted. BZFlag will be accepting student project proposals from March 23 until April 3. Hints and tips on getting started, preparing a submission, and the application process were available.

Promotion Flyers

We're now soliciting designs for our 2009 GSoC promotional flyer. If you are interested in providing a design, please contact us!

Proposal Ideas

While there are lots of Ideas floating around of varying utility to the game, the ideas listed below are the specific areas that we are predominantly interested in seeing worked on as part of the GSoC. Please note that students are also welcome and encouraged to apply with their own ideas. They should run those ideas by one of the developers beforehand to make sure they are consistent with the scope and focus of the project, though, as there are some ideas which will not be accepted regardless of the quality of the application and applicant. We've additionally provided several project ideas important to BZFlag development that we would very much like to see proposals for, shown in following.

High-Priority Project Ideas

This year our focus is on quality. We need to stabilize our codebase and prepare for a major release. That being the case, a *very* strong preference will be given to cleanup and refactoring projects over new code projects. Please keep that in mind when preparing your application and do contact the developers if there are any questions.


Suggest your own idea

BZFlag is always open to new development ideas and is under constant improvement. If you are familiar with BZFlag's current capabilities and would like to propose some new enhancement, we'd be happy to hear about. Please discuss any new ideas with the existing core developers (on our IRC channel), if only to make sure the ideas are in-line with the spirit and constraints of the game.

Difficulty: variable


Cheat preventions

This task involves making BZFlag more robust towards preventing various cheats from working in the game. This task implicitly requires adding protections on the server, moving game logic from the client to the server, and/or adding heuristics and other measures for detecting and dealing with cheat clients. The student should have a strong grasp of the variety of BZFlag cheats that are available. Please go into detail about which cheats you're interested in preventing and how you intend to employ those preventive measures. For information on known cheats, check out the Known Cheats wiki page.

Requirements:

  • Strong familiarity with C/C++
  • Basic familiarity with client/server networking applications

Difficulty: medium


Modularization of game logic

Much of the game logic is presently mixed in with BZFlag's graphics code. This lack of organization make it difficult to find code when necessary, and does not allow bzfs, bzrobots, or other tools to utilize the game logic. The game code should be modularized into libgame so that all that is left in the client code is the graphics subsystem. This will also ease the possible future integration of a 3D graphics engine.

Requirements:

  • Familiarity with C/C++

Difficulty: low


Modularization of OpenGL logic

BZFlag's graphics code is (unfortunately) spread throughout the codebase with OpenGL calls being made in thousands of places. The goal of this project would be to encapsulate *all* of the OpenGL calls into one place as a first step towards encapsulating all of the graphics code so that we can adopt a 3D rendering engine. This project should not be to integrate with an engine, though, as there's too much that needs to happen beforehand. Step one is getting all of the graphics code contained.

Requirements:

  • Familiarity with C/C++
  • Basic familiarity with OpenGL

Difficulty: low


Network Testing and Simulation Environment

This task should provide a controlled testing environment for simulating network behavioral characteristics, including the ability to change virtual network parameters to induce different network conditions of lag and packet loss. This environment should provide a viewer capability to observe interactions of BZFlag clients being tested from the perspective of the player, the server, and third-party observers. This simulation framework should work with the client and server directly so that testing of actual changes may be performed in a stand-alone environment.

Requirements:

  • Familiarity with C/C++
  • Strong familiarity with networking applications and implications

Difficulty: medium


Lots o' Bug hunting

Basically, this project idea is right up in line with helping new developers become familiarized with the BZFlag code and to help us improve our code quality for an upcoming major release. Propose fixing bugs. You can propose fixing a lot of them or just a few, but you should be detailed and methodical in your approach. Refactoring to fix a bug is fantastic. A progressive/agile/iterative approach to identifying which bugs you intend to look into and fix would also be great.

There is an extensive list of bugs that need to be addressed at https://sourceforge.net/tracker2/?group_id=3248&atid=103248 and http://bzflag.svn.sourceforge.net/svnroot/bzflag/trunk/bzflag/BUGS at your disposal.

Requirements:

  • Familiarity with C/C++
  • Good problem solving and diagnostic skills
  • (optional) Proficient with a debugger (you will be by the end)

Difficulty: variable


Additional Project Ideas

While code cleanup and refactoring projects are our top-priority, other projects will certainly be considered if the idea is well thought-out and the student is passionate about the idea. Continuing a previously successful GSoC project is also something very highly desired (even if it does entail new code).


BZWorkBench world editor enhancement

This project is a continuation of a previous GSoC project. Please contact the developers before proposing this idea to determine the current status of the work and how you can help continue the effort.

As a participant in last year's program, Jude Nelson started work on BZWorkBench. It is a world file editor with a very solid foundation but much work still remains to be done, including a cross-platform GUI, mesh support, and other editor features. Ideally, two students would work on this. For example, one student could focus on improving the GUI's workflow and ease-of-use, and another could focus on finishing the back-end object manipulation.

The current GUI does not conform to a specific HIG, nor does its usability resemble many other 3D editors; this should change. The back-end still lacks support for many of the objects added in BZFlag 2.0, such as Meshes, texture matrices, dynamic colors, etc.

Requirements:

  • Familiarity with C/C++
  • Ability to read through other people's code
  • Basic GUI and usability design

Difficulty: high


Global authentication daemon

This project is a continuation of a previous GSoC project. Please contact the developers before proposing this idea to determine the current status of the work and how you can help continue the effort.

The goal of this project would be to provide global account management system daemon that the client and servers would communicate with for account, group membership, and profile information. This effort preferably be written in C++, would need to talk to an LDAP server for persistent storage on the backend, and allow chaining across multiple daemons for data replication and failover service. The daemon would need to provide a well structured simple communications API that the game client and game servers can securely talk to.

Requirements:

  • Familiarity with C/C++
  • Familiarity with LDAP
  • Familiarity with client/server networking applications

Difficulty: medium


Enhanced server listing

This project is a continuation of a previous GSoC project. Please contact the developers before proposing this idea to determine the current status of the work and how you can help continue the effort.

The game client includes a simplistic listing of publicly available servers. This task would involve significantly enhancing the listing section in BZFlag to allow for various sortings (e.g. ping time, country, name, etc), favorites, recently used, specific additional information on specific servers, and all existing information. The task would involve coming up with a user-friendly design that is fully keyboard-accessible. It could leverage external gui toolkits, use BZFlag's existing gui library, and/or extend the existing capabilities. The focus would be on creating an intuitive and informative listing enhancement within the constraints of the gaming interface.

Requirements:

  • Familiarity with C/C++
  • GUI, usability, and interaction design

Difficulty: low


Dead Reckoning and other Networking Enhancements

The basic idea is to improve BZFlag's networking by performing dead reckoning on the server along with context-sensitive packet delivery culling. Much work has gone into the game towards moving more and more of the game state to the server, but there is additional migration and protocol changes required. Similarly, network utilization can be optimized by not relaying certain packets (like miniscule position updates to distant players) based on the current game state. Some useful background reading for this task include "Fairness in Dead-Reckoning based Distributed Multi-Player Games (pdf)" and "Accuracy in Dead-Reckoning Based Distributed Multi-Player Games (pdf)".

Requirements:

  • Strong familiarity with C/C++
  • Strong familiarity with networking applications

Difficulty: high


Mentors

BZFlag operates with a group mentoring approach meaning that students may (and should) call upon any developer within the community if they have questions. The mentors for 2009 are:

  • Sean Morrison (brlcad/learner)
  • Daniel Remenak (DTRemenak/Erroneous)
  • Jeffrey Myers (JeffM/JeffM2501)
  • Julio Jiménez Borreguero (Manu/jujibo)
  • Scott Wichser (Blast/Blast007)
  • David Wollner (JB diGriz)
  • Joe VanOverberghe (Donny_Baker)
  • James Lawrence (spldart)