<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.wesnoth.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vinipsmaker</id>
	<title>The Battle for Wesnoth Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.wesnoth.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vinipsmaker"/>
	<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/Special:Contributions/Vinipsmaker"/>
	<updated>2026-05-04T22:26:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51104</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51104"/>
		<updated>2013-05-20T19:29:08Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance and scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for exceptions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
You can see a '''draft''' (&amp;lt;u&amp;gt;remember&amp;lt;/u&amp;gt;: it's a draft and its purpose is to explain what strategies will be used to solve the problems faced; the future system will probably implement some things undocumented here) below:&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
The users would belong to some groups and the groups should be used to create an acess control. It should exist a group for the translation team with power to upload translations and it should exist a group for the admins (with unrestricted powers). The simple/self login backend wouldn't implement groups.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
=== The WML-based database ===&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend, the ''WML-based database backend''. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
This database would separate the add-on data from its meta-data. The meta-data would be saved in a child tag of the main add-on's config file. Extra meta-data will be stored there also.&lt;br /&gt;
&lt;br /&gt;
A migration script will be provided to convert the add-ons from the previous format to the new one.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed and cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
An extra meta-data example is the ''number of players''. Currently there is no field to describe the ''number of players'', but in the future developers may want to add this feature (and players could start using it ASAP).&lt;br /&gt;
&lt;br /&gt;
The support to extra meta-data influence the database and the network protocol. If you want info about how they solve the new problem, see the appropriate section.&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Currently, there is no integration between the Addon Server and the [[WesCamp]] translations. A [https://github.com/wesnoth/wesnoth-old/blob/master/data/tools/wesnoth/wescamp.py script] is run [http://wiki.wesnoth.org/Wescamp.py_Instructions by hand] every time the translations need to be updated.&lt;br /&gt;
&lt;br /&gt;
The translations are developed/maintained at [https://github.com/wescamp github] under multiple repositories of a single organization (but not all repositories are translations).&lt;br /&gt;
&lt;br /&gt;
It should be too difficult for the server to watch for the notifications and the requirement of the use of older tools/dependencies make this challenge still more difficult. To improve this scenario, the proposed addon server should host the translations itself.&lt;br /&gt;
&lt;br /&gt;
The translator should send the translation to the translation team and the translation team could use their users (with some administrative power) to upload the translation to the server through the Wesnoth client, with a system similar to the [[PblWML|.pbl files]].&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
Different versions of the same protocol may share a lot of actions in common. To avoid code duplication, the session component will use [http://en.wikipedia.org/wiki/Factory_method_pattern factories] to instantiate the necessary handlers for each protocol and each handler will delegate the handling of every specific action to other classes.&lt;br /&gt;
&lt;br /&gt;
Namespaces will be used to group classes related to protocols/versions.&lt;br /&gt;
&lt;br /&gt;
=== Event loop != boost::io_service  ===&lt;br /&gt;
&lt;br /&gt;
The boost::io_service object has [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/run.html an option] to act as an event loop, but this option may be suboptiomal when we want to schedule our own actions. Suppose we need to acquire some mutex, then we can't use ''[http://www.boost.org/doc/libs/1_42_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.lockable.try_lock try_lock]'' because we can't schedule our own actions if it's not I/O related. So, I'd implement my own event loop class, allowing anyone to register its own actions and [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/poll.html integrate it with io_service].&lt;br /&gt;
&lt;br /&gt;
To avoid locking a thread for more time than necessary, the EventLoop class would allow to register a delayed action in some queue. The actions that require lock would use try_lock (in conjunction with lock guard, to maintain the RAII idiom) in combination with delayed actions to block the current event loop as little as possible.&lt;br /&gt;
&lt;br /&gt;
[http://thread.gmane.org/gmane.comp.lib.boost.asio.user/1300 Use one boost::io_service per thread] decreases the contention when locking the io_service internal mutex for queuing and dequeuing&lt;br /&gt;
requests and is preferred for maximum scalability.&lt;br /&gt;
&lt;br /&gt;
=== Config files ===&lt;br /&gt;
&lt;br /&gt;
The configuration file syntax would be a WML file with the following elements:&lt;br /&gt;
&lt;br /&gt;
* ''umcd'' (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]): Top-level element&lt;br /&gt;
** old: The tag containing config related to the old (the current one) server&lt;br /&gt;
*** Port: Which port would run&lt;br /&gt;
** threads: The number of threads to use. Put 0 or don't put anything to let the server auto-detect through [http://www.boost.org/doc/libs/1_42_0/doc/html/thread/thread_management.html#thread.thread_management.thread.hardware_concurrency boost]&lt;br /&gt;
** database: It may contain several child tags to configure what database to use. The database data and configuration are kept in separate.&lt;br /&gt;
*** If simple (the SimpleAddonManager) is chosen, you'd have the option to choose the directory data. The SimpleAddonManager (WML-based database), like the config file, store its metadata in WML.&lt;br /&gt;
** Port: Which port it would use&lt;br /&gt;
** SSL: Settings related to SSL (key file, key file password, server port, ...)&lt;br /&gt;
&lt;br /&gt;
=== SimpleAddonManager ''(WML-based database)'' Filesystem layout ===&lt;br /&gt;
&lt;br /&gt;
The SimpleAddonManager would save the add-ons using the following schema:&lt;br /&gt;
&lt;br /&gt;
* ''/'': Top-level add-ons directory:&lt;br /&gt;
** ''add-ons.cfg''&lt;br /&gt;
** ''journal.log'': It will provide basic guarantees to avoid severe data loss (see below).&lt;br /&gt;
** ''Add-ons/''&lt;br /&gt;
*** ''Add-on name/''&lt;br /&gt;
**** ''metadata.cfg''&lt;br /&gt;
**** ''Add-on version/'': It would contain the add-on binary files related to ''version''.&lt;br /&gt;
***** ''i18n/'' (the name can be changed): It would contain the translation files. The version management would also be applied to translations and each translation should apply to a specific version of the add-on.&lt;br /&gt;
**** ''Another add-on version/'': It would contain the add-on binary files related to ''another version''.&lt;br /&gt;
&lt;br /&gt;
==== journal.log ====&lt;br /&gt;
&lt;br /&gt;
When some update is requested, the add-on server may update data in several different places. If a crash happens in the middle of the update, the data may corrupt. This database is not meant to support full [http://en.wikipedia.org/wiki/ACID ACID semantics], but it'll provide [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomicity] to prevent severe data loss, while a new backend is not developed.&lt;br /&gt;
&lt;br /&gt;
The main implementation technique is to use a journal file, storing when an operation starts and when it ends. Implement atomicity in this database is a requirement of this proposal, but the ''journal.log'' is optional and I might choose a different technique.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The server would listen on some different ports:&lt;br /&gt;
&lt;br /&gt;
* 15002: It would accept a subset of the protocol defined in [[CampaignServerWML]]. The objective is maintain backward compatibility with older Wesnoth clients. The commands '''not''' recognizable would be the ones related to uploading a campaign, changing the passphrase for a campaign, deleting a campaign and developer commands.&lt;br /&gt;
* 15003 (it's subject to change and can be any other): It would recognize the new protocol, as defined below.&lt;br /&gt;
* 15004 (it's subject to change and can be any other): The same as the previous one, but it would run atop of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/overview/ssl.html SSL].&lt;br /&gt;
&lt;br /&gt;
=== The ''new'' protocol ===&lt;br /&gt;
&lt;br /&gt;
The new protocol purpose is to address limitations faced in current protocol. For the new protocol, [[BinaryWML]] still will be used, to ease integration with Wesnoth client. The protocol is case-sensitive.&lt;br /&gt;
&lt;br /&gt;
* From now on, messages will use error codes (similar, but not equal, to HTTP and JSON-RPC). This behaviour is useful to build automated tools and to show customized (read translated) message errors to users. '''The message errors will still be WML-based.'''&lt;br /&gt;
* The new messages will use a top-level tag named umc (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]) and will have a version attribute. This attribute will extend the protocol in the future without break compatibility with older Wesnoth clients.&lt;br /&gt;
&lt;br /&gt;
==== Version ''0'' ====&lt;br /&gt;
&lt;br /&gt;
For version 0 (the one to be implemented during this GSoC), the following type of requests are supported:&lt;br /&gt;
&lt;br /&gt;
* Listing supported version: The server should return a list of supported versions and the client can use this info to adapt itself to the server's limits.&lt;br /&gt;
* Listing available add-ons: It would replace the current [[CampaignServerWML#Listing_Available_Campaigns]]. In this command, every tag would be a filter with a syntax similar to [http://docs.mongodb.org/manual/reference/operator/#comparison MongoDB declarative queries syntax]. In version 0, only the following filter types are supported:&lt;br /&gt;
** date&lt;br /&gt;
** language&lt;br /&gt;
** [[PblWML#title]]: This attribute should be used if someone wants to receive info about a single add-on.&lt;br /&gt;
** [[PblWML#author]]&lt;br /&gt;
** [[PblWML#description]]: This tag will have child tags to allow translatable descriptions.&lt;br /&gt;
** [[PblWML#type]]&lt;br /&gt;
* Downloading an add-on: It will be possible to download a specific version of an add-on and its related translations.&lt;br /&gt;
* Uploading an add-on: It will have an ''auth'' child tag. It will have an ''ownership'' tag, with the following child tags:&lt;br /&gt;
** ''Type'': It can be ''password'', ''user'' or ''group''. &lt;br /&gt;
** ''Password'': Only if ''type'' is ''password''. It should be the campaign password (just like it works now).&lt;br /&gt;
** ''Auth'': It must be present if ''type'' is different from ''password''. It shall contain two child tags:&lt;br /&gt;
*** ''User'': The user's nickname.&lt;br /&gt;
*** ''Pass'': The user's password.&lt;br /&gt;
** ''add-on'': The add-on itself, with the child ''metadata'' and ''data'' tags. The ''data'' tag would contain the add-on file. The ''metadata'' tag could contain any extra child tags and they wouldn't be discarded (this is the behaviour adopted by [https://www.oasis-open.org/committees/download.php/19275/ ODF] to increase the interoperability).&lt;br /&gt;
* Edit an add-on: It could be used to edit an add-on's metadata, ownership or delete the add-on (or a specific version of it).&lt;br /&gt;
* Request uploading terms&lt;br /&gt;
* Submit translation: It will allow submit a translation (the description field would also be translated)&lt;br /&gt;
&lt;br /&gt;
Some random notes about the new server/protocol:&lt;br /&gt;
&lt;br /&gt;
* Multiple authors per add-on are possible&lt;br /&gt;
* The &amp;quot;''listing available add-ons''&amp;quot; request would use the following tags differently:&lt;br /&gt;
** ''Dependencies'': The list of dependencies would include a version (allowing the operators &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=, ==).&lt;br /&gt;
** ''Icon'': This different tag would contain the following child tags:&lt;br /&gt;
*** ''Type'': It can be ''link'' or ''png''. Future protocol versions can define different types.&lt;br /&gt;
*** ''Data'': The icon data. It can be a path to an image in the standard image directory for Wesnoth or a base64 encoded small PNG icon.&lt;br /&gt;
* Error messages would use a format similar to the [http://www.jsonrpc.org/specification#error_object JSON-RPC 2.0 error object]. The error message/object would contain three child tags:&lt;br /&gt;
** ''Code'': An integer specifying a previous documented value&lt;br /&gt;
** ''Message'': An english human-readable string with a description of the error. Clients can use the error code to show their own messages, possibly translated to the user's main language.&lt;br /&gt;
** ''Data'' (optional): Custom data with further details about the specific error.&lt;br /&gt;
&lt;br /&gt;
==== SSL ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Secure_Socket_Layer SSL] is the standard protocol atop of sockets used to securely comunicate between two entities. It doesn't provide much advantage when you only intends to download an add-on, but it's very useful when you want to protect your password from eavesdroppers and alike.&lt;br /&gt;
&lt;br /&gt;
The Wesnoth client could add a configuration to choose ''secure connection'' and use unsecure connection by default (decreasing this overhead on the server).&lt;br /&gt;
&lt;br /&gt;
The add-on server would provide both (unencrypted and encrypted) connections. It'd listen to two ports to differentiate the connection type.&lt;br /&gt;
&lt;br /&gt;
[http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference.html Boost::asio] already provides support for SSL and add it in the add-on server would be easy.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Period !! Task !! Status !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Week -1 (May 12 to 18) || Install a Debian chroot in my system that mimics Wesnoth main server.&lt;br /&gt;
| bgcolor=&amp;quot;#00FF00&amp;quot; | DONE&lt;br /&gt;
|| Debian 6.0 (squeeze) with [http://wiki.wesnoth.org/CompilingWesnoth#Prerequisites all Wesnoth build deps] (tested)&lt;br /&gt;
|-&lt;br /&gt;
| Week 0 (May 19 to 25) || Create a Wesnoth branch and start coding. Get used to Boost.asio. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 1-2 (May 26 till June 8) || Create the SimpleAddonManager, capable of execute the operations needed to manage add-ons. || Mandatory || The base to better meta-data and i18n support.&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (June 9 to 15) || Reimplement a subset of the current protocol in Boost.asio. || Optional ||&lt;br /&gt;
* This feature will depend on the event loop&lt;br /&gt;
* It'll delegate the '''read''' operations to the database&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June 16 to 22) || Start working on the authentication support. || Mandatory || The standalone login backend won't support access control groups&lt;br /&gt;
|-&lt;br /&gt;
| Week 5-7 (June 23 till July 13) || Implement the new protocol || Mandatory ||&lt;br /&gt;
* It'll delegate '''read''' and '''write''' operations to the database.&lt;br /&gt;
* It'll be integrated with the authentication support.&lt;br /&gt;
* Documentation should follow it progress.&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July 14 to 20) || Introduce threads || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July 14 to 20) || Introduce SSL || Optional ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 9-11 (July 21 till August 10) || LDAP support || Mandatory || It may take less time, but I'm overestimating because I have little experience with LDAP (only as a sysadmin at [http://en.lccv.ufal.br/cluster/ LCCV] for a while)&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (August 11 to 17) || Do more tests, fix bugs and integrate the new branch into the Wesnoth main branch || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 13-16 (August 18 till September 14) || Integrate the new protocol in Wesnoth client. || Mandatory ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I overestimated all tasks, so I may finish some tasks a bit sooner and use this time to compensate the wrongly estimated tasks, but this made the timeline lose some precision.&lt;br /&gt;
&lt;br /&gt;
=== Threads in wiki 8 ===&lt;br /&gt;
&lt;br /&gt;
Usually it's advised to introduce threads in the initial '''design''' of the application if someone wants to support multithread design. A rule of dumb is to take a step further and make threads part of the initial '''code'''.&lt;br /&gt;
&lt;br /&gt;
In this proposal, I suggest to introduce threads only at week 8, but I already have experience with multi-threaded programs and I'd make the design ready to be extended right from the week 1. The reason why I want to introduce threads later is because I want to deliver something usable sooner and work incrementally till deliver the full product.&lt;br /&gt;
&lt;br /&gt;
I like to work incrementally, because you catch specifications errors sooner (users not usually know what they want till you deliver the product and they say &amp;quot;Hey! This is not what I asked for!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51097</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51097"/>
		<updated>2013-05-19T22:52:02Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance and scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for exceptions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
You can see a '''draft''' (&amp;lt;u&amp;gt;remember&amp;lt;/u&amp;gt;: it's a draft and its purpose is to explain what strategies will be used to solve the problems faced; the future system will probably implement some things undocumented here) below:&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
The users would belong to some groups and the groups should be used to create an acess control. It should exist a group for the translation team with power to upload translations and it should exist a group for the admins (with unrestricted powers). The simple/self login backend wouldn't implement groups.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
=== The WML-based database ===&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend, the ''WML-based database backend''. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
This database would separate the add-on data from its meta-data. The meta-data would be saved in a child tag of the main add-on's config file. Extra meta-data will be stored there also.&lt;br /&gt;
&lt;br /&gt;
A migration script will be provided to convert the add-ons from the previous format to the new one.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed and cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
An extra meta-data example is the ''number of players''. Currently there is no field to describe the ''number of players'', but in the future developers may want to add this feature (and players could start using it ASAP).&lt;br /&gt;
&lt;br /&gt;
The support to extra meta-data influence the database and the network protocol. If you want info about how they solve the new problem, see the appropriate section.&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Currently, there is no integration between the Addon Server and the [[WesCamp]] translations. A [https://github.com/wesnoth/wesnoth-old/blob/master/data/tools/wesnoth/wescamp.py script] is run [http://wiki.wesnoth.org/Wescamp.py_Instructions by hand] every time the translations need to be updated.&lt;br /&gt;
&lt;br /&gt;
The translations are developed/maintained at [https://github.com/wescamp github] under multiple repositories of a single organization (but not all repositories are translations).&lt;br /&gt;
&lt;br /&gt;
It should be too difficult for the server to watch for the notifications and the requirement of the use of older tools/dependencies make this challenge still more difficult. To improve this scenario, the proposed addon server should host the translations itself.&lt;br /&gt;
&lt;br /&gt;
The translator should send the translation to the translation team and the translation team could use their users (with some administrative power) to upload the translation to the server through the Wesnoth client, with a system similar to the [[PblWML|.pbl files]].&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
Different versions of the same protocol may share a lot of actions in common. To avoid code duplication, the session component will use [http://en.wikipedia.org/wiki/Factory_method_pattern factories] to instantiate the necessary handlers for each protocol and each handler will delegate the handling of every specific action to other classes.&lt;br /&gt;
&lt;br /&gt;
Namespaces will be used to group classes related to protocols/versions.&lt;br /&gt;
&lt;br /&gt;
=== Event loop != boost::io_service  ===&lt;br /&gt;
&lt;br /&gt;
The boost::io_service object has [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/run.html an option] to act as an event loop, but this option may be suboptiomal when we want to schedule our own actions. Suppose we need to acquire some mutex, then we can't use ''[http://www.boost.org/doc/libs/1_42_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.lockable.try_lock try_lock]'' because we can't schedule our own actions if it's not I/O related. So, I'd implement my own event loop class, allowing anyone to register its own actions and [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/poll.html integrate it with io_service].&lt;br /&gt;
&lt;br /&gt;
To avoid locking a thread for more time than necessary, the EventLoop class would allow to register a delayed action in some queue. The actions that require lock would use try_lock (in conjunction with lock guard, to maintain the RAII idiom) in combination with delayed actions to block the current event loop as little as possible.&lt;br /&gt;
&lt;br /&gt;
[http://thread.gmane.org/gmane.comp.lib.boost.asio.user/1300 Use one boost::io_service per thread] decreases the contention when locking the io_service internal mutex for queuing and dequeuing&lt;br /&gt;
requests and is preferred for maximum scalability.&lt;br /&gt;
&lt;br /&gt;
=== Config files ===&lt;br /&gt;
&lt;br /&gt;
The configuration file syntax would be a WML file with the following elements:&lt;br /&gt;
&lt;br /&gt;
* ''umcd'' (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]): Top-level element&lt;br /&gt;
** old: The tag containing config related to the old (the current one) server&lt;br /&gt;
*** Port: Which port would run&lt;br /&gt;
** threads: The number of threads to use. Put 0 or don't put anything to let the server auto-detect through [http://www.boost.org/doc/libs/1_42_0/doc/html/thread/thread_management.html#thread.thread_management.thread.hardware_concurrency boost]&lt;br /&gt;
** database: It may contain several child tags to configure what database to use. The database data and configuration are kept in separate.&lt;br /&gt;
*** If simple (the SimpleAddonManager) is chosen, you'd have the option to choose the directory data. The SimpleAddonManager (WML-based database), like the config file, store its metadata in WML.&lt;br /&gt;
** Port: Which port it would use&lt;br /&gt;
** SSL: Settings related to SSL (key file, key file password, server port, ...)&lt;br /&gt;
&lt;br /&gt;
=== SimpleAddonManager ''(WML-based database)'' Filesystem layout ===&lt;br /&gt;
&lt;br /&gt;
The SimpleAddonManager would save the add-ons using the following schema:&lt;br /&gt;
&lt;br /&gt;
* ''/'': Top-level add-ons directory:&lt;br /&gt;
** ''add-ons.cfg''&lt;br /&gt;
** ''journal.log'': It will provide basic guarantees to avoid severe data loss (see below).&lt;br /&gt;
** ''Add-ons/''&lt;br /&gt;
*** ''Add-on name/''&lt;br /&gt;
**** ''metadata.cfg''&lt;br /&gt;
**** ''Add-on version/'': It would contain the add-on binary files related to ''version''.&lt;br /&gt;
***** ''i18n/'' (the name can be changed): It would contain the translation files. The version management would also be applied to translations and each translation should apply to a specific version of the add-on.&lt;br /&gt;
**** ''Another add-on version/'': It would contain the add-on binary files related to ''another version''.&lt;br /&gt;
&lt;br /&gt;
==== journal.log ====&lt;br /&gt;
&lt;br /&gt;
When some update is requested, the add-on server may update data in several different places. If a crash happens in the middle of the update, the data may corrupt. This database is not meant to support full [http://en.wikipedia.org/wiki/ACID ACID semantics], but it'll provide [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomicity] to prevent severe data loss, while a new backend is not developed.&lt;br /&gt;
&lt;br /&gt;
The main implementation technique is to use a journal file, storing when an operation starts and when it ends. Implement atomicity in this database is a requirement of this proposal, but the ''journal.log'' is optional and I might choose a different technique.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The server would listen on some different ports:&lt;br /&gt;
&lt;br /&gt;
* 15002: It would accept a subset of the protocol defined in [[CampaignServerWML]]. The objective is maintain backward compatibility with older Wesnoth clients. The commands '''not''' recognizable would be the ones related to uploading a campaign, changing the passphrase for a campaign, deleting a campaign and developer commands.&lt;br /&gt;
* 15003 (it's subject to change and can be any other): It would recognize the new protocol, as defined below.&lt;br /&gt;
* 15004 (it's subject to change and can be any other): The same as the previous one, but it would run atop of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/overview/ssl.html SSL].&lt;br /&gt;
&lt;br /&gt;
=== The ''new'' protocol ===&lt;br /&gt;
&lt;br /&gt;
The new protocol purpose is to address limitations faced in current protocol. For the new protocol, [[BinaryWML]] still will be used, to ease integration with Wesnoth client. The protocol is case-sensitive.&lt;br /&gt;
&lt;br /&gt;
* From now on, messages will use error codes (similar, but not equal, to HTTP and JSON-RPC). This behaviour is useful to build automated tools and to show customized (read translated) message errors to users. '''The message errors will still be WML-based.'''&lt;br /&gt;
* The new messages will use a top-level tag named umc (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]) and will have a version attribute. This attribute will extend the protocol in the future without break compatibility with older Wesnoth clients.&lt;br /&gt;
&lt;br /&gt;
==== Version ''0'' ====&lt;br /&gt;
&lt;br /&gt;
For version 0 (the one to be implemented during this GSoC), the following type of requests are supported:&lt;br /&gt;
&lt;br /&gt;
* Listing supported version: The server should return a list of supported versions and the client can use this info to adapt itself to the server's limits.&lt;br /&gt;
* Listing available add-ons: It would replace the current [[CampaignServerWML#Listing_Available_Campaigns]]. In this command, every tag would be a filter with a syntax similar to [http://docs.mongodb.org/manual/reference/operator/#comparison MongoDB declarative queries syntax]. In version 0, only the following filter types are supported:&lt;br /&gt;
** date&lt;br /&gt;
** language&lt;br /&gt;
** [[PblWML#title]]: This attribute should be used if someone wants to receive info about a single add-on.&lt;br /&gt;
** [[PblWML#author]]&lt;br /&gt;
** [[PblWML#description]]: This tag will have child tags to allow translatable descriptions.&lt;br /&gt;
** [[PblWML#type]]&lt;br /&gt;
* Downloading an add-on: It will be possible to download a specific version of an add-on and its related translations.&lt;br /&gt;
* Uploading an add-on: It will have an ''auth'' child tag. It will have an ''ownership'' tag, with the following child tags:&lt;br /&gt;
** ''Type'': It can be ''password'', ''user'' or ''group''. &lt;br /&gt;
** ''Password'': Only if ''type'' is ''password''. It should be the campaign password (just like it works now).&lt;br /&gt;
** ''Auth'': It must be present if ''type'' is different from ''password''. It shall contain two child tags:&lt;br /&gt;
*** ''User'': The user's nickname.&lt;br /&gt;
*** ''Pass'': The user's password.&lt;br /&gt;
** ''add-on'': The add-on itself, with the child ''metadata'' and ''data'' tags. The ''data'' tag would contain the add-on file. The ''metadata'' tag could contain any extra child tags and they wouldn't be discarded (this is the behaviour adopted by [https://www.oasis-open.org/committees/download.php/19275/ ODF] to increase the interoperability).&lt;br /&gt;
* Edit an add-on: It could be used to edit an add-on's metadata, ownership or delete the add-on (or a specific version of it).&lt;br /&gt;
* Request uploading terms&lt;br /&gt;
* Submit translation: It will allow submit a translation (the description field would also be translated)&lt;br /&gt;
&lt;br /&gt;
Some random notes about the new server/protocol:&lt;br /&gt;
&lt;br /&gt;
* Multiple authors per add-on are possible&lt;br /&gt;
* The &amp;quot;''listing available add-ons''&amp;quot; request would use the following tags differently:&lt;br /&gt;
** ''Dependencies'': The list of dependencies would include a version (allowing the operators &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=, ==).&lt;br /&gt;
** ''Icon'': This different tag would contain the following child tags:&lt;br /&gt;
*** ''Type'': It can be ''link'' or ''png''. Future protocol versions can define different types.&lt;br /&gt;
*** ''Data'': The icon data. It can be a path to an image in the standard image directory for Wesnoth or a base64 encoded small PNG icon.&lt;br /&gt;
* Error messages would use a format similar to the [http://www.jsonrpc.org/specification#error_object JSON-RPC 2.0 error object]. The error message/object would contain three child tags:&lt;br /&gt;
** ''Code'': An integer specifying a previous documented value&lt;br /&gt;
** ''Message'': An english human-readable string with a description of the error. Clients can use the error code to show their own messages, possibly translated to the user's main language.&lt;br /&gt;
** ''Data'' (optional): Custom data with further details about the specific error.&lt;br /&gt;
&lt;br /&gt;
==== SSL ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Secure_Socket_Layer SSL] is the standard protocol atop of sockets used to securely comunicate between two entities. It doesn't provide much advantage when you only intends to download an add-on, but it's very useful when you want to protect your password from eavesdroppers and alike.&lt;br /&gt;
&lt;br /&gt;
The Wesnoth client could add a configuration to choose ''secure connection'' and use unsecure connection by default (decreasing this overhead on the server).&lt;br /&gt;
&lt;br /&gt;
The add-on server would provide both (unencrypted and encrypted) connections. It'd listen to two ports to differentiate the connection type.&lt;br /&gt;
&lt;br /&gt;
[http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference.html Boost::asio] already provides support for SSL and add it in the add-on server would be easy.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Period !! Task !! Status !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Week -1 (May 12 to 18) || Install a Debian chroot in my system that mimics Wesnoth main server.&lt;br /&gt;
| bgcolor=&amp;quot;#00FF00&amp;quot; | DONE&lt;br /&gt;
|| Debian 6.0 (squeeze) with [http://wiki.wesnoth.org/CompilingWesnoth#Prerequisites all Wesnoth build deps] (tested)&lt;br /&gt;
|-&lt;br /&gt;
| Week 0 (May 19 to 25) || Create a Wesnoth branch and start coding. Get used to Boost.asio. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 1-2 (May 26 till June 8) || Create the SimpleAddonManager, capable of execute the operations needed to manage add-ons. || Mandatory || The base to better meta-data and i18n support.&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (June 9 to 15) || Reimplement a subset of the current protocol in Boost.asio. || Optional ||&lt;br /&gt;
* This feature will depend on the event loop&lt;br /&gt;
* It'll delegate the '''read''' operations to the database&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June 16 to 22) || Start working on the authentication support. || Mandatory || The standalone login backend won't support access control groups&lt;br /&gt;
|-&lt;br /&gt;
| Week 5-7 (June 23 till July 13) || Implement the new protocol || Mandatory ||&lt;br /&gt;
* It'll delegate '''read''' and '''write''' operations to the database.&lt;br /&gt;
* It'll be integrated with the authentication support.&lt;br /&gt;
* Documentation should follow it progress.&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July 14 to 20) || Introduce threads and SSL. || Mandatory for threads and optional for SSL ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 9-11 (July 21 till August 10) || LDAP support || Mandatory || It may take less time, but I'm overestimating because I have little experience with LDAP (only as a sysadmin at [http://en.lccv.ufal.br/cluster/ LCCV] for a while)&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (August 11 to 17) || Do more tests, fix bugs and integrate the new branch into the Wesnoth main branch || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 13-16 (August 18 till September 14) || Integrate the new protocol in Wesnoth client. || Mandatory ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I overestimated all tasks, so I may finish some tasks a bit sooner and use this time to compensate the wrongly estimated tasks, but this made the timeline lose some precision.&lt;br /&gt;
&lt;br /&gt;
=== Threads in wiki 8 ===&lt;br /&gt;
&lt;br /&gt;
Usually it's advised to introduce threads in the initial '''design''' of the application if someone wants to support multithread design. A rule of dumb is to take a step further and make threads part of the initial '''code'''.&lt;br /&gt;
&lt;br /&gt;
In this proposal, I suggest to introduce threads only at week 8, but I already have experience with multi-threaded programs and I'd make the design ready to be extended right from the week 1. The reason why I want to introduce threads later is because I want to deliver something usable sooner and work incrementally till deliver the full product.&lt;br /&gt;
&lt;br /&gt;
I like to work incrementally, because you catch specifications errors sooner (users not usually know what they want till you deliver the product and they say &amp;quot;Hey! This is not what I asked for!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51096</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51096"/>
		<updated>2013-05-19T22:41:04Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance and scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for exceptions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
You can see a '''draft''' (&amp;lt;u&amp;gt;remember&amp;lt;/u&amp;gt;: it's a draft and its purpose is to explain what strategies will be used to solve the problems faced; the future system will probably implement some things undocumented here) below:&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
The users would belong to some groups and the groups should be used to create an acess control. It should exist a group for the translation team with power to upload translations and it should exist a group for the admins (with unrestricted powers). The simple/self login backend wouldn't implement groups.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
=== The WML-based database ===&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend, the ''WML-based database backend''. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
This database would separate the add-on data from its meta-data. The meta-data would be saved in a child tag of the main add-on's config file. Extra meta-data will be stored there also.&lt;br /&gt;
&lt;br /&gt;
A migration script will be provided to convert the add-ons from the previous format to the new one.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed and cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
An extra meta-data example is the ''number of players''. Currently there is no field to describe the ''number of players'', but in the future developers may want to add this feature (and players could start using it ASAP).&lt;br /&gt;
&lt;br /&gt;
The support to extra meta-data influence the database and the network protocol. If you want info about how they solve the new problem, see the appropriate section.&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Currently, there is no integration between the Addon Server and the [[WesCamp]] translations. A [https://github.com/wesnoth/wesnoth-old/blob/master/data/tools/wesnoth/wescamp.py script] is run [http://wiki.wesnoth.org/Wescamp.py_Instructions by hand] every time the translations need to be updated.&lt;br /&gt;
&lt;br /&gt;
The translations are developed/maintained at [https://github.com/wescamp github] under multiple repositories of a single organization (but not all repositories are translations).&lt;br /&gt;
&lt;br /&gt;
It should be too difficult for the server to watch for the notifications and the requirement of the use of older tools/dependencies make this challenge still more difficult. To improve this scenario, the proposed addon server should host the translations itself.&lt;br /&gt;
&lt;br /&gt;
The translator should send the translation to the translation team and the translation team could use their users (with some administrative power) to upload the translation to the server through the Wesnoth client, with a system similar to the [[PblWML|.pbl files]].&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
Different versions of the same protocol may share a lot of actions in common. To avoid code duplication, the session component will use [http://en.wikipedia.org/wiki/Factory_method_pattern factories] to instantiate the necessary handlers for each protocol and each handler will delegate the handling of every specific action to other classes.&lt;br /&gt;
&lt;br /&gt;
Namespaces will be used to group classes related to protocols/versions.&lt;br /&gt;
&lt;br /&gt;
=== Event loop != boost::io_service  ===&lt;br /&gt;
&lt;br /&gt;
The boost::io_service object has [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/run.html an option] to act as an event loop, but this option may be suboptiomal when we want to schedule our own actions. Suppose we need to acquire some mutex, then we can't use ''[http://www.boost.org/doc/libs/1_42_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.lockable.try_lock try_lock]'' because we can't schedule our own actions if it's not I/O related. So, I'd implement my own event loop class, allowing anyone to register its own actions and [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/poll.html integrate it with io_service].&lt;br /&gt;
&lt;br /&gt;
To avoid locking a thread for more time than necessary, the EventLoop class would allow to register a delayed action in some queue. The actions that require lock would use try_lock (in conjunction with lock guard, to maintain the RAII idiom) in combination with delayed actions to block the current event loop as little as possible.&lt;br /&gt;
&lt;br /&gt;
[http://thread.gmane.org/gmane.comp.lib.boost.asio.user/1300 Use one boost::io_service per thread] decreases the contention when locking the io_service internal mutex for queuing and dequeuing&lt;br /&gt;
requests and is preferred for maximum scalability.&lt;br /&gt;
&lt;br /&gt;
=== Config files ===&lt;br /&gt;
&lt;br /&gt;
The configuration file syntax would be a WML file with the following elements:&lt;br /&gt;
&lt;br /&gt;
* ''umcd'' (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]): Top-level element&lt;br /&gt;
** old: The tag containing config related to the old (the current one) server&lt;br /&gt;
*** Port: Which port would run&lt;br /&gt;
** threads: The number of threads to use. Put 0 or don't put anything to let the server auto-detect through [http://www.boost.org/doc/libs/1_42_0/doc/html/thread/thread_management.html#thread.thread_management.thread.hardware_concurrency boost]&lt;br /&gt;
** database: It may contain several child tags to configure what database to use. The database data and configuration are kept in separate.&lt;br /&gt;
*** If simple (the SimpleAddonManager) is chosen, you'd have the option to choose the directory data. The SimpleAddonManager (WML-based database), like the config file, store its metadata in WML.&lt;br /&gt;
** Port: Which port it would use&lt;br /&gt;
** SSL: Settings related to SSL (key file, key file password, server port, ...)&lt;br /&gt;
&lt;br /&gt;
=== SimpleAddonManager ''(WML-based database)'' Filesystem layout ===&lt;br /&gt;
&lt;br /&gt;
The SimpleAddonManager would save the add-ons using the following schema:&lt;br /&gt;
&lt;br /&gt;
* ''/'': Top-level add-ons directory:&lt;br /&gt;
** ''add-ons.cfg''&lt;br /&gt;
** ''journal.log'': It will provide basic guarantees to avoid severe data loss (see below).&lt;br /&gt;
** ''Add-ons/''&lt;br /&gt;
*** ''Add-on name/''&lt;br /&gt;
**** ''metadata.cfg''&lt;br /&gt;
**** ''Add-on version/'': It would contain the add-on binary files related to ''version''.&lt;br /&gt;
***** ''i18n/'' (the name can be changed): It would contain the translation files. The version management would also be applied to translations and each translation should apply to a specific version of the add-on.&lt;br /&gt;
**** ''Another add-on version/'': It would contain the add-on binary files related to ''another version''.&lt;br /&gt;
&lt;br /&gt;
==== journal.log ====&lt;br /&gt;
&lt;br /&gt;
When some update is requested, the add-on server may update data in several different places. If a crash happens in the middle of the update, the data may corrupt. This database is not meant to support full [http://en.wikipedia.org/wiki/ACID ACID semantics], but it'll provide [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomicity] to prevent severe data loss, while a new backend is not developed.&lt;br /&gt;
&lt;br /&gt;
The main implementation technique is to use a journal file, storing when an operation starts and when it ends. Implement atomicity in this database is a requirement of this proposal, but the ''journal.log'' is optional and I might choose a different technique.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The server would listen on some different ports:&lt;br /&gt;
&lt;br /&gt;
* 15002: It would accept a subset of the protocol defined in [[CampaignServerWML]]. The objective is maintain backward compatibility with older Wesnoth clients. The commands '''not''' recognizable would be the ones related to uploading a campaign, changing the passphrase for a campaign, deleting a campaign and developer commands.&lt;br /&gt;
* 15003 (it's subject to change and can be any other): It would recognize the new protocol, as defined below.&lt;br /&gt;
* 15004 (it's subject to change and can be any other): The same as the previous one, but it would run atop of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/overview/ssl.html SSL].&lt;br /&gt;
&lt;br /&gt;
=== The ''new'' protocol ===&lt;br /&gt;
&lt;br /&gt;
The new protocol purpose is to address limitations faced in current protocol. For the new protocol, [[BinaryWML]] still will be used, to ease integration with Wesnoth client. The protocol is case-sensitive.&lt;br /&gt;
&lt;br /&gt;
* From now on, messages will use error codes (similar, but not equal, to HTTP and JSON-RPC). This behaviour is useful to build automated tools and to show customized (read translated) message errors to users. '''The message errors will still be WML-based.'''&lt;br /&gt;
* The new messages will use a top-level tag named umc (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]) and will have a version attribute. This attribute will extend the protocol in the future without break compatibility with older Wesnoth clients.&lt;br /&gt;
&lt;br /&gt;
==== Version ''0'' ====&lt;br /&gt;
&lt;br /&gt;
For version 0 (the one to be implemented during this GSoC), the following type of requests are supported:&lt;br /&gt;
&lt;br /&gt;
* Listing supported version: The server should return a list of supported versions and the client can use this info to adapt itself to the server's limits.&lt;br /&gt;
* Listing available add-ons: It would replace the current [[CampaignServerWML#Listing_Available_Campaigns]]. In this command, every tag would be a filter with a syntax similar to [http://docs.mongodb.org/manual/reference/operator/#comparison MongoDB declarative queries syntax]. In version 0, only the following filter types are supported:&lt;br /&gt;
** date&lt;br /&gt;
** language&lt;br /&gt;
** [[PblWML#title]]: This attribute should be used if someone wants to receive info about a single add-on.&lt;br /&gt;
** [[PblWML#author]]&lt;br /&gt;
** [[PblWML#description]]: This tag will have child tags to allow translatable descriptions.&lt;br /&gt;
** [[PblWML#type]]&lt;br /&gt;
* Downloading an add-on: It will be possible to download a specific version of an add-on and its related translations.&lt;br /&gt;
* Uploading an add-on: It will have an ''auth'' child tag. It will have an ''ownership'' tag, with the following child tags:&lt;br /&gt;
** ''Type'': It can be ''password'', ''user'' or ''group''. &lt;br /&gt;
** ''Password'': Only if ''type'' is ''password''. It should be the campaign password (just like it works now).&lt;br /&gt;
** ''Auth'': It must be present if ''type'' is different from ''password''. It shall contain two child tags:&lt;br /&gt;
*** ''User'': The user's nickname.&lt;br /&gt;
*** ''Pass'': The user's password.&lt;br /&gt;
** ''add-on'': The add-on itself, with the child ''metadata'' and ''data'' tags. The ''data'' tag would contain the add-on file. The ''metadata'' tag could contain any extra child tags and they wouldn't be discarded (this is the behaviour adopted by [https://www.oasis-open.org/committees/download.php/19275/ ODF] to increase the interoperability).&lt;br /&gt;
* Edit an add-on: It could be used to edit an add-on's metadata, ownership or delete the add-on (or a specific version of it).&lt;br /&gt;
* Request uploading terms&lt;br /&gt;
* Submit translation: It will allow submit a translation (the description field would also be translated)&lt;br /&gt;
&lt;br /&gt;
Some random notes about the new server/protocol:&lt;br /&gt;
&lt;br /&gt;
* Multiple authors per add-on are possible&lt;br /&gt;
* The &amp;quot;''listing available add-ons''&amp;quot; request would use the following tags differently:&lt;br /&gt;
** ''Dependencies'': The list of dependencies would include a version (allowing the operators &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=, ==).&lt;br /&gt;
** ''Icon'': This different tag would contain the following child tags:&lt;br /&gt;
*** ''Type'': It can be ''link'' or ''png''. Future protocol versions can define different types.&lt;br /&gt;
*** ''Data'': The icon data. It can be a path to an image in the standard image directory for Wesnoth or a base64 encoded small PNG icon.&lt;br /&gt;
* Error messages would use a format similar to the [http://www.jsonrpc.org/specification#error_object JSON-RPC 2.0 error object]. The error message/object would contain three child tags:&lt;br /&gt;
** ''Code'': An integer specifying a previous documented value&lt;br /&gt;
** ''Message'': An english human-readable string with a description of the error. Clients can use the error code to show their own messages, possibly translated to the user's main language.&lt;br /&gt;
** ''Data'' (optional): Custom data with further details about the specific error.&lt;br /&gt;
&lt;br /&gt;
==== SSL ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Secure_Socket_Layer SSL] is the standard protocol atop of sockets used to securely comunicate between two entities. It doesn't provide much advantage when you only intends to download an add-on, but it's very useful when you want to protect your password from eavesdroppers and alike.&lt;br /&gt;
&lt;br /&gt;
The Wesnoth client could add a configuration to choose ''secure connection'' and use unsecure connection by default (decreasing this overhead on the server).&lt;br /&gt;
&lt;br /&gt;
The add-on server would provide both (unencrypted and encrypted) connections. It'd listen to two ports to differentiate the connection type.&lt;br /&gt;
&lt;br /&gt;
[http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference.html Boost::asio] already provides support for SSL and add it in the add-on server would be easy.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Period !! Task !! Status !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Week -1 (May 12 to 18) || Install a Debian chroot in my system that mimics Wesnoth main server.&lt;br /&gt;
| style=&amp;quot;background: #00FF00;&amp;quot; | DONE&lt;br /&gt;
|| Debian 6.0 (squeeze) with [http://wiki.wesnoth.org/CompilingWesnoth#Prerequisites all Wesnoth build deps] (tested)&lt;br /&gt;
|-&lt;br /&gt;
| Week 0 (May 19 to 25) || Create a Wesnoth branch and start coding. Get used to Boost.asio. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 1-2 (May 26 till June 8) || Create the SimpleAddonManager, capable of execute the operations needed to manage add-ons. || Mandatory || The base to better meta-data and i18n support.&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (June 9 to 15) || Reimplement a subset of the current protocol in Boost.asio. || Optional ||&lt;br /&gt;
* This feature will depend on the event loop&lt;br /&gt;
* It'll delegate the '''read''' operations to the database&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June 16 to 22) || Start working on the authentication support. || Mandatory || The standalone login backend won't support access control groups&lt;br /&gt;
|-&lt;br /&gt;
| Week 5-7 (June 23 till July 13) || Implement the new protocol || Mandatory ||&lt;br /&gt;
* It'll delegate '''read''' and '''write''' operations to the database.&lt;br /&gt;
* It'll be integrated with the authentication support.&lt;br /&gt;
* Documentation should follow it progress.&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July 14 to 20) || Introduce threads and SSL. || Mandatory for threads and optional for SSL ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 9-11 (July 21 till August 10) || LDAP support || Mandatory || It may take less time, but I'm overestimating because I have little experience with LDAP (only as a sysadmin at [http://en.lccv.ufal.br/cluster/ LCCV] for a while)&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (August 11 to 17) || Do more tests, fix bugs and integrate the new branch into the Wesnoth main branch || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 13-16 (August 18 till September 14) || Integrate the new protocol in Wesnoth client. || Mandatory ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I overestimated all tasks, so I may finish some tasks a bit sooner and use this time to compensate the wrongly estimated tasks, but this made the timeline lose some precision.&lt;br /&gt;
&lt;br /&gt;
=== Threads in wiki 8 ===&lt;br /&gt;
&lt;br /&gt;
Usually it's advised to introduce threads in the initial '''design''' of the application if someone wants to support multithread design. A rule of dumb is to take a step further and make threads part of the initial '''code'''.&lt;br /&gt;
&lt;br /&gt;
In this proposal, I suggest to introduce threads only at week 8, but I already have experience with multi-threaded programs and I'd make the design ready to be extended right from the week 1. The reason why I want to introduce threads later is because I want to deliver something usable sooner and work incrementally till deliver the full product.&lt;br /&gt;
&lt;br /&gt;
I like to work incrementally, because you catch specifications errors sooner (users not usually know what they want till you deliver the product and they say &amp;quot;Hey! This is not what I asked for!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51095</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51095"/>
		<updated>2013-05-19T20:58:15Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: fix small gramar issue&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance and scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for exceptions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
You can see a '''draft''' (&amp;lt;u&amp;gt;remember&amp;lt;/u&amp;gt;: it's a draft and its purpose is to explain what strategies will be used to solve the problems faced; the future system will probably implement some things undocumented here) below:&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
The users would belong to some groups and the groups should be used to create an acess control. It should exist a group for the translation team with power to upload translations and it should exist a group for the admins (with unrestricted powers). The simple/self login backend wouldn't implement groups.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
=== The WML-based database ===&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend, the ''WML-based database backend''. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
This database would separate the add-on data from its meta-data. The meta-data would be saved in a child tag of the main add-on's config file. Extra meta-data will be stored there also.&lt;br /&gt;
&lt;br /&gt;
A migration script will be provided to convert the add-ons from the previous format to the new one.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed and cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
An extra meta-data example is the ''number of players''. Currently there is no field to describe the ''number of players'', but in the future developers may want to add this feature (and players could start using it ASAP).&lt;br /&gt;
&lt;br /&gt;
The support to extra meta-data influence the database and the network protocol. If you want info about how they solve the new problem, see the appropriate section.&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Currently, there is no integration between the Addon Server and the [[WesCamp]] translations. A [https://github.com/wesnoth/wesnoth-old/blob/master/data/tools/wesnoth/wescamp.py script] is run [http://wiki.wesnoth.org/Wescamp.py_Instructions by hand] every time the translations need to be updated.&lt;br /&gt;
&lt;br /&gt;
The translations are developed/maintained at [https://github.com/wescamp github] under multiple repositories of a single organization (but not all repositories are translations).&lt;br /&gt;
&lt;br /&gt;
It should be too difficult for the server to watch for the notifications and the requirement of the use of older tools/dependencies make this challenge still more difficult. To improve this scenario, the proposed addon server should host the translations itself.&lt;br /&gt;
&lt;br /&gt;
The translator should send the translation to the translation team and the translation team could use their users (with some administrative power) to upload the translation to the server through the Wesnoth client, with a system similar to the [[PblWML|.pbl files]].&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
Different versions of the same protocol may share a lot of actions in common. To avoid code duplication, the session component will use [http://en.wikipedia.org/wiki/Factory_method_pattern factories] to instantiate the necessary handlers for each protocol and each handler will delegate the handling of every specific action to other classes.&lt;br /&gt;
&lt;br /&gt;
Namespaces will be used to group classes related to protocols/versions.&lt;br /&gt;
&lt;br /&gt;
=== Event loop != boost::io_service  ===&lt;br /&gt;
&lt;br /&gt;
The boost::io_service object has [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/run.html an option] to act as an event loop, but this option may be suboptiomal when we want to schedule our own actions. Suppose we need to acquire some mutex, then we can't use ''[http://www.boost.org/doc/libs/1_42_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.lockable.try_lock try_lock]'' because we can't schedule our own actions if it's not I/O related. So, I'd implement my own event loop class, allowing anyone to register its own actions and [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/poll.html integrate it with io_service].&lt;br /&gt;
&lt;br /&gt;
To avoid locking a thread for more time than necessary, the EventLoop class would allow to register a delayed action in some queue. The actions that require lock would use try_lock (in conjunction with lock guard, to maintain the RAII idiom) in combination with delayed actions to block the current event loop as little as possible.&lt;br /&gt;
&lt;br /&gt;
[http://thread.gmane.org/gmane.comp.lib.boost.asio.user/1300 Use one boost::io_service per thread] decreases the contention when locking the io_service internal mutex for queuing and dequeuing&lt;br /&gt;
requests and is preferred for maximum scalability.&lt;br /&gt;
&lt;br /&gt;
=== Config files ===&lt;br /&gt;
&lt;br /&gt;
The configuration file syntax would be a WML file with the following elements:&lt;br /&gt;
&lt;br /&gt;
* ''umcd'' (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]): Top-level element&lt;br /&gt;
** old: The tag containing config related to the old (the current one) server&lt;br /&gt;
*** Port: Which port would run&lt;br /&gt;
** threads: The number of threads to use. Put 0 or don't put anything to let the server auto-detect through [http://www.boost.org/doc/libs/1_42_0/doc/html/thread/thread_management.html#thread.thread_management.thread.hardware_concurrency boost]&lt;br /&gt;
** database: It may contain several child tags to configure what database to use. The database data and configuration are kept in separate.&lt;br /&gt;
*** If simple (the SimpleAddonManager) is chosen, you'd have the option to choose the directory data. The SimpleAddonManager (WML-based database), like the config file, store its metadata in WML.&lt;br /&gt;
** Port: Which port it would use&lt;br /&gt;
** SSL: Settings related to SSL (key file, key file password, server port, ...)&lt;br /&gt;
&lt;br /&gt;
=== SimpleAddonManager ''(WML-based database)'' Filesystem layout ===&lt;br /&gt;
&lt;br /&gt;
The SimpleAddonManager would save the add-ons using the following schema:&lt;br /&gt;
&lt;br /&gt;
* ''/'': Top-level add-ons directory:&lt;br /&gt;
** ''add-ons.cfg''&lt;br /&gt;
** ''journal.log'': It will provide basic guarantees to avoid severe data loss (see below).&lt;br /&gt;
** ''Add-ons/''&lt;br /&gt;
*** ''Add-on name/''&lt;br /&gt;
**** ''metadata.cfg''&lt;br /&gt;
**** ''Add-on version/'': It would contain the add-on binary files related to ''version''.&lt;br /&gt;
***** ''i18n/'' (the name can be changed): It would contain the translation files. The version management would also be applied to translations and each translation should apply to a specific version of the add-on.&lt;br /&gt;
**** ''Another add-on version/'': It would contain the add-on binary files related to ''another version''.&lt;br /&gt;
&lt;br /&gt;
==== journal.log ====&lt;br /&gt;
&lt;br /&gt;
When some update is requested, the add-on server may update data in several different places. If a crash happens in the middle of the update, the data may corrupt. This database is not meant to support full [http://en.wikipedia.org/wiki/ACID ACID semantics], but it'll provide [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomicity] to prevent severe data loss, while a new backend is not developed.&lt;br /&gt;
&lt;br /&gt;
The main implementation technique is to use a journal file, storing when an operation starts and when it ends. Implement atomicity in this database is a requirement of this proposal, but the ''journal.log'' is optional and I might choose a different technique.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The server would listen on some different ports:&lt;br /&gt;
&lt;br /&gt;
* 15002: It would accept a subset of the protocol defined in [[CampaignServerWML]]. The objective is maintain backward compatibility with older Wesnoth clients. The commands '''not''' recognizable would be the ones related to uploading a campaign, changing the passphrase for a campaign, deleting a campaign and developer commands.&lt;br /&gt;
* 15003 (it's subject to change and can be any other): It would recognize the new protocol, as defined below.&lt;br /&gt;
* 15004 (it's subject to change and can be any other): The same as the previous one, but it would run atop of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/overview/ssl.html SSL].&lt;br /&gt;
&lt;br /&gt;
=== The ''new'' protocol ===&lt;br /&gt;
&lt;br /&gt;
The new protocol purpose is to address limitations faced in current protocol. For the new protocol, [[BinaryWML]] still will be used, to ease integration with Wesnoth client. The protocol is case-sensitive.&lt;br /&gt;
&lt;br /&gt;
* From now on, messages will use error codes (similar, but not equal, to HTTP and JSON-RPC). This behaviour is useful to build automated tools and to show customized (read translated) message errors to users. '''The message errors will still be WML-based.'''&lt;br /&gt;
* The new messages will use a top-level tag named umc (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]) and will have a version attribute. This attribute will extend the protocol in the future without break compatibility with older Wesnoth clients.&lt;br /&gt;
&lt;br /&gt;
==== Version ''0'' ====&lt;br /&gt;
&lt;br /&gt;
For version 0 (the one to be implemented during this GSoC), the following type of requests are supported:&lt;br /&gt;
&lt;br /&gt;
* Listing supported version: The server should return a list of supported versions and the client can use this info to adapt itself to the server's limits.&lt;br /&gt;
* Listing available add-ons: It would replace the current [[CampaignServerWML#Listing_Available_Campaigns]]. In this command, every tag would be a filter with a syntax similar to [http://docs.mongodb.org/manual/reference/operator/#comparison MongoDB declarative queries syntax]. In version 0, only the following filter types are supported:&lt;br /&gt;
** date&lt;br /&gt;
** language&lt;br /&gt;
** [[PblWML#title]]: This attribute should be used if someone wants to receive info about a single add-on.&lt;br /&gt;
** [[PblWML#author]]&lt;br /&gt;
** [[PblWML#description]]: This tag will have child tags to allow translatable descriptions.&lt;br /&gt;
** [[PblWML#type]]&lt;br /&gt;
* Downloading an add-on: It will be possible to download a specific version of an add-on and its related translations.&lt;br /&gt;
* Uploading an add-on: It will have an ''auth'' child tag. It will have an ''ownership'' tag, with the following child tags:&lt;br /&gt;
** ''Type'': It can be ''password'', ''user'' or ''group''. &lt;br /&gt;
** ''Password'': Only if ''type'' is ''password''. It should be the campaign password (just like it works now).&lt;br /&gt;
** ''Auth'': It must be present if ''type'' is different from ''password''. It shall contain two child tags:&lt;br /&gt;
*** ''User'': The user's nickname.&lt;br /&gt;
*** ''Pass'': The user's password.&lt;br /&gt;
** ''add-on'': The add-on itself, with the child ''metadata'' and ''data'' tags. The ''data'' tag would contain the add-on file. The ''metadata'' tag could contain any extra child tags and they wouldn't be discarded (this is the behaviour adopted by [https://www.oasis-open.org/committees/download.php/19275/ ODF] to increase the interoperability).&lt;br /&gt;
* Edit an add-on: It could be used to edit an add-on's metadata, ownership or delete the add-on (or a specific version of it).&lt;br /&gt;
* Request uploading terms&lt;br /&gt;
* Submit translation: It will allow submit a translation (the description field would also be translated)&lt;br /&gt;
&lt;br /&gt;
Some random notes about the new server/protocol:&lt;br /&gt;
&lt;br /&gt;
* Multiple authors per add-on are possible&lt;br /&gt;
* The &amp;quot;''listing available add-ons''&amp;quot; request would use the following tags differently:&lt;br /&gt;
** ''Dependencies'': The list of dependencies would include a version (allowing the operators &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=, ==).&lt;br /&gt;
** ''Icon'': This different tag would contain the following child tags:&lt;br /&gt;
*** ''Type'': It can be ''link'' or ''png''. Future protocol versions can define different types.&lt;br /&gt;
*** ''Data'': The icon data. It can be a path to an image in the standard image directory for Wesnoth or a base64 encoded small PNG icon.&lt;br /&gt;
* Error messages would use a format similar to the [http://www.jsonrpc.org/specification#error_object JSON-RPC 2.0 error object]. The error message/object would contain three child tags:&lt;br /&gt;
** ''Code'': An integer specifying a previous documented value&lt;br /&gt;
** ''Message'': An english human-readable string with a description of the error. Clients can use the error code to show their own messages, possibly translated to the user's main language.&lt;br /&gt;
** ''Data'' (optional): Custom data with further details about the specific error.&lt;br /&gt;
&lt;br /&gt;
==== SSL ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Secure_Socket_Layer SSL] is the standard protocol atop of sockets used to securely comunicate between two entities. It doesn't provide much advantage when you only intends to download an add-on, but it's very useful when you want to protect your password from eavesdroppers and alike.&lt;br /&gt;
&lt;br /&gt;
The Wesnoth client could add a configuration to choose ''secure connection'' and use unsecure connection by default (decreasing this overhead on the server).&lt;br /&gt;
&lt;br /&gt;
The add-on server would provide both (unencrypted and encrypted) connections. It'd listen to two ports to differentiate the connection type.&lt;br /&gt;
&lt;br /&gt;
[http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference.html Boost::asio] already provides support for SSL and add it in the add-on server would be easy.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Period !! Task !! Status !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Week -1 (May 12 to 18) || Install a Debian chroot in my system that mimics Wesnoth main server. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 0 (May 19 to 25) || Create a Wesnoth branch and start coding. Get used to Boost.asio. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 1-2 (May 26 till June 8) || Create the SimpleAddonManager, capable of execute the operations needed to manage add-ons. || Mandatory || The base to better meta-data and i18n support.&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (June 9 to 15) || Reimplement a subset of the current protocol in Boost.asio. || Optional ||&lt;br /&gt;
* This feature will depend on the event loop&lt;br /&gt;
* It'll delegate the '''read''' operations to the database&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June 16 to 22) || Start working on the authentication support. || Mandatory || The standalone login backend won't support access control groups&lt;br /&gt;
|-&lt;br /&gt;
| Week 5-7 (June 23 till July 13) || Implement the new protocol || Mandatory ||&lt;br /&gt;
* It'll delegate '''read''' and '''write''' operations to the database.&lt;br /&gt;
* It'll be integrated with the authentication support.&lt;br /&gt;
* Documentation should follow it progress.&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July 14 to 20) || Introduce threads and SSL. || Mandatory for threads and optional for SSL ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 9-11 (July 21 till August 10) || LDAP support || Mandatory || It may take less time, but I'm overestimating because I have little experience with LDAP (only as a sysadmin at [http://en.lccv.ufal.br/cluster/ LCCV] for a while)&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (August 11 to 17) || Do more tests, fix bugs and integrate the new branch into the Wesnoth main branch || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 13-16 (August 18 till September 14) || Integrate the new protocol in Wesnoth client. || Mandatory ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I overestimated all tasks, so I may finish some tasks a bit sooner and use this time to compensate the wrongly estimated tasks, but this made the timeline lose some precision.&lt;br /&gt;
&lt;br /&gt;
=== Threads in wiki 8 ===&lt;br /&gt;
&lt;br /&gt;
Usually it's advised to introduce threads in the initial '''design''' of the application if someone wants to support multithread design. A rule of dumb is to take a step further and make threads part of the initial '''code'''.&lt;br /&gt;
&lt;br /&gt;
In this proposal, I suggest to introduce threads only at week 8, but I already have experience with multi-threaded programs and I'd make the design ready to be extended right from the week 1. The reason why I want to introduce threads later is because I want to deliver something usable sooner and work incrementally till deliver the full product.&lt;br /&gt;
&lt;br /&gt;
I like to work incrementally, because you catch specifications errors sooner (users not usually know what they want till you deliver the product and they say &amp;quot;Hey! This is not what I asked for!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51093</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51093"/>
		<updated>2013-05-19T20:11:45Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* Event loop != boost::io_service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance and scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for exceptions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
You can see a '''draft''' (&amp;lt;u&amp;gt;remember&amp;lt;/u&amp;gt;: it's a draft and its purpose is to explain what strategies will be used to solve the problems faced; the future system will probably implement some things undocumented here) below:&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
The users would belong to some groups and the groups should be used to create an acess control. It should exist a group for the translation team with power to upload translations and it should exist a group for the admins (with unrestricted powers). The simple/self login backend wouldn't implement groups.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
=== The WML-based database ===&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend, the ''WML-based database backend''. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
This database would separate the add-on data from its meta-data. The meta-data would be saved in a child tag of the main add-on's config file. Extra meta-data will be stored there also.&lt;br /&gt;
&lt;br /&gt;
A migration script will be provided to convert the add-ons from the previous format to the new one.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed and cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
An extra meta-data example is the ''number of players''. Currently there is no field to describe the ''number of players'', but in the future developers may want to add this feature (and players could start using it ASAP).&lt;br /&gt;
&lt;br /&gt;
The support to extra meta-data influence the database and the network protocol. If you want info about how they solve the new problem, see the appropriate section.&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Currently, there is no integration between the Addon Server and the [[WesCamp]] translations. A [https://github.com/wesnoth/wesnoth-old/blob/master/data/tools/wesnoth/wescamp.py script] is run [http://wiki.wesnoth.org/Wescamp.py_Instructions by hand] every time the translations need to be updated.&lt;br /&gt;
&lt;br /&gt;
The translations are developed/maintained at [https://github.com/wescamp github] under multiple repositories of a single organization (but not all repositories are translations).&lt;br /&gt;
&lt;br /&gt;
It should be too difficult for the server to watch for the notifications and the requirement of the use of older tools/dependencies make this challenge still more difficult. To improve this scenario, the proposed addon server should host the translations itself.&lt;br /&gt;
&lt;br /&gt;
The translator should send the translation to the translation team and the translation team could use their users (with some administrative power) to upload the translation to the server through the Wesnoth client, with a system similar to the [[PblWML|.pbl files]].&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
Different versions of the same protocol may share a lot of actions in common. To avoid code duplication, the session component will use [http://en.wikipedia.org/wiki/Factory_method_pattern factories] to instantiate the necessary handlers for each protocol and each handler will delegate the handling of every specific action to other classes.&lt;br /&gt;
&lt;br /&gt;
Namespaces will be used to group classes related to protocols/versions.&lt;br /&gt;
&lt;br /&gt;
=== Event loop != boost::io_service  ===&lt;br /&gt;
&lt;br /&gt;
The boost::io_service object has [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/run.html an option] to act as an event loop, but this option may be suboptiomal when we want to schedule our own actions. Suppose we need to acquire some mutex, then we can't use ''[http://www.boost.org/doc/libs/1_42_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.lockable.try_lock try_lock]'' because we can't schedule our own actions if it's not I/O related. So, I'd implement my own event loop class, allowing anyone to register its own actions and [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/poll.html integrate it with io_service].&lt;br /&gt;
&lt;br /&gt;
To avoid locking a thread for more time than necessary, the EventLoop class would allow to register a delayed action in some queue. The actions that require lock would use try_lock (in conjunction with lock guard, to maintain the RAII idiom) in combination with delayed actions to block the current event loop as little as possible.&lt;br /&gt;
&lt;br /&gt;
[http://thread.gmane.org/gmane.comp.lib.boost.asio.user/1300 Use one boost::io_service per thread] decreases the contention when locking the io_service internal mutex for queuing and dequeuing&lt;br /&gt;
requests and is preferred for maximum scalability.&lt;br /&gt;
&lt;br /&gt;
=== Config files ===&lt;br /&gt;
&lt;br /&gt;
The configuration file syntax would be a WML file with the following elements:&lt;br /&gt;
&lt;br /&gt;
* ''umcd'' (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]): Top-level element&lt;br /&gt;
** old: The tag containing config related to the old (the current one) server&lt;br /&gt;
*** Port: Which port would run&lt;br /&gt;
** threads: The number of threads to use. Put 0 or don't put anything to let the server auto-detect through [http://www.boost.org/doc/libs/1_42_0/doc/html/thread/thread_management.html#thread.thread_management.thread.hardware_concurrency boost]&lt;br /&gt;
** database: It may contain several child tags to configure what database to use. The database data and configuration are kept in separate.&lt;br /&gt;
*** If simple (the SimpleAddonManager) is chosen, you'd have the option to choose the directory data. The SimpleAddonManager (WML-based database), like the config file, store its metadata in WML.&lt;br /&gt;
** Port: Which port it would use&lt;br /&gt;
** SSL: Settings related to SSL (key file, key file password, server port, ...)&lt;br /&gt;
&lt;br /&gt;
=== SimpleAddonManager ''(WML-based database)'' Filesystem layout ===&lt;br /&gt;
&lt;br /&gt;
The SimpleAddonManager would save the add-ons using the following schema:&lt;br /&gt;
&lt;br /&gt;
* ''/'': Top-level add-ons directory:&lt;br /&gt;
** ''add-ons.cfg''&lt;br /&gt;
** ''journal.log'': It will provide basic guarantees to avoid severe data loss (see below).&lt;br /&gt;
** ''Add-ons/''&lt;br /&gt;
*** ''Add-on name/''&lt;br /&gt;
**** ''metadata.cfg''&lt;br /&gt;
**** ''Add-on version/'': It would contain the add-on binary files related to ''version''.&lt;br /&gt;
***** ''i18n/'' (the name can be changed): It would contain the translation files. The version management would also be applied to translations and each translation should apply to a specific version of the add-on.&lt;br /&gt;
**** ''Another add-on version/'': It would contain the add-on binary files related to ''another version''.&lt;br /&gt;
&lt;br /&gt;
==== journal.log ====&lt;br /&gt;
&lt;br /&gt;
When some update is requested, the add-on server may update data in several different places. If a crash happens in the middle of the update, the data may corrupt. This database is not meant to support full [http://en.wikipedia.org/wiki/ACID ACID semantics], but it'll provide [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomicity] to prevent severe data loss, while a new backend is not developed.&lt;br /&gt;
&lt;br /&gt;
The main implementation technique is to use a journal file, storing when an operation starts and when it ends. Implement atomicity in this database is a requirement of this proposal, but the ''journal.log'' is optional and I might choose a different technique.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The server would listen on some different ports:&lt;br /&gt;
&lt;br /&gt;
* 15002: It would accept a subset of the protocol defined in [[CampaignServerWML]]. The objective is maintain backward compatibility with older Wesnoth clients. The commands '''not''' recognizable would be the ones related to uploading a campaign, changing the passphrase for a campaign, deleting a campaign and developer commands.&lt;br /&gt;
* 15003 (it's subject to change and can be any other): It would recognize the new protocol, as defined below.&lt;br /&gt;
* 15004 (it's subject to change and can be any other): The same as the previous one, but it would run atop of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/overview/ssl.html SSL].&lt;br /&gt;
&lt;br /&gt;
=== The ''new'' protocol ===&lt;br /&gt;
&lt;br /&gt;
The new protocol purpose is to address limitations faced in current protocol. For the new protocol, [[BinaryWML]] still will be used, to ease integration with Wesnoth client. The protocol is case-sensitive.&lt;br /&gt;
&lt;br /&gt;
* From now on, messages will use error codes (similar, but not equal, to HTTP and JSON-RPC). This behaviour is useful to build automated tools and to show customized (read translated) message errors to users. '''The message errors will still be WML-based.'''&lt;br /&gt;
* The new messages will use a top-level tag named umc (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]) and will have a version attribute. This attribute will extend the protocol in the future without break compatibility with older Wesnoth clients.&lt;br /&gt;
&lt;br /&gt;
==== Version ''0'' ====&lt;br /&gt;
&lt;br /&gt;
For version 0 (the one to be implemented during this GSoC), the following type of requests are supported:&lt;br /&gt;
&lt;br /&gt;
* Listing supported version: The server should return a list of supported versions and the client can use this info to adapt itself to the server's limits.&lt;br /&gt;
* Listing available add-ons: It would replace the current [[CampaignServerWML#Listing_Available_Campaigns]]. In this command, every tag would be a filter with a syntax similar to [http://docs.mongodb.org/manual/reference/operator/#comparison MongoDB declarative queries syntax]. In version 0, only the following filter types are supported:&lt;br /&gt;
** date&lt;br /&gt;
** language&lt;br /&gt;
** [[PblWML#title]]: This attribute should be used if someone wants to receive info about a single add-on.&lt;br /&gt;
** [[PblWML#author]]&lt;br /&gt;
** [[PblWML#description]]: This tag will have child tags to allow translatable descriptions.&lt;br /&gt;
** [[PblWML#type]]&lt;br /&gt;
* Downloading an add-on: It will be possible to download a specific version of an add-on and its related translations.&lt;br /&gt;
* Uploading an add-on: It will have an ''auth'' child tag. It will have an ''ownership'' tag, with the following child tags:&lt;br /&gt;
** ''Type'': It can be ''password'', ''user'' or ''group''. &lt;br /&gt;
** ''Password'': Only if ''type'' is ''password''. It should be the campaign password (just like it works now).&lt;br /&gt;
** ''Auth'': It must be present if ''type'' is different from ''password''. It shall contain two child tags:&lt;br /&gt;
*** ''User'': The user's nickname.&lt;br /&gt;
*** ''Pass'': The user's password.&lt;br /&gt;
** ''add-on'': The add-on itself, with the child ''metadata'' and ''data'' tags. The ''data'' tag would contain the add-on file. The ''metadata'' tag could contain any extra child tags and they wouldn't be discarded (this is the behaviour adopted by [https://www.oasis-open.org/committees/download.php/19275/ ODF] to increase the interoperability).&lt;br /&gt;
* Edit an add-on: It could be used to edit an add-on's metadata, ownership or delete the add-on (or a specific version of it).&lt;br /&gt;
* Request uploading terms&lt;br /&gt;
* Submit translation: It will allow submit a translation (the description field would also be translated)&lt;br /&gt;
&lt;br /&gt;
Some random notes about the new server/protocol:&lt;br /&gt;
&lt;br /&gt;
* Multiple authors per add-on are possible&lt;br /&gt;
* The &amp;quot;''listing available add-ons''&amp;quot; request would use the following tags differently:&lt;br /&gt;
** ''Dependencies'': The list of dependencies would include a version (allowing the operators &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=, ==).&lt;br /&gt;
** ''Icon'': This different tag would contain the following child tags:&lt;br /&gt;
*** ''Type'': It can be ''link'' or ''png''. Future protocol versions can define different types.&lt;br /&gt;
*** ''Data'': The icon data. It can be a path to an image in the standard image directory for Wesnoth or a base64 encoded small PNG icon.&lt;br /&gt;
* Error messages would use a format similar to the [http://www.jsonrpc.org/specification#error_object JSON-RPC 2.0 error object]. The error message/object would contain three child tags:&lt;br /&gt;
** ''Code'': An integer specifying a previous documented value&lt;br /&gt;
** ''Message'': An english human-readable string with a description of the error. Clients can use the error code to show their own messages, possibly translated to the user's main language.&lt;br /&gt;
** ''Data'' (optional): Custom data with further details about the specific error.&lt;br /&gt;
&lt;br /&gt;
==== SSL ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Secure_Socket_Layer SSL] is the standard protocol atop of sockets used to securely comunicate between two entities. It doesn't provide much advantage when you only intends to download an add-on, but it's very useful when you want to protect your password from eavesdroppers and alike.&lt;br /&gt;
&lt;br /&gt;
The Wesnoth client could add a configuration to choose ''secure connection'' and use unsecure connection by default (decreasing this overhead on the server).&lt;br /&gt;
&lt;br /&gt;
The add-on server would provide both (unencrypted and encrypted) connections. It'd listen to two ports to differentiate the connection type.&lt;br /&gt;
&lt;br /&gt;
[http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference.html Boost::asio] already provides support for SSL and add it in the add-on server would be easy.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Period !! Task !! Status !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Week -1 (May 12 to 18) || Install a Debian chroot in my system that mimics Wesnoth main server. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 0 (May 19 to 25) || Create a Wesnoth branch and start coding. Get used to Boost.asio. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 1-2 (May 26 till June 8) || Create the SimpleAddonManager, capable of execute the operations needed to manage add-ons. || Mandatory || The base to better meta-data and i18n support.&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (June 9 to 15) || Reimplement a subset of the current protocol in Boost.asio. || Optional ||&lt;br /&gt;
* This feature will depends on the event loop&lt;br /&gt;
* It'll delegate the '''read''' operations to the database&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June 16 to 22) || Start working on the authentication support. || Mandatory || The standalone login backend won't support access control groups&lt;br /&gt;
|-&lt;br /&gt;
| Week 5-7 (June 23 till July 13) || Implement the new protocol || Mandatory ||&lt;br /&gt;
* It'll delegate '''read''' and '''write''' operations to the database.&lt;br /&gt;
* It'll be integrated with the authentication support.&lt;br /&gt;
* Documentation should follow it progress.&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July 14 to 20) || Introduce threads and SSL. || Mandatory for threads and optional for SSL ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 9-11 (July 21 till August 10) || LDAP support || Mandatory || It may take less time, but I'm overestimating because I have little experience with LDAP (only as a sysadmin at [http://en.lccv.ufal.br/cluster/ LCCV] for a while)&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (August 11 to 17) || Do more tests, fix bugs and integrate the new branch into the Wesnoth main branch || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 13-16 (August 18 till September 14) || Integrate the new protocol in Wesnoth client. || Mandatory ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I overestimated all tasks, so I may finish some tasks a bit sooner and use this time to compensate the wrongly estimated tasks, but this made the timeline lose some precision.&lt;br /&gt;
&lt;br /&gt;
=== Threads in wiki 8 ===&lt;br /&gt;
&lt;br /&gt;
Usually it's advised to introduce threads in the initial '''design''' of the application if someone wants to support multithread design. A rule of dumb is to take a step further and make threads part of the initial '''code'''.&lt;br /&gt;
&lt;br /&gt;
In this proposal, I suggest to introduce threads only at week 8, but I already have experience with multi-threaded programs and I'd make the design ready to be extended right from the week 1. The reason why I want to introduce threads later is because I want to deliver something usable sooner and work incrementally till deliver the full product.&lt;br /&gt;
&lt;br /&gt;
I like to work incrementally, because you catch specifications errors sooner (users not usually know what they want till you deliver the product and they say &amp;quot;Hey! This is not what I asked for!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51092</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51092"/>
		<updated>2013-05-19T20:03:55Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance and scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for exceptions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
You can see a '''draft''' (&amp;lt;u&amp;gt;remember&amp;lt;/u&amp;gt;: it's a draft and its purpose is to explain what strategies will be used to solve the problems faced; the future system will probably implement some things undocumented here) below:&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
The users would belong to some groups and the groups should be used to create an acess control. It should exist a group for the translation team with power to upload translations and it should exist a group for the admins (with unrestricted powers). The simple/self login backend wouldn't implement groups.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
=== The WML-based database ===&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend, the ''WML-based database backend''. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
This database would separate the add-on data from its meta-data. The meta-data would be saved in a child tag of the main add-on's config file. Extra meta-data will be stored there also.&lt;br /&gt;
&lt;br /&gt;
A migration script will be provided to convert the add-ons from the previous format to the new one.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed and cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
An extra meta-data example is the ''number of players''. Currently there is no field to describe the ''number of players'', but in the future developers may want to add this feature (and players could start using it ASAP).&lt;br /&gt;
&lt;br /&gt;
The support to extra meta-data influence the database and the network protocol. If you want info about how they solve the new problem, see the appropriate section.&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Currently, there is no integration between the Addon Server and the [[WesCamp]] translations. A [https://github.com/wesnoth/wesnoth-old/blob/master/data/tools/wesnoth/wescamp.py script] is run [http://wiki.wesnoth.org/Wescamp.py_Instructions by hand] every time the translations need to be updated.&lt;br /&gt;
&lt;br /&gt;
The translations are developed/maintained at [https://github.com/wescamp github] under multiple repositories of a single organization (but not all repositories are translations).&lt;br /&gt;
&lt;br /&gt;
It should be too difficult for the server to watch for the notifications and the requirement of the use of older tools/dependencies make this challenge still more difficult. To improve this scenario, the proposed addon server should host the translations itself.&lt;br /&gt;
&lt;br /&gt;
The translator should send the translation to the translation team and the translation team could use their users (with some administrative power) to upload the translation to the server through the Wesnoth client, with a system similar to the [[PblWML|.pbl files]].&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
Different versions of the same protocol may share a lot of actions in common. To avoid code duplication, the session component will use [http://en.wikipedia.org/wiki/Factory_method_pattern factories] to instantiate the necessary handlers for each protocol and each handler will delegate the handling of every specific action to other classes.&lt;br /&gt;
&lt;br /&gt;
Namespaces will be used to group classes related to protocols/versions.&lt;br /&gt;
&lt;br /&gt;
=== Event loop != boost::io_service  ===&lt;br /&gt;
&lt;br /&gt;
The boost::io_service object has [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/run.html an option] to act as an event loop, but this option may be suboptiomal when we want to schedule our own actions. So, I'd implement my own event loop class, allowing anyone to register its own actions and [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/poll.html integrate it with io_service].&lt;br /&gt;
&lt;br /&gt;
To avoid locking a thread for more time than necessary, the EventLoop class would allow to register a delayed action in some queue. The actions that require lock would use try_lock (in conjunction with lock guard, to maintain the RAII idiom) in combination with delayed actions to block the current event loop as little as possible.&lt;br /&gt;
&lt;br /&gt;
[http://thread.gmane.org/gmane.comp.lib.boost.asio.user/1300 Use one boost::io_service per thread] decreases the contention when locking the io_service internal mutex for queuing and dequeuing&lt;br /&gt;
requests and is preferred for maximum scalability.&lt;br /&gt;
&lt;br /&gt;
=== Config files ===&lt;br /&gt;
&lt;br /&gt;
The configuration file syntax would be a WML file with the following elements:&lt;br /&gt;
&lt;br /&gt;
* ''umcd'' (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]): Top-level element&lt;br /&gt;
** old: The tag containing config related to the old (the current one) server&lt;br /&gt;
*** Port: Which port would run&lt;br /&gt;
** threads: The number of threads to use. Put 0 or don't put anything to let the server auto-detect through [http://www.boost.org/doc/libs/1_42_0/doc/html/thread/thread_management.html#thread.thread_management.thread.hardware_concurrency boost]&lt;br /&gt;
** database: It may contain several child tags to configure what database to use. The database data and configuration are kept in separate.&lt;br /&gt;
*** If simple (the SimpleAddonManager) is chosen, you'd have the option to choose the directory data. The SimpleAddonManager (WML-based database), like the config file, store its metadata in WML.&lt;br /&gt;
** Port: Which port it would use&lt;br /&gt;
** SSL: Settings related to SSL (key file, key file password, server port, ...)&lt;br /&gt;
&lt;br /&gt;
=== SimpleAddonManager ''(WML-based database)'' Filesystem layout ===&lt;br /&gt;
&lt;br /&gt;
The SimpleAddonManager would save the add-ons using the following schema:&lt;br /&gt;
&lt;br /&gt;
* ''/'': Top-level add-ons directory:&lt;br /&gt;
** ''add-ons.cfg''&lt;br /&gt;
** ''journal.log'': It will provide basic guarantees to avoid severe data loss (see below).&lt;br /&gt;
** ''Add-ons/''&lt;br /&gt;
*** ''Add-on name/''&lt;br /&gt;
**** ''metadata.cfg''&lt;br /&gt;
**** ''Add-on version/'': It would contain the add-on binary files related to ''version''.&lt;br /&gt;
***** ''i18n/'' (the name can be changed): It would contain the translation files. The version management would also be applied to translations and each translation should apply to a specific version of the add-on.&lt;br /&gt;
**** ''Another add-on version/'': It would contain the add-on binary files related to ''another version''.&lt;br /&gt;
&lt;br /&gt;
==== journal.log ====&lt;br /&gt;
&lt;br /&gt;
When some update is requested, the add-on server may update data in several different places. If a crash happens in the middle of the update, the data may corrupt. This database is not meant to support full [http://en.wikipedia.org/wiki/ACID ACID semantics], but it'll provide [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomicity] to prevent severe data loss, while a new backend is not developed.&lt;br /&gt;
&lt;br /&gt;
The main implementation technique is to use a journal file, storing when an operation starts and when it ends. Implement atomicity in this database is a requirement of this proposal, but the ''journal.log'' is optional and I might choose a different technique.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The server would listen on some different ports:&lt;br /&gt;
&lt;br /&gt;
* 15002: It would accept a subset of the protocol defined in [[CampaignServerWML]]. The objective is maintain backward compatibility with older Wesnoth clients. The commands '''not''' recognizable would be the ones related to uploading a campaign, changing the passphrase for a campaign, deleting a campaign and developer commands.&lt;br /&gt;
* 15003 (it's subject to change and can be any other): It would recognize the new protocol, as defined below.&lt;br /&gt;
* 15004 (it's subject to change and can be any other): The same as the previous one, but it would run atop of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/overview/ssl.html SSL].&lt;br /&gt;
&lt;br /&gt;
=== The ''new'' protocol ===&lt;br /&gt;
&lt;br /&gt;
The new protocol purpose is to address limitations faced in current protocol. For the new protocol, [[BinaryWML]] still will be used, to ease integration with Wesnoth client. The protocol is case-sensitive.&lt;br /&gt;
&lt;br /&gt;
* From now on, messages will use error codes (similar, but not equal, to HTTP and JSON-RPC). This behaviour is useful to build automated tools and to show customized (read translated) message errors to users. '''The message errors will still be WML-based.'''&lt;br /&gt;
* The new messages will use a top-level tag named umc (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]) and will have a version attribute. This attribute will extend the protocol in the future without break compatibility with older Wesnoth clients.&lt;br /&gt;
&lt;br /&gt;
==== Version ''0'' ====&lt;br /&gt;
&lt;br /&gt;
For version 0 (the one to be implemented during this GSoC), the following type of requests are supported:&lt;br /&gt;
&lt;br /&gt;
* Listing supported version: The server should return a list of supported versions and the client can use this info to adapt itself to the server's limits.&lt;br /&gt;
* Listing available add-ons: It would replace the current [[CampaignServerWML#Listing_Available_Campaigns]]. In this command, every tag would be a filter with a syntax similar to [http://docs.mongodb.org/manual/reference/operator/#comparison MongoDB declarative queries syntax]. In version 0, only the following filter types are supported:&lt;br /&gt;
** date&lt;br /&gt;
** language&lt;br /&gt;
** [[PblWML#title]]: This attribute should be used if someone wants to receive info about a single add-on.&lt;br /&gt;
** [[PblWML#author]]&lt;br /&gt;
** [[PblWML#description]]: This tag will have child tags to allow translatable descriptions.&lt;br /&gt;
** [[PblWML#type]]&lt;br /&gt;
* Downloading an add-on: It will be possible to download a specific version of an add-on and its related translations.&lt;br /&gt;
* Uploading an add-on: It will have an ''auth'' child tag. It will have an ''ownership'' tag, with the following child tags:&lt;br /&gt;
** ''Type'': It can be ''password'', ''user'' or ''group''. &lt;br /&gt;
** ''Password'': Only if ''type'' is ''password''. It should be the campaign password (just like it works now).&lt;br /&gt;
** ''Auth'': It must be present if ''type'' is different from ''password''. It shall contain two child tags:&lt;br /&gt;
*** ''User'': The user's nickname.&lt;br /&gt;
*** ''Pass'': The user's password.&lt;br /&gt;
** ''add-on'': The add-on itself, with the child ''metadata'' and ''data'' tags. The ''data'' tag would contain the add-on file. The ''metadata'' tag could contain any extra child tags and they wouldn't be discarded (this is the behaviour adopted by [https://www.oasis-open.org/committees/download.php/19275/ ODF] to increase the interoperability).&lt;br /&gt;
* Edit an add-on: It could be used to edit an add-on's metadata, ownership or delete the add-on (or a specific version of it).&lt;br /&gt;
* Request uploading terms&lt;br /&gt;
* Submit translation: It will allow submit a translation (the description field would also be translated)&lt;br /&gt;
&lt;br /&gt;
Some random notes about the new server/protocol:&lt;br /&gt;
&lt;br /&gt;
* Multiple authors per add-on are possible&lt;br /&gt;
* The &amp;quot;''listing available add-ons''&amp;quot; request would use the following tags differently:&lt;br /&gt;
** ''Dependencies'': The list of dependencies would include a version (allowing the operators &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=, ==).&lt;br /&gt;
** ''Icon'': This different tag would contain the following child tags:&lt;br /&gt;
*** ''Type'': It can be ''link'' or ''png''. Future protocol versions can define different types.&lt;br /&gt;
*** ''Data'': The icon data. It can be a path to an image in the standard image directory for Wesnoth or a base64 encoded small PNG icon.&lt;br /&gt;
* Error messages would use a format similar to the [http://www.jsonrpc.org/specification#error_object JSON-RPC 2.0 error object]. The error message/object would contain three child tags:&lt;br /&gt;
** ''Code'': An integer specifying a previous documented value&lt;br /&gt;
** ''Message'': An english human-readable string with a description of the error. Clients can use the error code to show their own messages, possibly translated to the user's main language.&lt;br /&gt;
** ''Data'' (optional): Custom data with further details about the specific error.&lt;br /&gt;
&lt;br /&gt;
==== SSL ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Secure_Socket_Layer SSL] is the standard protocol atop of sockets used to securely comunicate between two entities. It doesn't provide much advantage when you only intends to download an add-on, but it's very useful when you want to protect your password from eavesdroppers and alike.&lt;br /&gt;
&lt;br /&gt;
The Wesnoth client could add a configuration to choose ''secure connection'' and use unsecure connection by default (decreasing this overhead on the server).&lt;br /&gt;
&lt;br /&gt;
The add-on server would provide both (unencrypted and encrypted) connections. It'd listen to two ports to differentiate the connection type.&lt;br /&gt;
&lt;br /&gt;
[http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference.html Boost::asio] already provides support for SSL and add it in the add-on server would be easy.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Period !! Task !! Status !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Week -1 (May 12 to 18) || Install a Debian chroot in my system that mimics Wesnoth main server. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 0 (May 19 to 25) || Create a Wesnoth branch and start coding. Get used to Boost.asio. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 1-2 (May 26 till June 8) || Create the SimpleAddonManager, capable of execute the operations needed to manage add-ons. || Mandatory || The base to better meta-data and i18n support.&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (June 9 to 15) || Reimplement a subset of the current protocol in Boost.asio. || Optional ||&lt;br /&gt;
* This feature will depends on the event loop&lt;br /&gt;
* It'll delegate the '''read''' operations to the database&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June 16 to 22) || Start working on the authentication support. || Mandatory || The standalone login backend won't support access control groups&lt;br /&gt;
|-&lt;br /&gt;
| Week 5-7 (June 23 till July 13) || Implement the new protocol || Mandatory ||&lt;br /&gt;
* It'll delegate '''read''' and '''write''' operations to the database.&lt;br /&gt;
* It'll be integrated with the authentication support.&lt;br /&gt;
* Documentation should follow it progress.&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July 14 to 20) || Introduce threads and SSL. || Mandatory for threads and optional for SSL ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 9-11 (July 21 till August 10) || LDAP support || Mandatory || It may take less time, but I'm overestimating because I have little experience with LDAP (only as a sysadmin at [http://en.lccv.ufal.br/cluster/ LCCV] for a while)&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (August 11 to 17) || Do more tests, fix bugs and integrate the new branch into the Wesnoth main branch || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 13-16 (August 18 till September 14) || Integrate the new protocol in Wesnoth client. || Mandatory ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I overestimated all tasks, so I may finish some tasks a bit sooner and use this time to compensate the wrongly estimated tasks, but this made the timeline lose some precision.&lt;br /&gt;
&lt;br /&gt;
=== Threads in wiki 8 ===&lt;br /&gt;
&lt;br /&gt;
Usually it's advised to introduce threads in the initial '''design''' of the application if someone wants to support multithread design. A rule of dumb is to take a step further and make threads part of the initial '''code'''.&lt;br /&gt;
&lt;br /&gt;
In this proposal, I suggest to introduce threads only at week 8, but I already have experience with multi-threaded programs and I'd make the design ready to be extended right from the week 1. The reason why I want to introduce threads later is because I want to deliver something usable sooner and work incrementally till deliver the full product.&lt;br /&gt;
&lt;br /&gt;
I like to work incrementally, because you catch specifications errors sooner (users not usually know what they want till you deliver the product and they say &amp;quot;Hey! This is not what I asked for!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51091</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51091"/>
		<updated>2013-05-19T19:02:25Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: timeline: convert from list to table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance and scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for exceptions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
You can see a '''draft''' (&amp;lt;u&amp;gt;remember&amp;lt;/u&amp;gt;: it's a draft and its purpose is to explain what strategies will be used to solve the problems faced; the future system will probably implement some things undocumented here) below:&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
The users would belong to some groups and the groups should be used to create an acess control. It should exist a group for the translation team with power to upload translations and it should exist a group for the admins (with unrestricted powers). The simple/self login backend wouldn't implement groups.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
=== The WML-based database ===&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend, the ''WML-based database backend''. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
This database would separate the add-on data from its meta-data. The meta-data would be saved in a child tag of the main add-on's config file. Extra meta-data will be stored there also.&lt;br /&gt;
&lt;br /&gt;
A migration script will be provided to convert the add-ons from the previous format to the new one.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed and cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
An extra meta-data example is the ''number of players''. Currently there is no field to describe the ''number of players'', but in the future developers may want to add this feature (and players could start using it ASAP).&lt;br /&gt;
&lt;br /&gt;
The support to extra meta-data influence the database and the network protocol. If you want info about how they solve the new problem, see the appropriate section.&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Currently, there is no integration between the Addon Server and the [[WesCamp]] translations. A [https://github.com/wesnoth/wesnoth-old/blob/master/data/tools/wesnoth/wescamp.py script] is run [http://wiki.wesnoth.org/Wescamp.py_Instructions by hand] every time the translations need to be updated.&lt;br /&gt;
&lt;br /&gt;
The translations are developed/maintained at [https://github.com/wescamp github] under multiple repositories of a single organization (but not all repositories are translations).&lt;br /&gt;
&lt;br /&gt;
It should be too difficult for the server to watch for the notifications and the requirement of the use of older tools/dependencies make this challenge still more difficult. To improve this scenario, the proposed addon server should host the translations itself.&lt;br /&gt;
&lt;br /&gt;
The translator should send the translation to the translation team and the translation team could use their users (with some administrative power) to upload the translation to the server through the Wesnoth client, with a system similar to the [[PblWML|.pbl files]].&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
Different versions of the same protocol may share a lot of actions in common. To avoid code duplication, the session component will use [http://en.wikipedia.org/wiki/Factory_method_pattern factories] to instantiate the necessary handlers for each protocol and each handler will delegate the handling of every specific action to other classes.&lt;br /&gt;
&lt;br /&gt;
Namespaces will be used to group classes related to protocols/versions.&lt;br /&gt;
&lt;br /&gt;
=== Event loop != boost::io_service  ===&lt;br /&gt;
&lt;br /&gt;
The boost::io_service object has [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/run.html an option] to act as an event loop, but this option may be suboptiomal when we want to schedule our own actions. So, I'd implement my own event loop class, allowing anyone to register its own actions and [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/poll.html integrate it with io_service].&lt;br /&gt;
&lt;br /&gt;
To avoid locking a thread for more time than necessary, the EventLoop class would allow to register a delayed action in some queue. The actions that require lock would use try_lock (in conjunction with lock guard, to maintain the RAII idiom) in combination with delayed actions to block the current event loop as little as possible.&lt;br /&gt;
&lt;br /&gt;
[http://thread.gmane.org/gmane.comp.lib.boost.asio.user/1300 Use one boost::io_service per thread] decreases the contention when locking the io_service internal mutex for queuing and dequeuing&lt;br /&gt;
requests and is preferred for maximum scalability.&lt;br /&gt;
&lt;br /&gt;
=== Config files ===&lt;br /&gt;
&lt;br /&gt;
The configuration file syntax would be a WML file with the following elements:&lt;br /&gt;
&lt;br /&gt;
* ''umcd'' (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]): Top-level element&lt;br /&gt;
** old: The tag containing config related to the old (the current one) server&lt;br /&gt;
*** Port: Which port would run&lt;br /&gt;
** threads: The number of threads to use. Put 0 or don't put anything to let the server auto-detect through [http://www.boost.org/doc/libs/1_42_0/doc/html/thread/thread_management.html#thread.thread_management.thread.hardware_concurrency boost]&lt;br /&gt;
** database: It may contain several child tags to configure what database to use. The database data and configuration are kept in separate.&lt;br /&gt;
*** If simple (the SimpleAddonManager) is chosen, you'd have the option to choose the directory data. The SimpleAddonManager (WML-based database), like the config file, store its metadata in WML.&lt;br /&gt;
** Port: Which port it would use&lt;br /&gt;
** SSL: Settings related to SSL (key file, key file password, server port, ...)&lt;br /&gt;
&lt;br /&gt;
=== SimpleAddonManager ''(WML-based database)'' Filesystem layout ===&lt;br /&gt;
&lt;br /&gt;
The SimpleAddonManager would save the add-ons using the following schema:&lt;br /&gt;
&lt;br /&gt;
* ''/'': Top-level add-ons directory:&lt;br /&gt;
** ''add-ons.cfg''&lt;br /&gt;
** ''journal.log'': It will provide basic guarantees to avoid severe data loss (see below).&lt;br /&gt;
** ''Add-ons/''&lt;br /&gt;
*** ''Add-on name/''&lt;br /&gt;
**** ''metadata.cfg''&lt;br /&gt;
**** ''Add-on version/'': It would contain the add-on binary files related to ''version''.&lt;br /&gt;
***** ''i18n/'' (the name can be changed): It would contain the translation files. The version management would also be applied to translations and each translation should apply to a specific version of the add-on.&lt;br /&gt;
**** ''Another add-on version/'': It would contain the add-on binary files related to ''another version''.&lt;br /&gt;
&lt;br /&gt;
==== journal.log ====&lt;br /&gt;
&lt;br /&gt;
When some update is requested, the add-on server may update data in several different places. If a crash happens in the middle of the update, the data may corrupt. This database is not meant to support full [http://en.wikipedia.org/wiki/ACID ACID semantics], but it'll provide [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomicity] to prevent severe data loss, while a new backend is not developed.&lt;br /&gt;
&lt;br /&gt;
The main implementation technique is to use a journal file, storing when an operation starts and when it ends. Implement atomicity in this database is a requirement of this proposal, but the ''journal.log'' is optional and I might choose a different technique.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The server would listen on some different ports:&lt;br /&gt;
&lt;br /&gt;
* 15002: It would accept a subset of the protocol defined in [[CampaignServerWML]]. The objective is maintain backward compatibility with older Wesnoth clients. The commands '''not''' recognizable would be the ones related to uploading a campaign, changing the passphrase for a campaign, deleting a campaign and developer commands.&lt;br /&gt;
* 15003 (it's subject to change and can be any other): It would recognize the new protocol, as defined below.&lt;br /&gt;
* 15004 (it's subject to change and can be any other): The same as the previous one, but it would run atop of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/overview/ssl.html SSL].&lt;br /&gt;
&lt;br /&gt;
=== The ''new'' protocol ===&lt;br /&gt;
&lt;br /&gt;
The new protocol purpose is to address limitations faced in current protocol. For the new protocol, [[BinaryWML]] still will be used, to ease integration with Wesnoth client. The protocol is case-sensitive.&lt;br /&gt;
&lt;br /&gt;
* From now on, messages will use error codes (similar, but not equal, to HTTP and JSON-RPC). This behaviour is useful to build automated tools and to show customized (read translated) message errors to users. '''The message errors will still be WML-based.'''&lt;br /&gt;
* The new messages will use a top-level tag named umc (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]) and will have a version attribute. This attribute will extend the protocol in the future without break compatibility with older Wesnoth clients.&lt;br /&gt;
&lt;br /&gt;
==== Version ''0'' ====&lt;br /&gt;
&lt;br /&gt;
For version 0 (the one to be implemented during this GSoC), the following type of requests are supported:&lt;br /&gt;
&lt;br /&gt;
* Listing supported version: The server should return a list of supported versions and the client can use this info to adapt itself to the server's limits.&lt;br /&gt;
* Listing available add-ons: It would replace the current [[CampaignServerWML#Listing_Available_Campaigns]]. In this command, every tag would be a filter with a syntax similar to [http://docs.mongodb.org/manual/reference/operator/#comparison MongoDB declarative queries syntax]. In version 0, only the following filter types are supported:&lt;br /&gt;
** date&lt;br /&gt;
** language&lt;br /&gt;
** [[PblWML#title]]: This attribute should be used if someone wants to receive info about a single add-on.&lt;br /&gt;
** [[PblWML#author]]&lt;br /&gt;
** [[PblWML#description]]: This tag will have child tags to allow translatable descriptions.&lt;br /&gt;
** [[PblWML#type]]&lt;br /&gt;
* Downloading an add-on: It will be possible to download a specific version of an add-on and its related translations.&lt;br /&gt;
* Uploading an add-on: It will have an ''auth'' child tag. It will have an ''ownership'' tag, with the following child tags:&lt;br /&gt;
** ''Type'': It can be ''password'', ''user'' or ''group''. &lt;br /&gt;
** ''Password'': Only if ''type'' is ''password''. It should be the campaign password (just like it works now).&lt;br /&gt;
** ''Auth'': It must be present if ''type'' is different from ''password''. It shall contain two child tags:&lt;br /&gt;
*** ''User'': The user's nickname.&lt;br /&gt;
*** ''Pass'': The user's password.&lt;br /&gt;
** ''add-on'': The add-on itself, with the child ''metadata'' and ''data'' tags. The ''data'' tag would contain the add-on file. The ''metadata'' tag could contain any extra child tags and they wouldn't be discarded (this is the behaviour adopted by [https://www.oasis-open.org/committees/download.php/19275/ ODF] to increase the interoperability).&lt;br /&gt;
* Edit an add-on: It could be used to edit an add-on's metadata, ownership or delete the add-on (or a specific version of it).&lt;br /&gt;
* Request uploading terms&lt;br /&gt;
* Submit translation: It will allow submit a translation (the description field would also be translated)&lt;br /&gt;
&lt;br /&gt;
Some random notes about the new server/protocol:&lt;br /&gt;
&lt;br /&gt;
* Multiple authors per add-on are possible&lt;br /&gt;
* The &amp;quot;''listing available add-ons''&amp;quot; request would use the following tags differently:&lt;br /&gt;
** ''Dependencies'': The list of dependencies would include a version (allowing the operators &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=, ==).&lt;br /&gt;
** ''Icon'': This different tag would contain the following child tags:&lt;br /&gt;
*** ''Type'': It can be ''link'' or ''png''. Future protocol versions can define different types.&lt;br /&gt;
*** ''Data'': The icon data. It can be a path to an image in the standard image directory for Wesnoth or a base64 encoded small PNG icon.&lt;br /&gt;
* Error messages would use a format similar to the [http://www.jsonrpc.org/specification#error_object JSON-RPC 2.0 error object]. The error message/object would contain three child tags:&lt;br /&gt;
** ''Code'': An integer specifying a previous documented value&lt;br /&gt;
** ''Message'': An english human-readable string with a description of the error. Clients can use the error code to show their own messages, possibly translated to the user's main language.&lt;br /&gt;
** ''Data'' (optional): Custom data with further details about the specific error.&lt;br /&gt;
&lt;br /&gt;
==== SSL ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Secure_Socket_Layer SSL] is the standard protocol atop of sockets used to securely comunicate between two entities. It doesn't provide much advantage when you only intends to download an add-on, but it's very useful when you want to protect your password from eavesdroppers and alike.&lt;br /&gt;
&lt;br /&gt;
The Wesnoth client could add a configuration to choose ''secure connection'' and use unsecure connection by default (decreasing this overhead on the server).&lt;br /&gt;
&lt;br /&gt;
The add-on server would provide both (unencrypted and encrypted) connections. It'd listen to two ports to differentiate the connection type.&lt;br /&gt;
&lt;br /&gt;
[http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference.html Boost::asio] already provides support for SSL and add it in the add-on server would be easy.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Period !! Task !! Status !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Week -1 (May 12 to 18) || Install a Debian chroot in my system that mimics Wesnoth main server. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 0 (May 19 to 25) || Create a Wesnoth branch and start coding. Get used to Boost.asio. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 1-2 (May 26 till June 8) || Create the SimpleAddonManager, capable of execute the operations needed to manage add-ons. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 3 (June 9 to 15) || Reimplement the current protocol in Boost.asio. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 4 (June 16 to 22) || Start working on the authentication support. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 5-7 (June 23 till July 13) || Implement the new protocol || Mandatory || Documentation should follow it progress.&lt;br /&gt;
|-&lt;br /&gt;
| Week 8 (July 14 to 20) || Introduce threads and SSL. || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 9-11 (July 21 till August 10) || LDAP support || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 12 (August 11 to 17) || Do more tests, fix bugs and integrate the new branch into the Wesnoth main branch || Mandatory ||&lt;br /&gt;
|-&lt;br /&gt;
| Week 13-16 (August 18 till September 14) || Integrate the new protocol in Wesnoth client. || Mandatory ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
I overestimated all tasks, so I may finish some tasks a bit sooner and use this time to compensate the wrongly estimated tasks, but this made the timeline lose some precision.&lt;br /&gt;
&lt;br /&gt;
=== Threads in wiki 8 ===&lt;br /&gt;
&lt;br /&gt;
Usually it's advised to introduce threads in the initial '''design''' of the application if someone wants to support multithread design. A rule of dumb is to take a step further and make threads part of the initial '''code'''.&lt;br /&gt;
&lt;br /&gt;
In this proposal, I suggest to introduce threads only at week 8, but I already have experience with multi-threaded programs and I'd make the design ready to be extended right from the week 1. The reason why I want to introduce threads later is because I want to deliver something usable sooner and work incrementally till deliver the full product.&lt;br /&gt;
&lt;br /&gt;
I like to work incrementally, because you catch specifications errors sooner (users not usually know what they want till you deliver the product and they say &amp;quot;Hey! This is not what I asked for!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51075</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=51075"/>
		<updated>2013-05-17T20:49:57Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance and scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for exceptions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
You can see a '''draft''' (&amp;lt;u&amp;gt;remember&amp;lt;/u&amp;gt;: it's a draft and its purpose is to explain what strategies will be used to solve the problems faced; the future system will probably implement some things undocumented here) below:&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
The users would belong to some groups and the groups should be used to create an acess control. It should exist a group for the translation team with power to upload translations and it should exist a group for the admins (with unrestricted powers). The simple/self login backend wouldn't implement groups.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
=== The WML-based database ===&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend, the ''WML-based database backend''. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
This database would separate the add-on data from its meta-data. The meta-data would be saved in a child tag of the main add-on's config file. Extra meta-data will be stored there also.&lt;br /&gt;
&lt;br /&gt;
A migration script will be provided to convert the add-ons from the previous format to the new one.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed and cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
An extra meta-data example is the ''number of players''. Currently there is no field to describe the ''number of players'', but in the future developers may want to add this feature (and players could start using it ASAP).&lt;br /&gt;
&lt;br /&gt;
The support to extra meta-data influence the database and the network protocol. If you want info about how they solve the new problem, see the appropriate section.&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Currently, there is no integration between the Addon Server and the [[WesCamp]] translations. A [https://github.com/wesnoth/wesnoth-old/blob/master/data/tools/wesnoth/wescamp.py script] is run [http://wiki.wesnoth.org/Wescamp.py_Instructions by hand] every time the translations need to be updated.&lt;br /&gt;
&lt;br /&gt;
The translations are developed/maintained at [https://github.com/wescamp github] under multiple repositories of a single organization (but not all repositories are translations).&lt;br /&gt;
&lt;br /&gt;
It should be too difficult for the server to watch for the notifications and the requirement of the use of older tools/dependencies make this challenge still more difficult. To improve this scenario, the proposed addon server should host the translations itself.&lt;br /&gt;
&lt;br /&gt;
The translator should send the translation to the translation team and the translation team could use their users (with some administrative power) to upload the translation to the server through the Wesnoth client, with a system similar to the [[PblWML|.pbl files]].&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
Different versions of the same protocol may share a lot of actions in common. To avoid code duplication, the session component will use [http://en.wikipedia.org/wiki/Factory_method_pattern factories] to instantiate the necessary handlers for each protocol and each handler will delegate the handling of every specific action to other classes.&lt;br /&gt;
&lt;br /&gt;
Namespaces will be used to group classes related to protocols/versions.&lt;br /&gt;
&lt;br /&gt;
=== Event loop != boost::io_service  ===&lt;br /&gt;
&lt;br /&gt;
The boost::io_service object has [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/run.html an option] to act as an event loop, but this option may be suboptiomal when we want to schedule our own actions. So, I'd implement my own event loop class, allowing anyone to register its own actions and [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service/poll.html integrate it with io_service].&lt;br /&gt;
&lt;br /&gt;
To avoid locking a thread for more time than necessary, the EventLoop class would allow to register a delayed action in some queue. The actions that require lock would use try_lock (in conjunction with lock guard, to maintain the RAII idiom) in combination with delayed actions to block the current event loop as little as possible.&lt;br /&gt;
&lt;br /&gt;
[http://thread.gmane.org/gmane.comp.lib.boost.asio.user/1300 Use one boost::io_service per thread] decreases the contention when locking the io_service internal mutex for queuing and dequeuing&lt;br /&gt;
requests and is preferred for maximum scalability.&lt;br /&gt;
&lt;br /&gt;
=== Config files ===&lt;br /&gt;
&lt;br /&gt;
The configuration file syntax would be a WML file with the following elements:&lt;br /&gt;
&lt;br /&gt;
* ''umcd'' (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]): Top-level element&lt;br /&gt;
** old: The tag containing config related to the old (the current one) server&lt;br /&gt;
*** Port: Which port would run&lt;br /&gt;
** threads: The number of threads to use. Put 0 or don't put anything to let the server auto-detect through [http://www.boost.org/doc/libs/1_42_0/doc/html/thread/thread_management.html#thread.thread_management.thread.hardware_concurrency boost]&lt;br /&gt;
** database: It may contain several child tags to configure what database to use. The database data and configuration are kept in separate.&lt;br /&gt;
*** If simple (the SimpleAddonManager) is chosen, you'd have the option to choose the directory data. The SimpleAddonManager (WML-based database), like the config file, store its metadata in WML.&lt;br /&gt;
** Port: Which port it would use&lt;br /&gt;
** SSL: Settings related to SSL (key file, key file password, server port, ...)&lt;br /&gt;
&lt;br /&gt;
=== SimpleAddonManager ''(WML-based database)'' Filesystem layout ===&lt;br /&gt;
&lt;br /&gt;
The SimpleAddonManager would save the add-ons using the following schema:&lt;br /&gt;
&lt;br /&gt;
* ''/'': Top-level add-ons directory:&lt;br /&gt;
** ''add-ons.cfg''&lt;br /&gt;
** ''journal.log'': It will provide basic guarantees to avoid severe data loss (see below).&lt;br /&gt;
** ''Add-ons/''&lt;br /&gt;
*** ''Add-on name/''&lt;br /&gt;
**** ''metadata.cfg''&lt;br /&gt;
**** ''Add-on version/'': It would contain the add-on binary files related to ''version''.&lt;br /&gt;
***** ''i18n/'' (the name can be changed): It would contain the translation files. The version management would also be applied to translations and each translation should apply to a specific version of the add-on.&lt;br /&gt;
**** ''Another add-on version/'': It would contain the add-on binary files related to ''another version''.&lt;br /&gt;
&lt;br /&gt;
==== journal.log ====&lt;br /&gt;
&lt;br /&gt;
When some update is requested, the add-on server may update data in several different places. If a crash happens in the middle of the update, the data may corrupt. This database is not meant to support full [http://en.wikipedia.org/wiki/ACID ACID semantics], but it'll provide [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomicity] to prevent severe data loss, while a new backend is not developed.&lt;br /&gt;
&lt;br /&gt;
The main implementation technique is to use a journal file, storing when an operation starts and when it ends. Implement atomicity in this database is a requirement of this proposal, but the ''journal.log'' is optional and I might choose a different technique.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The server would listen on some different ports:&lt;br /&gt;
&lt;br /&gt;
* 15002: It would accept a subset of the protocol defined in [[CampaignServerWML]]. The objective is maintain backward compatibility with older Wesnoth clients. The commands '''not''' recognizable would be the ones related to uploading a campaign, changing the passphrase for a campaign, deleting a campaign and developer commands.&lt;br /&gt;
* 15003 (it's subject to change and can be any other): It would recognize the new protocol, as defined below.&lt;br /&gt;
* 15004 (it's subject to change and can be any other): The same as the previous one, but it would run atop of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/overview/ssl.html SSL].&lt;br /&gt;
&lt;br /&gt;
=== The ''new'' protocol ===&lt;br /&gt;
&lt;br /&gt;
The new protocol purpose is to address limitations faced in current protocol. For the new protocol, [[BinaryWML]] still will be used, to ease integration with Wesnoth client. The protocol is case-sensitive.&lt;br /&gt;
&lt;br /&gt;
* From now on, messages will use error codes (similar, but not equal, to HTTP and JSON-RPC). This behaviour is useful to build automated tools and to show customized (read translated) message errors to users. '''The message errors will still be WML-based.'''&lt;br /&gt;
* The new messages will use a top-level tag named umc (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]) and will have a version attribute. This attribute will extend the protocol in the future without break compatibility with older Wesnoth clients.&lt;br /&gt;
&lt;br /&gt;
==== Version ''0'' ====&lt;br /&gt;
&lt;br /&gt;
For version 0 (the one to be implemented during this GSoC), the following type of requests are supported:&lt;br /&gt;
&lt;br /&gt;
* Listing supported version: The server should return a list of supported versions and the client can use this info to adapt itself to the server's limits.&lt;br /&gt;
* Listing available add-ons: It would replace the current [[CampaignServerWML#Listing_Available_Campaigns]]. In this command, every tag would be a filter with a syntax similar to [http://docs.mongodb.org/manual/reference/operator/#comparison MongoDB declarative queries syntax]. In version 0, only the following filter types are supported:&lt;br /&gt;
** date&lt;br /&gt;
** language&lt;br /&gt;
** [[PblWML#title]]: This attribute should be used if someone wants to receive info about a single add-on.&lt;br /&gt;
** [[PblWML#author]]&lt;br /&gt;
** [[PblWML#description]]: This tag will have child tags to allow translatable descriptions.&lt;br /&gt;
** [[PblWML#type]]&lt;br /&gt;
* Downloading an add-on: It will be possible to download a specific version of an add-on and its related translations.&lt;br /&gt;
* Uploading an add-on: It will have an ''auth'' child tag. It will have an ''ownership'' tag, with the following child tags:&lt;br /&gt;
** ''Type'': It can be ''password'', ''user'' or ''group''. &lt;br /&gt;
** ''Password'': Only if ''type'' is ''password''. It should be the campaign password (just like it works now).&lt;br /&gt;
** ''Auth'': It must be present if ''type'' is different from ''password''. It shall contain two child tags:&lt;br /&gt;
*** ''User'': The user's nickname.&lt;br /&gt;
*** ''Pass'': The user's password.&lt;br /&gt;
** ''add-on'': The add-on itself, with the child ''metadata'' and ''data'' tags. The ''data'' tag would contain the add-on file. The ''metadata'' tag could contain any extra child tags and they wouldn't be discarded (this is the behaviour adopted by [https://www.oasis-open.org/committees/download.php/19275/ ODF] to increase the interoperability).&lt;br /&gt;
* Edit an add-on: It could be used to edit an add-on's metadata, ownership or delete the add-on (or a specific version of it).&lt;br /&gt;
* Request uploading terms&lt;br /&gt;
* Submit translation: It will allow submit a translation (the description field would also be translated)&lt;br /&gt;
&lt;br /&gt;
Some random notes about the new server/protocol:&lt;br /&gt;
&lt;br /&gt;
* Multiple authors per add-on are possible&lt;br /&gt;
* The &amp;quot;''listing available add-ons''&amp;quot; request would use the following tags differently:&lt;br /&gt;
** ''Dependencies'': The list of dependencies would include a version (allowing the operators &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=, ==).&lt;br /&gt;
** ''Icon'': This different tag would contain the following child tags:&lt;br /&gt;
*** ''Type'': It can be ''link'' or ''png''. Future protocol versions can define different types.&lt;br /&gt;
*** ''Data'': The icon data. It can be a path to an image in the standard image directory for Wesnoth or a base64 encoded small PNG icon.&lt;br /&gt;
* Error messages would use a format similar to the [http://www.jsonrpc.org/specification#error_object JSON-RPC 2.0 error object]. The error message/object would contain three child tags:&lt;br /&gt;
** ''Code'': An integer specifying a previous documented value&lt;br /&gt;
** ''Message'': An english human-readable string with a description of the error. Clients can use the error code to show their own messages, possibly translated to the user's main language.&lt;br /&gt;
** ''Data'' (optional): Custom data with further details about the specific error.&lt;br /&gt;
&lt;br /&gt;
==== SSL ====&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Secure_Socket_Layer SSL] is the standard protocol atop of sockets used to securely comunicate between two entities. It doesn't provide much advantage when you only intends to download an add-on, but it's very useful when you want to protect your password from eavesdroppers and alike.&lt;br /&gt;
&lt;br /&gt;
The Wesnoth client could add a configuration to choose ''secure connection'' and use unsecure connection by default (decreasing this overhead on the server).&lt;br /&gt;
&lt;br /&gt;
The add-on server would provide both (unencrypted and encrypted) connections. It'd listen to two ports to differentiate the connection type.&lt;br /&gt;
&lt;br /&gt;
[http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference.html Boost::asio] already provides support for SSL and add it in the add-on server would be easy.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
* Week -1 (May 12 to 18): Install a Debian chroot in my system that mimics Wesnoth main server. ''(mandatory)''&lt;br /&gt;
* Week 0 (May 19 to 25): Create a Wesnoth branch and start coding. Get used to Boost.asio ''(mandatory)''&lt;br /&gt;
* Week 1-2 (May 26 till June 8): Create the SimpleAddonManager, capable of execute the operations needed to manage add-ons. ''(mandatory)''&lt;br /&gt;
* Week 3 (June 9 to 15): Reimplement the current protocol in Boost.asio. ''(mandatory)''&lt;br /&gt;
* Week 4 (June 16 to 22): Start working on the authentication support ''(mandatory)''&lt;br /&gt;
* Week 5-7 (June 23 till July 13): Implement the new protocol (documentation should follow it progress). ''(mandatory)''&lt;br /&gt;
* Week 8 (July 14 to 20): Introduce threads and SSL ''(mandatory)''&lt;br /&gt;
* Week 9-11 (July 21 till August 10): LDAP support ''(mandatory)''&lt;br /&gt;
* Week 12 (August 11 to 17): Do more tests, fix bugs and integrate the new branch into the Wesnoth main branch ''(mandatory)''&lt;br /&gt;
* Week 13-16 (August 18 till September 14): Integrate the new protocol in Wesnoth client ''(mandatory)''&lt;br /&gt;
&lt;br /&gt;
I overestimated all tasks, so I may finish some tasks a bit sooner and use this time to compensate the wrongly estimated tasks, but this made the timeline lose some precision.&lt;br /&gt;
&lt;br /&gt;
=== Threads in wiki 8 ===&lt;br /&gt;
&lt;br /&gt;
Usually it's advised to introduce threads in the initial '''design''' of the application if someone wants to support multithread design. A rule of dumb is to take a step further and make threads part of the initial '''code'''.&lt;br /&gt;
&lt;br /&gt;
In this proposal, I suggest to introduce threads only at week 8, but I already have experience with multi-threaded programs and I'd make the design ready to be extended right from the week 1. The reason why I want to introduce threads later is because I want to deliver something usable sooner and work incrementally till deliver the full product.&lt;br /&gt;
&lt;br /&gt;
I like to work incrementally, because you catch specifications errors sooner (users not usually know what they want till you deliver the product and they say &amp;quot;Hey! This is not what I asked for!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50964</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50964"/>
		<updated>2013-05-09T05:30:35Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance and scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for exceptions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
You can see a '''draft''' (&amp;lt;u&amp;gt;remember&amp;lt;/u&amp;gt;: it's a draft and its purpose is to explain what strategies will be used to solve the problems faced; the future system will probably implement some things undocumented here) below:&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
The users would belong to some groups and the groups should be used to create an acess control. It should exist a group for the translation team with power to upload translations and it should exist a group for the admins (with unrestricted powers). The simple/self login backend wouldn't implement groups.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
A migration script will be provided to convert the add-ons from the previous format to the new one.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed and cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Currently, there is no integration between the Addon Server and the [[WesCamp]] translations. A [https://github.com/wesnoth/wesnoth-old/blob/master/data/tools/wesnoth/wescamp.py script] is run [http://wiki.wesnoth.org/Wescamp.py_Instructions by hand] every time the translations need to be updated.&lt;br /&gt;
&lt;br /&gt;
The translations are developed/maintained at [https://github.com/wescamp github] under multiple repositories of a single organization (but not all repositories are translations).&lt;br /&gt;
&lt;br /&gt;
It should be too difficult for the server to watch for the notifications and the requirement of the use of older tools/dependencies make this challenge still more difficult. To improve this scenario, the proposed addon server should host the translations itself.&lt;br /&gt;
&lt;br /&gt;
The translator should send the translation to the translation team and the translation team could use their users (with some administrative power) to upload the translation to the server through the Wesnoth client, with a system similar to the [[PblWML|.pbl files]].&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
To avoid locking a thread for more time than necessary, the EventLoop class would allow to register a delayed action in some queue. The actions that require lock would use try_lock (in conjunction with lock guard, to maintain the RAII idiom) in combination with delayed actions to maintain a lock as little as possible.&lt;br /&gt;
&lt;br /&gt;
Different versions of the same protocol may share a lot of actions in common. To avoid code duplication, the session component will use [http://en.wikipedia.org/wiki/Factory_method_pattern factories] to instantiate the necessary handlers for each protocol and each handler will delegate the handling of every specific action to other classes.&lt;br /&gt;
&lt;br /&gt;
Namespaces will be used to group classes related to protocols/versions.&lt;br /&gt;
&lt;br /&gt;
=== Config files ===&lt;br /&gt;
&lt;br /&gt;
The configuration file syntax would be a WML file with the following elements:&lt;br /&gt;
&lt;br /&gt;
* ''umcd'' (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]): Top-level element&lt;br /&gt;
** old: The tag containing config related to the old (the current one) server&lt;br /&gt;
*** Port: Which port would run&lt;br /&gt;
** threads: The number of threads to use. Put 0 or don't put anything to let the server auto-detect through [http://www.boost.org/doc/libs/1_42_0/doc/html/thread/thread_management.html#thread.thread_management.thread.hardware_concurrency boost]&lt;br /&gt;
** database: It may contain several child tags to configure what database to use. If simple (the SimpleAddonManager) is chosen, you'd have the option to choose the directory data.&lt;br /&gt;
** Port: Which port it would use&lt;br /&gt;
** SSL: Settings related to SSL (key file, key file password, server port, ...)&lt;br /&gt;
&lt;br /&gt;
=== SimpleAddonManager Filesystem layout ===&lt;br /&gt;
&lt;br /&gt;
The SimpleAddonManager would save the add-ons using the following schema:&lt;br /&gt;
&lt;br /&gt;
* ''/'': Top-level add-ons directory:&lt;br /&gt;
** ''add-ons.cfg''&lt;br /&gt;
** ''journal.log'': This '''won't''' be used to implement a full [http://en.wikipedia.org/wiki/ACID ACID] support, but it will provide basic guarantees to avoid severe data loss.&lt;br /&gt;
** ''Add-ons/''&lt;br /&gt;
*** ''Add-on name/''&lt;br /&gt;
**** ''metadata.cfg''&lt;br /&gt;
**** ''Add-on version/'': It would contain the add-on binary files related to ''version''.&lt;br /&gt;
***** ''i18n/'' (the name can be changed): It would contain the translation files. The version management would also be applied to translations and each translation should apply to a specific version of the add-on.&lt;br /&gt;
**** ''Another add-on version/'': It would contain the add-on binary files related to ''another version''.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&lt;br /&gt;
The server would listen on some different ports:&lt;br /&gt;
&lt;br /&gt;
* 15002: It would accept a subset of the protocol defined in [[CampaignServerWML]]. The objective is maintain backward compatibility with older Wesnoth clients. The commands '''not''' recognizable would be the ones related to uploading a campaign, changing the passphrase for a campaign, deleting a campaign and developer commands.&lt;br /&gt;
* 15003 (it's subject to change and can be any other): It would recognize the new protocol, as defined below.&lt;br /&gt;
* 15004 (it's subject to change and can be any other): The same as the previous one, but it would run atop of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/overview/ssl.html SSL].&lt;br /&gt;
&lt;br /&gt;
=== The ''new'' protocol ===&lt;br /&gt;
&lt;br /&gt;
The new protocol purpose is to address limitations faced in current protocol. For the new protocol, [[BinaryWML]] still will be used, to ease integration with Wesnoth client. The protocol is case-sensitive.&lt;br /&gt;
&lt;br /&gt;
* From now on, messages will use error codes (like HTTP and JSON-RPC). This behaviour is useful to build automated tools and to show customized (read translated) message errors to users.&lt;br /&gt;
* The new messages will use a top-level tag named umc (the name is based on [http://hyc.io/wesnoth/umcd.pdf Trademark/mordante proposal]) and will have a version attribute. This attribute will extend the protocol in the future without break compatibility with older Wesnoth clients.&lt;br /&gt;
&lt;br /&gt;
==== Version ''0'' ====&lt;br /&gt;
&lt;br /&gt;
For version 0 (the one to be implemented during this GSoC), the following type of requests are supported:&lt;br /&gt;
&lt;br /&gt;
* Listing supported version: The server should return a list of supported versions and the client can use this info to adapt itself to the server's limits.&lt;br /&gt;
* Listing available add-ons: It would replace the current [[CampaignServerWML#Listing_Available_Campaigns]]. In this command, every tag would be a filter with a syntax similar to [http://docs.mongodb.org/manual/reference/operator/#comparison MongoDB declarative queries syntax]. In version 0, only the following filter types are supported:&lt;br /&gt;
** date&lt;br /&gt;
** language&lt;br /&gt;
** [[PblWML#title]]: This attribute should be used if someone wants to receive info about a single add-on.&lt;br /&gt;
** [[PblWML#author]]&lt;br /&gt;
** [[PblWML#description]]: This tag will have child tags to allow translatable descriptions.&lt;br /&gt;
** [[PblWML#type]]&lt;br /&gt;
* Downloading an add-on: It will be possible to download a specific version of an add-on and its related translations.&lt;br /&gt;
* Uploading an add-on: It will have an ''auth'' child tag. It will have an ''ownership'' tag, with the following child tags:&lt;br /&gt;
** ''Type'': It can be ''password'', ''user'' or ''group''. &lt;br /&gt;
** ''Password'': Only if ''type'' is ''password''. It should be the campaign password (just like it works now).&lt;br /&gt;
** ''Auth'': It must be present if ''type'' is different from ''password''. It shall contain two child tags:&lt;br /&gt;
*** ''User'': The user's nickname.&lt;br /&gt;
*** ''Pass'': The user's password.&lt;br /&gt;
** ''add-on'': The add-on itself, with the child ''metadata'' and ''data'' tags. The ''data'' tag would contain the add-on file. The ''metadata'' tag could contain any extra child tags and they wouldn't be discarded (this is the behaviour adopted by [https://www.oasis-open.org/committees/download.php/19275/ ODF] to increase the interoperability).&lt;br /&gt;
* Edit an add-on: It could be used to edit an add-on's metadata, ownership or delete the add-on (or a specific version of it).&lt;br /&gt;
* Request uploading terms&lt;br /&gt;
* Submit translation: It will allow submit a translation (the description field would also be translated)&lt;br /&gt;
&lt;br /&gt;
Some random notes about the new server/protocol:&lt;br /&gt;
&lt;br /&gt;
* Multiple authors per add-on are possible&lt;br /&gt;
* The &amp;quot;''listing available add-ons''&amp;quot; request would use the following tags differently:&lt;br /&gt;
** ''Dependencies'': The list of dependencies would include a version (allowing the operators &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=, ==).&lt;br /&gt;
** ''Icon'': This different tag would contain the following child tags:&lt;br /&gt;
*** ''Type'': It can be ''link'' or ''png''. Future protocol versions can define different types.&lt;br /&gt;
*** ''Data'': The icon data. It can be a path to an image in the standard image directory for Wesnoth or a base64 encoded small PNG icon.&lt;br /&gt;
* Error messages would use a format similar to the [http://www.jsonrpc.org/specification#error_object JSON-RPC 2.0 error object]. The error message/object would contain three child tags:&lt;br /&gt;
** ''Code'': An integer specifying a previous documented value&lt;br /&gt;
** ''Message'': An english human-readable string with a description of the error. Clients can use the error code to show their own messages, possibly translated to the user's main language.&lt;br /&gt;
** ''Data'' (optional): Custom data with further details about the specific error.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
* Week -1 (May 12 to 18): Install a Debian chroot in my system that mimics Wesnoth main server.&lt;br /&gt;
* Week 0 (May 19 to 25): Create a Wesnoth branch and start coding. Get used to Boost.asio&lt;br /&gt;
* Week 1-2 (May 26 till June 8): Create the SimpleAddonManager, capable of execute the operations needed to manage add-ons.&lt;br /&gt;
* Week 3 (June 9 to 15): Reimplement the current protocol in Boost.asio.&lt;br /&gt;
* Week 4 (June 16 to 22): Start working on the authentication support&lt;br /&gt;
* Week 5-7 (June 23 till July 13): Implement the new protocol (documentation should follow it progress).&lt;br /&gt;
* Week 8 (July 14 to 20): Introduce threads and SSL&lt;br /&gt;
* Week 9-11 (July 21 till August 10): LDAP support&lt;br /&gt;
* Week 12 (August 11 to 17): Do more tests, fix bugs and integrate the new branch into the Wesnoth main branch&lt;br /&gt;
* Week 13-16 (August 18 till September 14): Integrate the new protocol in Wesnoth client&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50940</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50940"/>
		<updated>2013-05-06T05:34:28Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* Better localization and internationalization support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for excepetions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
Each campaign would continue to be stored in files exactly how it's done now, so a transition to the new server wouldn't affect the current addons database.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed an cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Currently, there is no integration between the Addon Server and the [[WesCamp]] translations. A [https://github.com/wesnoth/wesnoth-old/blob/master/data/tools/wesnoth/wescamp.py script] is run [http://wiki.wesnoth.org/Wescamp.py_Instructions by hand] every time the translations need to be updated.&lt;br /&gt;
&lt;br /&gt;
The translations are developed/maintained at [https://github.com/wescamp github] under multiple repositories of a single organization (but not all repositories are translations).&lt;br /&gt;
&lt;br /&gt;
It should be too difficult for the server to watch for the notifications and the requirement of the use of older tools/dependencies make this challenge still more difficult. To improve this scenario, the proposed addon server should host the translations itself. The solution must be easy to use to please the translators.&lt;br /&gt;
&lt;br /&gt;
I'll add more detail about the solution very soon.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
The session component might implement multiple protocols and would be further broken down.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
Before the chosen students are announced (during the month of may), I'd finish the architecture draft and the new protocol spec and install an Debian chroot in my system that mimics Wesnoth main server. I may interact more with Wesnoth developers in this phase.&lt;br /&gt;
&lt;br /&gt;
I'd finish the initial components (the addon manager, the event loop and a functional session handling) before july 20. After that, I'd introduce threads (which should be ready in one week). Then I'd introduce and implement the several authentication mechanisms. I have less experience with LDAP (only as a sysadmin at [http://en.lccv.ufal.br/cluster/ LCCV] for a while) and would take more time to implement it.&lt;br /&gt;
&lt;br /&gt;
Every thing should be finished by the first week of september.&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50939</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50939"/>
		<updated>2013-05-06T05:32:31Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* Better localization and internationalization support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for excepetions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
Each campaign would continue to be stored in files exactly how it's done now, so a transition to the new server wouldn't affect the current addons database.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed an cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Currently, there is no integration between the Addon Server and the [[WesCamp]] translations. A [https://github.com/wesnoth/wesnoth-old/blob/master/data/tools/wesnoth/wescamp.py script] is run [http://wiki.wesnoth.org/Wescamp.py_Instructions by hand] every time the translations need to be updated.&lt;br /&gt;
&lt;br /&gt;
The translations are developed/maintained at [https://github.com/wescamp github] under multiple repositories of a single organization (but not all repositories are translations).&lt;br /&gt;
&lt;br /&gt;
It should be too difficult for the server to watch for the notifications and the requirement of depends on older tools make this challenge still more difficult. To improve this scenario, the proposed addon server should host the translations itself. The solution must be easy to use to please the translators.&lt;br /&gt;
&lt;br /&gt;
I'll add more detail about the solution very soon.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
The session component might implement multiple protocols and would be further broken down.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
Before the chosen students are announced (during the month of may), I'd finish the architecture draft and the new protocol spec and install an Debian chroot in my system that mimics Wesnoth main server. I may interact more with Wesnoth developers in this phase.&lt;br /&gt;
&lt;br /&gt;
I'd finish the initial components (the addon manager, the event loop and a functional session handling) before july 20. After that, I'd introduce threads (which should be ready in one week). Then I'd introduce and implement the several authentication mechanisms. I have less experience with LDAP (only as a sysadmin at [http://en.lccv.ufal.br/cluster/ LCCV] for a while) and would take more time to implement it.&lt;br /&gt;
&lt;br /&gt;
Every thing should be finished by the first week of september.&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50938</id>
		<title>User:Vinipsmaker/GSoC13/Questionnaire</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50938"/>
		<updated>2013-05-06T01:17:47Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1) Basics =&lt;br /&gt;
&lt;br /&gt;
== 1.1) Write a small introduction to yourself. ==&lt;br /&gt;
&lt;br /&gt;
I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates to me (github user, lastfm profile, ...), [https://about.me/vinipsmaker click here].&lt;br /&gt;
&lt;br /&gt;
== 1.2) State your preferred email address. ==&lt;br /&gt;
&lt;br /&gt;
vini.ipsmaker&amp;lt;at&amp;gt;gmail&amp;lt;dot&amp;gt;com&lt;br /&gt;
&lt;br /&gt;
== 1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it? ==&lt;br /&gt;
&lt;br /&gt;
My IRC's nickname is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
My forum's username is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
== 1.4) Why do you want to participate in summer of code? ==&lt;br /&gt;
&lt;br /&gt;
I love to develop and I think GSoC is an excellent initiative.&lt;br /&gt;
&lt;br /&gt;
== 1.5) What are you studying, subject, level and school? ==&lt;br /&gt;
&lt;br /&gt;
I'm majoring in computer science at Universidade Federal de Alagoas.&lt;br /&gt;
&lt;br /&gt;
== 1.6) What country are you from, at what time are you most likely to be able to join IRC? ==&lt;br /&gt;
&lt;br /&gt;
I'm from Brazil and I'm able to join IRC from 22:30 till 3:00 everyday, but I join IRC as soon as I connect to the internet and I'll probably be online from 17:00 till 4:00 (GMT time).&lt;br /&gt;
&lt;br /&gt;
== 1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when. ==&lt;br /&gt;
&lt;br /&gt;
I'll have 4h/day 3d/week classes, but this wouldn't be a problem, because I like to stay at home and I have a '''lot''' of spare time.&lt;br /&gt;
&lt;br /&gt;
= 2) Experience =&lt;br /&gt;
&lt;br /&gt;
== 2.1) What programs/software have you worked on before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on a lot of projects. Among them:&lt;br /&gt;
&lt;br /&gt;
* A very very simple enrollment system built on top of [http://nodejs.org/ Node.js asynchronous web frameowork for JavaScript]&lt;br /&gt;
* A bomberman-like networked Qt-game (it lacks several things I'm planning to release in a refactored version)&lt;br /&gt;
* I've worked on a private GStreamer plugin in C&lt;br /&gt;
&lt;br /&gt;
Projects cited below aren't repeated here.&lt;br /&gt;
&lt;br /&gt;
== 2.2) Have you developed software in a team environment before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on some team projects before. Among other projects, I worked on:&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/ntouche/ An unfinished hypermedia diagramming tool for mobile]&lt;br /&gt;
* [http://brisa.garage.maemo.org/ An UPnP framework]&lt;br /&gt;
&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I never participated on Google Summer of Code before.&lt;br /&gt;
&lt;br /&gt;
== 2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement. ==&lt;br /&gt;
&lt;br /&gt;
I'm the lead developer of [https://github.com/vinipsmaker/tufao an asynchronous web framework for C++ built on top of Qt] and I'm the brazilian's translation maintainer for the [http://enlightenment.org/ Enlightenment project].&lt;br /&gt;
&lt;br /&gt;
== 2.5) Gaming experience - Are you a gamer? ==&lt;br /&gt;
&lt;br /&gt;
Yes, I'm a gamer.&lt;br /&gt;
&lt;br /&gt;
== 2.5.1) What type of gamer are you? ==&lt;br /&gt;
&lt;br /&gt;
I'm the type of gamer that like games that:&lt;br /&gt;
* Run on GNU/Linux&lt;br /&gt;
* Console games (preferably portable)&lt;br /&gt;
&lt;br /&gt;
== 2.5.2) What type of games? ==&lt;br /&gt;
&lt;br /&gt;
I like strategy games (like Wesnoth), Action-RPG games (like The Legend of Zelda) and dumb games (like mines and gnujump).&lt;br /&gt;
&lt;br /&gt;
== 2.5.3) What type of opponents do you prefer? ==&lt;br /&gt;
&lt;br /&gt;
I like to play against AI or against my AFK friends.&lt;br /&gt;
&lt;br /&gt;
== 2.5.4) Are you more interested in story or gameplay? ==&lt;br /&gt;
&lt;br /&gt;
Gameplay.&lt;br /&gt;
&lt;br /&gt;
== 2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. ==&lt;br /&gt;
&lt;br /&gt;
I finished some campaigns on single-player mode, but I avoid multiplayer-mode, because I always lose (shame on me).&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I [https://github.com/wesnoth/wesnoth-old/pull/3 fixed] [https://gna.org/bugs/?20765 a bug within Wesnoth] and I [https://github.com/wesnoth/wesnoth-old/pull/5 refactored] a class to increase the use of the RAII idiom.&lt;br /&gt;
&lt;br /&gt;
= 3) Communication skills =&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I write some english posts on my [http://vinipsmaker.wordpress.com/category/en/ blog] and you can see the [http://vinipsmaker.github.io/tufao/ref/1.x/ Tufão documentation] (both written by myself).&lt;br /&gt;
&lt;br /&gt;
== 3.2) What spoken languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I can watch and understand videos about C++ (Bjarne Stroustroup, Herb Sutter, Andrei Alexandrescu, ...), but I never practice, so I must be terrible speaking.&lt;br /&gt;
&lt;br /&gt;
I'm fluent in brazilian portuguese.&lt;br /&gt;
&lt;br /&gt;
== 3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough. ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.4) Do you give constructive advice? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.5) Do you receive advice well? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.6) Are you good at sorting useful criticisms from useless ones? ==&lt;br /&gt;
&lt;br /&gt;
Usually not.&lt;br /&gt;
&lt;br /&gt;
== 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 &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want ==&lt;br /&gt;
&lt;br /&gt;
I tend to not wait for other people.&lt;br /&gt;
&lt;br /&gt;
If I face a surprising situation where I have more than one choice and each choice have its drawbacks, I'll document the choices and send this documentation to the other developers as a starting pointing to choose the solution.&lt;br /&gt;
&lt;br /&gt;
I like to allow my colleagues track my progress also.&lt;br /&gt;
&lt;br /&gt;
= 4) Project =&lt;br /&gt;
&lt;br /&gt;
See my [[../Proposal]].&lt;br /&gt;
&lt;br /&gt;
= 5) Practical considerations =&lt;br /&gt;
&lt;br /&gt;
== 5.1) Are you familiar with any of the following tools or languages? ==&lt;br /&gt;
&lt;br /&gt;
* I'm familiar with the '''C++ programming language''' and the '''STL''' templates library. C++ is my programming language of choice for a long time already. I just need to master all the power of templates-machinery and I'll be happier yet.&lt;br /&gt;
* I never used '''Boost''', but I follow the Boost project and read the documentation of some pieces from time to time.&lt;br /&gt;
* I used '''SDL''' long time ago in a [https://code.google.com/p/eater-thief/ small game] for my first programming's classes. At the time, I didn't understand asynchronous/event-based-programming and other concepts very well and I was only an amateur at threading programming.&lt;br /&gt;
* I love '''Python'''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;s expressiveness power, but I never read a full programming book about it, so I don't even know what I don't know about the language. You can see [https://code.google.com/p/logica-whopper/ my last Python's project at googlecode].&lt;br /&gt;
* I'm familiar with '''cmake''' and I use it in some projects, but I never read a single line of code of '''scons'''.&lt;br /&gt;
* I'm familiar with '''Git''' (see my [https://github.com/vinipsmaker GitHub profile], for instance) version control system&lt;br /&gt;
* The first time a took a look at '''WML''' was this week, but this format reuses several patterns found in languages that I'm used to, such as preprocessor-like features from C, variables and expressions ressembling a bit of bash, the overall structure being a combination of INI and XML.&lt;br /&gt;
* My experience with '''Lua''' is near to zero, but I don't think this would be a problem. Learn a new language is easy. Learn a new programming paradigm is hard.&lt;br /&gt;
&lt;br /&gt;
== 5.2) Which tools do you normally use for development? Why do you use them? ==&lt;br /&gt;
&lt;br /&gt;
* I use '''Emacs''' editor, because it's an advanced text editor with support for multiple languages. IDEs are usually much intrusive and I don't like intrusive tools, so I just use Emacs. You can see my [https://code.google.com/p/vinipsmaker/source/browse/config/.emacs Emacs config here].&lt;br /&gt;
* '''LLVM/Clang''' compiler, because the colored output. But most of the time I'm using '''GCC'''.&lt;br /&gt;
* '''CMake''' build system, because it's fast (compared to autotools, at least on my machine), it's easy and has a build's progress status.&lt;br /&gt;
* '''git''' version control system, because has a lot of integrated features (branching easier and more powerful than in subversion, at least with the knowledge that I have).&lt;br /&gt;
* '''Meld diff tool''', because it has a nice GUI.&lt;br /&gt;
* '''Doxygen''' for documentation, because it's the best.&lt;br /&gt;
* ''C++''' programming language, because of control and expressiveness power (not as much as Python, but still better than Java).&lt;br /&gt;
* Any drop-down terminal (currently '''Terra''') with good support for tabs.&lt;br /&gt;
* Any rolling-release distro that do not separate packages in normal and “-dev”. Currently '''ArchLinux'''.&lt;br /&gt;
&lt;br /&gt;
== 5.3) What programming languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I'm fluent in C, C++, JavaScript, Java and MongoDB.&lt;br /&gt;
&lt;br /&gt;
== 5.4) Would you mind talking with your mentor on telephone / internet phone? ==&lt;br /&gt;
&lt;br /&gt;
I have an skype account, but you can always reach me via email (I read it daily/hourly/minutely).&lt;br /&gt;
&lt;br /&gt;
I can provide my phone number.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13&amp;diff=50887</id>
		<title>User:Vinipsmaker/GSoC13</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13&amp;diff=50887"/>
		<updated>2013-05-03T20:08:39Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
&lt;br /&gt;
You can see my &amp;lt;big&amp;gt;'''[[/Proposal]]'''&amp;lt;/big&amp;gt; and my &amp;lt;big&amp;gt;'''[[/Questionnaire]]'''&amp;lt;/big&amp;gt;'s answers.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50834</id>
		<title>User:Vinipsmaker/GSoC13/Questionnaire</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50834"/>
		<updated>2013-05-03T04:36:29Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* 1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1) Basics =&lt;br /&gt;
&lt;br /&gt;
== 1.1) Write a small introduction to yourself. ==&lt;br /&gt;
&lt;br /&gt;
I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates to me (github user, lastfm profile, ...), [https://about.me/vinipsmaker click here].&lt;br /&gt;
&lt;br /&gt;
== 1.2) State your preferred email address. ==&lt;br /&gt;
&lt;br /&gt;
vini.ipsmaker&amp;lt;at&amp;gt;gmail&amp;lt;dot&amp;gt;com&lt;br /&gt;
&lt;br /&gt;
== 1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it? ==&lt;br /&gt;
&lt;br /&gt;
My IRC's nickname is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
My forum's username is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
== 1.4) Why do you want to participate in summer of code? ==&lt;br /&gt;
&lt;br /&gt;
I love to develop and I think GSoC is an excellent initiative.&lt;br /&gt;
&lt;br /&gt;
== 1.5) What are you studying, subject, level and school? ==&lt;br /&gt;
&lt;br /&gt;
I'm majoring in computer science at Universidade Federal de Alagoas.&lt;br /&gt;
&lt;br /&gt;
== 1.6) What country are you from, at what time are you most likely to be able to join IRC? ==&lt;br /&gt;
&lt;br /&gt;
I'm from Brazil and I'm able to join IRC from 22:30 till 3:00 everyday, but I join IRC as soon as I connect to the internet and I'll probably be online from 17:00 till 4:00 (GMT time).&lt;br /&gt;
&lt;br /&gt;
== 1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when. ==&lt;br /&gt;
&lt;br /&gt;
I'll have 4h/day 3d/week classes, but this wouldn't be a problem, because I like to stay at home and I have a '''lot''' of spare time.&lt;br /&gt;
&lt;br /&gt;
= 2) Experience =&lt;br /&gt;
&lt;br /&gt;
== 2.1) What programs/software have you worked on before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on a lot of projects. Among them:&lt;br /&gt;
&lt;br /&gt;
* A very very simple enrollment system built on top of [http://nodejs.org/ Node.js asynchronous web frameowork for JavaScript]&lt;br /&gt;
* A bomberman-like networked Qt-game (it lacks several things I'm planning to release in a refactored version)&lt;br /&gt;
* I've worked on a private GStreamer plugin in C&lt;br /&gt;
&lt;br /&gt;
Projects cited below aren't repeated here.&lt;br /&gt;
&lt;br /&gt;
== 2.2) Have you developed software in a team environment before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on some team projects before. Among other projects, I worked on:&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/ntouche/ An unfinished hypermedia diagramming tool for mobile]&lt;br /&gt;
* [http://brisa.garage.maemo.org/ An UPnP framework]&lt;br /&gt;
&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I never participated on Google Summer of Code before.&lt;br /&gt;
&lt;br /&gt;
== 2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement. ==&lt;br /&gt;
&lt;br /&gt;
I'm the lead developer of [https://github.com/vinipsmaker/tufao an asynchronous web framework for C++ built on top of Qt] and I'm the brazilian's translation maintainer for the [http://enlightenment.org/ Enlightenment project].&lt;br /&gt;
&lt;br /&gt;
== 2.5) Gaming experience - Are you a gamer? ==&lt;br /&gt;
&lt;br /&gt;
Yes, I'm a gamer.&lt;br /&gt;
&lt;br /&gt;
== 2.5.1) What type of gamer are you? ==&lt;br /&gt;
&lt;br /&gt;
I'm the type of gamer that like games that:&lt;br /&gt;
* Run on GNU/Linux&lt;br /&gt;
* Console games (preferably portable)&lt;br /&gt;
&lt;br /&gt;
== 2.5.2) What type of games? ==&lt;br /&gt;
&lt;br /&gt;
I like strategy games (like Wesnoth), Action-RPG games (like The Legend of Zelda) and dumb games (like mines and gnujump).&lt;br /&gt;
&lt;br /&gt;
== 2.5.3) What type of opponents do you prefer? ==&lt;br /&gt;
&lt;br /&gt;
I like to play against AI or against my AFK friends.&lt;br /&gt;
&lt;br /&gt;
== 2.5.4) Are you more interested in story or gameplay? ==&lt;br /&gt;
&lt;br /&gt;
Gameplay.&lt;br /&gt;
&lt;br /&gt;
== 2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. ==&lt;br /&gt;
&lt;br /&gt;
I finished some campaigns on single-player mode, but I avoid multiplayer-mode, because I always lose (shame on me).&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I fixed [https://gna.org/bugs/?20765 a bug within Wesnoth] and I'm waiting for the [https://github.com/wesnoth/wesnoth-old/pull/3 fix to being merged].&lt;br /&gt;
&lt;br /&gt;
= 3) Communication skills =&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I write some english posts on my [http://vinipsmaker.wordpress.com/category/en/ blog] and you can see the [http://vinipsmaker.github.io/tufao/ref/1.x/ Tufão documentation] (both written by myself).&lt;br /&gt;
&lt;br /&gt;
== 3.2) What spoken languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I can watch and understand videos about C++ (Bjarne Stroustroup, Herb Sutter, Andrei Alexandrescu, ...), but I never practice, so I must be terrible speaking.&lt;br /&gt;
&lt;br /&gt;
I'm fluent in brazilian portuguese.&lt;br /&gt;
&lt;br /&gt;
== 3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough. ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.4) Do you give constructive advice? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.5) Do you receive advice well? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.6) Are you good at sorting useful criticisms from useless ones? ==&lt;br /&gt;
&lt;br /&gt;
Usually not.&lt;br /&gt;
&lt;br /&gt;
== 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 &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want ==&lt;br /&gt;
&lt;br /&gt;
I tend to not wait for other people.&lt;br /&gt;
&lt;br /&gt;
If I face a surprising situation where I have more than one choice and each choice have its drawbacks, I'll document the choices and send this documentation to the other developers as a starting pointing to choose the solution.&lt;br /&gt;
&lt;br /&gt;
I like to allow my colleagues track my progress also.&lt;br /&gt;
&lt;br /&gt;
= 4) Project =&lt;br /&gt;
&lt;br /&gt;
See my [[../Proposal]].&lt;br /&gt;
&lt;br /&gt;
= 5) Practical considerations =&lt;br /&gt;
&lt;br /&gt;
== 5.1) Are you familiar with any of the following tools or languages? ==&lt;br /&gt;
&lt;br /&gt;
* I'm familiar with the '''C++ programming language''' and the '''STL''' templates library. C++ is my programming language of choice for a long time already. I just need to master all the power of templates-machinery and I'll be happier yet.&lt;br /&gt;
* I never used '''Boost''', but I follow the Boost project and read the documentation of some pieces from time to time.&lt;br /&gt;
* I used '''SDL''' long time ago in a [https://code.google.com/p/eater-thief/ small game] for my first programming's classes. At the time, I didn't understand asynchronous/event-based-programming and other concepts very well and I was only an amateur at threading programming.&lt;br /&gt;
* I love '''Python'''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;s expressiveness power, but I never read a full programming book about it, so I don't even know what I don't know about the language. You can see [https://code.google.com/p/logica-whopper/ my last Python's project at googlecode].&lt;br /&gt;
* I'm familiar with '''cmake''' and I use it in some projects, but I never read a single line of code of '''scons'''.&lt;br /&gt;
* I'm familiar with '''Git''' (see my [https://github.com/vinipsmaker GitHub profile], for instance) version control system&lt;br /&gt;
* The first time a took a look at '''WML''' was this week, but this format reuses several patterns found in languages that I'm used to, such as preprocessor-like features from C, variables and expressions ressembling a bit of bash, the overall structure being a combination of INI and XML.&lt;br /&gt;
* My experience with '''Lua''' is near to zero, but I don't think this would be a problem. Learn a new language is easy. Learn a new programming paradigm is hard.&lt;br /&gt;
&lt;br /&gt;
== 5.2) Which tools do you normally use for development? Why do you use them? ==&lt;br /&gt;
&lt;br /&gt;
* I use '''Emacs''' editor, because it's an advanced text editor with support for multiple languages. IDEs are usually much intrusive and I don't like intrusive tools, so I just use Emacs. You can see my [https://code.google.com/p/vinipsmaker/source/browse/config/.emacs Emacs config here].&lt;br /&gt;
* '''LLVM/Clang''' compiler, because the colored output. But most of the time I'm using '''GCC'''.&lt;br /&gt;
* '''CMake''' build system, because it's fast (compared to autotools, at least on my machine), it's easy and has a build's progress status.&lt;br /&gt;
* '''git''' version control system, because has a lot of integrated features (branching easier and more powerful than in subversion, at least with the knowledge that I have).&lt;br /&gt;
* '''Meld diff tool''', because it has a nice GUI.&lt;br /&gt;
* '''Doxygen''' for documentation, because it's the best.&lt;br /&gt;
* ''C++''' programming language, because of control and expressiveness power (not as much as Python, but still better than Java).&lt;br /&gt;
* Any drop-down terminal (currently '''Terra''') with good support for tabs.&lt;br /&gt;
* Any rolling-release distro that do not separate packages in normal and “-dev”. Currently '''ArchLinux'''.&lt;br /&gt;
&lt;br /&gt;
== 5.3) What programming languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I'm fluent in C, C++, JavaScript, Java and MongoDB.&lt;br /&gt;
&lt;br /&gt;
== 5.4) Would you mind talking with your mentor on telephone / internet phone? ==&lt;br /&gt;
&lt;br /&gt;
I have an skype account, but you can always reach me via email (I read it daily/hourly/minutely).&lt;br /&gt;
&lt;br /&gt;
I can provide my phone number.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50833</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50833"/>
		<updated>2013-05-03T04:34:36Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
