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

= Introduction =

 _We have been accepted as an organization for GSoC 2011.  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 =
----

=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)
  * Leo (Chong Liu)

----
=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.
----
=Integration with external API's=

===Description===

We would like to be able to export lists as well as Melange documents to Google Docs using the Docs APIs. This would involve using OAuth to get an auth token from the user, and then using the Google Data APIs to create a new document of the appropriate type.

Could also include integration with other services, such as the Email and XMMP api.

===Skills===

  * Python
  * Google APIs

===Difficulty===

Easy

===Mentors ===

  * Sverre
  * Mario Ferraro
  * Daniel Hans

----

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

----

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