Project ideas for GSoC 2009

=Welcome=

Welcome Google Summer of Code Student aspirants (:razz:)!! Please check if you are an eligible candidate for the GSoC 2009 program. A bunch of ideas have been listed on this page where LimeSurvey Community seeks help from you.

However, you are not required to work only on these projects. If you have your own idea, don't just let it tick over in your mind. Discuss your awesome idea with us in our forums, mailing list or at #limesurvey on irc.freenode.net. Then submit your proposal. Good Luck (:biggrin:)

=Project ideas=

Condition handling
Condition handling is a very important feature for powerful survey engines but tricky to implement.

Conditions are used in several contexts inside LimeSurvey:
 * question branching: displaying or hiding questions based on conditions (for instance answers from previous questions)
 * assessments: assigning marks when participants answers meet some conditions, and displaying (or not) the result sometime during or after the survey
 * quotas: limiting the total number of answers matching a given participants profile which is defined by a set of conditions on answers

A powerful conditions handling implements:
 * atomic conditions:
 * left and right operands can be:
 * answers from previous questions
 * static values
 * the result of a function (for instance the sum of some previous integer questions)
 * the operator can be:
 * the usual == or !=
 * the <,<=,>,>= operators which must handle string or number order
 * the more advanced Regexp operator (possibly with user-friendly variant such as contains)
 * meta operators such as Not displayed (the question targetted by the left operand was hidden by conditionnal branching), or Not answered (the question targetted by the left operand was displayed but received no answer from the participant)
 * atomic conditions combination: with the boolean and and or operators and the implementation of parenthesis-grouping

To implement this in a clean and easy to follow way for later bugfixing, a well-thought-out code design is a must!

This task also covers designing a user front end to easily enter conditions.

Skills

PHP, CakePHP, Javascript (JQuery), Experience in code design and web design for the frontend

Difficulty

Design: Moderate

Implementation: Moderate to hard

Probable Mentors

Thibault Le Meur (lemeur), Jason Cleeland (jcleeland)

EasyUpdater & Usage Statistics
LimeSurvey needs an easy way to get updated by users. The update process should include the following features

User experience
 * Application should find and download the latest release package and download it OR release package can be uploaded by the LimeSurvey admin inside the application
 * Changes and necessary manual changes to be applied after admin are showed to admin before update procedure starts - admin has still the chance to bail out at that moment
 * After agreeing the updated files will be installed, special care is to take here for templates since users may have modified these. After the file install the database update should be run accordingly.

Release admin experience

The admin has to have some tool to set which version is the actual one and where the latest release file can be found. (for the application-download part), this information has to be stored somewhere so it can be fetched by the application. This process has to be as easy as possible.

Technical details

The requested solution should be implemented for LimeSurvey 1.x and LimeSurvey 2.x. The solution has to check for necessary permissions to write the updated files, it also should be working without any special libraries (like CURL) installed and it should be working in PHP4 and 5.

The second part of this task is to write a an application and a server handler to retrieve usage statistics.

User Experince

The admin may activate an option in the general settings to transmit usage statistics to the LimeSurvey.org.

Technical details

All usage statistics are anonymous and include a general count of survey (active or not), number of responses, number of questions, number of users, numbers of answers, question types used, number of tokens and a unique installation identifiying key to suppress duplicate transmissions.

Skills needed:

PHP, DB, AdoDB

Survey statistics
LimeSurvey is a tool for data collection and not a tool for data analysis. Nevertheless a general overview is very helpful for users who don't want to use expensive tools for data evaluation.
 * Extend the question type plugins so they can deliver methods for computing a result summary
 * Create a report generator so users can put together their own reports with their own graphs or let a wizard do it
 * Establish filter properties so user can filter results to a certain scope

There are two areas which have to be covered:
 * 1) Admin statistics
 * 2) Public statistics

While public statistics can be used to show survey results to participants after they have submitted a survey or to show results on a homepage admin statistics require some additional work like
 * filter questions/answers:
 * filter screen to select the questions which will be analysed
 * filter screen to filter data by answer e.g. "Only show survey results for users who answered Q1='male'"
 * filter data by (submit) date to find out about trends
 * filter "no answer" or non completed data sets
 * Calculate additonal measures like arithmetic mean and standard deviation (for certain question types)