My proposal is to create a new addon server from scratch, using a modular design easy to extend and built on top of Boost asio. The objectives of the new server are:&lt;br /&gt;
&lt;br /&gt;
* Use a fully documented modular design&lt;br /&gt;
* Use [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] to deliver better performance (you can see a good in-depth look at the problem of handling tons of clients at [http://www.kegel.com/c10k.html])&lt;br /&gt;
** Better performance scalability are the main objectives of this proposal&lt;br /&gt;
* Use RAII extensively to provide good support for excepetions and avoid leaks (something essential to any code that is intended to run for ages)&lt;br /&gt;
* Support multiple login backends&lt;br /&gt;
* Support multiple database backends (but only one would be implemented in this GSoC)&lt;br /&gt;
* Better metadata support (extra arguments shouldn't be silently discarded)&lt;br /&gt;
* Better localization and internationalization support&lt;br /&gt;
* Store all versions of the addons&lt;br /&gt;
&lt;br /&gt;
== Support multiple login backends ==&lt;br /&gt;
&lt;br /&gt;
The aim of this feature is to provide a system ready-to-use on the ship date with its own database of users and a LDAP backend for future integration with the remaining Wesnoth online services. I would provide both backends (self and ldap) in this project.&lt;br /&gt;
&lt;br /&gt;
== Support multiple database backends ==&lt;br /&gt;
&lt;br /&gt;
The server architecture would abstract data CRUD (create, retrieve, update, delete) to allow different servers to be used.&lt;br /&gt;
&lt;br /&gt;
In this project, I'd only implement one concrete backend. This backend would use WML config files and would serve as an example to implement new backends.&lt;br /&gt;
&lt;br /&gt;
Each campaign would continue to be stored in files exactly how it's done now, so a transition to the new server wouldn't affect the current addons database.&lt;br /&gt;
&lt;br /&gt;
== Better metadata support ==&lt;br /&gt;
&lt;br /&gt;
Currently the addon is saved in the disk with few modifications, but the metadata used is fixed an cannot be extended (extra metadata is silently discarded). This project aims to better handle the metadata. Some features would be:&lt;br /&gt;
&lt;br /&gt;
* The server would allow the use of custom icons. Currently is required to use an icon that is already installed.&lt;br /&gt;
* Extra metadata wouldn't be discarded. This feature aims to provide better extensibility.&lt;br /&gt;
* Allow the use of metadata in query requests (eg. only show addons of type ''campaign'')&lt;br /&gt;
&lt;br /&gt;
== Better localization and internationalization support ==&lt;br /&gt;
&lt;br /&gt;
Wesnoth addons already has some degree of support for localization. When someone wants to upload an addon, all that needs to be done for the addon server recognizes the addon is put the following line under the ''.pbl file'':&lt;br /&gt;
&lt;br /&gt;
 translate=true&lt;br /&gt;
&lt;br /&gt;
The [[WesCamp]] project provides the infrastructure to enable internationalization of the addons. This project aims to extend the server to:&lt;br /&gt;
* host and associate translations with addons, keeping track of versions.&lt;br /&gt;
* expose an API usable by [[WesCamp]] folk (needs to be discussed)&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
The server would be built on top of [http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html boost.asio] and would run a fixed number of threads. Each thread would run its own event loop, maximizing the possible number of concurrent clients.&lt;br /&gt;
&lt;br /&gt;
An early draft of the components is shown below:&lt;br /&gt;
&lt;br /&gt;
http://vinipsmaker.googlecode.com/files/architecture.png&lt;br /&gt;
&lt;br /&gt;
The session component might implement multiple protocols and would be further broken down.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
Before the chosen students are announced (during the month of may), I'd finish the architecture draft and the new protocol spec and install an Debian chroot in my system that mimics Wesnoth main server. I may interact more with Wesnoth developers in this phase.&lt;br /&gt;
&lt;br /&gt;
I'd finish the initial components (the addon manager, the event loop and a functional session handling) before july 20. After that, I'd introduce threads (which should be ready in one week). Then I'd introduce and implement the several authentication mechanisms. I have less experience with LDAP (only as a sysadmin at [http://en.lccv.ufal.br/cluster/ LCCV] for a while) and would take more time to implement it.&lt;br /&gt;
&lt;br /&gt;
Every thing should be finished by the first week of september.&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of reasons can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50758</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50758"/>
		<updated>2013-05-02T03:42:46Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;. ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== 4.5) Include as much technical detail about your implementation as you can ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ... (this list is an OR and it's incomplete... a lot of things can motivate me)&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50757</id>
		<title>User:Vinipsmaker/GSoC13/Questionnaire</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50757"/>
		<updated>2013-05-02T03:31:20Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* 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&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1) Basics =&lt;br /&gt;
&lt;br /&gt;
== 1.1) Write a small introduction to yourself. ==&lt;br /&gt;
&lt;br /&gt;
I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates to me (github user, lastfm profile, ...), [https://about.me/vinipsmaker click here].&lt;br /&gt;
&lt;br /&gt;
== 1.2) State your preferred email address. ==&lt;br /&gt;
&lt;br /&gt;
vini.ipsmaker&amp;lt;at&amp;gt;gmail&amp;lt;dot&amp;gt;com&lt;br /&gt;
&lt;br /&gt;
== 1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it? ==&lt;br /&gt;
&lt;br /&gt;
My IRC's nickname is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
My forum's username is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
== 1.4) Why do you want to participate in summer of code? ==&lt;br /&gt;
&lt;br /&gt;
I love to develop and I think GSoC is an excellent initiative.&lt;br /&gt;
&lt;br /&gt;
== 1.5) What are you studying, subject, level and school? ==&lt;br /&gt;
&lt;br /&gt;
I'm majoring in computer science at Universidade Federal de Alagoas.&lt;br /&gt;
&lt;br /&gt;
== 1.6) What country are you from, at what time are you most likely to be able to join IRC? ==&lt;br /&gt;
&lt;br /&gt;
I'm from Brazil and I'm able to join IRC from 22:30 till 3:00 everyday, but I join IRC as soon as I connect to the internet and I'll probably be online from 17:00 till 4:00 (GMT time).&lt;br /&gt;
&lt;br /&gt;
== 1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when. ==&lt;br /&gt;
&lt;br /&gt;
I'll have 4h/day 3d/week classes.&lt;br /&gt;
&lt;br /&gt;
= 2) Experience =&lt;br /&gt;
&lt;br /&gt;
== 2.1) What programs/software have you worked on before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on a lot of projects. Among them:&lt;br /&gt;
&lt;br /&gt;
* A very very simple enrollment system built on top of [http://nodejs.org/ Node.js asynchronous web frameowork for JavaScript]&lt;br /&gt;
* A bomberman-like networked Qt-game (it lacks several things I'm planning to release in a refactored version)&lt;br /&gt;
* I've worked on a private GStreamer plugin in C&lt;br /&gt;
&lt;br /&gt;
Projects cited below aren't repeated here.&lt;br /&gt;
&lt;br /&gt;
== 2.2) Have you developed software in a team environment before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on some team projects before. Among other projects, I worked on:&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/ntouche/ An unfinished hypermedia diagramming tool for mobile]&lt;br /&gt;
* [http://brisa.garage.maemo.org/ An UPnP framework]&lt;br /&gt;
&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I never participated on Google Summer of Code before.&lt;br /&gt;
&lt;br /&gt;
== 2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement. ==&lt;br /&gt;
&lt;br /&gt;
I'm the lead developer of [https://github.com/vinipsmaker/tufao an asynchronous web framework for C++ built on top of Qt] and I'm the brazilian's translation maintainer for the [http://enlightenment.org/ Enlightenment project].&lt;br /&gt;
&lt;br /&gt;
== 2.5) Gaming experience - Are you a gamer? ==&lt;br /&gt;
&lt;br /&gt;
Yes, I'm a gamer.&lt;br /&gt;
&lt;br /&gt;
== 2.5.1) What type of gamer are you? ==&lt;br /&gt;
&lt;br /&gt;
I'm the type of gamer that like games that:&lt;br /&gt;
* Run on GNU/Linux&lt;br /&gt;
* Console games (preferably portable)&lt;br /&gt;
&lt;br /&gt;
== 2.5.2) What type of games? ==&lt;br /&gt;
&lt;br /&gt;
I like strategy games (like Wesnoth), Action-RPG games (like The Legend of Zelda) and dumb games (like mines and gnujump).&lt;br /&gt;
&lt;br /&gt;
== 2.5.3) What type of opponents do you prefer? ==&lt;br /&gt;
&lt;br /&gt;
I like to play against AI or against my AFK friends.&lt;br /&gt;
&lt;br /&gt;
== 2.5.4) Are you more interested in story or gameplay? ==&lt;br /&gt;
&lt;br /&gt;
Gameplay.&lt;br /&gt;
&lt;br /&gt;
== 2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. ==&lt;br /&gt;
&lt;br /&gt;
I finished some campaigns on single-player mode, but I avoid multiplayer-mode, because I always lose (shame on me).&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I fixed [https://gna.org/bugs/?20765 a bug within Wesnoth] and I'm waiting for the [https://github.com/wesnoth/wesnoth-old/pull/3 fix to being merged].&lt;br /&gt;
&lt;br /&gt;
= 3) Communication skills =&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I write some english posts on my [http://vinipsmaker.wordpress.com/category/en/ blog] and you can see the [http://vinipsmaker.github.io/tufao/ref/1.x/ Tufão documentation] (both written by myself).&lt;br /&gt;
&lt;br /&gt;
== 3.2) What spoken languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I can watch and understand videos about C++ (Bjarne Stroustroup, Herb Sutter, Andrei Alexandrescu, ...), but I never practice, so I must be terrible speaking.&lt;br /&gt;
&lt;br /&gt;
I'm fluent in brazilian portuguese.&lt;br /&gt;
&lt;br /&gt;
== 3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough. ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.4) Do you give constructive advice? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.5) Do you receive advice well? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.6) Are you good at sorting useful criticisms from useless ones? ==&lt;br /&gt;
&lt;br /&gt;
Usually not.&lt;br /&gt;
&lt;br /&gt;
== 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 &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want ==&lt;br /&gt;
&lt;br /&gt;
I tend to not wait for other people.&lt;br /&gt;
&lt;br /&gt;
If I face a surprising situation where I have more than one choice and each choice have its drawbacks, I'll document the choices and send this documentation to the other developers as a starting pointing to choose the solution.&lt;br /&gt;
&lt;br /&gt;
I like to allow my colleagues track my progress also.&lt;br /&gt;
&lt;br /&gt;
= 4) Project =&lt;br /&gt;
&lt;br /&gt;
See my [[../Proposal]].&lt;br /&gt;
&lt;br /&gt;
= 5) Practical considerations =&lt;br /&gt;
&lt;br /&gt;
== 5.1) Are you familiar with any of the following tools or languages? ==&lt;br /&gt;
&lt;br /&gt;
* I'm familiar with the '''C++ programming language''' and the '''STL''' templates library. C++ is my programming language of choice for a long time already. I just need to master all the power of templates-machinery and I'll be happier yet.&lt;br /&gt;
* I never used '''Boost''', but I follow the Boost project and read the documentation of some pieces from time to time.&lt;br /&gt;
* I used '''SDL''' long time ago in a [https://code.google.com/p/eater-thief/ small game] for my first programming's classes. At the time, I didn't understand asynchronous/event-based-programming and other concepts very well and I was only an amateur at threading programming.&lt;br /&gt;
* I love '''Python'''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;s expressiveness power, but I never read a full programming book about it, so I don't even know what I don't know about the language. You can see [https://code.google.com/p/logica-whopper/ my last Python's project at googlecode].&lt;br /&gt;
* I'm familiar with '''cmake''' and I use it in some projects, but I never read a single line of code of '''scons'''.&lt;br /&gt;
* I'm familiar with '''Git''' (see my [https://github.com/vinipsmaker GitHub profile], for instance) version control system&lt;br /&gt;
* The first time a took a look at '''WML''' was this week, but this format reuses several patterns found in languages that I'm used to, such as preprocessor-like features from C, variables and expressions ressembling a bit of bash, the overall structure being a combination of INI and XML.&lt;br /&gt;
* My experience with '''Lua''' is near to zero, but I don't think this would be a problem. Learn a new language is easy. Learn a new programming paradigm is hard.&lt;br /&gt;
&lt;br /&gt;
== 5.2) Which tools do you normally use for development? Why do you use them? ==&lt;br /&gt;
&lt;br /&gt;
* I use '''Emacs''' editor, because it's an advanced text editor with support for multiple languages. IDEs are usually much intrusive and I don't like intrusive tools, so I just use Emacs. You can see my [https://code.google.com/p/vinipsmaker/source/browse/config/.emacs Emacs config here].&lt;br /&gt;
* '''LLVM/Clang''' compiler, because the colored output. But most of the time I'm using '''GCC'''.&lt;br /&gt;
* '''CMake''' build system, because it's fast (compared to autotools, at least on my machine), it's easy and has a build's progress status.&lt;br /&gt;
* '''git''' version control system, because has a lot of integrated features (branching easier and more powerful than in subversion, at least with the knowledge that I have).&lt;br /&gt;
* '''Meld diff tool''', because it has a nice GUI.&lt;br /&gt;
* '''Doxygen''' for documentation, because it's the best.&lt;br /&gt;
* ''C++''' programming language, because of control and expressiveness power (not as much as Python, but still better than Java).&lt;br /&gt;
* Any drop-down terminal (currently '''Terra''') with good support for tabs.&lt;br /&gt;
* Any rolling-release distro that do not separate packages in normal and “-dev”. Currently '''ArchLinux'''.&lt;br /&gt;
&lt;br /&gt;
== 5.3) What programming languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I'm fluent in C, C++, JavaScript, Java and MongoDB.&lt;br /&gt;
&lt;br /&gt;
== 5.4) Would you mind talking with your mentor on telephone / internet phone? ==&lt;br /&gt;
&lt;br /&gt;
I have an skype account, but you can always reach me via email (I read it daily/hourly/minutely).&lt;br /&gt;
&lt;br /&gt;
I can provide my phone number.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50756</id>
		<title>User:Vinipsmaker/GSoC13/Questionnaire</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50756"/>
		<updated>2013-05-02T03:30:36Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* 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&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1) Basics =&lt;br /&gt;
