#summary Ideas List for GSoC 2011
#labels Importance-Featured,Contents-Draft,Featured

= Introduction =

 _While Melange will apply as an organization, there is no guarantee that we will be accepted as an organization for GSoC 2011.  You're invited to drop by at #melange on FreeNode to discuss.  Help us make it happen._


== [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 ===

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


=Better Google Code-in module=

===Description===

Google launched a new program in 2010 to encourage high school students to contribute to open source. The program is called as Google Code-in(GCI). Melange has a GCI module. But from the experience of running GCI for the first time in 2010, we have learned that GCI module can improved in a lot of areas. Some of the areas (including ideas) where GCI can be improved are:

  * Queuing system for student claim requests
    * Student task claims should be placed in a queue. If the first student withdraws or if the claim is rejected, next student should be advanced in the queue for claim request.
    * Mechanism to lock down the student to the task once the claim request is accepted rather than the current mechanism of locking the student as soon as she requests a task.
  * Allow one touch subscriptions (see issue 560 in our issue tracker.)
  * Use channel APIs for notifications to give unobtrusive on-site live notifications.
  * Store task history. There is already a support for storing history. It needs to be reworked a lot and get it to working. We should be able to query on this data.
  * Publicly visible statistics for Google Code-in
  * Multiple file upload support for tasks
  * Upload files asynchronously (there is jQuery plugin for it. It needs to integrated with Melange.)

===Skills===

  * Python
  * Django
  * Appengine
  * Basics of jQuery and CSS

===Difficulty===

Moderate

===Mentors ===

  * Madhusudan C.S. (madrazr on #Melange)


=Google Code-in with new architecture=

===Description===

Melange is undergoing a major rewrite. The views layer is being rewritten. The UI is getting changed. We would like to follow the suite for the GCI module too.

  * Port GCI to the new Views architecture.
  * Add the dashboard functionality to users.

Just these two things may not be worth a full GSoC project. So students could look at the following things too while writing the proposal.

  * Data Seeder for GCI. There is already a data seeder for GSoC which is being integrated with Melange now. This needs to be extended to GCI too.
  * Tests for GCI.

===Skills===

  * Python
  * Django
  * Appengine
  * Basics of jQuery and CSS
  * Basic knowledge of Principles of UX Design

===Difficulty===

Moderate

===Mentors ===

  * Madhusudan C.S. (madrazr on #Melange)


= Other ideas =

  * integrate OpenSocial into Melange
  * 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)
  * upload of student presentations (storage, viewer)
  * work on selected issues from Melange Issue Tracker
  * Non US students should be able to upload their Tax forms via their Student dashboard page (no more faxing or sending via email)
  * 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).
  * User (Roles) profiles (mentor/admin/student/organization admin/) with profile photo, functionality to share profile information with other GSoCers ) - privacy settings for your profile
  * dates that are setup in GHOP and GSoC Melange configuration page can be later automatically put into faq and terms of program in specific places
  * Melange survey module should have autosave forms functionality (just like in gmail)
  * Google Calendar API support for events planning
  * Adding other GSoCers as friends to your profile,
  * Sharing profile data with other social network users
  * Messaging module allowing to send messages to other users (emails) (Way to improve communication between GSoCers, GHOPers)
  * Requesting profile data access
  * Better geo location features
  * Nice upload of profile photo with crop functionality via JS library.

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