Dragonofair0/GSoC2014 project idea
|This page is related to Summer of Code 2014|
|See the list of Summer of Code 2014 Ideas|
|This is a Summer of Code 2014 student page|
This page is a work in progress However, my descriptions and questionnaire sections are fairly complete.
Ben Kenawell - SDL2 Project Proposal
Descriptive Summary of Proposal
I would like to work on moving the event and input handling from SDL 1.2 handling to SDL 2.0. To accomplish this I will be considerate of the many differences between the versions including how text input is handled and the differences in event handling. In performing both these tasks, I will be aware of a possible Android or iOS port (since I would love to see that myself), so that my code will perform as smoothly on mobile operating systems as it already does on desktop OSes.
First Level Sections
One major change in event handling is how the thought process behind the keyboard works. The keyboard has become like a many buttoned controller, instead of text inputs. This will be a major change I will work on, in order to make Battle for Wesnoth more keyboard-layout independent. Mouse input will remain similar, except for the mousewheel which, with better support in SDL 2.0, will be more useful for scrolling around the screen. This change may also help with two-finger scrolling across a screen where the comptuer reports this as a mousewheel, ultimately aiding in the creation of a mobile port. Event handling will have similar ideas in mind. While the actual code has not changed very much, those differences will be taken care of as well as a new style of event handler for certain important events, i.e. events that affect the state of the app (open/closed) will be monitored more closely so that progress may be saved. I have taken this into consideration along with the other event handler changes in order to deal with the "garbage collector," which is the nightmare of mobile operating systems. I fear that in the near future (at least with Windows machines), that the garbage collector's presence might make an appearance in desktops, and this measure would increase the longevity of my changes as well as more easily enable mobile ports.
1.1)Write a small introduction to yourself. My name is Ben Kenawell. For fear of repeating myself when answering the next questions, I love playing soccer and running track and field. Now I may repeat some of this below but, my favorite pastime is by far coding, and so when I heard of Google Summer of Code, I instantly loved the idea. My younger brother and I both play Wesnoth an obscene amount, so when I found this project it sounded perfect. My interests range from software to hardware of computers, but my roots lay in computer software, and that is where I am strongest.
1.2)State your preferred email address. You can reach me at email@example.com
1.3)If you have chosen a nick for IRC and Wesnoth forums, what is it? My chosen nickname is Dragonofair0 for both the wesnoth forums and irc.
1.4)Why do you want to participate in summer of code? I would love to participate because I love coding my summers away and getting paid for it is a bonus. Additionally, I would love to develop for a game that I play so often and love so much.
1.5)What are you studying, subject, level and school? I will be studying computer engineering as a college freshman in the fall at either Rennsalaer Polytechnic Institute in New York, or Penn State in Pennsylvania. Currently I am a high school senior studying all I can about computers and programming in a school that admittedly lacks resources. However, I have helped them push programming courses along and I am sure I understand the concepts better because of it.
1.6)What country are you from, at what time are you most likely to be able to join IRC? I am from the United States of America, in the Eastern Time Zone. Before school ends, it would likely be in the evenings (7:00 or 8:00 EST). During the summer, I don't have much of a schedule and could log on as needed. Most likely I will work in the mornings and evenings, but my schedule is very flexible.
1.7)Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when. I do not have any commitments this summer and the only vacation I plan to take is for my cousin's wedding the second to third weeks in June. I will also be gone for a day or two over the Fourth of July.
2.1)What programs/software have you worked on before? The two languages I have programmed heavily in are Java with the Eclipse IDE, and C# with Microsoft's Visual Studio IDE. I have also programmed for the Arduino and I am somewhat fluent in C and C++. I am not afraid to buckle down with a new language, and I love learning the intricacies of computer programming languages. I also have some experience with Python and Processing (which is based off of Java)
2.2)Have you developed software in a team environment before? (As opposed to hacking on something on your own) I have. The largest project I ave worked on has spanned the last two years and included me working on a team to create, from scratch, a Windows tablet application. It started as three students working together and grew to 11 students with myself as the team leader. I think I prefer a team environment because it gives me someone who understands me to bounce ideas off of, and I feel like it makes the process more efficient (to a certain degree) because two people are working at once, getting twice the work done.
2.3)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 have never participated in the GSoC before, as this is my first opportunity as a high school senior. However, I am thrilled by the possibility, and plan to work my hardest to finish with a solid project.
2.4)Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement. GSoC also marks my start into the world of open source development projects. In years past, I have been working on school projects, some spanning years, in my attempt to further my knowledge of programming. Now I feel I am knowledgeable enough to be a helpful developer, and I hope to learn even more through my experiences with open source. I love everything about open source, starting with it being free and ending with me being to endlessly modify code just to prove I can. In the past, I have done that to make sure I was truly understanding what I was learning, and now I am ready to apply this and contribute to open source code.
2.5)Gaming experience - Are you a gamer? I am a gamer. The two games I am torn between right now are Wesnoth and Elder Scrolls V: Skyrim. Usually I end up playing Wesnoth because the strategy and tactics are much more intriguing.
2.5.1)What type of gamer are you? I would call myself an action/strategy gamer. I love action games, especially like Assassin's Creed and Skyrim where I can roam around the world and there is still plenty to do besides the main storyline. But I also love stratgy games, which is how Wesnoth fits so perfectly into my life. I have played other similar games like Fire Emblem, but none of them have the size and playablity that Wesnoth does. I can play a ton of different campaigns a ton of different ways.
2.5.2)What type of games? As described above, I love open worlds like Assassin's Creed or Skyrim, and to a lesser extent, Pokemon. I also love turn based strategy games (real time ones eventually stress me out too much, although I enjoy them too). I have found Wesnoth to be a perfect fit for this hole in my life, although I also enjoy playing Fire Emblem and other similar titles.
2.5.3)What type of opponents do you prefer? I prefer opponents that test my ability to win a scenario without seriously impeding the final result. While I enjoy seemingly impossible opponents, they often times make me too frustrated, to the point where I come back later to get a fresh look at the battlefield (this is how I handle programming a lot, but my trial and error there doesn't get units killed). I hate losing units because I know that I won't every have that same soldier again, which makes me a very cautious player as well. I prefer AIs most of the time so people don't get impatient when I implement new strategies.
2.5.4)Are you more interested in story or gameplay? I would say I am more interested in gameplay. While a good story keeps me involved, I do realize I am just playing a game. Therefore, I tend to focus on how I'm accomplishing a task rather than why I am doing so.
2.5.5)Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. 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. If this hasn't been obvious from my other questions, I have played Wesnoth, and I love playing Wesnoth. I do not play it as often as I would like, so I end up playing single player campaigns. While I have had the game for maybe two years now, I have never gotten so involved that I have expanded to multiplayer or finished many campaigns by myself. While I love gaming, I don't play video games very often. However, I have been kept pretty up-to-date by my little brother who is obsessed with the game and loves telling me everything he does in Wesnoth from multiplayer campaigns to single player and everything. Now that he knows I plan on working with this community over the summer, he has also been giving me many ideas on how the game could be improved.
2.6)If you have contributed any patches to Wesnoth, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC. If you have gained commit access to our repository (during the evaluation period or earlier) please state so. Sadly, I have never contributed any patches to Wesnoth, nor do I have commit access to the repository. I have begun to pursue some simple patches to become more familiar with Wesnoth code, but that is my extent of personally working with the Wesnoth code.
3) Communication Skills
3.1)Though most of our developers are not native English speakers, English is the project's working language. Describe your fluency level in written English. I am a native English speaker and therefore have a high level of fluency in written (and spoken) English.
3.2)What spoken languages are you fluent in? I would say I am fluent in English and could muddle through some Spanish, maybe.
3.3)Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough. I am very good at staying calm no matter what other players are saying or how much they yell. For this reason, I think I am good at interacting with other players, even when they can get a bit rough. I don't take a lot of what I hear to heart when things get out of hand, so it is hard to get under my skin.
3.4)Do you give constructive advice? I believe that if it's not nice, don't say it at all. Destructive criticism falls in that "not nice" category, so I do my best to only give constructive advice. I think I can be tough on people, but never to tear them down. We are all working towards a common goal, with all kinds of different skill levels.
3.5)Do you receive advice well? Going along with my previous statement, I try to apply the advice I get, in hopes it will make me a better programmer. The internet is great for when I get stuck on a problem, but only other people can give me the kind of advice I need to grow as a coder.
3.6)Are you good at sorting useful criticisms from useless ones? Sorting useful criticisms from useless ones is something of a skill. Some people make it obvious, because their comments won't help me learn more about programming. The real trick is sorting the off-track advice from the right advice. Sometimes this takes a little research on each tangent, but I am confident in my ability to sort the useful from the useless. And I know I have the irc and multiple other sources if I need additional advice.
3.7)How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to "see how it turn out", taking the risk of having it thrown away if it doesn't match what the project want I am very autonomous when it comes to my work, until I get stuck on a problem. If I have an idea of where I need to go, but I'm not sure of the implementation, I would code a "proof of concept" that I could modify endlessly without messing up the main program. Even if the code gets thrown out at the end of the day, chances are I've learned something from it. When I am stuck on a problem, or I am not sure which direction to start, that is when I start a discussion on what plan of attack might be best, from what I think is feasible. While I might not get too in depth about one particular solution, at the end of my discussions I usually have a pretty god idea of what I need.
4.1)Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on? I did choose a project from the list: The SDL 2.0 project, specifically dealing with how events are handled. I am especially interested in how this could lead to a mobile version of the game, which I think would mean users would play more often. Even in its most basic form though, and after reading over the migration guide, 2.0 sounds like a huge step forward for Wesnoth in both keeping it up-to-date and performing at its highest level.
4.2)If you have invented your own project, please describe the project and the scope. I did not invent my own project. But don't be surprised if I spend some time of the side adding features that would allow the game to work on mobile, if I find the time to do so. These changes would directly link back to my main project, and would just be small so they didn't interfere with my main objectives.
4.3)Why did you choose this project? I chose this project because I want Wesnoth to stay relevant, and how events are handled is paramount to this goal. Additionally, I think this project effects the response time of the program, and I believe I can handle this problem efficiently. On a side, mobile computing crosses my mind, because a lot of the changes from 1.2 to 2.0 are the inclusion of this functionality.
4.4)Include an estimated timeline for your work on the project. Don't forget to mention special things like "I booked holidays between A and B" and "I got an exam at ABC and won't be doing much then". This timeline will be subject to change as summer gets closer, but all the major events are already on here. The only other things I would be doing over the summer would be maybe a quick visit to the college I'm attending once or twice. Timeline: TODO: Exact timeline
4.5)Include as much technical detail about your implementation as you can This section too, you will see more and more of as the March 21 deadline continues to approach. Currently though, I need to change how all the event methods work and especially how the key board is handled since 2.0 changes the keyboard into a 101 button controller instead of actual letters. There are definitely advantages to this, such as making it more layout-independent, but it means I need to change how input is received. This change also means that I must change how all text is received (through a different method). The benefit of this is that it could make the game able to support many more languages much easier. TODO: Add additional technical details
4.6)What do you expect to gain from this project? Monetarily, I hope to gain $5500 dollars. But I only write that first because it seems so unusual in open source development. What I am really looking forward to gaining is acceptance into a community of knowledgeable and clever programmers as well as the experience of programming. My knowledge so far has already opened many doors, and I can't imagine how many more doors it could open as I gain even more experience.
4.7)What would make you stay in the Wesnoth community after the conclusion of SOC? After SOC, the game itself would make me want to stay in the Wesnoth community. I do love the game, and the people I have meant have been phenomenal. Being a large open source development project, it would be great to continue work on, even after I stopped being paid for my help. The experience here I'm sure is invaluable, and to say I worked on my favorite video game is like giving a little kid candy.
5) Practical considerations
5.1)Are you familiar with any of the following tools or languages? I am somewhat familiar with Git and C++. I am confident in my Python. But I admit I have never worked much with STL, Boost, SDL, the build environments, WML, or Lua. After looking at the SDL code, I think I have a grasp of it, and I will certainly look at the other pieces I might need for my project.
5.2)Which tools do you normally use for development? Why do you use them? I usually work with Java and the Android SDK through the Eclipse IDE because I love programming for Android (it was the platform I first learned how to program, to a certain degree), so it has been given a special place in my heart. Also, Java is the only language taught at my school and therefore is the only I am most familiar with. After looking over C and C++ documentation, I plan on making the jump and getting serious with those soon, and I have started a little bit, if not very much yet.
5.3)What programming languages are you fluent in? I am fluent in Java, C#, and Python. I can work my way through C and C++ code (I have done a lot of this with programming an Arduino), but I have not tried to write and compile very much of my own work. In my experience, there isn't much of a barrier here because they are so close to C#, which is also close to Java. The only outlier here is really Python, which seems to bear a resemblance to other types of programming languages, making me a somewhat rounded student.
5.4)Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of "there is no way to contact you" does arise! I feel comfortable talking to my mentor on the telephone or over the internet. When meetings do not work out, this is how I have them, so I already have some experience here. I will submit my phone number via the google application! SoC Information for Google