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

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

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

## User data dashboard and dependencies

The project would be to implement a simple dashboard that would list all artifacts associated with the specified user or profile. It would look somehow like a tree (or a graph, to be more precise). A very simple example is outlined below:

  * userA
    * profileA
      * proposalA
        * commentA
      * proposalB
        * commentA
        * commentB
        * commentC
      * projectA
        * codeSubmissionA
        * evaluationA
    * profileB
      * commentA
etc.

It would help us understand what the exact layout of our data design is and what exactly has to be processed so that data is not broken after an account is deleted. It looks relatively easy, but it definitely is not. There are at least two open end questions:

  * how to present the data
  * how to collect the data so that it does not break down when a user has a lot of artifacts, for example comments.

Another part of this project would be to generate a graph of reverse references of models. It would give us visualization of what dependencies between the models are.

**Relevant Skills:** AppEngine, Python

**Probable Mentor:** Daniel Hans

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

# Orientation

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.

We would like our prospective students to propose new project ideas and discuss with Melange developers via [our mailing list melange-soc-dev@googlegroups.com](MailingListsGuidelines.md) (please be mindful that the list is moderated, hence your posts won't show up immediately). When introducing yourself to us, please tell us something interesting that you learned from having built Melange, run its test suite, and played around with it a bit.

**Please don't contact mentors directly in a private email, and keep the list on CC at all times.**

Also, it's always nice to see prospective students showing they're able to do their own research, so make sure you've looked at the recent list archives, to check whether your questions have been already answered, before posting, so we can develop more engaging conversations on the projects of your interest!