Projects for new developers

Revision as of 07:33, 10 April 2007 by Nicolas Connault (talk | contribs) (Automated grading for Computer Programming Assignments)

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.

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: Applications to Google SOC are now over: we received 83 applications! The mentors are currently considering and voting on these and Google will announce the final students on April 12th.

Google Summer of Code 2007 Projects

Projects with Mentors

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

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

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.

Mentors: Martin Langhoff, Geoff Cant (ejabberd)

Notes from Geoff (who's a keen Erlang hacker):

ejabberd ( is the worlds most scalable jabber server (tested to 600k concurrent connections  :) and written in Erlang so I'm keen on it and able to hack on it.
ejabberd supports http bind ( which will allow the integration of a jabber client directly into moodle web pages. ejabberd also supports traditional GUI jabber clients.
We could hack ejabberd to authenticate against a moodle and probably create MUC/groupchats automatically based on moodle course information.
jwchat ( seems like it could provide the basis for a generic http jabber client for moodle. The chat revamp could be two projects - one PHP/HTML to integrate jwchat into moodle and an Erlang one to alter ejabberd to do SSO, auth, automatic roster creation and so on.

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.

Mentors: Martin Dougiamas, Dan Poltawski (and others?)

Automated grading for Computer Programming Assignments

From Arkaitz Garro <>:

My name is Arkaitz Garro, and I'm actually studing computer science engineering at Basque Country University (Spain).

As a part of my master thesis (graduating final work), I'm developing a plugin for Moodle that consists in automated grading system designed to process computer programming assignments, bassed on actual Assignment plugin.

Computer Programming students will submit their programming assignments (developed in Java, C++, C# or other OOP language) to Moodle, and our plugin will test that the output of these programs is correct (or not). Besides that, our plugin will test security and performance issues before and during the grading automation.

From Xing Shi <>

I also want to join this project, and I have developed a similar plugin (I call it "PA-Plugin") one years ago. But it can only work for language C and C++, and only for one source file(such as main.c), not for a project. Till now it works very well on our department web. And I want to develop more functions for the plugin, such as add the java language, and make a more better architecture.

Mainly, PA-Plugin realizes two functions: delivery of programming assignments by teachers and submission of programming assignments by students.

To the teachers, PA-Plugin can set lots of parameters to the programming assignments, such as compiler type, grader type, max time and the max memory limitation, the resubmit times, the test data for the grader, and the grade standard data. Also the teacher can regrade all the programming assignments when one (or many) parameter is changed.

To the students, the PA-Plugin will firstly detective the submitted file's type, size. If OK, then the server will compile the file to produce the bin-file, and the grader will execute the bin-file and grade the output, such as acm(Association for Computing Machinery).

comment from Jorge Cañizales:

Well, I don't know if this is the place to put it, but we at Universidad de Las Palmas de Gran Canaria, and two other universities in Spain, have been using a system to do this for 7 years now. The software is called GAP, its author is Juan Carlos Rodríguez and it can be found here. The software right now isn't open source (possibly non free, either), and I don't know if Juan Carlos is willing to release the source to the OS community, but I think it's worth trying asking him.

Its 7 years of actual use with hundreds of students each year have made it a very mature software, very student- and teacher-oriented. I remember it was already very comfortable when I used it as a student 5 and 6 years ago. When you submit your project (can be multiple files), the tool compiles it and reports to the student the errors and warnings found (because the compiler & libraries & O.S. used by the teacher have not necesarilly to match the ones used by the student, and may be stricter). Your submited files are accesible (the software presents them sintax-coloured) and you can resubmit them until the assignemet deadline. If I don't remember wrong, the system is also able to run your project through teacher-written unit tests, to help the task of the teacher. On grading, the teacher can add per-file comments the student can access when the grading is done.

GAP's web page also says it is now able to handle group tasks. I've not used this feature though.

So I believe that if Juan Carlos is OK with donating his software to the OS community, this project could be very strong from the beginning. The student's project could consist on integrating GAP into Moodle's technology, or porting its features and "savoir-faire" if both technologies are incompatible enough.

I'm completely new to the developer community here, so don't know your feelings about this sort of things. What do you think of this?

Mentor: Nicolas Connault

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

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

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

External RSS feeds into Blogs

A lot of people already have their own blogs and don't want to use Moodle's blogs. Fair enough!

This project would add user settings allowing users to specify an external RSS feed to their own external blog. Moodle will parse the feed and insert entries as internal blog entries for that user. other features include:

  • Specifying tags that identify required posts in that feed (eg "school").
  • Specifying default access permissions and Moodle tags for those entries.
  • Keeping links to the external entry, so that when you want to "comment" on the blog entry you are taken to that external blog system.
  • Tools for admins to monitor information flow.
  • Other things the community may ask for.

Mentor: Martin Dougiamas

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.
  • if time, explore deeper integrations with Youtube, Flickr, MySpace, Facebook etc.

Mentor: Martin Dougiamas

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.

Mentor: Nicolas Connault

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

Projects without Mentors

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