&lt;br /&gt;
== 1.1) Write a small introduction to yourself. ==&lt;br /&gt;
&lt;br /&gt;
I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates to me (github user, lastfm profile, ...), [https://about.me/vinipsmaker click here].&lt;br /&gt;
&lt;br /&gt;
== 1.2) State your preferred email address. ==&lt;br /&gt;
&lt;br /&gt;
vini.ipsmaker&amp;lt;at&amp;gt;gmail&amp;lt;dot&amp;gt;com&lt;br /&gt;
&lt;br /&gt;
== 1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it? ==&lt;br /&gt;
&lt;br /&gt;
My IRC's nickname is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
My forum's username is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
== 1.4) Why do you want to participate in summer of code? ==&lt;br /&gt;
&lt;br /&gt;
I love to develop and I think GSoC is an excellent initiative.&lt;br /&gt;
&lt;br /&gt;
== 1.5) What are you studying, subject, level and school? ==&lt;br /&gt;
&lt;br /&gt;
I'm majoring in computer science at Universidade Federal de Alagoas.&lt;br /&gt;
&lt;br /&gt;
== 1.6) What country are you from, at what time are you most likely to be able to join IRC? ==&lt;br /&gt;
&lt;br /&gt;
I'm from Brazil and I'm able to join IRC from 22:30 till 3:00 everyday, but I join IRC as soon as I connect to the internet and I'll probably be online from 17:00 till 4:00 (GMT time).&lt;br /&gt;
&lt;br /&gt;
== 1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when. ==&lt;br /&gt;
&lt;br /&gt;
I'll have 4h/day 3d/week classes.&lt;br /&gt;
&lt;br /&gt;
= 2) Experience =&lt;br /&gt;
&lt;br /&gt;
== 2.1) What programs/software have you worked on before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on a lot of projects. Among them:&lt;br /&gt;
&lt;br /&gt;
* A very very simple enrollment system built on top of [http://nodejs.org/ Node.js asynchronous web frameowork for JavaScript]&lt;br /&gt;
* A bomberman-like networked Qt-game (it lacks several things I'm planning to release in a refactored version)&lt;br /&gt;
* I've worked on a private GStreamer plugin in C&lt;br /&gt;
&lt;br /&gt;
Projects cited below aren't repeated here.&lt;br /&gt;
&lt;br /&gt;
== 2.2) Have you developed software in a team environment before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on some team projects before. Among other projects, I worked on:&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/ntouche/ An unfinished hypermedia diagramming tool for mobile]&lt;br /&gt;
* [http://brisa.garage.maemo.org/ An UPnP framework]&lt;br /&gt;
&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I never participated on Google Summer of Code before.&lt;br /&gt;
&lt;br /&gt;
== 2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement. ==&lt;br /&gt;
&lt;br /&gt;
I'm the lead developer of [https://github.com/vinipsmaker/tufao an asynchronous web framework for C++ built on top of Qt] and I'm the brazilian's translation maintainer for the [http://enlightenment.org/ Enlightenment project].&lt;br /&gt;
&lt;br /&gt;
== 2.5) Gaming experience - Are you a gamer? ==&lt;br /&gt;
&lt;br /&gt;
Yes, I'm a gamer.&lt;br /&gt;
&lt;br /&gt;
== 2.5.1) What type of gamer are you? ==&lt;br /&gt;
&lt;br /&gt;
I'm the type of gamer that like games that:&lt;br /&gt;
* Run on GNU/Linux&lt;br /&gt;
* Console games (preferably portable)&lt;br /&gt;
&lt;br /&gt;
== 2.5.2) What type of games? ==&lt;br /&gt;
&lt;br /&gt;
I like strategy games (like Wesnoth), Action-RPG games (like The Legend of Zelda) and dumb games (like mines and gnujump).&lt;br /&gt;
&lt;br /&gt;
== 2.5.3) What type of opponents do you prefer? ==&lt;br /&gt;
&lt;br /&gt;
I like to play against AI or against my AFK friends.&lt;br /&gt;
&lt;br /&gt;
== 2.5.4) Are you more interested in story or gameplay? ==&lt;br /&gt;
&lt;br /&gt;
Gameplay.&lt;br /&gt;
&lt;br /&gt;
== 2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. ==&lt;br /&gt;
&lt;br /&gt;
I finished some campaigns on single-player mode, but I avoid multiplayer-mode, because I always lose (shame on me).&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I fixed [a bug within Wesnoth](https://gna.org/bugs/?20765) and I'm waiting for the [fix to being merged](https://github.com/wesnoth/wesnoth-old/pull/3).&lt;br /&gt;
&lt;br /&gt;
= 3) Communication skills =&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I write some english posts on my [http://vinipsmaker.wordpress.com/category/en/ blog] and you can see the [http://vinipsmaker.github.io/tufao/ref/1.x/ Tufão documentation] (both written by myself).&lt;br /&gt;
&lt;br /&gt;
== 3.2) What spoken languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I can watch and understand videos about C++ (Bjarne Stroustroup, Herb Sutter, Andrei Alexandrescu, ...), but I never practice, so I must be terrible speaking.&lt;br /&gt;
&lt;br /&gt;
I'm fluent in brazilian portuguese.&lt;br /&gt;
&lt;br /&gt;
== 3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough. ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.4) Do you give constructive advice? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.5) Do you receive advice well? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.6) Are you good at sorting useful criticisms from useless ones? ==&lt;br /&gt;
&lt;br /&gt;
Usually not.&lt;br /&gt;
&lt;br /&gt;
== 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 &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want ==&lt;br /&gt;
&lt;br /&gt;
I tend to not wait for other people.&lt;br /&gt;
&lt;br /&gt;
If I face a surprising situation where I have more than one choice and each choice have its drawbacks, I'll document the choices and send this documentation to the other developers as a starting pointing to choose the solution.&lt;br /&gt;
&lt;br /&gt;
I like to allow my colleagues track my progress also.&lt;br /&gt;
&lt;br /&gt;
= 4) Project =&lt;br /&gt;
&lt;br /&gt;
See my [[../Proposal]].&lt;br /&gt;
&lt;br /&gt;
= 5) Practical considerations =&lt;br /&gt;
&lt;br /&gt;
== 5.1) Are you familiar with any of the following tools or languages? ==&lt;br /&gt;
&lt;br /&gt;
* I'm familiar with the '''C++ programming language''' and the '''STL''' templates library. C++ is my programming language of choice for a long time already. I just need to master all the power of templates-machinery and I'll be happier yet.&lt;br /&gt;
* I never used '''Boost''', but I follow the Boost project and read the documentation of some pieces from time to time.&lt;br /&gt;
* I used '''SDL''' long time ago in a [https://code.google.com/p/eater-thief/ small game] for my first programming's classes. At the time, I didn't understand asynchronous/event-based-programming and other concepts very well and I was only an amateur at threading programming.&lt;br /&gt;
* I love '''Python'''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;s expressiveness power, but I never read a full programming book about it, so I don't even know what I don't know about the language. You can see [https://code.google.com/p/logica-whopper/ my last Python's project at googlecode].&lt;br /&gt;
* I'm familiar with '''cmake''' and I use it in some projects, but I never read a single line of code of '''scons'''.&lt;br /&gt;
* I'm familiar with '''Git''' (see my [https://github.com/vinipsmaker GitHub profile], for instance) version control system&lt;br /&gt;
* The first time a took a look at '''WML''' was this week, but this format reuses several patterns found in languages that I'm used to, such as preprocessor-like features from C, variables and expressions ressembling a bit of bash, the overall structure being a combination of INI and XML.&lt;br /&gt;
* My experience with '''Lua''' is near to zero, but I don't think this would be a problem. Learn a new language is easy. Learn a new programming paradigm is hard.&lt;br /&gt;
&lt;br /&gt;
== 5.2) Which tools do you normally use for development? Why do you use them? ==&lt;br /&gt;
&lt;br /&gt;
* I use '''Emacs''' editor, because it's an advanced text editor with support for multiple languages. IDEs are usually much intrusive and I don't like intrusive tools, so I just use Emacs. You can see my [https://code.google.com/p/vinipsmaker/source/browse/config/.emacs Emacs config here].&lt;br /&gt;
* '''LLVM/Clang''' compiler, because the colored output. But most of the time I'm using '''GCC'''.&lt;br /&gt;
* '''CMake''' build system, because it's fast (compared to autotools, at least on my machine), it's easy and has a build's progress status.&lt;br /&gt;
* '''git''' version control system, because has a lot of integrated features (branching easier and more powerful than in subversion, at least with the knowledge that I have).&lt;br /&gt;
* '''Meld diff tool''', because it has a nice GUI.&lt;br /&gt;
* '''Doxygen''' for documentation, because it's the best.&lt;br /&gt;
* ''C++''' programming language, because of control and expressiveness power (not as much as Python, but still better than Java).&lt;br /&gt;
* Any drop-down terminal (currently '''Terra''') with good support for tabs.&lt;br /&gt;
* Any rolling-release distro that do not separate packages in normal and “-dev”. Currently '''ArchLinux'''.&lt;br /&gt;
&lt;br /&gt;
== 5.3) What programming languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I'm fluent in C, C++, JavaScript, Java and MongoDB.&lt;br /&gt;
&lt;br /&gt;
== 5.4) Would you mind talking with your mentor on telephone / internet phone? ==&lt;br /&gt;
&lt;br /&gt;
I have an skype account, but you can always reach me via email (I read it daily/hourly/minutely).&lt;br /&gt;
&lt;br /&gt;
I can provide my phone number.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50721</id>
		<title>User:Vinipsmaker/GSoC13/Questionnaire</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50721"/>
		<updated>2013-05-01T05:51:53Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* 5.1) Are you familiar with any of the following tools or languages? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1) Basics =&lt;br /&gt;
