We plan mainly to meet potential students through our IRC channel, but the following questions are wesnoth-specific and are worth pondering for any student, even if we don't need a formal answer:
- Write a small introduction to yourself.
Richard Guo - 3rd year student at UC Berkeley in the US, doing a double major in EECS (Electrical Engineering and Computer Science), and MCB (Molecular Cell Biology).
- State your preferred email address.
- If you have chosen a nick for IRC and Wesnoth forums, what is it?
crumja on IRC. Will be crumja on Wesnoth forums too.
- Why do you want to participate in summer of code?
Two reasons. The first is to make a difference in an application my friends and I enjoy. I've played the game for nearly two years, and I feel the need to both scratch a personal itch and to give back to the community. The second is ideological. I feel that OSS is the best development model and I want to increase the size of the community. One way to do that is to attract gamers. The open-source world has such a dearth of good games that I feel the need to improve it to entice more people.
- What are you studying, subject, level and school?
As mentioned before, I am a 3rd year student at UC Berkeley in the US, doing a double major in EECS (Electrical Engineering and Computer Science), and MCB (Molecular Cell Biology). After graduating, I plan to attend medical school specializing in cardiology or radiology (fingers crossed!).
- What programs/software have you worked on before?
I've done a mix of desktop applications and web stuff.
Some of the more important ones:
IronPython (http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython) - Worked on it in the summer of 2006 at Microsoft. Created sample code (shooter game ala Space Invaders and a voice-activated program launcher) with corresponding guides for using Ironpython with .NET libraries. Rewrite/Port of Vampire Chess (old mac game I used to play) to PC. This was my first time doing a major project; it used SDL for the GUI and SDL_net for LAN play. Some parts sucked though. I had no clue what threading was, so it consumed 100% cpu waiting for a net reply. It also had a crappy AI and probably still has a memory leak or two. BTA Website (http://bta.berkeley.edu) - quick writeup of a website my club at berkeley uses. It's the typical LAMP site connecting to a db for events, officer info, etc. The CSS and html are stripped down to be quick to load. CSBA Rentals (http://rent.berkeley.edu) - a program for BTA when it was known as CSBA. It's more complicated in that it has things like login, permissions, search, sort, google maps interface, and uses PEAR for common tasks. Final Distance Course Scheduler (http://finaldistance.berkeley.edu) - a program for generating a student's schedule by iterating through all possible placements of time blocks and selecting the one that minimizes gaps between classes. Final Distance Rewrite (http://bta.berkeley.edu/fd/) - Rewrite using AJAX for a better interface. Not yet completed. Avisynth Filters (avisynth.org/) - Some video processing filters, mostly when I was an anime encoder. Various tools for anime fansubbing, released under the nick crumja.
Other ones are more boring class assignments, like raytracer or sudoku solver.
- Have you developed software in a team environment before? (As opposed to hacking on something on your own)
Yes. CSBA rentals and Vampire Chess were team projects. I was team lead on Vampire Chess and part of a group for the rental app.
- 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?
I applied for the program last summer, was accepted for VLC, but did not participate because I had already accepted another offer to do research at a bio lab.
- 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).
Traditional top-down approach where components are laid out and then written and tested individually. In this, some components may temporarily plug into stubs or black boxes that are not currently written.
- Open Source
- Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.
- Open Source
Avisynth is probably the best example of this. I have written certain scripts are plug into the application and filter video streams.
- Gaming experience
- Are you a gamer? If so...
- Gaming experience
- What type of gamer are you?
- What type of games?
In order of preference: RTS, strategy, RPG, FPS
- What type of opponents do you prefer?
- Are you more interested in story or gameplay?
Games need a good balance of both. I feel that I play more for the story. Wesnoth is fun in this regard because it allows one to create a story in the context of established rules of gameplay.
- Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.
I have played through all of the campaigns in the 1.2.x series under at least medium difficulty. I have played for about two years.
We do not plan to favor Wesnoth players as such, but some particular projects require a good feeling for the game which is hard to get without having played intensively.
- 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.
- Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.
Yes. I have plenty of working experience in dealing with students as a TA in UC Berkeley. I can't imagine that the player community would be worse than rowdy college undergrads =).
- Do you give constructive advice?
- Do you receive advice well?
Most CS-ers have a bit of an ego, and I will admit to this. However, I think I'm getting better at this.
- Are you good at sorting useful criticisms from useless ones?
Yes. I generally evaluate feedback on the basis of the technical worth.
- Did you select a project from our list? If that is the case, what project did you select?
Yes. Scenario/Campaign Editor.
- If you have invented your own project, please describe the project and the scope.
- Why did you choose this project?
I'm an aspiring campaign writer, and lacking a real tool to do this irks me!
- Include an estimated timeline for your work on the project
April 11 - May 28: Interim period of learning.
- Meet the community
- Hash out the technical details of implementing the campaign/scenario editor (language, GUI, WML-ness of frontend)
- Define the scope of the project - how much of WML should be covered in the summer?
- Learn every nuance of WML
- Write out by hand a small scenario that contains all of the "scope" defined earlier
- The editor should be able to generate that scenario by the end of the summer
- Work out development milestones
May 28 - July 30: Midterm coding milestone (projected features, subject to change)
- GUI mostly written. Be able to select via dialogue boxes and assorted menus the flow of the scenario/campaign
July 30 - Aug 31: Final coding milestone (projected features, subject to change)
- Finalize the translation between GUI and WML
- If time is left over, work on adding other elements of WML
- Include as much technical detail about your implementation as you can
When tackling a project like this, it is most important to define the scope. Not all features of a campaign editor can be made in a summer, so one must be judicious in choosing a subset of WML to be implemented. Perhaps the limit should be making a campaign the length and difficulty of "The South Guard."
Granted, the GUI system should be easily extensible so that over time, all of WML that can be feasibly implemented via GUI will eventually be supported. There must also be a region to directly edit WML within the GUI for advanced users. This should help advances users in the interim in which not all tags are implemented in the GUI.
As of now, I plan to use the default wesnoth gui (SDL-based) and C++ to create an editor with a layout similar to that of Age of Empires II's scenario editors. This means having separate buttons for configuring objective, units, events, sides, time, etc. Clicking on each of those buttons will open up a dialog box for creating, editing, or deleting entries in that section.
Within the dialog box, there will be radio boxes, checkboxes, dropdown lists, and entries for the keys and tags of that section. Rollover help can also be useful here. Upon filling out the entry and confirming, an entry will show up in the left side of the dialog box. This entry can be edited or deleted by selecting and editing the information on the right side.
This sort of segregation naturally lends itself to testable blocks to see whether the GUI entry corresponds to correct WML.
Scenarios and campaigns should be stored in WML format instead of some intermediate to be exported. This is simpler to write and easier to debug. However, the acknowledged downside is when/if wesnoth switches from WML to another XML scripting language.
- What do you expect to gain from this project?
I hope to experience what development is like in a real open-source project. I also expect to become a better programmer and to soak up tons of knowledge about manipulating XML with GUIs (oh joy!). Most of all, I *will* have fun while doing all that!
- What would make you stay in the Wesnoth community after the conclusion of SOC?
It all depends on my personal workload and outside commitments, but if I feel that I have contributed to the team and had fun, I'll definitely stick around.
- Practical considerations
- Are you familiar with any of the following tools?
- Are you familiar with any of the following tools?
Yes to all of above. With respect to Python, I don't know all of the libraries (especially GUI), but know the syntax and some basics from my time on the IronPython team at MS.
- Which tools do you normally use for development? Why do you use them?
Kate is my editing tool of choice. It's simple and customizable, and I'm too lazy to learn the intricate commands of vim and emacs. KIO slaves are also fun! Aside from that, it's the usual shell tools ssh, svn, git, gcc, javac...
- What programming languages are you fluent in?
C/C++, PHP are the ones used most often. I have also done work in Python, Perl, C#, and Java, though they are by no means fluent.
- What spoken languages are you fluent in?
- At what hours are you awake (please specify in UTC)
0200-1600 UTC 9:00AM-11:00PM PST
- Would you mind talking with your mentor on telephone / internet phone?
Sure, but I think IRC would be more convenient.
- What is your perception of 'open source'? Briefly explain what you think of the whole 'open source' concept, how you discovered open source, what you expect to gain/experience by participating in an open-source project. (Answer separately or as part of above mini-essay)
To me, open source is not a religion. Nor is it a way of life. It's just a better way of developing software.
Having the source code publicly available means that the code can be maintained and adapted over time. If the original developer leaves, someone else can pick it up. The rate of growth for the program is also much faster because contributions can come from anyone in the community. A similar argument can be made for bug-squashing; bug reporters can submit patches and solutions instead of waiting around (as in a proprietary system).
I first encountered open-source when I started programming in 4th grade. The book I picked up was "Tricks of the Mac Game Programming," which went into things completely beyond me. However, I was drew to the sample code contained in it. Later on in middle school, I would discover Linux and the world of GNU. Since my friend Janos introduced me to Debian, I have been running the open-source OS on my computers, soaking up knowledge of the design of OSes and finally understanding what makes computers tick.
However, I have yet to participate in an organized open-source project by submitting patches or making features. Most of my previous development experience has been in the proprietary or web spheres, where the source code is tightly guarded because of business need. I hope that this summer, I can work with the wesnoth team to integrate a functional scenario/campaign editor into an official build of the game.
- What motivates or inspires you to write programs and develop software?
Writing software is a way for me to relax. Ever since high school ended, I have lacked an outlet for my creative energies. Programming is a way to channel those energies into something productive. Naturally, I am also interested in creative writing and anime fansubbing, both of which are accessible activities that encourage creation! Indeed, if anything, it is the aspect of making something that is so fun about programming. The barriers are low; pretty much anyone can learn it, and the end result is immediately visible and can potentially be adopted worldwide in a matter of days. There's also a rush of satisfaction after solving a particularly challenging problem.