Difference between revisions of "WesnothStatistics"

From The Battle for Wesnoth Wiki
(Idea section ident changes.)
Line 129: Line 129:
 
**Give developers the ability to log specific campaign parts (this could be implemented by tagging units as special units without any back-end changes).  
 
**Give developers the ability to log specific campaign parts (this could be implemented by tagging units as special units without any back-end changes).  
 
**Implement OS/platform specific log gathering.  
 
**Implement OS/platform specific log gathering.  
**Additionally for the statistics web system, remove slow and expensive chart drawing SVG routines and use of Google Charts API instead (offload this unnecessary work from the web-server).  
+
**Remove slow and expensive chart drawing SVG routines and use of Google Charts API instead (offload this unnecessary work from the web-server).  
 
**Finally, make the system visually appealing to both players and developers.
 
**Finally, make the system visually appealing to both players and developers.
  

Revision as of 01:56, 26 March 2008

Basics

My name is Myk and I am currently a full time graduate student (Masters, Computer Science) at CU, Ottawa, Canada.

My preferred email address is 'mkonyk_A-T_gmail_D-O-T_com'. On IRC/forums/gna I am 'radx'.

My main reason for participating in this project is that I am passionate about any kind of game development. I would certainly want to work in a gamedev industry once I graduate; I have also never participated in the Google Summer of Code, which I hope will prove to be an exciting, interesting, and of course challenging, experience.


Experience

  • What programs/software have you worked on before?
    • I participated in several commercial projects, including a commercial FPS game (during my CO-OP). As far as open source goes, I wrote a semantic web plugin for the OpenBabel chemical suite (part of my research). This project will be published on Google Code soon.
  • Have you developed software in a team environment before? (As opposed to hacking on something on your own)
    • Yes; I participated in several team projects involving software development before (both university and work).
  • Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?
    • No, I have not participated before; I was going to apply last year (Ogre3d SoC project), but I decided not to because of the additional summer workload.
  • What development model would you use (e.g. keywords: V-model, XP programming, agile programming, iterative; with the help of prototyping, formal specifications, tests, etc).
    • I would use a mix of iterative/agile model with unit-testing and prototyping.


Open Source

  • Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.
    • I am not involved with any open source project at the moment. I have been previously involved (please see above).


Gaming experience

  • Are you a gamer? If so...
    • Yes, I play now and then.
  • What type of games?
    • I prefer turn based strategy games, arcade console games and occasional FPS action.
  • What type of opponents do you prefer?
    • Non-cheating humans, of course. I am not a great fan of AI opponents.
  • Are you more interested in story or gameplay?
    • I am interested in both, since both are crucial.
  • Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.
    • I have played Wesnoth for about a week now. In order to build a prototype system for this project I played through several Wesnoth single players campaigns. I haven't tried multi-player mode yet.


Communication skills

  • Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English.
    • Even though English is not my first language, I would say I am quite fluent.
  • Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.
    • Absolutely! So far my impression of the Wesnoth developer community is great. People on IRC have been quite helpful and friendly.
  • Do you give constructive advice?
    • Yes, If it is something I can help with, I have no problem explaining/expressing myself. I am usually quite helpful in that sense.
  • Do you receive advice well?
    • Yes, of course. I am always interested in alternative opinions/solutions.
  • Are you good at sorting useful criticisms from useless ones?
    • I find that development experience usually helps with this.


Project

  • Did you select a project from our list? If that is the case, what project did you select?
    • I chose a project which is not in the provided list. My project is 'Wesnoth Statistics'.
  • Why did you choose this project?
    • I chose this project after talking to some Wesnoth developers on the IRC channel. It seemed like an interesting and challenging project.
  • Include an estimated timeline for your work on the project
    • Please see 'Timeline' section.
  • Include as much technical detail about your implementation as you can
    • Please see 'Idea' and 'Tools and implementation' section.
  • What do you expect to gain from this project?
    • I expect to gain two things: first of all development experience and secondly, experience participating in a big open source project.
  • What would make you stay in the Wesnoth community after the conclusion of SOC?
    • It is possible, however I will not have as much time after the summer, graduate school tends to eat a lot of time.