&lt;br /&gt;
== 1.1) Write a small introduction to yourself. ==&lt;br /&gt;
&lt;br /&gt;
I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates to me (github user, lastfm profile, ...), [https://about.me/vinipsmaker click here].&lt;br /&gt;
&lt;br /&gt;
== 1.2) State your preferred email address. ==&lt;br /&gt;
&lt;br /&gt;
vini.ipsmaker&amp;lt;at&amp;gt;gmail&amp;lt;dot&amp;gt;com&lt;br /&gt;
&lt;br /&gt;
== 1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it? ==&lt;br /&gt;
&lt;br /&gt;
My IRC's nickname is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
My forum's username is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
== 1.4) Why do you want to participate in summer of code? ==&lt;br /&gt;
&lt;br /&gt;
I love to develop and I think GSoC is an excellent initiative.&lt;br /&gt;
&lt;br /&gt;
== 1.5) What are you studying, subject, level and school? ==&lt;br /&gt;
&lt;br /&gt;
I'm majoring in computer science at Universidade Federal de Alagoas.&lt;br /&gt;
&lt;br /&gt;
== 1.6) What country are you from, at what time are you most likely to be able to join IRC? ==&lt;br /&gt;
&lt;br /&gt;
I'm from Brazil and I'm able to join IRC from 22:30 till 3:00 everyday, but I join IRC as soon as I connect to the internet and I'll probably be online from 17:00 till 4:00 (GMT time).&lt;br /&gt;
&lt;br /&gt;
== 1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when. ==&lt;br /&gt;
&lt;br /&gt;
I'll have 4h/day 3d/week classes.&lt;br /&gt;
&lt;br /&gt;
= 2) Experience =&lt;br /&gt;
&lt;br /&gt;
== 2.1) What programs/software have you worked on before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on a lot of projects. Among them:&lt;br /&gt;
&lt;br /&gt;
* A very very simple enrollment system built on top of [http://nodejs.org/ Node.js asynchronous web frameowork for JavaScript]&lt;br /&gt;
* A bomberman-like networked Qt-game (it lacks several things I'm planning to release in a refactored version)&lt;br /&gt;
* I've worked on a private GStreamer plugin in C&lt;br /&gt;
&lt;br /&gt;
Projects cited below aren't repeated here.&lt;br /&gt;
&lt;br /&gt;
== 2.2) Have you developed software in a team environment before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on some team projects before. Among other projects, I worked on:&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/ntouche/ An unfinished hypermedia diagramming tool for mobile]&lt;br /&gt;
* [http://brisa.garage.maemo.org/ An UPnP framework]&lt;br /&gt;
&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I never participated on Google Summer of Code before.&lt;br /&gt;
&lt;br /&gt;
== 2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement. ==&lt;br /&gt;
&lt;br /&gt;
I'm the lead developer of [https://github.com/vinipsmaker/tufao an asynchronous web framework for C++ built on top of Qt] and I'm the brazilian's translation maintainer for the [http://enlightenment.org/ Enlightenment project].&lt;br /&gt;
&lt;br /&gt;
== 2.5) Gaming experience - Are you a gamer? ==&lt;br /&gt;
&lt;br /&gt;
Yes, I'm a gamer.&lt;br /&gt;
&lt;br /&gt;
== 2.5.1) What type of gamer are you? ==&lt;br /&gt;
&lt;br /&gt;
I'm the type of gamer that like games that:&lt;br /&gt;
* Run on GNU/Linux&lt;br /&gt;
* Console games (preferably portable)&lt;br /&gt;
&lt;br /&gt;
== 2.5.2) What type of games? ==&lt;br /&gt;
&lt;br /&gt;
I like strategy games (like Wesnoth), Action-RPG games (like The Legend of Zelda) and dumb games (like mines and gnujump).&lt;br /&gt;
&lt;br /&gt;
== 2.5.3) What type of opponents do you prefer? ==&lt;br /&gt;
&lt;br /&gt;
I like to play against AI or against my AFK friends.&lt;br /&gt;
&lt;br /&gt;
== 2.5.4) Are you more interested in story or gameplay? ==&lt;br /&gt;
&lt;br /&gt;
Gameplay.&lt;br /&gt;
&lt;br /&gt;
== 2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. ==&lt;br /&gt;
&lt;br /&gt;
I finished some campaigns on single-player mode, but I avoid multiplayer-mode, because I always lose (shame on me).&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I didn't send any patches to Wesnoth (yet!). I hope this will change soon.&lt;br /&gt;
&lt;br /&gt;
= 3) Communication skills =&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I write some english posts on my [http://vinipsmaker.wordpress.com/category/en/ blog] and you can see the [http://vinipsmaker.github.io/tufao/ref/1.x/ Tufão documentation] (both written by myself).&lt;br /&gt;
&lt;br /&gt;
== 3.2) What spoken languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I can watch and understand videos about C++ (Bjarne Stroustroup, Herb Sutter, Andrei Alexandrescu, ...), but I never practice, so I must be terrible speaking.&lt;br /&gt;
&lt;br /&gt;
I'm fluent in brazilian portuguese.&lt;br /&gt;
&lt;br /&gt;
== 3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough. ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.4) Do you give constructive advice? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.5) Do you receive advice well? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.6) Are you good at sorting useful criticisms from useless ones? ==&lt;br /&gt;
&lt;br /&gt;
Usually not.&lt;br /&gt;
&lt;br /&gt;
== 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 &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want ==&lt;br /&gt;
&lt;br /&gt;
I tend to not wait for other people.&lt;br /&gt;
&lt;br /&gt;
If I face a surprising situation where I have more than one choice and each choice have its drawbacks, I'll document the choices and send this documentation to the other developers as a starting pointing to choose the solution.&lt;br /&gt;
&lt;br /&gt;
I like to allow my colleagues track my progress also.&lt;br /&gt;
&lt;br /&gt;
= 4) Project =&lt;br /&gt;
&lt;br /&gt;
See my [[../Proposal]].&lt;br /&gt;
&lt;br /&gt;
= 5) Practical considerations =&lt;br /&gt;
&lt;br /&gt;
== 5.1) Are you familiar with any of the following tools or languages? ==&lt;br /&gt;
&lt;br /&gt;
* I'm familiar with the '''C++ programming language''' and the '''STL''' templates library. C++ is my programming language of choice for a long time already. I just need to master all the power of templates-machinery and I'll be happier yet.&lt;br /&gt;
* I never used '''Boost''', but I follow the Boost project and read the documentation of some pieces from time to time.&lt;br /&gt;
* I used '''SDL''' long time ago in a [https://code.google.com/p/eater-thief/ small game] for my first programming's classes. At the time, I didn't understand asynchronous/event-based-programming and other concepts very well and I was only an amateur at threading programming.&lt;br /&gt;
* I love '''Python'''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;s expressiveness power, but I never read a full programming book about it, so I don't even know what I don't know about the language. You can see [https://code.google.com/p/logica-whopper/ my last Python's project at googlecode].&lt;br /&gt;
* I'm familiar with '''cmake''' and I use it in some projects, but I never read a single line of code of '''scons'''.&lt;br /&gt;
* I'm familiar with '''Git''' (see my [https://github.com/vinipsmaker GitHub profile], for instance) version control system&lt;br /&gt;
* The first time a took a look at '''WML''' was this week, but this format reuses several patterns found in languages that I'm used to, such as preprocessor-like features from C, variables and expressions ressembling a bit of bash, the overall structure being a combination of INI and XML.&lt;br /&gt;
* My experience with '''Lua''' is near to zero, but I don't think this would be a problem. Learn a new language is easy. Learn a new programming paradigm is hard.&lt;br /&gt;
&lt;br /&gt;
== 5.2) Which tools do you normally use for development? Why do you use them? ==&lt;br /&gt;
&lt;br /&gt;
* I use '''Emacs''' editor, because it's an advanced text editor with support for multiple languages. IDEs are usually much intrusive and I don't like intrusive tools, so I just use Emacs. You can see my [https://code.google.com/p/vinipsmaker/source/browse/config/.emacs Emacs config here].&lt;br /&gt;
* '''LLVM/Clang''' compiler, because the colored output. But most of the time I'm using '''GCC'''.&lt;br /&gt;
* '''CMake''' build system, because it's fast (compared to autotools, at least on my machine), it's easy and has a build's progress status.&lt;br /&gt;
* '''git''' version control system, because has a lot of integrated features (branching easier and more powerful than in subversion, at least with the knowledge that I have).&lt;br /&gt;
* '''Meld diff tool''', because it has a nice GUI.&lt;br /&gt;
* '''Doxygen''' for documentation, because it's the best.&lt;br /&gt;
* ''C++''' programming language, because of control and expressiveness power (not as much as Python, but still better than Java).&lt;br /&gt;
* Any drop-down terminal (currently '''Terra''') with good support for tabs.&lt;br /&gt;
* Any rolling-release distro that do not separate packages in normal and “-dev”. Currently '''ArchLinux'''.&lt;br /&gt;
&lt;br /&gt;
== 5.3) What programming languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I'm fluent in C, C++, JavaScript, Java and MongoDB.&lt;br /&gt;
&lt;br /&gt;
== 5.4) Would you mind talking with your mentor on telephone / internet phone? ==&lt;br /&gt;
&lt;br /&gt;
I have an skype account, but you can always reach me via email (I read it daily/hourly/minutely).&lt;br /&gt;
&lt;br /&gt;
I can provide my phone number.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=ConditionalActionsWML&amp;diff=50720</id>
		<title>ConditionalActionsWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=ConditionalActionsWML&amp;diff=50720"/>
		<updated>2013-05-01T04:15:42Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
