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

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