Practical considerations

  • Are you familiar with any of the following tools?
    • I have used SVN before, however I tend to use other VCS, mostly Perforce.
    • c++ is my main programming language (STL, boost).
    • I have no experience using Python whatsoever; My main scripting language is Ruby.
  • Which tools do you normally use for development? Why do you use them?
    • I use c++ (gcc / intel compiler) and xcode ide to write my software, with my main dev system being a mac. I am also used to working with visual c++ (I went pretty much through all vc versions), since I mostly have to write code which has to be portable.
  • What programming languages are you fluent in?
    • Relevant to the project: c++, Ruby, php
  • What spoken languages are you fluent in?
    • English, Ukrainian, Russian
  • At what hours are you awake (please specify in UTC)
    • Usually from 11 AM EST to 2 AM EST (EST is -5).
  • Would you mind talking with your mentor on telephone / internet phone?
    • I would prefer to communicate via messaging (IRC, email, any IM). But if it's necessary I won't mind.


Idea

At the moment Wesnoth has a statistics system which could be accessed at http://stats.wesnoth.org . In Wesnoth client, there's an option which enables anonymous log submission to the existing statistics server. If enabled, Wesnoth client will submit campaign logs to the statistics server. With this information available, developers could track potential problems across existing campaigns - check where people tend to have problems, where people tend to give up, or where they have an easy time, and so on.

The main idea is to get people interested in submitting stats. Players could compare how they perform to the rest of players, while developers will get the necessary statistical data.

I propose two main ideas:

  • First is to modify/upgrade the existing stats system and make sure it is scalable (will perform well enough under increased amount of log submissions).
    • I plan to test the current cgi log submission system and see how it performs under these conditions. If there's a problem with this approach, I will rewrite this part as a daemon (using c++, boost, perhaps asio library). This part most likely will be implemented as a lightweight HTTP based daemon (so it could still accept logs from old clients and use port 80).
    • Increase the number of useful stats for both players and developers. Let developers compare statistical differences between versions.
    • Give developers the ability to log specific campaign parts (this could be implemented by tagging units as special units without any back-end changes).
    • Implement OS/platform specific log gathering.
    • Remove slow and expensive chart drawing SVG routines and use of Google Charts API instead (offload this unnecessary work from the web-server).
    • Finally, make the system visually appealing to both players and developers.
  • Secondly, build-in chart/graph drawing system into the Wesnoth client. This system would let players upload and compare their results to the rest of the player base after each single-player or multi-player campaign.


Timeline

  • Until the end of April I plan to hammer out the requirements and have a strong prototype model. I plan to interact with developers and get into the Wesnoth source. I also plan to post several threads on Wesnoth forums regarding my idea and collect interesting, insightful ideas from the Wesnoth community.
  • Unfortunately I cannot start working on this early as I have exams which are coming up in April.
  • I expect to have a completely tested and working statistics system (web part) by the end of June.
  • At that point I will start working on integrating statistics system into the Wesnoth client.
  • I am quite flexible with my time; should the time permit (if I finish everything mentioned above before the end of term) I could work on integrating a basic crash report system.
  • I intend to finish the above described idea no matter what; even if it will take more than just a summer or Google Summer of Code program.


Prototype

I have already implemented a working prototype for the proposed above system; Because I did not have much time, I implemented the prototype using my preferred tools (Ruby and Rails); However the choice of final tools (depending on the current hosting) is flexible.

At this moment I recompiled my Wesnoth client and forced it to submit campaign logs to my webserver; I rewrote the existing cgi script to parse the logs and upload them to local MySQL database; I also implemented a simple web service (in Ruby on Rails) which presents some statistical data to the user. The images are generated using the Google Charts API.

This prototype can be accessed at http://wesnoth.radx.org/player