Part of [[ActionWML]], Conditional Actions WML is used to describe container actions that create branching and flow control for WML. The [[#Conditional Actions|conditional actions]] act as gatekeepers, encapsulating other actions with [[#Condition Tags|conditions]] which must be met before an action can take place. These conditional actions also contain the actions which will take place if those conditions are met and, in some cases, what actions will take place if they are ''not'' met.&lt;br /&gt;
&lt;br /&gt;
== Conditional Actions ==&lt;br /&gt;
&lt;br /&gt;
These actions describe actions that should be executed only if certain conditions are met.&lt;br /&gt;
&lt;br /&gt;
=== [if] ===&lt;br /&gt;
&lt;br /&gt;
Executes actions only if the contained [[#Condition Tags|conditions]] are met.&lt;br /&gt;
&lt;br /&gt;
* [[#Condition Tags|Condition Tags]]: Conditions which must be met for the actions in the '''[then]''' tag to be executed.&lt;br /&gt;
&lt;br /&gt;
* '''[then]''': Contains [[ActionWML|actions]] which should be executed if all conditions evaluate as true ''or'' if any single '''[or]''' tag evaluates as true.&lt;br /&gt;
&lt;br /&gt;
* '''[else]''': Contains [[ActionWML|actions]] which should be executed if any condition evaluates as false ''and'' '''all''' of the '''[or]''' tags evaluate as false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Attention''': There are tags named [if] and [else] inside [animation] (see [[AnimationWML#.5Bif.5D_and_.5Belse.5D|AnimationWML]]), which have a different syntax.&lt;br /&gt;
&lt;br /&gt;
Example usage:&lt;br /&gt;
  [if]&lt;br /&gt;
     [variable]&lt;br /&gt;
        name=we.gold&lt;br /&gt;
        greater_than=$they.gold&lt;br /&gt;
     [/variable]&lt;br /&gt;
     [then]&lt;br /&gt;
        [message]&lt;br /&gt;
           message=This should be easy!&lt;br /&gt;
        [/message]&lt;br /&gt;
     [/then]&lt;br /&gt;
     [else]&lt;br /&gt;
        [message]&lt;br /&gt;
           message=This will not be easy!&lt;br /&gt;
        [/message]&lt;br /&gt;
     [/else]&lt;br /&gt;
  [/if]&lt;br /&gt;
&lt;br /&gt;
=== [switch] ===&lt;br /&gt;
&lt;br /&gt;
The '''[switch]''' tag is a special case because it does not use [[#Condition Tags|Condition Tags]] to control whether actions are performed. Instead, it executes different sets of actions based on the value of a variable.&lt;br /&gt;
&lt;br /&gt;
* '''variable''': The name of the variable to check.&lt;br /&gt;
* '''[case]''': Case tag which forms a block containing:&lt;br /&gt;
** '''value''': The value to test the variable's value against. &lt;br /&gt;
This can be a comma separated list of values.&lt;br /&gt;
** [[ActionWML|Action WML]]: Action WML to execute if the variable matches the value. (The rest of the '''[case]''' block after the '''value''' attribute.)&lt;br /&gt;
* '''[else]''': Else tag which forms a block of [[ActionWML|Action WML]] to execute if no '''[case]''' block contains a '''value''' matching the value of the '''variable'''.&lt;br /&gt;
&lt;br /&gt;
Example usage:&lt;br /&gt;
  [switch]&lt;br /&gt;
     variable=foo&lt;br /&gt;
     [case]&lt;br /&gt;
        value=&amp;quot;A&amp;quot;&lt;br /&gt;
        ... WML if foo=A ...&lt;br /&gt;
     [/case]&lt;br /&gt;
     [case]&lt;br /&gt;
        value=&amp;quot;B&amp;quot;&lt;br /&gt;
        ... WML if foo=B ...&lt;br /&gt;
     [/case]&lt;br /&gt;
     [else]&lt;br /&gt;
        ... WML if not foo=A nor foo=B ...&lt;br /&gt;
     [/else]&lt;br /&gt;
  [/switch]&lt;br /&gt;
&lt;br /&gt;
=== [while] ===&lt;br /&gt;
&lt;br /&gt;
Like the '''[if]''' tag, executes actions only if conditions described in the contained [[#Condition Tags|conditions]] are met. Additionally, the '''[while]''' tag ''continues'' to execute the actions until the contained [[#Condition Tags|conditions]] are no longer met. Executes a maximum of 65536 iterations per invocation.&lt;br /&gt;
&lt;br /&gt;
* [[#Condition Tags|Condition Tags]]: Conditions which must be met for the actions in the '''[do]''' tag to be executed.&lt;br /&gt;
&lt;br /&gt;
* '''[do]''': contains [[ActionWML|actions]] that should be executed repeatedly until some condition is false.&lt;br /&gt;
&lt;br /&gt;
The '''[while]''' tag is useful for iterating over an array.&lt;br /&gt;
An array is a list of values.&lt;br /&gt;
The ''number''th value in the array '''array''' is stored in the WML variable '''''array''[number]'''.&lt;br /&gt;
Note that if '''number''' is the value of the variable '''variable''',&lt;br /&gt;
the expression '''$''array''[$variable]''' will return the ''number''th value in ''array''.&lt;br /&gt;
&lt;br /&gt;
==== 'FOREACH' Macro ====&lt;br /&gt;
This macro simplifies the use of a '''[while]''' tag to create a ''for-each'' iteration format. This is useful, for example, when you want to iterate over each row in a table. To use it, use the [http://www.wesnoth.org/macro-reference.xhtml#FOREACH FOREACH] and [http://www.wesnoth.org/macro-reference.xhtml#NEXT NEXT] macros.&lt;br /&gt;
&lt;br /&gt;
==== 'REPEAT' Macro ====&lt;br /&gt;
This macro simplifies the use of a '''[while]''' tag to execute the same  [[ActionWML|actions]] repeatedly for a specified number of times. To use it, use the [http://www.wesnoth.org/macro-reference.xhtml#REPEAT REPEAT] macro.&lt;br /&gt;
&lt;br /&gt;
=== [command] ===&lt;br /&gt;
&lt;br /&gt;
This tag is more of an Unconditional Action: when it is encountered, the [[ActionWML|actions]] in its content are simply executed once. In practice, this tag serves little purpose. However, it may be used to arrange actions together in logical groups, for example, with actions that are stored in an array and later inserted.&lt;br /&gt;
(It is also used inside of [set_menu_item] and [option] of [[InterfaceActionsWML]].)&lt;br /&gt;
&lt;br /&gt;
== Condition Tags ==&lt;br /&gt;
&lt;br /&gt;
===True Condition Tags===&lt;br /&gt;
These tags describe conditions which must be met before an action can take place. Some or all of them are used in the various [[#Conditional Actions|Conditional Actions]].&lt;br /&gt;
&lt;br /&gt;
; [have_unit]&lt;br /&gt;
: A unit with greater than zero hit points matching this filter exists.&lt;br /&gt;
:* [[StandardUnitFilter]] '''*''': Selection criteria. Do not use a [filter] tag.&lt;br /&gt;
:* '''count''': ''(Optional)'' If used, a number of units equal to the value must match the filter. Accepts a number, range, or comma separated range. If not used, the default value is &amp;quot;1-99999&amp;quot;.&lt;br /&gt;
:* '''search_recall_list''': ''(Optional)'' If 'yes', search through recall list too. (Default is 'no')&lt;br /&gt;
&lt;br /&gt;
; [have_location]&lt;br /&gt;
: A location matching this filter exists.&lt;br /&gt;
:* [[StandardLocationFilter]]: Selection criteria.&lt;br /&gt;
:* '''count''': ''(Optional)'' If used, a number of locations equal to the value must match the filter. Accepts a number, range, or comma separated range. If not used, the default value is &amp;quot;1-99999&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
; [variable]&lt;br /&gt;
: Test the value of a WML [[VariablesWML|variable]] against another value.&lt;br /&gt;
:* '''name''': The name of the variable to test.&lt;br /&gt;
:* ''&amp;lt;comparison&amp;gt;'': '''One''' of the following keys must be used to compare the value of the named variable, represented as ''$name'' below, against another value:&lt;br /&gt;
:** '''contains''': ''$name'' contains this string value.&lt;br /&gt;
:** '''equals''': ''$name'' is equal (string wise) to this value.&lt;br /&gt;
:** '''not_equals''': ''$name'' is not equal (string wise) to this value.&lt;br /&gt;
:** '''numerical_equals''': ''$name'' is equal (numerically) to this value. &lt;br /&gt;
:** '''numerical_not_equals''': ''$name'' is not equal (numerically) to this value. '''*'''&amp;lt;br /&amp;gt;'''*''' Using equals is faster. The point of numerical_equals and boolean_equals is not performance, it's representation. For instance, &amp;quot;1&amp;quot; and &amp;quot;1.0&amp;quot; are not equal as strings but they are equal as numbers; and &amp;quot;yes&amp;quot; and &amp;quot;true&amp;quot; are not equal as strings but they are equal as booleans. (This also explains why equals is faster: it is a straightforward comparison that doesn't try to understand what you have written.)&lt;br /&gt;
:** '''greater_than''': ''$name'' is greater than this value.&lt;br /&gt;
:** '''greater_than_equal_to''': ''$name'' is greater than or equal to this value.&lt;br /&gt;
:** '''less_than''': ''$name'' is less than this value.&lt;br /&gt;
:** '''less_than_equal_to''': ''$name'' is less than or equal to this value.&lt;br /&gt;
:** '''boolean_equals''': ''$name'' has an equivalent boolean value. '''*'''&lt;br /&gt;
:** '''boolean_not_equals''': ''$name'' does not have an equivalent boolean value. '''*'''&lt;br /&gt;
====Boolean Values====&lt;br /&gt;
When values are evaluated as boolean values they are checked to see if they are ''false'' or ''true''.&lt;br /&gt;
&lt;br /&gt;
* These values are evaluated as ''true'': '''&amp;quot;yes&amp;quot;''' and '''&amp;quot;true&amp;quot;'''&lt;br /&gt;
* These values are evaluated as ''false'': '''&amp;quot;no&amp;quot;''', '''&amp;quot;false&amp;quot;''' and '''&amp;quot;&amp;quot;'''(uninitialized)&lt;br /&gt;
** However, in contexts where ''true'' is defined as the default value, an uninitialized value would be considered true. &lt;br /&gt;
&lt;br /&gt;
'''Warning:''' Do not use &amp;quot;off&amp;quot;, &amp;quot;on&amp;quot;, integers, floating-point numbers or anything else than the above as booleans.&lt;br /&gt;
&lt;br /&gt;
=== Meta-Condition Tags ===&lt;br /&gt;
&lt;br /&gt;
These tags aren't really conditions, themselves. Instead they are wrapped around condition tags to group them into multiple conditions that must all be met, lists of conditions that only one must be met, or conditions that must not be met. These are handled in top-to-bottom order in any combination you can think of. One important thing to remember is if you are using '''[or]''' tags, the first conditional statement should ''not'' have an '''[or]''' tag wrapped around it.&lt;br /&gt;
&lt;br /&gt;
; [and]&lt;br /&gt;
: A condition which must evaluate to true in addition to any other conditions that precede it. This is useful as a bracket for complex conditions, but not strictly necessary.&lt;br /&gt;
:* [[#Condition Tags|Condition Tags]]: If these evaluate to true, the '''[and]''' tag evaluates to true.&lt;br /&gt;
&lt;br /&gt;
; [or]&lt;br /&gt;
: A condition which, when false, has no effect, but when true, allows previously failed conditions to be ignored. &lt;br /&gt;
:* [[#Condition Tags|Condition Tags]]: If these evaluate to true, the '''[or]''' tag evaluates to true. &lt;br /&gt;
&lt;br /&gt;
; [not]&lt;br /&gt;
: Similar to [and], but its contents must be false. Thus it reverses the evaluation of its contents. Since a normal condition tag without contents is always considered true, an empty [not] is always considered false.&lt;br /&gt;
:* [[#Condition Tags|Condition Tags]]: If these evaluate to true, the '''[not]''' tag evaluates to false. If these evaluate to false, the '''[not]''' tag evaluates to true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When multiple meta-conditions are encountered one after another in a containing tag, the evaluation order is as follows:&lt;br /&gt;
# the immediate contents of the containing tag are evaluated first to determine if there is a successful match known as a &amp;quot;true&amp;quot; condition&lt;br /&gt;
# this true or false result is combined with the top meta-condition to produce another true or false result&lt;br /&gt;
# this result is combined with the next meta-condition, and so on. However, if the engine recognizes that no remaining meta-conditions might reverse the result, it will cleverly skip them.&lt;br /&gt;
# if the final result is a successful match, then the [[:Category:ActionsWML|action]] will take place.&lt;br /&gt;
&lt;br /&gt;
For more details on use of meta-conditions, see [[AdvancedConditionalWML|these examples]].&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[VariablesWML]]&lt;br /&gt;
* [[InternalActionsWML]]&lt;br /&gt;
* [[DirectActionsWML]]&lt;br /&gt;
* [[InterfaceActionsWML]]&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;br /&gt;
[[Category: ActionsWML]]&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50559</id>
		<title>User:Vinipsmaker/GSoC13/Questionnaire</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50559"/>
		<updated>2013-04-28T19:19:54Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* 1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1) Basics =&lt;br /&gt;
&lt;br /&gt;
== 1.1) Write a small introduction to yourself. ==&lt;br /&gt;
&lt;br /&gt;
I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates to me (github user, lastfm profile, ...), [https://about.me/vinipsmaker click here].&lt;br /&gt;
&lt;br /&gt;
== 1.2) State your preferred email address. ==&lt;br /&gt;
&lt;br /&gt;
vini.ipsmaker&amp;lt;at&amp;gt;gmail&amp;lt;dot&amp;gt;com&lt;br /&gt;
&lt;br /&gt;
== 1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it? ==&lt;br /&gt;
&lt;br /&gt;
My IRC's nickname is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
My forum's username is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
== 1.4) Why do you want to participate in summer of code? ==&lt;br /&gt;
&lt;br /&gt;
I love to develop and I think GSoC is an excellent initiative.&lt;br /&gt;
&lt;br /&gt;
== 1.5) What are you studying, subject, level and school? ==&lt;br /&gt;
&lt;br /&gt;
I'm majoring in computer science at Universidade Federal de Alagoas.&lt;br /&gt;
&lt;br /&gt;
== 1.6) What country are you from, at what time are you most likely to be able to join IRC? ==&lt;br /&gt;
&lt;br /&gt;
I'm from Brazil and I'm able to join IRC from 22:30 till 3:00 everyday, but I join IRC as soon as I connect to the internet and I'll probably be online from 17:00 till 4:00 (GMT time).&lt;br /&gt;
&lt;br /&gt;
== 1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when. ==&lt;br /&gt;
&lt;br /&gt;
I'll have 4h/day 3d/week classes.&lt;br /&gt;
&lt;br /&gt;
= 2) Experience =&lt;br /&gt;
&lt;br /&gt;
== 2.1) What programs/software have you worked on before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on a lot of projects. Among them:&lt;br /&gt;
&lt;br /&gt;
* A very very simple enrollment system built on top of [http://nodejs.org/ Node.js asynchronous web frameowork for JavaScript]&lt;br /&gt;
* A bomberman-like networked Qt-game (it lacks several things I'm planning to release in a refactored version)&lt;br /&gt;
* I've worked on a private GStreamer plugin in C&lt;br /&gt;
&lt;br /&gt;
Projects cited below aren't repeated here.&lt;br /&gt;
&lt;br /&gt;
== 2.2) Have you developed software in a team environment before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on some team projects before. Among other projects, I worked on:&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/ntouche/ An unfinished hypermedia diagramming tool for mobile]&lt;br /&gt;
* [http://brisa.garage.maemo.org/ An UPnP framework]&lt;br /&gt;
&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I never participated on Google Summer of Code before.&lt;br /&gt;
&lt;br /&gt;
== 2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement. ==&lt;br /&gt;
&lt;br /&gt;
I'm the lead developer of [https://github.com/vinipsmaker/tufao an asynchronous web framework for C++ built on top of Qt] and I'm the brazilian's translation maintainer for the [http://enlightenment.org/ Enlightenment project].&lt;br /&gt;
&lt;br /&gt;
== 2.5) Gaming experience - Are you a gamer? ==&lt;br /&gt;
&lt;br /&gt;
Yes, I'm a gamer.&lt;br /&gt;
&lt;br /&gt;
== 2.5.1) What type of gamer are you? ==&lt;br /&gt;
&lt;br /&gt;
I'm the type of gamer that like games that:&lt;br /&gt;
* Run on GNU/Linux&lt;br /&gt;
* Console games (preferably portable)&lt;br /&gt;
&lt;br /&gt;
== 2.5.2) What type of games? ==&lt;br /&gt;
&lt;br /&gt;
I like strategy games (like Wesnoth), Action-RPG games (like The Legend of Zelda) and dumb games (like mines and gnujump).&lt;br /&gt;
&lt;br /&gt;
== 2.5.3) What type of opponents do you prefer? ==&lt;br /&gt;
&lt;br /&gt;
I like to play against AI or against my AFK friends.&lt;br /&gt;
&lt;br /&gt;
== 2.5.4) Are you more interested in story or gameplay? ==&lt;br /&gt;
&lt;br /&gt;
Gameplay.&lt;br /&gt;
&lt;br /&gt;
== 2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. ==&lt;br /&gt;
&lt;br /&gt;
I finished some campaigns on single-player mode, but I avoid multiplayer-mode, because I always lose (shame on me).&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I didn't send any patches to Wesnoth (yet!). I hope this will change soon.&lt;br /&gt;
&lt;br /&gt;
= 3) Communication skills =&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I write some english posts on my [http://vinipsmaker.wordpress.com/category/en/ blog] and you can see the [http://vinipsmaker.github.io/tufao/ref/1.x/ Tufão documentation] (both written by myself).&lt;br /&gt;
&lt;br /&gt;
== 3.2) What spoken languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I can watch and understand videos about C++ (Bjarne Stroustroup, Herb Sutter, Andrei Alexandrescu, ...), but I never practice, so I must be terrible speaking.&lt;br /&gt;
&lt;br /&gt;
I'm fluent in brazilian portuguese.&lt;br /&gt;
&lt;br /&gt;
== 3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough. ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.4) Do you give constructive advice? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.5) Do you receive advice well? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.6) Are you good at sorting useful criticisms from useless ones? ==&lt;br /&gt;
&lt;br /&gt;
Usually not.&lt;br /&gt;
&lt;br /&gt;
== 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 &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want ==&lt;br /&gt;
&lt;br /&gt;
I tend to not wait for other people.&lt;br /&gt;
&lt;br /&gt;
If I face a surprising situation where I have more than one choice and each choice have its drawbacks, I'll document the choices and send this documentation to the other developers as a starting pointing to choose the solution.&lt;br /&gt;
&lt;br /&gt;
I like to allow my colleagues track my progress also.&lt;br /&gt;
&lt;br /&gt;
= 4) Project =&lt;br /&gt;
&lt;br /&gt;
See my [[../Proposal]].&lt;br /&gt;
&lt;br /&gt;
= 5) Practical considerations =&lt;br /&gt;
&lt;br /&gt;
== 5.1) Are you familiar with any of the following tools or languages? ==&lt;br /&gt;
&lt;br /&gt;
* I'm familiar with the '''C++ programming language''' and the '''STL''' templates library. C++ is my programming language of choice for a long time already. I just need to master all the power of templates-machinery and I'll be happier yet.&lt;br /&gt;
* I never used '''Boost''', but I follow the Boost project and read the documentation of some pieces from time to time.&lt;br /&gt;
* I used '''SDL''' long time ago in a [https://code.google.com/p/eater-thief/ small game] for my first programming's classes. At the time, I didn't understand asynchronous/event-based-programming and other concepts very well and I was only an amateur at threading programming.&lt;br /&gt;
* I love '''Python'''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;s expressiveness power, but I never read a full programming book about it, so I don't even know what I don't know about the language. You can see [https://code.google.com/p/logica-whopper/ my last Python's project at googlecode].&lt;br /&gt;
* I'm familiar with '''cmake''' and I use it in some projects, but I never read a single line of code of '''scons'''.&lt;br /&gt;
* I'm familiar with '''Git''' (see my [https://github.com/vinipsmaker GitHub profile], for instance) version control system&lt;br /&gt;
* My experience with '''Lua''' and '''WML''' is near to zero, but I don't think this would be a problem. Learn a new language is easy. Learn a new programming paradigm is hard.&lt;br /&gt;
&lt;br /&gt;
== 5.2) Which tools do you normally use for development? Why do you use them? ==&lt;br /&gt;
&lt;br /&gt;
* I use '''Emacs''' editor, because it's an advanced text editor with support for multiple languages. IDEs are usually much intrusive and I don't like intrusive tools, so I just use Emacs. You can see my [https://code.google.com/p/vinipsmaker/source/browse/config/.emacs Emacs config here].&lt;br /&gt;
* '''LLVM/Clang''' compiler, because the colored output. But most of the time I'm using '''GCC'''.&lt;br /&gt;
* '''CMake''' build system, because it's fast (compared to autotools, at least on my machine), it's easy and has a build's progress status.&lt;br /&gt;
* '''git''' version control system, because has a lot of integrated features (branching easier and more powerful than in subversion, at least with the knowledge that I have).&lt;br /&gt;
* '''Meld diff tool''', because it has a nice GUI.&lt;br /&gt;
* '''Doxygen''' for documentation, because it's the best.&lt;br /&gt;
* ''C++''' programming language, because of control and expressiveness power (not as much as Python, but still better than Java).&lt;br /&gt;
* Any drop-down terminal (currently '''Terra''') with good support for tabs.&lt;br /&gt;
* Any rolling-release distro that do not separate packages in normal and “-dev”. Currently '''ArchLinux'''.&lt;br /&gt;
&lt;br /&gt;
== 5.3) What programming languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I'm fluent in C, C++, JavaScript, Java and MongoDB.&lt;br /&gt;
&lt;br /&gt;
== 5.4) Would you mind talking with your mentor on telephone / internet phone? ==&lt;br /&gt;
&lt;br /&gt;
I have an skype account, but you can always reach me via email (I read it daily/hourly/minutely).&lt;br /&gt;
&lt;br /&gt;
I can provide my phone number.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13&amp;diff=50520</id>
		<title>User:Vinipsmaker/GSoC13</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13&amp;diff=50520"/>
		<updated>2013-04-28T04:08:36Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SoC2013Student}}&lt;br /&gt;
&lt;br /&gt;
You can see my [[/Proposal]] and my [[/Questionnaire]]'s answers.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50519</id>
		<title>User:Vinipsmaker/GSoC13/Questionnaire</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50519"/>
		<updated>2013-04-28T04:02:02Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1) Basics =&lt;br /&gt;
&lt;br /&gt;
== 1.1) Write a small introduction to yourself. ==&lt;br /&gt;
&lt;br /&gt;
I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates to me (github user, lastfm profile, ...), [https://about.me/vinipsmaker click here].&lt;br /&gt;
&lt;br /&gt;
== 1.2) State your preferred email address. ==&lt;br /&gt;
&lt;br /&gt;
vini.ipsmaker&amp;lt;at&amp;gt;gmail&amp;lt;dot&amp;gt;com&lt;br /&gt;
&lt;br /&gt;
== 1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it? ==&lt;br /&gt;
&lt;br /&gt;
My IRC's nickname is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
== 1.4) Why do you want to participate in summer of code? ==&lt;br /&gt;
&lt;br /&gt;
I love to develop and I think GSoC is an excellent initiative.&lt;br /&gt;
&lt;br /&gt;
== 1.5) What are you studying, subject, level and school? ==&lt;br /&gt;
&lt;br /&gt;
I'm majoring in computer science at Universidade Federal de Alagoas.&lt;br /&gt;
&lt;br /&gt;
== 1.6) What country are you from, at what time are you most likely to be able to join IRC? ==&lt;br /&gt;
&lt;br /&gt;
I'm from Brazil and I'm able to join IRC from 22:30 till 3:00 everyday, but I join IRC as soon as I connect to the internet and I'll probably be online from 17:00 till 4:00 (GMT time).&lt;br /&gt;
&lt;br /&gt;
== 1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when. ==&lt;br /&gt;
&lt;br /&gt;
I'll have 4h/day 3d/week classes.&lt;br /&gt;
&lt;br /&gt;
= 2) Experience =&lt;br /&gt;
&lt;br /&gt;
== 2.1) What programs/software have you worked on before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on a lot of projects. Among them:&lt;br /&gt;
&lt;br /&gt;
* A very very simple enrollment system built on top of [http://nodejs.org/ Node.js asynchronous web frameowork for JavaScript]&lt;br /&gt;
* A bomberman-like networked Qt-game (it lacks several things I'm planning to release in a refactored version)&lt;br /&gt;
* I've worked on a private GStreamer plugin in C&lt;br /&gt;
&lt;br /&gt;
Projects cited below aren't repeated here.&lt;br /&gt;
&lt;br /&gt;
== 2.2) Have you developed software in a team environment before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on some team projects before. Among other projects, I worked on:&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/ntouche/ An unfinished hypermedia diagramming tool for mobile]&lt;br /&gt;
* [http://brisa.garage.maemo.org/ An UPnP framework]&lt;br /&gt;
&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I never participated on Google Summer of Code before.&lt;br /&gt;
&lt;br /&gt;
== 2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement. ==&lt;br /&gt;
&lt;br /&gt;
I'm the lead developer of [https://github.com/vinipsmaker/tufao an asynchronous web framework for C++ built on top of Qt] and I'm the brazilian's translation maintainer for the [http://enlightenment.org/ Enlightenment project].&lt;br /&gt;
&lt;br /&gt;
== 2.5) Gaming experience - Are you a gamer? ==&lt;br /&gt;
&lt;br /&gt;
Yes, I'm a gamer.&lt;br /&gt;
&lt;br /&gt;
== 2.5.1) What type of gamer are you? ==&lt;br /&gt;
&lt;br /&gt;
I'm the type of gamer that like games that:&lt;br /&gt;
* Run on GNU/Linux&lt;br /&gt;
* Console games (preferably portable)&lt;br /&gt;
&lt;br /&gt;
== 2.5.2) What type of games? ==&lt;br /&gt;
&lt;br /&gt;
I like strategy games (like Wesnoth), Action-RPG games (like The Legend of Zelda) and dumb games (like mines and gnujump).&lt;br /&gt;
&lt;br /&gt;
== 2.5.3) What type of opponents do you prefer? ==&lt;br /&gt;
&lt;br /&gt;
I like to play against AI or against my AFK friends.&lt;br /&gt;
&lt;br /&gt;
== 2.5.4) Are you more interested in story or gameplay? ==&lt;br /&gt;
&lt;br /&gt;
Gameplay.&lt;br /&gt;
&lt;br /&gt;
== 2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. ==&lt;br /&gt;
&lt;br /&gt;
I finished some campaigns on single-player mode, but I avoid multiplayer-mode, because I always lose (shame on me).&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I didn't send any patches to Wesnoth (yet!). I hope this will change soon.&lt;br /&gt;
&lt;br /&gt;
= 3) Communication skills =&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I write some english posts on my [http://vinipsmaker.wordpress.com/category/en/ blog] and you can see the [http://vinipsmaker.github.io/tufao/ref/1.x/ Tufão documentation] (both written by myself).&lt;br /&gt;
&lt;br /&gt;
== 3.2) What spoken languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I can watch and understand videos about C++ (Bjarne Stroustroup, Herb Sutter, Andrei Alexandrescu, ...), but I never practice, so I must be terrible speaking.&lt;br /&gt;
&lt;br /&gt;
I'm fluent in brazilian portuguese.&lt;br /&gt;
&lt;br /&gt;
== 3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough. ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.4) Do you give constructive advice? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.5) Do you receive advice well? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.6) Are you good at sorting useful criticisms from useless ones? ==&lt;br /&gt;
&lt;br /&gt;
Usually not.&lt;br /&gt;
&lt;br /&gt;
== 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 &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want ==&lt;br /&gt;
&lt;br /&gt;
I tend to not wait for other people.&lt;br /&gt;
&lt;br /&gt;
If I face a surprising situation where I have more than one choice and each choice have its drawbacks, I'll document the choices and send this documentation to the other developers as a starting pointing to choose the solution.&lt;br /&gt;
&lt;br /&gt;
I like to allow my colleagues track my progress also.&lt;br /&gt;
&lt;br /&gt;
= 4) Project =&lt;br /&gt;
&lt;br /&gt;
See my [[../Proposal]].&lt;br /&gt;
&lt;br /&gt;
= 5) Practical considerations =&lt;br /&gt;
&lt;br /&gt;
== 5.1) Are you familiar with any of the following tools or languages? ==&lt;br /&gt;
&lt;br /&gt;
* I'm familiar with the '''C++ programming language''' and the '''STL''' templates library. C++ is my programming language of choice for a long time already. I just need to master all the power of templates-machinery and I'll be happier yet.&lt;br /&gt;
* I never used '''Boost''', but I follow the Boost project and read the documentation of some pieces from time to time.&lt;br /&gt;
* I used '''SDL''' long time ago in a [https://code.google.com/p/eater-thief/ small game] for my first programming's classes. At the time, I didn't understand asynchronous/event-based-programming and other concepts very well and I was only an amateur at threading programming.&lt;br /&gt;
* I love '''Python'''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;s expressiveness power, but I never read a full programming book about it, so I don't even know what I don't know about the language. You can see [https://code.google.com/p/logica-whopper/ my last Python's project at googlecode].&lt;br /&gt;
* I'm familiar with '''cmake''' and I use it in some projects, but I never read a single line of code of '''scons'''.&lt;br /&gt;
* I'm familiar with '''Git''' (see my [https://github.com/vinipsmaker GitHub profile], for instance) version control system&lt;br /&gt;
* My experience with '''Lua''' and '''WML''' is near to zero, but I don't think this would be a problem. Learn a new language is easy. Learn a new programming paradigm is hard.&lt;br /&gt;
&lt;br /&gt;
== 5.2) Which tools do you normally use for development? Why do you use them? ==&lt;br /&gt;
&lt;br /&gt;
* I use '''Emacs''' editor, because it's an advanced text editor with support for multiple languages. IDEs are usually much intrusive and I don't like intrusive tools, so I just use Emacs. You can see my [https://code.google.com/p/vinipsmaker/source/browse/config/.emacs Emacs config here].&lt;br /&gt;
* '''LLVM/Clang''' compiler, because the colored output. But most of the time I'm using '''GCC'''.&lt;br /&gt;
* '''CMake''' build system, because it's fast (compared to autotools, at least on my machine), it's easy and has a build's progress status.&lt;br /&gt;
* '''git''' version control system, because has a lot of integrated features (branching easier and more powerful than in subversion, at least with the knowledge that I have).&lt;br /&gt;
* '''Meld diff tool''', because it has a nice GUI.&lt;br /&gt;
* '''Doxygen''' for documentation, because it's the best.&lt;br /&gt;
* ''C++''' programming language, because of control and expressiveness power (not as much as Python, but still better than Java).&lt;br /&gt;
* Any drop-down terminal (currently '''Terra''') with good support for tabs.&lt;br /&gt;
* Any rolling-release distro that do not separate packages in normal and “-dev”. Currently '''ArchLinux'''.&lt;br /&gt;
&lt;br /&gt;
== 5.3) What programming languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I'm fluent in C, C++, JavaScript, Java and MongoDB.&lt;br /&gt;
&lt;br /&gt;
== 5.4) Would you mind talking with your mentor on telephone / internet phone? ==&lt;br /&gt;
&lt;br /&gt;
I have an skype account, but you can always reach me via email (I read it daily/hourly/minutely).&lt;br /&gt;
&lt;br /&gt;
I can provide my phone number.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50518</id>
		<title>User:Vinipsmaker/GSoC13/Proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Proposal&amp;diff=50518"/>
		<updated>2013-04-28T03:59:30Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: Created page with '= Proposal =  TODO  = Questionnaire = == 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…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposal =&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= Questionnaire =&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I choose the Addon Server project.&lt;br /&gt;
