#summary Ideas List for GSoC 2012
#labels Importance-Useful,Featured

= 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*.