Due to the modular design of LimeSurvey (each question type is a plugin) one has to create a first draw how to handle data analysis in general. LimeSurvey 1.x uses the open source library pChart to create graphs (JPGraph was used until version 1.80 but was removed because it's not open source). One has to evaluate if LimeSurvey 2 will also use pChart or if there are other powerful charting libraries. Please keep in mind that flash might be an option for the admin side but you can't assume that every user has a flash plugin installed so this probably won't be an option for public statistics.

There is an ongoing discussion in the forum about how to handle statistics for LimeSurvey 2.

Skills

PHP, CakePHP, Experience in data analysis

Difficulty

Moderate

Probable Mentors

Carsten Schmitz (c_schmitz), Jason Cleeland (jcleeland)

Develop a 'Results API' for LimeSurvey

 * Develop a "results API" - so that LimeSurvey administrators can let other sites, CMS's and so forth pull statistics and survey results from a survey live and in real time.

Skills

PHP, CakePHP, SOAP and/or XML

Difficulty

Easy to moderate

Probable Mentors

Jason Cleeland (jcleeland)

Create a dashboard for survey administrators
Dashboards helps survey administrators get an overview of the useful information related to the survey(s). We would like to implement two types of dashboards in LimeSurvey2. One would be a general dashboard for an administrator where the admin can combine his personal most important data he wants to see.

The other dashboard would be a survey-specifc one, where only data listed for a specific survey is listed.

The global dashboard can include widgets of the survey dashboard, but no the other way around.

The UI of the dashboard should be widgets similar to iGoogle.

Some sample dashboards for the global and survey specific dashboard could include:
 * 1) List the number of persons who answered the survey out a list of invited people/list general pariticipation
 * 2) Show small graphs to the list of the current surveys in the system with optional filter for Superadministrator to see only their own surveys for repsponse
 * 3) Show an excerpt of certain results of certain questions
 * 4) How many answers were there in the last hour/day/month.
 * 5) Specific result summaries from a certain survey

Survey administrator can add/remove/arrange the widgets from a list of available widgets (similar to the above list) onto their dashboard according to their own likings. This widget framework would be modular and can be ported to other websites too.

Mockups based on the current UI would a be a great idea - to get an idea how you (the student) would imagine things

Skills

PHP, CakePHP, Javascript

Difficulty

Moderate

Probable Mentors

Carsten Schmitz(c_schmitz)

Become a "question type" guru
A survey tool is as useful as its question types - and LimeSurvey 2 has been designed to make question type development modular.
 * Expand LimeSurvey 2's question type library and create new question types

Ideas for question types include:
 * OpenStreetMap integration: Imagine a question type where you could ask where someone lives, and they could choose it using OpenStreetMap?
 * Flash Integration: What about if someone wants to design a question type on flash, and have the presented flash store the responses in LimeSurvey?
 * All the existing question types in LimeSurvey 1 need to be implemented in LS2.
 * Any further ideas? Feel free to contact us and share your thoughts!
 * Create a question type template facility in the software where survey administrators can store pre-defined questions for later use
 * Create the ability to exchange questions easily with with other people online or by file.

Skills

PHP, CakePHP, Javascript

Difficulty

Easy to difficult (depends on question types)

Probable Mentors

Jason Cleeland (jcleeland), Carsten Schmitz (c_schmitz)

Create a modular authorization API
You know the drill. LimeSurvey 2 already has its own DB-based authentication system. But what about other authentication mechanisms? It is an unwritten law that everyone is using and having their own favourite authentication system like LDAP, OAuth, OpenID and many many more.
 * Your task will be to change the current authentication system so it is using CakePHPs plugin architecture and generate according hooks so new authentication modules can easily be added.
 * Also you would need to develop at least one more authentication system of your choice in addition to the DB-internal one.
 * Intense documentation of the created API

Skills

PHP, CakePHP, maybe Javascript (jQuery)

Difficulty

Easy to Moderate

Probable Mentors

Thibault Le Meur (lemeur)

