#summary Ideas List for GSoC 2011
#labels Importance-Useful,Contents-Skeleton

= Introduction =

 _We will be applying as an organization for GSoC 2012.  You're invited to drop by at #melange on !FreeNode to discuss._


== [PossibleMentors Possible Mentors] ==
These are, in order, the most likely or best mentors for this project idea.

== Skills ==

  * All developers will need to have experience in, or be willing to learn Python.
  * Prior experience with Django or an equivalent framework would be a distinct plus.
  * Knowledge of JavaScript (AJAX), and a feeling for web design is big plus as well.

== Difficulty==
'Easy', 'Moderate' or 'Hard'.  Hard is not necessarily better!  We are risk averse!

== Early Spinoffs ==

We want code that we can actually use, not code that shows great promise.  At the half way stage, you MUST have something complete that we can actually use as a 'spin off' of the work.  In discussing projects we will try to help you find ways to have spinoffs along the way.

----
= Idea Details =
----

=Testing, Code Guru, Code Quality Assurance=

===Description===

Melange is sorely lacking tests, and it's hurting our development speed significantly. 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)

----

= Other ideas =

  * add functional tests using twill
  * Profiling and Caching developer tools
  * extend functionality of our buildbot (post commit hooks, pylint integration, application deployment to testing App Engine instance)
  * add features that will enable to organize GSoC/GHOP Meetings (creating new events, managing participants, integration with Google Calendar API),
  * Melange API allowing any external page to list current status of tasks and tasks list, participating projects etc.
  * generating pdfs, docs of student applications
  * integrating export functionality of tables, proposals with Google Docs (use Google Docs API)
  * work on selected issues from Melange Issue Tracker
  * Melange should enable admins/host to easily autogenerate CPT letter or letter of acceptance if one is needed/requested by student. This would generate pdf file ready to print based on the data from student profile (including program logo).
  * Messaging module allowing to send messages to other users (emails) (Way to improve communication between GSoCers, GHOPers)
  

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