#summary An intro to some of the vocab of Melange
#labels Importance-Useful,Contents-Draft

_..this is so that we can speak/understand the same language..._

  * *Site Administrator:* (now known as 'Developer' in Melange).  The all powerful one who initially set up a Melange site.   
  * *Sponsor:* _Example - Google_.  "It is not expected that very many Sponsor organizations will be created for a running Melange site, often only one."
  * *Host:* _Example - LH_.  Hosts sign up as regular users and are later promoted/blessed/anointed to being hosts either by the site administrator or by another host.
  * *Program:* _Examples - GsoC-2008 or GHOP-2008_.  A program is an individual instance. We’re NOT calling a generic 'GSoC' or 'GHOP' a program, but are qualifying by which one, i.e. which year.

  * *Quiz:* (was 'Questionnaire') _Example - the mid term mentor survey_.  A set of questions created by an author.  A quiz has a target audience, e.g. mentors, students.  Creating a new quiz automatically creates a new questions-page and answers-summary page.  The quiz mechanism will be used in multiple places, e.g. it's also used for terms of service.  See QuestionnairePages.

  * *Club:* _Example - Apache, GSoCers from Poland, Documentators_. A Club is a generic type of Group that gathers Members into a community. This is a group that is going to be used in social networking related Melange features. Club can gather Members and later apply to become an Organization for a particular Program.   

=The difference between a User and a Person:=

*Explanation* (from MelangeIrcLogs): User is unique for each Google Account.  Person is not.  There is a Person (with things like shipping address, public email address, etc.) for each Role that a User can have on the site.  User is some very harmless "nickname" and "linkname" (used in URLs) info attached to a User (Google Account).  User is site-wide.   Person is per-Program (per-year) and per-Role.   So, User is supposed to be minimal and not contain time-sensitive data.


=Google Account, id and User=

  * A Google Account is referred to, at least in code, as an "id".  This change was made to avoid confusion between the App Engine users.User and our User Model.