Create a SOAP webservice Interface
In LimeSurvey Version 180, a Webservice Interface was introduced. Now we like to have such functionality in LimeSurvey 2, too. This gets very handy if you want to connect other Programms with LimeSurvey. Especially if they are not written in PHP.
 * Your task will be to implement a SOAP Interface with PHP:SOAP.
 * It have to be able to authenticate a User with LimeSurveys build-in-authentication for each webserviceCall by username and password
 * It have to be able to do a basic LimeSurvey Task (i.e. Create a Survey and give it a Name and Description, would be a good first approach).
 * Intense documentation of the created SOAP Interface

The milestones will be as following:
 * Finish a Concept how to realize the Interface. Describe Ideas, make an UML, write down possible Solutions and where you see problems.
 * Design a proper wsdl (Webservice Description Language) file for the upcoming Webservice.
 * Implement authentication, so that it can be used by each webservice function.
 * Realize the first function.
 * Write a simple testclient to check webservice functionality.
 * If you got time left, realize the next functions.

To get an idea about the Webservice you may look at the old one here: RemoteControl

Skills

PHP, CakePHP, AdoDB, basic understanding of eXtensible Markup Language

basic HTML and CSS knowledge will help you with the testclient

Difficulty

Easy to Moderate

Probable Mentors

Tim Wahrendorff (rakete), Carsten Schmitz (c_schmitz)

Make survey taking multilingual/multinational
Language translation has global impact. LimeSurvey 1 is already used in over 100 countries with over 50 language translations.
 * Add the feature that the same survey can be run and taken in several languages, including
 * Choosing a base language for a survey
 * Add/remove languages in a running survey
 * Have a language selection page when starting the survey
 * Have the ability to change the language during a running survey
 * Create a translation facility for an assumed translator role to translate all the user-provided content from the base language in an easy way to one of the other languages
 * Make invitations to surveys consider multi-language
 * Make the user-profiles consider multi-lingual
 * Implement and consider national specialties, like special calendars, currency, etc.

Skills

PHP, CakePHP

Difficulty

Moderate

Probable Mentors

Carsten Schmitz (c_schmitz)

Does the interface design rock or suck? Make it beautiful, surprising, and elegant.

 * Find out what people desire. Watch people setting up or taking surveys using webpage analytics tools (f.e | userfly.com) or related methods of your choice. What does make people smile? Where are people's expectations blown out of the water? Do repeat users feel like champs? Uncover problems, develop proposals and interaction designs on how to improve LimeSurvey's usability.
 * Put the service experience from installing LimeSurvey to survey taking to the eyeball test yourself. What designs will make LimeSurvey be more fun and usable? Give LimeSurvey a face lift and create new designs including color palette, icon set and page design.
 * Questions are the heart of every survey. Explore new interaction possibilities using the JavaScript programming language. Design and implement new questions types by leveraging the jQuery Toolkit. Possible techniques include item sorting (f.e. "Which items do you consider expensive which are cheap?") putting items in containers using drag and drop, or categorization (f.e. "Please group all expensive items together.") using piles. Another one would be to let the user order items on a string (f.e. "Please, put the cheapest item to the left, the most expensive one to the right.").

Skills

UI Design, Interaction Design, PHP, Javascript

Difficulty

Moderate

Probable Mentors

Carsten Wittenberg (cwittenb)

Make LimeSurvey 2 work offline with Google Gears
Add functionality to LimeSurvey so that surveys can be taken offline in the absence of internet connectivity with the help of Google Gears API.

Skills

Knowledge of Gears API

Difficulty

Easy To Moderate

Probable Mentors

Marcel Minke (Mazi), Josef Prandstetter (ElMatador69)

Your ideas
What floats your boat? Do you have another idea that gets you excited? Discuss your ideas in our forums, mailing lists or at #limesurvey on irc.freenode.net.

LimeSurvey Google's Summer of Code 2009

 * LimeSurvey GSoC 2009

An introduction to LimeSurvey and our application for this years Google Summer of Code

Getting Started

 * How to get started with LimeSurvey's GSoC 2009

How to Get Started With LimeSurvey:

- setting up the development environment, coding standards, and all the other important stuff that you need to know before the real fun begins!

Frequently Asked Questions

 * Google's Summer of Code Faqs
 * LimeSurvey's GSoC Faqs