#summary where to find and how to use demos of work in progress
#labels Importance-Useful,Phase-Implementation,Contents-Draft

= 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*:
    * [http://dhansmelange.appspot.com/statistic/collect_stats/google/gsoc Collect Stats Dashboard] 
    * [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.*