# Introduction

Work in progress can be tried out on some demo instances of Melange.

  * For test/demo purposes, we need more checkboxes on the dashboard.  For example the host could **enable stats collection** and they could **enable survey creation** for _all users_.  That way people interested in trying out early versions of these features can do so without first having to get host privileges from the developer(s) maintaining the demo site.

In the sections below:
  * The **main link** is the URL of the appspot instance with a demo of work in progress.
  * The **active links** tell you the URLs of pages in that appspot instance that do interesting things.



---


---


# Stats

Collection of statistical data from Melange models and presentation as pie charts, graphs etc.  The initial use is to present the pie chart showing where GSoC students come from.


**Maintained by:** dhans, merio

**Most recent Update:** 13-Aug-2009

  * **Main Link**: http://dhansmelange.appspot.com/
  * **Issue Tracker**: http://bitbucket.org/dhans/statistic-module-for-melange/issues/
  * **Active Links**:
    * [Collect Stats Dashboard](http://dhansmelange.appspot.com/statistic/collect_stats/google/gsoc)
    * [http://dhansmelange.appspot.com/statistic/visualize_stats/google/gsoc/students_per_degree?visualize=

**What's New:** (13-Aug-2009)
  * A lot of new statistics added.
  * Multiple statistics possible per visualization (for example Students Per Degree (all), Students Per Degree (with projects), Students Per Degree (without projects), and cumulative chart which displays the former three on a single one).
  * /statistic/visualize view for each statistic with visualizations.
  * Google Chart API visualizations.
  * Name of a widget may be changed.

**What's New:** (09-Jul-2009)
  * Actual positions of widgets on the dashboard are saved on the server when the widgets move or are created or removed.
  * Newly created widgets have different random colors :-)

**What's New:** (07-Jul-2009)
  * Widgets may be removed from dashboard or collapsed so that only widget's heading is visible

**What's New:** (06-Jul-2009)
  * Now there are no default widgets inside. You can create one from the statistics icon, and clicking new.
  * Clicking on "students per degree" and "students per age" (surely working as I've tested them), a new widget will be created in the dashboard, and right after saved into backend, all via Ajax calls.
  * If you sign out and sign in again (or reload the page, do NOT click on "Statistics Dashboard" link again, it doesn't work for a known bug), the widgets you created will be loaded from backend (it takes few moments, a "loading" image is a TODO :))
  * Known bugs: apart from the statistics dashboard link, every widget is created and reloaded in the third column and no order is granted.

**What's New:** (02-Jul-2009)
  * Clicking on each of statistics listed in the list of available stats in the dashboard will add a new widget with table visualization.

**What's New:** (01-Jul-2009)
  * "New" link in the stack menu now is working, showing a thickbox with available statistics from backend.
  * Clicking on "students per degree" statistics, a new widget with a Table visualization will appear on the 3rd column based on data retrieved from backend.
  * You can create as many widgets as you want (even if always with the same data at the moment), but they're actually different objects with different IDs (as shown after "comment for:" text).

**What's New:** (26-Jun-2009)
  * Statistics Dashboard now is shown also in Internet Explorer, Opera, Safari and Chrome

**What's New:** (26-Jun-2009)
  * Example of Statistics Dashboard (under menu "User (self)"), with visualizations in moveable widgets (iGoogle style dashboard) and OSX Style stack menu example

**What's New:** (18-Jun-2009)
  * Example of transclusion

**What's New:** (17-Jun-2009)
  * Mario's Javascript code and Daniel's Python code joined
  * Now can view a Google Visualization Piechart along with the Table in the Students Per Degree page

**What's New:** (16-Jun-2009)
  * Can collect predefined stats
  * Can view a JSON results object
  * Can view a sample Google Visualization Table


---


---


# Surveys

Create a form based questionnaire that users can fill in.  View the results.  The initial use is for the GSoC mid-term survey and the end of GSoC survey.

Potentially much of melange can be reworked to use surveys.  For example application to be a mentoring organization could be written as a survey.  This leads to less code and a design where programmers are not needed to change questions, rights and wordings on forms.


**Maintained by:** jamtoday, ajaksu

**Most recent Update:** 12-June-2009

**What's New:**
  * UI Updates using jQuery UI
  * Can create a survey with text, choice and multi choice options.
  * Can take a survey as a user.
  * Can view a table of all survey results.

  * **Main Link**: http://jamstage.appspot.com/
  * **Active Links**:

  * Note: You must sign in and create a profile to create or take surveys.

  * Sample Student Midterm:

  * Edit: http://jamstage.appspot.com/survey/edit/program/google/gsoc2009/samplestudentmidtermgsoc2009

  * Take (as Student): http://jamstage.appspot.com/survey/show/program/google/gsoc2009/samplestudentmidtermgsoc2009


  * Sample Mentor Midterm:

  * Edit: http://jamstage.appspot.com/survey/edit/program/google/gsoc2009/samplementormidtermgsoc2009

  * Take (as Mentor): http://jamstage.appspot.com/survey/show/program/google/gsoc2009/samplementormidtermgsoc2009




  * **Sample Evaluation Survey**: http://melange-ajaksu.appspot.com/




---


---



# Newsfeed Module

> A framework for customizable news feeds for various entity kinds that can be formatted on various site pages. Each newsfeed includes a subscription link, and through a 'subscribe' url pattern is used to render XML feeds.

Because of the relatively simple nature of the initial project, some of the post-midterm development will include an auxiliary open source pubsub component meant to be deployed separately, and act as a hub allowing Melange instances to host chat, Google Wave updates, and other real-time activity.

**Maintained by:** jamtoday

**Most recent Update:** 12-June-2009

**What's New:**
  * Newsfeed renders for Programs, Groups, Organizations for many types of updates.
  * XML link and 'subscribe' URL pattern.

  * **Main Link**: http://jamstage.appspot.com/
  * **Active Links**:
    * site/show/site (example of HTML news feed)
    * site/subscribe/site (example of XML news feed)



---


---



# GHOP

Task-based work flow for Google-Highly-Open-Participation contest.  Define tasks, tag them, set difficulty levels, track students' progress.

**Maintained by:** madhusudan

**Most recent Update:** 23-Junee-2009

**What's New:** .
  * Can create GHOP Program
  * Can create GHOP Organizations and assign task quota limits to the active ones.
  * Can create GHOP Org Admins and Mentors

  * **Main Link**: http://melange-madhusudancs.appspot.com/
  * **Active Links**: _please put the real links here_
    * (better to use the sidebar than links. Please help me test it. If you want developer access to the instance please ping me on my ID: madhusudancs@gmail.com)

**What's New:** (1-Jul-2009)
  * Org Admins create Tasks
  * Mentors create tasks, edit them.
  * Org Admins edit tasks, along with it, can approve tasks if not created by Org Admins, Publish their own tasks and tasks created by mentors, Approve and Publish the tasks in one go, for the tasks not created by mentors.
  * Bulk Approve and Publish Tasks.
  * Both OAs and Mentors can list of all Organization Tasks.

_(Important Note, Assign mentors field exist in the OA edit view but is not functional at the moment, it will be in the next update. I wanted to put this instance to testing before any delays and did not wait till it got completed. Not difficult though, I just want to integrate jQuery autocomplete for this field, which is already in our code base which is taking some time.)_

**Also for those who are interested in seeing the code or reviewing it, I have maintained all my code as a patchset at http://bitbucket.org/madhusudancs/melange-mq/. Please feel free to take a look. Also any bugs or issues you find while testing, kindly report at the issue tracker on the repository http://bitbucket.org/madhusudancs/melange-mq/issues/. It will help me keep track of the issues.**