Projects for new developers
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: 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.
- 1 Google Summer of Code 2007 Projects
- 1.1 Developing new question types for the quiz
- 1.2 Enterprise-level improvements
- 1.3 Chat revamp
- 1.4 Messaging improvements
- 1.5 Automated grading for Computer Programming Assignments
- 1.6 User Management Improvements
- 1.7 Email interface to Moodle
- 1.8 Secure RSS feeds
- 1.9 Social Networking features
- 1.10 Moodle Voice
- 2 Other open projects still looking for students
- 3 Google Summer of Code 2006 Projects
- 4 Other Projects
Google Summer of Code 2007 Projects
The following projects are in no particular order!
Developing new question types for the quiz
- 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
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
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
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.
- 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)
- 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)
- Specify time of manual enrollments ([http://tracker.moodle.org/browse/MDL-8877 MDL-8877])
- Allow teachers to put notes for each student in every course, much requested feature ([http://tracker.moodle.org/browse/MDL-7077 MDL-7077])
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 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.)
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
- Make Moodle an even better teaching tool.
- Provide some good exemplars of how to do interesting things with database templates.
- Possibly highlight limitations in the database template system, that would require improvements to the database module code to overcome.
- 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
- Presets for Database module project notes
- Integrated bug tracker project notes
- AJAX course format project notes
- Admin page cleanup project notes
- Global search project notes