&lt;br /&gt;
== 4.3) Why did you choose this project? ==&lt;br /&gt;
&lt;br /&gt;
I like to program code that will use networking capatibilities.&lt;br /&gt;
&lt;br /&gt;
== 4.4) Include an estimated timeline for your work on the project. Don't forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won't be doing much then&amp;quot;. ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== 4.5) Include as much technical detail about your implementation as you can ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== 4.6) What do you expect to gain from this project? ==&lt;br /&gt;
&lt;br /&gt;
I intend to gain a lot of fun developing in C++ for a famous open source game.&lt;br /&gt;
&lt;br /&gt;
== 4.7) What would make you stay in the Wesnoth community after the conclusion of SOC? ==&lt;br /&gt;
&lt;br /&gt;
github, C++11, good development infrastructure, generic reusable subprojects, ...&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50517</id>
		<title>User:Vinipsmaker/GSoC13/Questionnaire</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50517"/>
		<updated>2013-04-28T03:43:00Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1) Basics =&lt;br /&gt;
&lt;br /&gt;
== 1.1) Write a small introduction to yourself. ==&lt;br /&gt;
&lt;br /&gt;
I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates to me (github user, lastfm profile, ...), [https://about.me/vinipsmaker click here].&lt;br /&gt;
&lt;br /&gt;
== 1.2) State your preferred email address. ==&lt;br /&gt;
&lt;br /&gt;
vini.ipsmaker&amp;lt;at&amp;gt;gmail&amp;lt;dot&amp;gt;com&lt;br /&gt;
&lt;br /&gt;
== 1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it? ==&lt;br /&gt;
&lt;br /&gt;
My IRC's nickname is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
== 1.4) Why do you want to participate in summer of code? ==&lt;br /&gt;
&lt;br /&gt;
I love to develop and I think GSoC is an excellent initiative.&lt;br /&gt;
&lt;br /&gt;
== 1.5) What are you studying, subject, level and school? ==&lt;br /&gt;
&lt;br /&gt;
I'm majoring in computer science at Universidade Federal de Alagoas.&lt;br /&gt;
&lt;br /&gt;
== 1.6) What country are you from, at what time are you most likely to be able to join IRC? ==&lt;br /&gt;
&lt;br /&gt;
I'm from Brazil and I'm able to join IRC from 22:30 till 3:00 everyday, but I join IRC as soon as I connect to the internet and I'll probably be online from 17:00 till 4:00 (GMT time).&lt;br /&gt;
&lt;br /&gt;
== 1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when. ==&lt;br /&gt;
&lt;br /&gt;
I'll have 4h/day 3d/week classes.&lt;br /&gt;
&lt;br /&gt;
= 2) Experience =&lt;br /&gt;
&lt;br /&gt;
== 2.1) What programs/software have you worked on before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on a lot of projects. Among them:&lt;br /&gt;
&lt;br /&gt;
* A very very simple enrollment system built on top of [http://nodejs.org/ Node.js asynchronous web frameowork for JavaScript]&lt;br /&gt;
* A bomberman-like networked Qt-game (it lacks several things I'm planning to release in a refactored version)&lt;br /&gt;
* I've worked on a private GStreamer plugin in C&lt;br /&gt;
&lt;br /&gt;
Projects cited below aren't repeated here.&lt;br /&gt;
&lt;br /&gt;
== 2.2) Have you developed software in a team environment before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on some team projects before. Among other projects, I worked on:&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/ntouche/ An unfinished hypermedia diagramming tool for mobile]&lt;br /&gt;
* [http://brisa.garage.maemo.org/ An UPnP framework]&lt;br /&gt;
&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I never participated on Google Summer of Code before.&lt;br /&gt;
&lt;br /&gt;
== 2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement. ==&lt;br /&gt;
&lt;br /&gt;
I'm the lead developer of [https://github.com/vinipsmaker/tufao an asynchronous web framework for C++ built on top of Qt] and I'm the brazilian's translation maintainer for the [http://enlightenment.org/ Enlightenment project].&lt;br /&gt;
&lt;br /&gt;
== 2.5) Gaming experience - Are you a gamer? ==&lt;br /&gt;
&lt;br /&gt;
Yes, I'm a gamer.&lt;br /&gt;
&lt;br /&gt;
== 2.5.1) What type of gamer are you? ==&lt;br /&gt;
&lt;br /&gt;
I'm the type of gamer that like games that:&lt;br /&gt;
* Run on GNU/Linux&lt;br /&gt;
* Console games (preferably portable)&lt;br /&gt;
&lt;br /&gt;
== 2.5.2) What type of games? ==&lt;br /&gt;
&lt;br /&gt;
I like strategy games (like Wesnoth), Action-RPG games (like The Legend of Zelda) and dumb games (like mines and gnujump).&lt;br /&gt;
&lt;br /&gt;
== 2.5.3) What type of opponents do you prefer? ==&lt;br /&gt;
&lt;br /&gt;
I like to play against AI or against my AFK friends.&lt;br /&gt;
&lt;br /&gt;
== 2.5.4) Are you more interested in story or gameplay? ==&lt;br /&gt;
&lt;br /&gt;
Gameplay.&lt;br /&gt;
&lt;br /&gt;
== 2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. ==&lt;br /&gt;
&lt;br /&gt;
I finished some campaigns on single-player mode, but I avoid multiplayer-mode, because I always lose (shame on me).&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I didn't send any patches to Wesnoth (yet!). I hope this will change soon.&lt;br /&gt;
&lt;br /&gt;
= 3) Communication skills =&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I write some english posts on my [http://vinipsmaker.wordpress.com/category/en/ blog] and you can see the [http://vinipsmaker.github.io/tufao/ref/1.x/ Tufão documentation] (both written by myself).&lt;br /&gt;
&lt;br /&gt;
== 3.2) What spoken languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I can watch and understand videos about C++ (Bjarne Stroustroup, Herb Sutter, Andrei Alexandrescu, ...), but I never practice, so I must be terrible speaking.&lt;br /&gt;
&lt;br /&gt;
I'm fluent in brazilian portuguese.&lt;br /&gt;
&lt;br /&gt;
== 3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough. ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.4) Do you give constructive advice? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.5) Do you receive advice well? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.6) Are you good at sorting useful criticisms from useless ones? ==&lt;br /&gt;
&lt;br /&gt;
Usually not.&lt;br /&gt;
&lt;br /&gt;
== 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 &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want ==&lt;br /&gt;
&lt;br /&gt;
I tend to not wait for other people.&lt;br /&gt;
&lt;br /&gt;
If I face a surprising situation where I have more than one choice and each choice have its drawbacks, I'll document the choices and send this documentation to the other developers as a starting pointing to choose the solution.&lt;br /&gt;
&lt;br /&gt;
I like to allow my colleagues track my progress also.&lt;br /&gt;
&lt;br /&gt;
= 4) Project =&lt;br /&gt;
&lt;br /&gt;
See my [[../Proposal]].&lt;br /&gt;
&lt;br /&gt;
= 5) Practical considerations =&lt;br /&gt;
&lt;br /&gt;
== 5.1) Are you familiar with any of the following tools or languages? ==&lt;br /&gt;
&lt;br /&gt;
* I'm familiar with the '''C++ programming language''' and the '''STL''' templates library. C++ is my programming language of choice for a long time already. I just need to master all the power of templates-machinery and I'll be happier yet.&lt;br /&gt;
* I never used '''Boost''', but I follow the Boost project and read the documentation of some pieces from time to time.&lt;br /&gt;
* I used '''SDL''' long time ago in a [https://code.google.com/p/eater-thief/ small game] for my first programming's classes. At the time, I didn't understand asynchronous/event-based-programming and other concepts very well and I was only an amateur at threading programming.&lt;br /&gt;
* I love '''Python'''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;s expressiveness power, but I never read a full programming book about it, so I don't even know what I don't know about the language. You can see [https://code.google.com/p/logica-whopper/ my last Python's project at googlecode].&lt;br /&gt;
* I'm familiar with '''cmake''' and I use it in some projects, but I never read a single line of code of '''scons'''.&lt;br /&gt;
* I'm familiar with '''Git''' (see my [https://github.com/vinipsmaker GitHub profile], for instance) version control system&lt;br /&gt;
* My experience with '''Lua''' and '''WML''' is near to zero, but I don't think this would be a problem. Learn a new language is easy. Learn a new programming paradigm is hard.&lt;br /&gt;
&lt;br /&gt;
== 5.2) Which tools do you normally use for development? Why do you use them? ==&lt;br /&gt;
&lt;br /&gt;
* I use '''Emacs''' editor, because it's an advanced text editor with support for multiple languages. IDEs are usually much intrusive and I don't like intrusive tools, so I just use Emacs. You can see my [https://code.google.com/p/vinipsmaker/source/browse/config/.emacs Emacs config here].&lt;br /&gt;
* '''LLVM/Clang''' compiler, because the colored output. But most of the time I'm using '''GCC'''.&lt;br /&gt;
* '''CMake''' build system, because it's fast (compared to autotools, at least on my machine), it's easy and has a build's progress status.&lt;br /&gt;
* '''git''' version control system, because has a lot of integrated features (branching easier and more powerful than in subversion, at least with the knowledge that I have).&lt;br /&gt;
* '''Meld diff tool''', because it has a nice GUI.&lt;br /&gt;
* '''Doxygen''' for documentation, because it's the best.&lt;br /&gt;
* ''C++''' programming language, because of control and expressiveness power (not as much as Python, but still better than Java).&lt;br /&gt;
* Any drop-down terminal (currently '''Terra''') with good support for tabs.&lt;br /&gt;
* Any rolling-release distro that do not separate packages in normal and “-dev”. Currently '''ArchLinux'''.&lt;br /&gt;
&lt;br /&gt;
== 5.3) What programming languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I'm fluent in C, C++, JavaScript and Java.&lt;br /&gt;
&lt;br /&gt;
== 5.4) Would you mind talking with your mentor on telephone / internet phone? ==&lt;br /&gt;
&lt;br /&gt;
I have an skype account, but you can always reach me via email (I read it daily/hourly/minutely).&lt;br /&gt;
&lt;br /&gt;
I can provide my phone number.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50516</id>
		<title>User:Vinipsmaker/GSoC13/Questionnaire</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13/Questionnaire&amp;diff=50516"/>
		<updated>2013-04-28T03:35:52Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: Created page with '= 1) Basics =  == 1.1) Write a small introduction to yourself. ==  I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wor…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1) Basics =&lt;br /&gt;
