Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Projects for new developers: Difference between revisions

From MoodleDocs
(Add Mock DB trait project)
(→‎Attendance password rotation/expiry: update description of project a bit to make it a bit more clear.)
(36 intermediate revisions by 8 users not shown)
Line 1: Line 1:
{{GSOC}}
{{GSOC}}
==Getting started==
==Getting started==


Moodle uses PHP, JavaScript, SQL and a number of other Web languages, so learning those is a good place to start.
* Moodle uses PHP, JavaScript, SQL and a number of other Web languages, so learning those is a good place to start.
* When you have some basic PHP programming skills, you may wish to start learning about how the Moodle code is organised. It is recommended that you go through the [[Tutorial]].
* If you are looking for projects suggested in the tracker, look for issues with the [https://tracker.moodle.org/issues/?jql=labels%20in%20%28addon_candidate%29 'addon_candidate' label].
* If you are looking to make a quick contribution, look for tracker issues with marked as [https://tracker.moodle.org/issues/?jql=Difficulty%20%3D%20Easy easy].
* As you become more involved in Moodle development, you might like to learn more about the [[Coding|coding conventions]] used and how changes to Moodle core code are [[Process|processed]]. Once you become confident enough, please consider adopting a [https://moodle.org/plugins/browse.php?list=set&id=61 plugin seeking a new maintainer].


When you have some basic PHP programming skills, you may wish to start learning about how the Moodle code is organised. It is recommended that you complete the [http://dev.moodle.org/course/view.php?id=2 Introduction to Moodle Programming] course on [http://dev.moodle.org/ dev.moodle.org]. To access this you will need to have an account on moodle.org first.
==Potential projects==


''If you are looking for projects suggested in the tracker, look for issues with the [https://tracker.moodle.org/issues/?jql=labels%20in%20%28addon_candidate%29 'addon_candidate' label].
This evolving page lists possible Moodle projects for new developers derived from community suggestions and lists projects together with experienced core developers willing to mentor new developers.


''If you are looking to make a quick contribution, look for tracker issues with marked as [https://tracker.moodle.org/issues/?jql=Difficulty%20%3D%20Easy easy].
''If you have any ideas for new features in Moodle which might be suitable as projects for new developers, please see [[New feature ideas]].''


''Please consider adopting a [https://moodle.org/plugins/browse.php?list=set&id=61 plugin seeking a new maintainer]''. See the [https://moodle.org/mod/forum/discuss.php?d=260354 Plugins adoption programme].
=== Improve SCORM plugin ===
There are a number of areas of SCORM that could be improved as part of a GSOC project, some of these are bigger projects and others could be combined to form a single project.


As you become more involved in Moodle development, you might like to learn more about the [[Coding|coding conventions]] used and how changes to Moodle core code are [[Process|processed]].
These are just some examples, take a look at the open SCORM issues in the Moodle tracker for a list of other issues.
* Improve Grading (MDL-51086, MDL-52871, MDL-37421)
* Improve validation of SCORM packages (MDL-38060, MDL-24057)
* Convert YUI Treeview to use Jquery (Moodle is moving away from YUI and the existing Treeview has a few issues)
* Choose where to send users after completing SCORM (MDL-61677)


==Potential projects==
Requirement for prospective students:
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
:'''Skills required''': PHP
:'''Difficulty level''': Medium
:'''Possible mentor''': [http://moodle.org/user/view.php?id=21591&course=5 Dan Marsden]


This evolving page lists possible Moodle projects for new developers derived from community suggestions.
=== Acceptance tests for the Moodle app ===


''If you have any ideas for new features in Moodle which might be suitable as projects for new developers, please see [[New feature ideas]].''
Since Moodle 3.7 it will be possible to write and run acceptance tests for the Moodle app.


=== Pusher integration for HTML5 push notifications ===
Tasks:
Moodle supports message output plugins. By adding a plugin for pusher.com and a Javascript service worker to listen for push notifications, we can have realtime HTML5 notifications on all platforms.
* Write new acceptance tests for the Moodle app
:'''Skills required''': Javascript (JQuery, AMD), PHP
:'''Difficulty level''': Medium
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=1337843 Damyon Wiese]


=== Ability to crop/resize/rotate an image in atto ===
Requirement for prospective students:


Moodle comes with it's own HTML editor known as 'atto' (see https://docs.moodle.org/dev/Atto). The editor functions similarly to other editors out there, like TinyMCE, but is tailored to Moodle. It comes with multiple plugins that allow users to perform tasks, such as changing the font size, the alignment, adding links etc. One of these plugins allows the user to add an image to the text editor with the ability to specify the size and alignment of the image via text input. The idea of this project is to extend and improve this current plugin so the user can crop/resize/rotate the image via JS - making the whole experience easier and more aesthetically pleasing.
* We require prospective students to set-up and run in a local environment the existing tests following this documentation: [[Acceptance testing for the mobile app]], students must record a video of the tests running on a local machine.
* We also require students to create an additional simple test (detailed instructions for writing tests are available in the previous link)


This project details/discussion can be located at MDL-52982.
:'''Skills required:''' Behat (PHP)
:'''Difficulty level:''' Medium
:'''Possible mentor:''' [https://moodle.org/user/profile.php?id=49568 Juan Leyva]


:'''Skills required''': Javascript (YUI), PHP
=== Front-end editor for the plugin skeleton generator ===
:'''Difficulty level''': Medium
:'''Possible mentor''': [https://moodle.org/user/view.php?id=1057750 Mark Nelson]


=== Improve Behat tests in SCORM plugin ===
This is a follow-up project for a [[GSOC/2016#Plugin skeleton generator|successful GSOC 2016 project]] that resulted in a new tool allowing developers to quickly generate a skeleton (scaffolding, template) for a new Moodle plugin. The tool proved to be a helpful helper with significant impact on the quality of Moodle plugins code. This follow-up project aims at further improvements of the skeleton generator. The primary goal is to implement a developer-friendly user interface / front-end editor allowing to configure the plugin's properties (recipe file) easily. The UI should guide the developer through the process of designing and defining the plugin properties and facilitate the whole process.
The Moodle SCORM plugin does not contain very many behat tests and most tests are manual. The Claude Ostyn diagnostic SCO should be used to implement a range of new Behat tests to cover the functionality that the SCORM module provides.


Deliverables:
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
* Behat tests for all existing SCORM QA tests (where possible)
* Behat tests for all SCORM settings (eg standards mode, mastery score settings etc)
* The code should pass 100% of the Moodle codechecking tools to ensure the code meets with Moodle Guidelines.


Extra requirement for prospective students:
:'''Skills required''': PHP + JS
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered - on top of this you must also attempt to convert one existing QA test into a Behat test. This MUST be completed before your application can be considered valid.
:'''Skills required''': PHP
:'''Difficulty level''': Medium
:'''Difficulty level''': Medium
:'''Possible mentor''': [http://moodle.org/user/view.php?id=21591&course=5 Dan Marsden]
:'''Possible mentor''': [http://moodle.org/user/view.php?id=1601&course=5 David Mudrák]


=== Advanced Grading in Forums ===
=== Add multi-class capabilities to Moodle's machine learning backends ===
Finish the work required to add the advanced grading feature to the Moodle forum activity. This builds on some existing work available at MDL-31860


Deliverables:
Moodle includes an analytics API that uses machine learning for binary classification. This is enough for classification problems like "student at risk" vs "student not at risk". We want to expand this API capabilities by supporting multi-class classification, so we could write models like "very low grade", "low grade", "pass", "best student ever".
* Modify the forum grading so that it pushes 2 grade areas (or 3 including ratings) into the gradebook instead of a single grade.
* Improve interface that allows overall forum participation grading.
* Behat tests for all new functionality.
* The code should pass 100% of the Moodle codechecking tools to ensure the code meets with Moodle Guidelines.


Extra requirement for prospective students:
Tasks:
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered - on top of this you must also attempt to convert one existing QA test into a Behat test. This MUST be completed before your application can be considered valid.
* Modify the two machine learning backends included in Moodle core to support multi-class classification problems. This includes the PHP ML backend (based on php-ml library) and the Python ML backend (Tensorflow).


:'''Skills required''': PHP
Requirement for prospective students:
:'''Difficulty level''': Medium
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
:'''Possible mentor''': [http://moodle.org/user/view.php?id=21591&course=5 Dan Marsden]
 
=== Add support to end-to-end testing in the Mobile app ===


[https://angular.github.io/protractor/#/ Protractor] is an end-to-end test framework for AngularJS applications. Protractor runs tests against your application running in a real browser, interacting with it as a user would.
:'''Tracker issue:''' https://tracker.moodle.org/browse/MDL-58992
:'''Skills required:''' PHP + Python + basic understanding of machine learning algorithms and TensorFlow
:'''Difficulty level:''' Medium/High
:'''Possible mentor:''' [https://moodle.org/user/profile.php?id=122326 David Monllaó]


The basements for this project are done, see MOBILE-1179, the only remaining work is to add more tests to the app and document the set-up process in the Moodle developers wiki.
=== Add regressors to core machine learning backends ===


:'''Skills required: Javascript (AngularJS)
Moodle includes an analytics API that uses machine learning for binary classification. This is enough for classification problems like "student at risk" vs "student not at risk". We want to expand this API capabilities to support regression, so we can write models that estimate linear values instead of classes.
:'''Difficulty level: Medium
:'''Possible mentor: [https://moodle.org/user/profile.php?id=49568 Juan Leyva]


===Clef | Two-Factor Authentication===
Tasks:
Create [https://getclef.com Clef two factor authentication] plugin, so  a user can log in using their mobile to reduce login time. This will improve security and reduce  the login time for users.
* Modify the two machine learning backends included in Moodle core to support regression. This includes the PHP ML backend (based on php-ml library) and the Python ML backend (Tensorflow).


:'''Skills required:''' PHP, Javascript
Requirement for prospective students:
:'''Difficulty level''': Medium
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=1328988 Rajesh Taneja]


=== Multi-step login screen ===
:'''Tracker issue:''' https://tracker.moodle.org/browse/MDL-60523
Update the login screen to first ask for a username, and then the password as a two-step process.
:'''Skills required:''' PHP + Python + basic understanding of machine learning algorithms and TensorFlow
See the login process for Google
:'''Difficulty level:''' Medium/High
:'''Possible mentor:''' [https://moodle.org/user/profile.php?id=122326 David Monllaó]


:'''Skills required:''' PHP, JavaScript, Mustache
===Attendance password rotation/expiry ===
:'''Difficulty level''': Medium
The attendance plugin provides the ability for teachers to display a QR code to allow students to take their own attendance, the QR code is currently static for the current session and does not change.  
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=1779959 John Okely]


A new process should be implemented that frequently changes the displayed QR code and expires the old QR code, making it difficult for the QR code to be shared outside the session. As part of your project application, please suggest your ideas on how to minimise the impact of server performance while dealing with rotating QR codes.


=== 2FA - Two Factor Authentication ===
Requirement for prospective students:
Add support for Two-Factor Authentication. This would work well when combined with the Multi-step login screen.
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
Factors requiring consideration include the Mobile app integrations.
:'''Tracker issue:''' https://github.com/danmarsden/moodle-mod_attendance/issues/351
 
:'''Skills required''': PHP
:'''Skills required:''' PHP, JavaScript, Mustache
:'''Difficulty level''': Medium
:'''Difficulty level''': Medium
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=268794 Andrew Nicols]
:'''Possible mentor''': [http://moodle.org/user/view.php?id=21591&course=5 Dan Marsden]
 
=== CLI Helper for Moodle Developers ===
Possibly an addendum to MDK, a set of scripts to help facilitate various common tasks. In particular:
* creation of Persistent Objects including their Class files, the XMLDB code to create their tables, and the XMLDB upgrade scripts required to upgrade (including version bumps)
 
:'''Skills required:''' PHP, Python?
:'''Difficulty level''': Hard
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=268794 Andrew Nicols]
 
=== Trait for Mock DB in unit tests ===
In moodle we run every unit test using a real database. This is extremely slow with little benefit. Granted it does catch some cross-database compatibility issues, but we don't need it for every test. We should add a trait that test classes can use that will automatically set up mock $DB to save processing power and unnecessary waiting for DB.
 
:'''Skills required:''' PHP, Python?
:'''Difficulty level''': Hard
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=268794 Andrew Nicols] or [https://moodle.org/user/profile.php?id=1779959 John Okely]


==See also==
==See also==
Line 120: Line 101:
* [[GSOC]] - describing Moodle's involvement with Google in their Summer of Code program
* [[GSOC]] - describing Moodle's involvement with Google in their Summer of Code program
* [https://tracker.moodle.org/issues/?jql=type%20in%20%28%22New%20Feature%22%2C%20Improvement%29%20AND%20resolution%20%3D%20unresolved%20and%20labels%20in%20%28addon_candidate%29%20ORDER%20BY%20votes%20DESC Popular new feature and improvement requests in Tracker that can be implemented as plugins]
* [https://tracker.moodle.org/issues/?jql=type%20in%20%28%22New%20Feature%22%2C%20Improvement%29%20AND%20resolution%20%3D%20unresolved%20and%20labels%20in%20%28addon_candidate%29%20ORDER%20BY%20votes%20DESC Popular new feature and improvement requests in Tracker that can be implemented as plugins]
* [[Projects for new developers/Archive|Archive]] of outdated and/or inactive calls for projects
* [https://docs.moodle.org/dev/Moodle_Wishlist a Wishlist] by some Moodle users. Some of the good ideas here may be adopted.

Revision as of 21:19, 18 March 2019


Getting started

  • Moodle uses PHP, JavaScript, SQL and a number of other Web languages, so learning those is a good place to start.
  • When you have some basic PHP programming skills, you may wish to start learning about how the Moodle code is organised. It is recommended that you go through the Tutorial.
  • If you are looking for projects suggested in the tracker, look for issues with the 'addon_candidate' label.
  • If you are looking to make a quick contribution, look for tracker issues with marked as easy.
  • As you become more involved in Moodle development, you might like to learn more about the coding conventions used and how changes to Moodle core code are processed. Once you become confident enough, please consider adopting a plugin seeking a new maintainer.

Potential projects

This evolving page lists possible Moodle projects for new developers derived from community suggestions and lists projects together with experienced core developers willing to mentor new developers.

If you have any ideas for new features in Moodle which might be suitable as projects for new developers, please see New feature ideas.

Improve SCORM plugin

There are a number of areas of SCORM that could be improved as part of a GSOC project, some of these are bigger projects and others could be combined to form a single project.

These are just some examples, take a look at the open SCORM issues in the Moodle tracker for a list of other issues.

  • Improve Grading (MDL-51086, MDL-52871, MDL-37421)
  • Improve validation of SCORM packages (MDL-38060, MDL-24057)
  • Convert YUI Treeview to use Jquery (Moodle is moving away from YUI and the existing Treeview has a few issues)
  • Choose where to send users after completing SCORM (MDL-61677)

Requirement for prospective students:

  • We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
Skills required: PHP
Difficulty level: Medium
Possible mentor: Dan Marsden

Acceptance tests for the Moodle app

Since Moodle 3.7 it will be possible to write and run acceptance tests for the Moodle app.

Tasks:

  • Write new acceptance tests for the Moodle app

Requirement for prospective students:

  • We require prospective students to set-up and run in a local environment the existing tests following this documentation: Acceptance testing for the mobile app, students must record a video of the tests running on a local machine.
  • We also require students to create an additional simple test (detailed instructions for writing tests are available in the previous link)
Skills required: Behat (PHP)
Difficulty level: Medium
Possible mentor: Juan Leyva

Front-end editor for the plugin skeleton generator

This is a follow-up project for a successful GSOC 2016 project that resulted in a new tool allowing developers to quickly generate a skeleton (scaffolding, template) for a new Moodle plugin. The tool proved to be a helpful helper with significant impact on the quality of Moodle plugins code. This follow-up project aims at further improvements of the skeleton generator. The primary goal is to implement a developer-friendly user interface / front-end editor allowing to configure the plugin's properties (recipe file) easily. The UI should guide the developer through the process of designing and defining the plugin properties and facilitate the whole process.

  • We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
Skills required: PHP + JS
Difficulty level: Medium
Possible mentor: David Mudrák

Add multi-class capabilities to Moodle's machine learning backends

Moodle includes an analytics API that uses machine learning for binary classification. This is enough for classification problems like "student at risk" vs "student not at risk". We want to expand this API capabilities by supporting multi-class classification, so we could write models like "very low grade", "low grade", "pass", "best student ever".

Tasks:

  • Modify the two machine learning backends included in Moodle core to support multi-class classification problems. This includes the PHP ML backend (based on php-ml library) and the Python ML backend (Tensorflow).

Requirement for prospective students:

  • We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
Tracker issue: https://tracker.moodle.org/browse/MDL-58992
Skills required: PHP + Python + basic understanding of machine learning algorithms and TensorFlow
Difficulty level: Medium/High
Possible mentor: David Monllaó

Add regressors to core machine learning backends

Moodle includes an analytics API that uses machine learning for binary classification. This is enough for classification problems like "student at risk" vs "student not at risk". We want to expand this API capabilities to support regression, so we can write models that estimate linear values instead of classes.

Tasks:

  • Modify the two machine learning backends included in Moodle core to support regression. This includes the PHP ML backend (based on php-ml library) and the Python ML backend (Tensorflow).

Requirement for prospective students:

  • We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
Tracker issue: https://tracker.moodle.org/browse/MDL-60523
Skills required: PHP + Python + basic understanding of machine learning algorithms and TensorFlow
Difficulty level: Medium/High
Possible mentor: David Monllaó

Attendance password rotation/expiry

The attendance plugin provides the ability for teachers to display a QR code to allow students to take their own attendance, the QR code is currently static for the current session and does not change.

A new process should be implemented that frequently changes the displayed QR code and expires the old QR code, making it difficult for the QR code to be shared outside the session. As part of your project application, please suggest your ideas on how to minimise the impact of server performance while dealing with rotating QR codes.

Requirement for prospective students:

  • We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
Tracker issue: https://github.com/danmarsden/moodle-mod_attendance/issues/351
Skills required: PHP
Difficulty level: Medium
Possible mentor: Dan Marsden

See also