#summary Ideas List for GSoC 2014
#labels Importance-Useful,Featured

*Melange* is the software that powers Google Summer of Code. If improving the way that Google Summer of Code is run as your Google Summer of Code project sounds attractively recursive, please read on!

= Ideas! =

We welcome your ideas, whatever they might be for Melange - but here are a few of our own for what we think might be good student summer projects:

== Parameterized Layout ==

Isn't it a bummer that the homepage for Google Summer of Code 2014 looks almost exactly the same as the homepage for GSoC 2013? And 2012, and 2011? We'd like to afford programs greater freedom in their graphic presentation on Melange. To do that, we'll need to support multiple program presentations, and support programs choosing one presentation over another. We'll also need to make decisions about how much a program's graphic presentation can be made customizable versus how much must be programmatically fixed.

*Captured Issues: <a href="https://code.google.com/p/soc/issues/detail?id=1615">1615</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1616">1616</a>.

*Relevant Skills:* Python, App Engine, HTML, CSS, Javascript, LESS

*Probable Mentor:* Nathaniel Manista, Mario Ferraro (Merio on #melange)

== Responsive Layout  ==

Isn't it a bummer that Melange's pages don't fit on your phone's screen? Modern web sites are written with the entire ecosystem of web-enabled devices in mind and cooperate with the user's device toward the goal of best displaying themselves on the screen available to them. Melange should too.

*Captured Issues: <a href="https://code.google.com/p/soc/issues/detail?id=1516">1516</a>.

*Relevant Skills:* HTML, CSS, Javascript, LESS

*Probable Mentor:* Nathaniel Manista, Mario Ferraro (Merio on #melange)

== Javascript Tests == 

Melange has a great deal of Javascript code that needs to be refined and tested.
We already have a testing architecture in place (using Testem, Jasmine, PhantomJS) but we need to start writing tests.

*Relevant Skills:* Javascript

*Probable Mentor:* Mario Ferraro (Merio on #melange)

== Resource Hosting ==

Running a program on Melange involves distributing a lot of documents and serving a lot of content - from user images to translated contest rules and everything in between. Melange doesn't yet have a subsystem that makes resource ingestion, hosting, and distribution easy for both users and feature developers. It should.

*Captured Issues: <a href="https://code.google.com/p/soc/issues/detail?id=1672">1672</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1874">1874</a>.

*Relevant Skills:* App Engine, Python

*Probable Mentor:* Nathaniel Manista, Daniel Hans

== Student Flow ==

On Melange, signing up as a student and applying for summer projects is harder than it should be. We would love to see a student project focused on making the whole process easier.

*Captured Issues: <a href="https://code.google.com/p/soc/issues/detail?id=1530">1530</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1759">1759</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1816">1816</a>.

*Relevant Skills:* Javascript, Python, HTML and CSS

*Probable Mentor:* Nathaniel Manista, Madhusudan C.S., Daniel Hans

== Mentor Flow ==

On Melange, participating as a mentor is harder than it should be. We would love to see a student project focused on making the mentor experience better.

*Captured Issues: <a href="https://code.google.com/p/soc/issues/detail?id=515">515</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1216">1216</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1240">1240</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1306">1306</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1496">1496</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1524">1524</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1525">1525</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1541">1541</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1701">1701</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1788">1788</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1850">1850</a>.

*Relevant Skills:* Python, HTML, Javascript, CSS

*Probable Mentor:* Nathaniel Manista, Daniel Hans, Madhusudan C.S.

== Renovate Our Test Data Seeder ==

Melange uses a test data seeder to generate fake program data for both its test suite and for use during development. Our old test data seeder has proven somewhat hard to work with and has broken several times during recent changes because it itself is not covered by our tests. Our long-term goal is to run several Melange programs inside our test suite, and we would be excited to receive student proposals that would move us toward that objective by affording us an updated, more usable, and more maintainable data seeder.

*Relevant Skills:* Python, App Engine

*Probable Mentor:* Nathaniel Manista, Daniel Hans, Chong Liu (Leo), Madhusudan C.S.

== Port Melange to AMD == 

Currently Melange is using <a href="http://labjs.com/">LABjs</a> to asynchronously load all JS files, using an home-made <a href="https://code.google.com/p/soc/source/browse/app/soc/content/js/melange.dependency.js">dependency system</a>. LABjs, however, is now deprecated. We would like to port our JS loading to use AMD and, specifically, <a href="http://requirejs.org/">RequireJS</a>. That would also give an easier way to automatically scrape dependencies and, eventually, using <a href="http://gruntjs.com/">grunt</a> (which we have already integrated into the code base), compile and concatenate all our JS at runtime.

*Captured Issue: <a href="https://code.google.com/p/soc/issues/detail?id=1748">1748</a>

*Relevant Skills:* Javascript

*Probable Mentor:* Mario Ferraro (Merio on #melange)

= Orientation =

We would like our prospective students to propose new project ideas and discuss with Melange developers either here (in comments), #melange on freenode.net, or via our mailing list melange-soc-dev@googlegroups.com.

Every student is encouraged to clone our <a href="http://code.google.com/p/soc/source/checkout>git repository</a> and work through our GettingStarted guide. We've created a special <a href="https://code.google.com/p/soc/issues/list?q=label:Bienvenue">"Bienvenue" label in our issue tracker</a> for issues that we think are particularly good places for new contributors to Melange to make a small, independent change as a first contribution.