Difference between revisions of "Projects for new developers"

Jump to: navigation, search

Note: You are currently viewing documentation for Moodle 1.9. Up-to-date documentation for the latest stable version is available here: Projects for new developers.

m (Automated grading for Computer Programming Assignments)
(Automated grading for Computer Programming Assignments)
Line 92: Line 92:
#An interface to an external 3rd party program (preferably an established, active open source project) to handle the actual analysis and grading of the source code.  It should have plugins to handle arbitrary languages.
#An interface to an external 3rd party program (preferably an established, active open source project) to handle the actual analysis and grading of the source code.  It should have plugins to handle arbitrary languages.
'''Mentor:''' Nicolas Connault
'''Mentor:''' [[Nicolas Connault]]
'''Student:''' Arkaitz Garro
'''Student:''' Arkaitz Garro

Revision as of 06:00, 12 April 2007

This page currently lists the projects available Moodle's participation in the Google Summer of Code 2007. Each project here is a nice self-contained project suitable for student programmers to complete in three months or less, and must have an associate mentor who is a regular Moodle developer.

Current status: Thank you to all the applicants! Google have now confirmed the final selections and most of the projects now have a mentor and a student. Details for each are below.

The next stage is for the student to construct detailed specifications for each project, with feedback from the mentor and the Moodle community.

Google Summer of Code 2007 Projects

The following projects are in no particular order!

Developing new question types for the quiz

The quiz has a plug-in architecture for question types. We currently have implementations of most of the basic question types, it would be nice to have implementations of some more interesting types, perhaps using the YUI JavaScript library to do some interesting interactions (but with an accessible fall-back). Which question types could be left up to the student, but some suggestions are:

  • Drag and drop versions of ordering and matching question types.
  • Place a marker or draw a line on an image question types.
  • Drag the missing words into the sentence/onto an image question type.

Another way to find question types to implement would be to review other systems and make sure Moodle supports all the question types that other systems support.

I envisage that some of these question types would be incorporated into the standard Moodle install, but others would just be put in the contrib area. Part of the project could also be improving the plugin API. There are some minor know issues with it that make it harder that it needs to be to install new question types from contrib.

Mentor: Tim Hunt

Student: Adriane Boyd

Full Specification: New question types

Enterprise-level improvements

Here are a few things you could do to help Moodle run in a heavy environment (either big Moodles or many multiple Moodles).

  • Adapt all the DB installation and upgrade scripts to run from the command line, so fully scripted installations are possible without using the web interface.
  • Develop a profiling system for developers to use when testing their code. Aim to spot and fix performance bottlenecks in Moodle with good reports and suggestions about what developers could do.

Mentor: Penny Leach

Student: Dilan Anuruddha Karanachcharighe

Full Specification: Enterprise-level improvements

Chat revamp

mod/chat needs a bit of an overhaul. Possible interesting approaches:

  • Simplify chatd and rewrite as a proper forking daemon. Great process control and networking project, and properly a good case for a bit of AJAX.
  • Integrate Moodle with a Jabber backend, plus frontend glue.
    • On the backend, we need to consider authentication, chatroom creation, and logging.
    • On the frontend, ensuring that we can get Jabber clients started reliably on the end-user's machine, and integrate a preexisting web-based Jabber client for Jabber-impaired users.
    • Installation matter: a clear install HowTo for the Jabber + Moodle.

Mentor: Geoff Cant, Martin Langhoff

Student: Thotage Piyasena

Full Specification: Chat revamp

Messaging improvements

The Moodle messaging system in Moodle is a bit clunky and could use improvements to make it slicker and more efficient as a tool for messaging people within the Moodle environment.

Functionality improvements:

  • Add a messaging API class to the core of Moodle which all modules will start using for sending messages (currently they all format their own emails).
  • Add output plugins to messaging so that users can choose exactly how to route their messages, especially when they aren't online at the time. Initially the two plugins would be "browser" and "email", but later there could be a jabber plugin, an IRC plugin etc)

