#summary Ideas List for GSoC 2012
#labels Importance-Deprecated

= Introduction =

 _We have been selected as a participating organization for GSoC 2012.  You're invited to drop by at #melange on !FreeNode to discuss._

We would like our prospective students to propose new project ideas and discuss with Melange developers either here(in comments), #melange or our mailing list melange-soc-dev@googlegroups.com. 

Every student is encouraged to clone our <a href="http://code.google.com/p/soc/source/checkout>git repository</a>, solve <a href="http://code.google.com/p/soc/issues/list">issues</a> and submit patches as part of the application process. <a href="http://code.google.com/p/soc/wiki/GettingStarted">Here</a> is our getting started guide.

*ANY ORIGINAL IDEA WOULD BE VERY MUCH APPRECIATED :)*

=Project Ideas=

==Testing, Code Guru, Code Quality Assurance==

===Description===

Melange has some decent tests, but we can do better. What we need is a extensive set of unit tests for our logic and views, as well as functional tests to make sure that all views work as expected. This will require learning the codebase first, so as to know what something should do. Test-based exploring would be most suitable (learning how the codebase by writing tests that confirm that things work a certain way). We want test coverage such that it is possible to refactor a core function without doing any manual testing, and still be fairly certain that everything works as expected. On top of that, we want to be able to start doing TDD, which is a lot easier if there are a lot of tests already. All developers will be asked to include tests with their changes as soon as we start doing TDD, so once the momentum picks up things should get easier.

A lower priority, that can be pursued once we have decent test coverage, is to make sure that all pylint errors are fixed, and that all warnings are fixed or suppressed as appropriate. This way we can require that each commit introduces no new pylint errors, which will ensure some level of code quality.

===Skills===

  * Python
  * Django
  * Testing

===Difficulty===

Moderate, but requires a lot of effort

===Mentors ===
* Still need to be confirmed, left this idea here as an example *

 * Leo (Chong Liu)
 * Sverre Rabbelier (SRabbelier on #Melange)

==New invitation/request module==

===Description===
Currently there is a feature to invite new mentors/admins by organization admins. People, who want to become mentors, may also request that role from organizations. The code is not perfect, so we are looking for a student to implement a new module that is better and does not have any limitations the current one have.

The project requires both server and client side work. From the backend perspective, new datastore design is needed. The current code has to be rewritten so that it is much clearer and completely thread-safe. For some current drawbacks you can search for the related issues in our issue tracker.

There are also some new features to be implemented. For example, it should be possible to invite people who do not have user accounts in Melange. They should receive an email which encourages them to create a profile and become a mentor.

Another point is to detect "spammers" who send requests to many organizations which they are not associated with.

Other interesting ideas how to improve the module are of course welcome.

On the client side we need UI that makes it obvious to users how to request a mentor role in the program. It should be also easy for organization admins to invite other users. Two modules, GSoC and GCI, need to be taken into consideration.

The other part of this project is to implement a function which would allow users to switch their roles between mentors and students. Currently, if someone, who wants to be a student, accidentally registers as a mentor, we have to change some fields in the datastore manually. It would be much more convenient for both us and the users, if they could change it on their own.

The first task of an accepted student will be to determine under what circumstances role changes should be allowed. Then new functionality should be implemented.

===Difficulty===
Easy or Moderate
In order to successfully complete the project, the new modules have to be integrated before end of the program.
There is probably not enough work for a returning Melange student, so we would prefer to accept a rookie.

===Mentors===
 * Daniel Hans


= Some Rough Notes =

   * Did we mention that we have an active IRC channel, #melange?
   * Some words for you, to inspire more ideas: *[http://code.google.com/p/soc/wiki/TestingGuidelines Automated Testing]*, *World Domination* (ask), *Access Control Module*, *Profiling*, *Log Analysis*, *[http://code.google.com/p/soc/issues/list?can=2&q=&sort=-id Issue Tracker]*, *[http://code.google.com/p/soc/wiki/AccessControl Security]*, *Optimization(s)*, *Mentor Summit*, *Wiki*.