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

=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)
  * 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.
----
=Export to Google Docs=

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

===Skills===

  * Python
  * Google APIs

===Difficulty===

Moderate

===Mentors ===

  * Sverre
  * Mario Ferraro
  * Daniel Hans
----
= 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*.