Gui improvements:

  • Improve the main message GUI using AJAX (Moodle includes the YUI library so you'd need to use that)
  • Improve the messaging window to allow chats among three or more other people at once.
  • GUI for the output plugins to allow users to set rules about each plugin independently, and also to select from incoming messages by type, by user or by moodle module.
  • Improve the methods to search messages and find discussions from the past.
  • Improve administrator auditing of message logs, including filtering etc.

Mentor: Martin Dougiamas

Student: Luis Filipe Romão Rodrigues

Full Specification: Messaging improvements

Automated grading for Computer Programming Assignments

The project here is to develop two things

  1. A Moodle assignment plugin to handle the GUI and higher-level processes involved in submitting and grading a programming assignment
  2. An interface to an external 3rd party program (preferably an established, active open source project) to handle the actual analysis and grading of the source code. It should have plugins to handle arbitrary languages.

Mentor: Nicolas Connault

Student: Arkaitz Garro

Full Specification: Automated grading of programs

User Management Improvements

  • Improve the User features in moodle to allow bulk-operations.
    • Create an interface to do bulk operations on users (e.g. delete users, reset passwords etc) This could potentially use an AJAX implementation for multiple filtering/selection of required students for bulk operations.
    • Overhall the CSV upload features to allow more flexibility (more options, features to auto-generate more fields such as usernames)
  • Enrolment
  • Notes

Mentor: Yu Zhang

Student: Andrei Bautu

Full Specification: User Management Improvements

Email interface to Moodle

The idea is to let people reply naturally to email they receive from Moodle to change settings or add further comments into forums etc. Moodle activities can then be accessed like a mailing list.

  • Add a setting so admins can specify if they want an email interface enabled. Without it, none of the following is active and Moodle functions just as it does today.
  • Improve the outgoing emails in Moodle to contain a unique and robust code in the headers and potentially also in the subject line (switchable by user setting) that encrypts information about the receiver, the activity instance and the specific data. For example, all the information to securely identify a forum post.
  • Write a PHP script designed to run from the commandline as part of an email filter, that accepts emails on standard input, parses them and then calls a function in the relevant module. For example forum_incoming_email() in mod/forum/lib.php.
  • Write function for forum module (at least) to parse the content of the email and add it as a post from the user. Other modules can be worked on if there's time ... resources could be sent back as attachments, quizzes could send questions and accept multiple choice answers, the course could send back a listing of activities with further codes for each one, etc.
  • Security is essential!

Mentor: Martin Langhoff

Student: Peter Boswood

Full Specification: Email interface

Secure RSS feeds

Currently RSS is less than useful because:

  • Either we can't publish private information to the outside world because it's too sensitive.
  • We open up sensitive information to the outside world

We should add codes to make the RSS URLs practically impossible to guess, much the same way as Google Calendar does it.

  • Overhaul all the RSS feeds in Moodle to make use of a long hash-like string in the URL for identification (Forums, Data etc).
  • Store these codes in a new field per-user and per-course.
  • Add GUIs to let the user recreate their code to something else should they suspect a breach.
  • Add RSS to other areas of Moodle such as the participants "last logins" and the activity logs.
  • Explore/research other methods of opening up RSS in a safe way to the outside world.

Mentor: Petr Škoda

Student: Udit Sajjanhar

Full Specification: Secure RSS feeds

Social Networking features

Explore the possibilities of social networking features by expanding the user profile page:

  • add user tags that describe interests etc, as links to "interest pages" eg constructivism
  • interest pages that contain information about all the people who share that interest, as well as blog entries that use that tag, google searches, other info using standard Moodle blocks etc
  • allow users to add other users as "friends", which are displayed on their user profile pages
  • think about controls to prevent abuse of these features in a school environment.
  • allow users to specify an external RSS feed to their own external blog, parsing the feed insert entries (optionally selecting by tag) as internal blog entries for that user, adding new tags/permissions as specified, with links back to external entry etc.
  • if time, explore deeper integrations with Youtube, Flickr, MySpace, Facebook etc.

Mentor: Martin Dougiamas

Student: Luiz Eduardo Laydner Cruz

Full Specification: Social Networking features

Moodle Voice

  • Moodle Wiki page Development:Voice
  • Project Proposal
  • Objective: Adapt Moodle interface to output the needed VoiceXML so you can navigate with your voice with a VoiceXML enabled browser, such as Opera.

Mentor: David Horat

Student: Mayank Jain

Other open projects still looking for students

Roles interface improvements

Improve the roles editing interface by making it more dynamic and flexible. You can use the YUI library for ajax if you like, but there must be a good fall-back interface too. Some ideas include:

  • Improve the order of the capabilities and implement better grouping.
  • Make the groups of capabilities collapsible to make it easier to "zoom in" to a particular section.
  • Add floating tooltip help when you hover over any given capability.
  • Experiment with an (alternate) interface seeing the roles all side-by-side for easier comparison/editing.
  • Implement a roles backup and restore system to allow site administrators to distribute useful roles in the moodle comunity (rather than having to describe the permissions setup)
  • Analyse the problem carefully with feedback from the community for more ideas.

Integration with bibliographic systems such as Wikindx

Managing references and citing them is an important behaviour in university education and research. Bibliographic facilities are quite complicated and go beyond the capabilities of Moodle built-in technology (e.g. the database activity). Integrating Moodle with open-source bibliographic software such as Wikindx could much facilitate this practice within Moodle.

Design and construct an integration with Wikindx (or other open-source bibliographic tools, if appropriate).

Teachers should be able to easily refer to wikindx bibliography items throughout a Moodle course, and be able to:

  • Generate correctly-formatted in-place references (using standard styles e.g. Harvard, APA) for the commonly-cited reference types (e.g. journal article, book chapter, book). It may be possible to delegate the formatting directly to wikindx (since it already performs functions like these) rather than implementing a whole new set of logic in the Moodle integration.
    • Possibly, allow some kind of direct searching of a wikindx database from within Moodle, so as to make it easier to refer to items
  • Generate reading lists / bibliographies
  • Allow export of the above into common machine-readable formats such as Bibtex or RIS. (Wikindx can perform this so again it's a question of hooking into, or expanding, wikindx functionality.)

See also Development:Wikindx and this forum discussion too

Implement CATs in Moodle

This book describes a number of assessment techniques that involve collaboration and group work, and therefore fit very well into Moodle's Social Constructivist philosophy. The book about using these techniques in the classroom, but at an conference I attended there was a talk by Jean Runyon and Thomas Gorecki from the College of Southern Maryland saying how well these techniques work online.

Some of them just need a forum of something basic, but others would need to be done as a database module templates. Doing this would

  1. Make Moodle an even better teaching tool.
  2. Provide some good exemplars of how to do interesting things with database templates.
  3. Possibly highlight limitations in the database template system, that would require improvements to the database module code to overcome.
  4. One of the outcomes of this project could be some really good 'How to write a database template' tutorial, which would be very valuable to the community.

This is my (Tim Hunt's) idea, but I would not be interested in mentoring it. It would need to be someone who knows all about the database module.

Blog Assignment Type

What is it for?

Blogs are inherently user owned and driven by definition, however teachers would like to have a way to use blogs as assignments in their courses, comment, grade, etc.

A solution to this conundrum would be a new Assignment type that makes it possible for a student to easily submit the link one of their blogs to an assignment in a course, and have that blog entry privately graded and commented on by the instructor of that course. The blog entry itself remains public along with all of the student's other blogs. The tool would provide a time filter in the Assignment, so that the instructor could limit the blog entry posting dates that will be accepted (both to ensure 'fresh' entries and to keep the list of entries the student chooses short for frequent student bloggers).

I suggest a blog assignment type that functions as follows:

Teacher: Teacher creates a blog assignment, this puts a grade in the gradebook and provides an assignment link for students to see.

The teacher can configure options to allow a blog entry posted in the last X days to be used for the assignment.

Students: When students enter the assignment they see a drop down menu of all their current (blog entries posted in the last X days as chosen by the teacher) blog entries, and they choose one to satisfy the assignment.

Assessment: The teacher goes in to the Assignment, views the blogs that are linked from the assignment, leaves comments (the comments only show up to the student when they view the blog assignment), and gives a grade.

The blog entries themselves stay on the student's blog, only the grades, links, and comments go in the assignment (optionally the assignment scrapes the student's blog and loads the full text in to store for backup and restore).

Google Summer of Code 2006 Projects

  1. Presets for Database module project notes
  2. Integrated bug tracker project notes
  3. AJAX course format project notes
  4. Admin page cleanup project notes
  5. Global search project notes

Other Projects

  1. Calendar export to iCal