#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)

----
=Melange/GSoC Administration Interface=

===Description===
Now that Melange is undergoing a big makeover we are in need of a proper administration backend to make the life of the Open Source Programs Office easier.

During your project you would need to gather requirements from the people who work with Melange at a day-to-day basis and if need be show them your work on a regular basis so that details can be refined. At the end of GSoC we would like to see an interface that allows them to run day-to-day operations such as finding/editing data on participants, editing settings of a program and being able to export a wide range of data.

If you are planning on sending us an application for this project we would like to see a suggestion of how the interface might be integrated in Melange but most importantly how you will approach the requirements elicitation and feedback process.

===Skills===

  * Python
  * Django
  * Appengine
  * Basic knowledge of Principles of UX Design
  * Requirements gathering

===Difficulty===

Moderate

===Mentors ===

  * None known yet.
----
= 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*.