&lt;br /&gt;
== 1.1) Write a small introduction to yourself. ==&lt;br /&gt;
&lt;br /&gt;
I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates to me (github user, lastfm profile, ...), [https://about.me/vinipsmaker click here].&lt;br /&gt;
&lt;br /&gt;
== 1.2) State your preferred email address. ==&lt;br /&gt;
&lt;br /&gt;
vini.ipsmaker&amp;lt;at&amp;gt;gmail&amp;lt;dot&amp;gt;com&lt;br /&gt;
&lt;br /&gt;
== 1.3) If you have chosen a nick for IRC and Wesnoth forums, what is it? ==&lt;br /&gt;
&lt;br /&gt;
My IRC's nickname is ''vinipsmaker''.&lt;br /&gt;
&lt;br /&gt;
== 1.4) Why do you want to participate in summer of code? ==&lt;br /&gt;
&lt;br /&gt;
I love to develop and I think GSoC is an excellent initiative.&lt;br /&gt;
&lt;br /&gt;
== 1.5) What are you studying, subject, level and school? ==&lt;br /&gt;
&lt;br /&gt;
I'm majoring in computer science at Universidade Federal de Alagoas.&lt;br /&gt;
&lt;br /&gt;
== 1.6) What country are you from, at what time are you most likely to be able to join IRC? ==&lt;br /&gt;
&lt;br /&gt;
I'm from Brazil and I'm able to join IRC from 22:30 till 3:00 everyday, but I join IRC as soon as I connect to the internet and I'll probably be online from 17:00 till 4:00 (GMT time).&lt;br /&gt;
&lt;br /&gt;
== 1.7) Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when. ==&lt;br /&gt;
&lt;br /&gt;
I'll have 4h/day 3d/week classes.&lt;br /&gt;
&lt;br /&gt;
= 2) Experience =&lt;br /&gt;
&lt;br /&gt;
== 2.1) What programs/software have you worked on before? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2.2) Have you developed software in a team environment before? ==&lt;br /&gt;
&lt;br /&gt;
I worked on some team projects before. Among other projects, I worked on:&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/ntouche/ An unfinished hypermedia diagramming tool for mobile]&lt;br /&gt;
* [http://brisa.garage.maemo.org/ An UPnP framework]&lt;br /&gt;
&lt;br /&gt;
== 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? ==&lt;br /&gt;
&lt;br /&gt;
I never participated on Google Summer of Code before.&lt;br /&gt;
&lt;br /&gt;
== 2.4) Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement. ==&lt;br /&gt;
&lt;br /&gt;
I'm the lead developer of [https://github.com/vinipsmaker/tufao an asynchronous web framework for C++ built on top of Qt] and I'm the brazilian's translation maintainer for the [http://enlightenment.org/ Enlightenment project].&lt;br /&gt;
&lt;br /&gt;
== 2.5) Gaming experience - Are you a gamer? ==&lt;br /&gt;
&lt;br /&gt;
Yes, I'm a gamer.&lt;br /&gt;
&lt;br /&gt;
== 2.5.1) What type of gamer are you? ==&lt;br /&gt;
&lt;br /&gt;
I'm the type of gamer that like games that:&lt;br /&gt;
* Run on GNU/Linux&lt;br /&gt;
* Console games (preferably portable)&lt;br /&gt;
&lt;br /&gt;
== 2.5.2) What type of games? ==&lt;br /&gt;
&lt;br /&gt;
I like strategy games (like Wesnoth), Action-RPG games (like The Legend of Zelda) and dumb games (like mines and gnujump).&lt;br /&gt;
&lt;br /&gt;
== 2.5.3) What type of opponents do you prefer? ==&lt;br /&gt;
&lt;br /&gt;
I like to play against AI or against my AFK friends.&lt;br /&gt;
&lt;br /&gt;
== 2.5.4) Are you more interested in story or gameplay? ==&lt;br /&gt;
&lt;br /&gt;
Gameplay.&lt;br /&gt;
&lt;br /&gt;
== 2.5.5) Have you played Wesnoth? If so, tell us roughly for how long and whether you lean towards single player or multiplayer. ==&lt;br /&gt;
&lt;br /&gt;
I finished some campaigns on single-player mode, but I avoid multiplayer-mode, because I always lose (shame on me).&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I didn't send any patches to Wesnoth (yet!). I hope this will change soon.&lt;br /&gt;
&lt;br /&gt;
= 3) Communication skills =&lt;br /&gt;
&lt;br /&gt;
== 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. ==&lt;br /&gt;
&lt;br /&gt;
I write some english posts on my [http://vinipsmaker.wordpress.com/category/en/ blog] and you can see the [http://vinipsmaker.github.io/tufao/ref/1.x/ Tufão documentation] (both written by myself).&lt;br /&gt;
&lt;br /&gt;
== 3.2) What spoken languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I can watch and understand videos about C++ (Bjarne Stroustroup, Herb Sutter, Andrei Alexandrescu, ...), but I never practice, so I must be terrible speaking.&lt;br /&gt;
&lt;br /&gt;
I'm fluent in brazilian portuguese.&lt;br /&gt;
&lt;br /&gt;
== 3.3) Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough. ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.4) Do you give constructive advice? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.5) Do you receive advice well? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
== 3.6) Are you good at sorting useful criticisms from useless ones? ==&lt;br /&gt;
&lt;br /&gt;
Usually not.&lt;br /&gt;
&lt;br /&gt;
== 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 &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn't match what the project want ==&lt;br /&gt;
&lt;br /&gt;
I tend to not wait for other people.&lt;br /&gt;
&lt;br /&gt;
If I face a surprising situation where I have more than one choice and each choice have its drawbacks, I'll document the choices and send this documentation to the other developers as a starting pointing to choose the solution.&lt;br /&gt;
&lt;br /&gt;
I like to allow my colleagues track my progress also.&lt;br /&gt;
&lt;br /&gt;
= 4) Project =&lt;br /&gt;
&lt;br /&gt;
See my [[../Proposal]].&lt;br /&gt;
&lt;br /&gt;
= 5) Practical considerations =&lt;br /&gt;
&lt;br /&gt;
== 5.1) Are you familiar with any of the following tools or languages? ==&lt;br /&gt;
&lt;br /&gt;
* I'm familiar with the '''C++ programming language''' and the '''STL''' templates library. C++ is my programming language of choice for a long time already. I just need to master all the power of templates-machinery and I'll be happier yet.&lt;br /&gt;
* I never used '''Boost''', but I follow the Boost project and read the documentation of some pieces from time to time.&lt;br /&gt;
* I used '''SDL''' long time ago in a [https://code.google.com/p/eater-thief/ small game] for my first programming's classes. At the time, I didn't understand asynchronous/event-based-programming and other concepts very well and I was only an amateur at threading programming.&lt;br /&gt;
* I love '''Python'''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;s expressiveness power, but I never read a full programming book about it, so I don't even know what I don't know about the language. You can see [https://code.google.com/p/logica-whopper/ my last Python's project at googlecode].&lt;br /&gt;
* I'm familiar with '''cmake''' and I use it in some projects, but I never read a single line of code of '''scons'''.&lt;br /&gt;
* I'm familiar with '''Git''' (see my [https://github.com/vinipsmaker GitHub profile], for instance) version control system&lt;br /&gt;
* My experience with '''Lua''' and '''WML''' is near to zero, but I don't think this would be a problem. Learn a new language is easy. Learn a new programming paradigm is hard.&lt;br /&gt;
&lt;br /&gt;
== 5.2) Which tools do you normally use for development? Why do you use them? ==&lt;br /&gt;
&lt;br /&gt;
* I use '''Emacs''' editor, because it's an advanced text editor with support for multiple languages. IDEs are usually much intrusive and I don't like intrusive tools, so I just use Emacs. You can see my [https://code.google.com/p/vinipsmaker/source/browse/config/.emacs Emacs config here].&lt;br /&gt;
* '''LLVM/Clang''' compiler, because the colored output. But most of the time I'm using '''GCC'''.&lt;br /&gt;
* '''CMake''' build system, because it's fast (compared to autotools, at least on my machine), it's easy and has a build's progress status.&lt;br /&gt;
* '''git''' version control system, because has a lot of integrated features (branching easier and more powerful than in subversion, at least with the knowledge that I have).&lt;br /&gt;
* '''Meld diff tool''', because it has a nice GUI.&lt;br /&gt;
* '''Doxygen''' for documentation, because it's the best.&lt;br /&gt;
* ''C++''' programming language, because of control and expressiveness power (not as much as Python, but still better than Java).&lt;br /&gt;
* Any drop-down terminal (currently '''Terra''') with good support for tabs.&lt;br /&gt;
* Any rolling-release distro that do not separate packages in normal and “-dev”. Currently '''ArchLinux'''.&lt;br /&gt;
&lt;br /&gt;
== 5.3) What programming languages are you fluent in? ==&lt;br /&gt;
&lt;br /&gt;
I'm fluent in C, C++, JavaScript and Java.&lt;br /&gt;
&lt;br /&gt;
== 5.4) Would you mind talking with your mentor on telephone / internet phone? ==&lt;br /&gt;
&lt;br /&gt;
I have an skype account, but you can always reach me via email (I read it daily/hourly/minutely).&lt;br /&gt;
&lt;br /&gt;
I can provide my phone number.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13&amp;diff=50515</id>
		<title>User:Vinipsmaker/GSoC13</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13&amp;diff=50515"/>
		<updated>2013-04-28T01:55:28Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can see my [[/Proposal]] and my [[/Questionnaire]]'s answers.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13&amp;diff=50514</id>
		<title>User:Vinipsmaker/GSoC13</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker/GSoC13&amp;diff=50514"/>
		<updated>2013-04-28T01:55:05Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: Created page with 'You can see my [/Proposal] and my [/Questionnaire]'s answers.'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can see my [/Proposal] and my [/Questionnaire]'s answers.&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker&amp;diff=50513</id>
		<title>User:Vinipsmaker</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker&amp;diff=50513"/>
		<updated>2013-04-28T01:49:32Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: /* Vinipsmaker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Vinipsmaker =&lt;br /&gt;
&lt;br /&gt;
I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates to me (github user, lastfm profile, ...), [https://about.me/vinipsmaker click here].&lt;br /&gt;
&lt;br /&gt;
My nickname on IRC is vinipsmaker.&lt;br /&gt;
&lt;br /&gt;
== Google Summer of Code 2013 ==&lt;br /&gt;
&lt;br /&gt;
[[/GSoC13]]&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker&amp;diff=50512</id>
		<title>User:Vinipsmaker</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Vinipsmaker&amp;diff=50512"/>
		<updated>2013-04-28T01:47:44Z</updated>

		<summary type="html">&lt;p&gt;Vinipsmaker: Created page with '= Vinipsmaker =  I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Vinipsmaker =&lt;br /&gt;
&lt;br /&gt;
I'm an ArchLinux user that likes C++. You can see my blog at [http://vinipsmaker.wordpress.com/category/en/ wordpress]. If you want to see all links that relates to me (github user, lastfm profile, ...), [https://about.me/vinipsmaker click here].&lt;br /&gt;
&lt;br /&gt;
== Google Summer of Code 2013 ==&lt;br /&gt;
&lt;br /&gt;
[[/GSoC13]]&lt;/div&gt;</summary>
		<author><name>Vinipsmaker</name></author>
		
	</entry>
</feed>