Difference between revisions of "SummerofCode Orfest"
Line 17: | Line 17: | ||
March, 22. Committed a [https://gna.org/patch/index.php?1548 patch] fixing the statistics uploader. | March, 22. Committed a [https://gna.org/patch/index.php?1548 patch] fixing the statistics uploader. | ||
− | Please, see answers to the [http://wiki.wesnoth.org/SoC_Ideas_Network_Stack_Rewrite#Questions questions] about the network stack project at the [http://wiki.wesnoth.org/index.php?title=SummerofCode_Orfest#6. | + | Please, see answers to the [http://wiki.wesnoth.org/SoC_Ideas_Network_Stack_Rewrite#Questions questions] about the network stack project at the [http://wiki.wesnoth.org/index.php?title=SummerofCode_Orfest#6.29_Answers bottom] of this page. |
<h4>1.1) Write a small introduction to yourself.</h4> | <h4>1.1) Write a small introduction to yourself.</h4> | ||
Line 139: | Line 139: | ||
<h4>4.5) Include as much technical detail about your implementation as you can</h4> | <h4>4.5) Include as much technical detail about your implementation as you can</h4> | ||
− | + | Please see the section of answers [http://wiki.wesnoth.org/index.php?title=SummerofCode_Orfest#6.29_Answers below] | |
<h4>4.6) What do you expect to gain from this project?</h4> | <h4>4.6) What do you expect to gain from this project?</h4> | ||
Line 176: | Line 176: | ||
Also I don't have a stationary phone, mobile only. Of course I'll add this to my SoC application | Also I don't have a stationary phone, mobile only. Of course I'll add this to my SoC application | ||
− | <h3>6) | + | <h3>6) Answers</h3> |
<h4>6.1) what proxies (authentication types) we can support, if we code a network stack using boost::asio, and how hard it'll be ?</h4> | <h4>6.1) what proxies (authentication types) we can support, if we code a network stack using boost::asio, and how hard it'll be ?</h4> | ||
Line 198: | Line 198: | ||
<h4>6.4)how you'd allow the wesnoth client to multiplex connections to wesnoth server ?</h4> | <h4>6.4)how you'd allow the wesnoth client to multiplex connections to wesnoth server ?</h4> | ||
− | Several connections to the server may be required only for separate games | + | I'm not quite understanding this question. |
− | + | Obviously, a client cannot use separate connections to participate in the same game. | |
+ | Several connections to the server may be required only for separate games or for participating as separate players.<br /> | ||
+ | For me GUI seems to be the biggest problem here.<br /> | ||
+ | Such a client naturally owns separate Games objects and each of them naturally has its own network-layer-data: sets of sockets, connections, etc. | ||
<h4>6.5)how you'd make it possible to use wesnoth network client with a different c++ backend?</h4> | <h4>6.5)how you'd make it possible to use wesnoth network client with a different c++ backend?</h4> | ||
Line 205: | Line 208: | ||
All network data objects are to implement defined interfaces and to be instantiated by calls to factory | All network data objects are to implement defined interfaces and to be instantiated by calls to factory | ||
methods/factories. | methods/factories. | ||
+ | So, first of all, network API should be defined. | ||
+ | And then the network module should implement the API defined. | ||
<h4>6.6)what problems and potential pitfalls do you see in the task?</h4> | <h4>6.6)what problems and potential pitfalls do you see in the task?</h4> | ||
The design is critical in this task. A not-good-enough design can neglect results of all the task. | The design is critical in this task. A not-good-enough design can neglect results of all the task. | ||
Another risk is unsufficient network code testing. I desperately believe that boost is absolutely portable, but it doesn't make testing unnecessary. Rewriting such a low-level code is dangerous to introduce regressions. | Another risk is unsufficient network code testing. I desperately believe that boost is absolutely portable, but it doesn't make testing unnecessary. Rewriting such a low-level code is dangerous to introduce regressions. |
Revision as of 18:11, 31 March 2010
This page is related to Summer of Code 2010 |
See the list of Summer of Code 2010 Ideas |
This is a Summer of Code 2010 student page |
Contents
- 1 Description
- 2 IRC
- 3 Questionnaire
- 3.1 1.1) Write a small introduction to yourself.
- 3.2 1.2) State your preferred email address:
- 3.3 1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?
- 3.4 1.4) Why do you want to participate in summer of code?
- 3.5 1.5) What are you studying, subject, level and school?
- 3.6 1.6) What country are you from, at what time are you most likely to be able to join IRC?
- 3.7 1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.
- 3.8 2) Experience
- 3.8.1 2.1) What programs/software have you worked on before?
- 3.8.2 2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)
- 3.8.3 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?
- 3.8.4 2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.
- 3.8.5 2.5) Gaming experience - Are you a gamer?
- 3.8.6 2.5.1) What type of gamer are you?
- 3.8.7 2.5.2) What type of games?
- 3.8.8 2.5.3) What type of opponents do you prefer?
- 3.8.9 2.5.4) Are you more interested in story or gameplay?
- 3.8.10 2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.
- 3.8.11 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 SVN (during the evaluation period or earlier) please state so.
- 3.9 3) Communication skills
- 3.9.1 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.
- 3.9.2 3.2) What spoken languages are you fluent in?
- 3.9.3 3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.
- 3.9.4 3.4) Do you give constructive advice?
- 3.9.5 3.5) Do you receive advice well?
- 3.9.6 3.6) Are you good at sorting useful criticisms from useless ones?
- 3.9.7 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.
- 3.10 4) Project
- 3.10.1 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?
- 3.10.2 4.2) If you have invented your own project, please describe the project and the scope.
- 3.10.3 4.3) Why did you choose this project?
- 3.10.4 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".
- 3.10.5 4.5) Include as much technical detail about your implementation as you can
- 3.10.6 4.6) What do you expect to gain from this project?
- 3.10.7 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?
- 3.11 5) Practical considerations
- 3.11.1 5.1) Are you familiar with any of the following tools or languages?
- 3.11.2 5.2) Which tools do you normally use for development? Why do you use them?
- 3.11.3 5.3) What programming languages are you fluent in?
- 3.11.4 5.5) 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!
- 3.12 6) Answers
- 3.12.1 6.1) what proxies (authentication types) we can support, if we code a network stack using boost::asio, and how hard it'll be ?
- 3.12.2 6.2)what general architecture for the client you're going to use ?
- 3.12.3 6.3)what general architecture for the server you're going to use ?
- 3.12.4 6.4)how you'd allow the wesnoth client to multiplex connections to wesnoth server ?
- 3.12.5 6.5)how you'd make it possible to use wesnoth network client with a different c++ backend?
- 3.12.6 6.6)what problems and potential pitfalls do you see in the task?
Description
Orfest - Rewriting network stack
gna.org : orfest
irc : orfest
I am really interested in rewriting network stack using boost::asio. This task will not only improve the current network stack implementation but will also bring new features such as proxy support, configurable timeout values for connections, connection multiplexing on the client.
Please see more details on my page.
IRC
orfest
Questionnaire
March, 22. Committed a patch fixing the statistics uploader.
Please, see answers to the questions about the network stack project at the bottom of this page.
1.1) Write a small introduction to yourself.
My name is Nikolay Kurtov, I'm 21 years old, young, enthusiastic and experienced enough. This year I've represented my university at the ACM ICPC World Finals. Unfortunately, we didn't get any medals. I'm looking forward to get a lot of fun working with the Battle of Wesnoth developers this hot Summer of Code :)
1.2) State your preferred email address:
nkurtov@gmail.com
1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it?
orfest
1.4) Why do you want to participate in summer of code?
I'm getting more and more engaged into Open Source. Summer of code is a great opportunity for me to significantly contribute to Open Source and gain a lot of experience in programming and working with community.
1.5) What are you studying, subject, level and school?
I'm a Master student at Novosibirsk State University, Faculty of Information Technologies. My bachelor diploma is about hardcore optimization of a C++ library for shared-memory parallelism.
1.6) What country are you from, at what time are you most likely to be able to join IRC?
I'm living in Novosibirsk, Russia. My time zone is UTC+7. Every day I'm online for 4-8 hours, mainly at night.
1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.
I'm going to have an exam session at the beginning of June. The exam session will consist of 2 exams. Also I have a part time job, I'm an intern software engineer at Intel corp.
2) Experience
2.1) What programs/software have you worked on before?
- FlexyPool - a summer school on the first year of studying. There were four young and enthusiastic of us, who wanted to make a very original game. Personally I was responsible for the Physics Engine. The project was not released and only developers have its beta version somewhere.
- Santa's Quest - a casual Christmas game developed by the same team as FlexyPool. I was responsible for level generation, balance, high scores etc. We even were firm to publish this game, but didn't succeed.
- Eclipse DLTK - for half a year I worked at xored Inc. as QA, performing GUI testing, writing unit tests, etc. Submitted a lot of bugs and several patches.
- TSP Flaming - a tiny academic project made for studying the method of Simulated Annealing. At that moment my interest to Open Source was growing and I wanted to try the process of managing a project at the SourceForge, that's why I made a full path to host it there.
- Apache Harmony - a student project of bringing Edge Profiler to Jitrino.JET compiler. As a result I developed and submitted a patch. Results were published at the International Student Scientific Conference in Novosibirsk and were awarded 3rd degree diploma.
- Intel(R) Concurrent Collections for C++ - an intern software engineer researching high-level performance optimizations.
2.2) Have you developed software in a team environment before? (As opposed to hacking on something on your own)
- Both FlexyPool and Santa's Quest were developed by a team of 4 developers, we called our team MadmileGames :)
- xored Inc. is a hardcore outsourcing team. At that time it was a team of about 20 developers.
- Software Group of Intel corp. is just huge :) I'm constantly working together with people from USA and Germany.
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 haven't participated to the Google Summer of Code before. Last year I really wanted to, but missed the deadline :)
2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.
None
2.5) Gaming experience - Are you a gamer?
Yeeah, since yearly childhood I had a Spectrum (ZX Delta) and spent a lot of time gaming. Then I got Pentium 100 and I've got into WarCraft 2, Duke Nukem 3D, Worms Reinforcements, etc.. Until recently I haven't got a good internet connection, so most of my experience is Single Player. So, I've been playing in LAN only: Unreal Tournament, HoMM3, Disciples 1, Teeworld, Allods 1,2,3. I've never been playing MMORPG.
2.5.1) What type of gamer are you?
I'm easily engaged into a game and can just forget to go to sleep.
I like games where every your step should be perfect just not to perish.
Also I rarely think about defense, I'm all in offense.
2.5.2) What type of games?
- Strategies: HoMM 3,4, King's Bounty
- Shooters: Unreal Tournament, Teeworlds
- RPG: Fallout 1,2, Allods, Might&Magic 3,4,5,6,7,8
- and I don't like fightings, but there is just 1 that I love. I've spent 1.5 years playing Guilty Gear XX #Reload, because it is amazingly beautiful, dynamic and hardcore.
2.5.3) What type of opponents do you prefer?
I prefer aggressive opponents, I do not like campers.
2.5.4) Are you more interested in story or gameplay?
For me the most interesting is gameplay.
I'm always playing at maximum difficulty level and can spend a huge amount of time trying to complete the game on this difficulty.
My last achievement was completing 2 episods in DOOM at Nightmare %)
2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer.
Frankly speaking, I've been playing Wesnoth just for several hours and haven't tried multiplayer. But I'm looking forward to complete a campaign and then go playing on the internet.
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 SVN (during the evaluation period or earlier) please state so.
Not yet.
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.
Recently I've got a certificate about completing Advanced English course.
I'm constantly communicating with American colleagues both by e-mail and by phone and we understand each other perfectly.
3.2) What spoken languages are you fluent in?
English, Russian, Tokipona:)
3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.
Yes, that's ok. I'm well-tempered.
3.4) Do you give constructive advice?
Yes, I always try to use logical arguments to support my ideas.
3.5) Do you receive advice well?
Yes, I'm paying attention to each advice received and I'm thankful to a people who share their knowledge with me.
3.6) Are you good at sorting useful criticisms from useless ones?
Yes
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'm rather autonomous but it'd still be better if mentor would monitor my progress from time to time.
I tend to search for answers in the sources first and only then to ask a person who knows the answer.
About coding I prefer writing 1 or 2 tiny prototypes, it helps me to really get into sources and tools used and also to find problems I haven't noticed yet.
4) Project
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?
Yes, I really want to rewrite the networking stack to boost::asio. I think one of the main aspects is to make a good Object-Oriented design and to make it easily extendable. I understand that rewriting itself is a huge task and there is a risk that I will not have time to implement other features declared.
4.2) If you have invented your own project, please describe the project and the scope.
I like things working fast and stable that's why I'd like to increase wesnoth's performance, doing profiling, refactoring "hot spots", analyzing memory consumption, making it even more accessible for old computers. Currently, htop tells me Wesnoth is consuming 300MB of Virtual Memory. It's a very good number but I believe it still can be reduced :) Also I'm rather good in shared-memory parallelism and maybe when I become very much acquainted with the wesnoth's design, I'll bring parallelism to other components except networking.
4.3) Why did you choose this project?
The task about networking stack is really interesting for me, I can experience the full power of boost::asio, understand details how the game is designed. I still want to develop games and maybe I will sometimes join Innova Systems or so, this experience will be highly valuable.
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".
I will write more here when get some knowledge about the task.
4.5) Include as much technical detail about your implementation as you can
Please see the section of answers below
4.6) What do you expect to gain from this project?
As I mentioned in "Why did you choose this project", I going to gain a lot of practical game developing experience and network programming experience.
4.7) What would make you stay in the Wesnoth community after the conclusion of SOC?
More challenging tasks :)
5) Practical considerations
5.1) Are you familiar with any of the following tools or languages?
* Subversion (used for all commits)
Yes, we are using SVN in our project at Intel
* C++ (language used for all the normal source code)
Yes, I've been coding on C++ for 5 years. All ACM competitions I also write using C++.
* STL, Boost, Sdl (C++ libraries used by Wesnoth)
I know STL perfectly, I'm using it everyday, especially on ACM competitions
I've been several boost features in academic projects: threads, bind, any, asio, graph. So, I'm not proficient at it, but I really want to experience more of it :)
Unfortunately, I know nothing about Sdl
* Python (optional, mainly used for tools)
I'm always writing small scripts using python, but I never go beyond defining 1-2 classes without behaviour.
* build environments (eg cmake/autotools/scons)
I like cmake. Have never worked with autotools and scons.
* WML (the wesnoth specific scenario language)
No
* Lua (used in combination with WML to create scenarios)
No
5.2) Which tools do you normally use for development? Why do you use them?
In Intel I'm using Windows and MSVS, because it's a corporate-wide used environment
at home I'm using Gentoo, Vim, Qt, Cmake, Valgrind. I really like Open Source and at home I'm really Open :) Vim with ctags is incredibly powerful, Qt is very well-designed and easy to use, Cmake is a tool used by KDE, Valgrind allows me to find all kinds of memory errors.
5.3) What programming languages are you fluent in?
C++, Java, C#, C
5.5) 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 don't really think there would be such a situation. Also I don't have a stationary phone, mobile only. Of course I'll add this to my SoC application
6) Answers
6.1) what proxies (authentication types) we can support, if we code a network stack using boost::asio, and how hard it'll be ?
As it was discussed previously at #wesnoth-dev, it is reasonable to support basic and digest proxies.
NTLM proxies are also widespread but NTLM support will cause extra coding efforts and can be avoided. It's possible to use an external wrapper like cntlm that makes the NTLM proxy visible as a Basic proxy.
Basic and Digest authorizations are described at the RFC2617
Also, I'm considering that any proxy-server implements CONNECT method, that is introduced in the RFC2616
Proxy support requires additional actions only at the moment of connecting to the server. If CONNECT is accepted then the proxy-server works as a simple tunnel and read/write operations require no modifications.
The most easy way to implement the described approach is introducing own socket-classes, aggregating boost::asio::tcp::ip::sockets and implementing own connect() methods.
This approach will not add coding overhead except defining own socket classes themselves.
6.2)what general architecture for the client you're going to use ?
I'd like to keep client's architecture simple.
A separate thread sends and receives data from the server. Data can be stored in incoming/outgoing data queues. As soon as a message arrives, the thread notifies the application about a new server message.
I'd like to notice that the described architecture naturally fits into boost::asio::io_service capabilities which encapsulates queues mentioned.
6.3)what general architecture for the server you're going to use ?
I propose using a widespread and well-documented pattern Proactor that is effectively implemented by the Boost.Asio library. As I mentioned, the pattern is widely spread and that's why I'm not expecting any problems with implementing it. Also this pattern applies several serious benefits highlighted at the page mentioned above. I'm answering this short, please ask me if you want more details.
6.4)how you'd allow the wesnoth client to multiplex connections to wesnoth server ?
I'm not quite understanding this question.
Obviously, a client cannot use separate connections to participate in the same game.
Several connections to the server may be required only for separate games or for participating as separate players.
For me GUI seems to be the biggest problem here.
Such a client naturally owns separate Games objects and each of them naturally has its own network-layer-data: sets of sockets, connections, etc.
6.5)how you'd make it possible to use wesnoth network client with a different c++ backend?
The whole network layer will be encapsulated in a separate module.
All network data objects are to implement defined interfaces and to be instantiated by calls to factory
methods/factories.
So, first of all, network API should be defined.
And then the network module should implement the API defined.
6.6)what problems and potential pitfalls do you see in the task?
The design is critical in this task. A not-good-enough design can neglect results of all the task. Another risk is unsufficient network code testing. I desperately believe that boost is absolutely portable, but it doesn't make testing unnecessary. Rewriting such a low-level code is dangerous to introduce regressions.