- Improve and maintain 12 Sugar activities
- Improve and maintain 6 Sugar activities
- Port Sugar and core activities to Python 3
- Sugarizer Assignments
- Sugarizer Exerciser Evaluation mode
- Sugarizer Vue.js UI
- Music Blocks v3 maintenance
- Sugar on Raspberry Pi
- Music Blocks 4 Builder Framework
- Music Blocks 4 Code Editor
- Music Blocks 4 More Syntax Elements and Tests
- Music Blocks 4 Export/Import
- Music Blocks 4 Internationalisation
- Music Blocks 4 Webpack Setup
Prerequisites
- Experience with Python
- Strong experience with Sugar activities
- Experience with maintaining activities on ASLO and ASLO-v4
Description
Sugar has a lot of activities, with 250+ on GitHub, and more
elsewhere. These have scope for improvement; bugs,
features, updated human translations, and release. This project will involve
working on at least 12 activities to improve them. Students can choose
activities on their own, and are encouraged to select activities which
are either a part of Fructose or have a strong pedagogical value. To
understand how to locate and work on activities, see our guide to
Modifying
Activities
In their proposal, students may mention some of the issues they will work on. Any new feature suggestion should be discussed on GitHub Issues or on the mailing list before being added to a proposal.
Since there are a lot of activities to work on, more than one instance of this project may be selected.
Suggested Issues to work on:
- jukebox-activity: #22 Add collaboration for sharing playlist items
Other issues will have been raised since.
Suggesting or adding features, fixing bugs, or releasing activities will help you to gain experience
Project Length
350 hours
Difficulty
Medium
Coding Mentors
Ibiam Chihurumnaya,
Srevin Saju
Assisting Mentors
To be added.
Prerequisites
- Experience with Python
- Strong experience with Sugar activities
- Experience with maintaining activities on ASLO and ASLO-v4
Description
Sugar has a lot of activities, with 250+ on GitHub, and more
elsewhere. These have scope for improvement; bugs,
features, updated human translations, and release. This project will involve
working on at least 6 activities to improve them. Students can choose
activities on their own, and are encouraged to select activities which
are either a part of Fructose or have a strong pedagogical value. To
understand how to locate and work on activities, see our guide to
Modifying
Activities
In their proposal, students may mention some of the issues they will work on. Any new feature suggestion should be discussed on GitHub Issues or on the mailing list before being added to a proposal.
Since there are a lot of activities to work on, more than one instance of this project may be selected.
Suggested Issues to work on:
- jukebox-activity: #22 Add collaboration for sharing playlist items
Other issues will have been raised since.
Suggesting or adding features, fixing bugs, or releasing activities will help you to gain experience.
Project Length
175 hours
Difficulty
Medium
Coding Mentors
Ibiam Chihurumnaya,
Srevin Saju
Assisting Mentors
To be added.
Prerequisites
- Experience with Python
- Experience with porting telepathy bindings
- Strong experience with Sugar Desktop and activities
Description
Support for Python 2 was withdrawn by the Python
Foundation, so we need to finish the move to Python 3. The move was
started in GSoC 2018, and continued in GSoC 2020, but there is still
work to be done. Sugar 0.116 runs on Python 2 or Python 3. Core
activities run on Python 3. Many other activities run on Python 2.
Many regressions have been seen as a result of code not being tested.
We have a Python 3 Porting Guide which describes the process for activities.
Project Task Checklist
- Review the Sugar source code changes since 0.112 that were made for porting to Python 3,
- Design tests and iterate until the tests have sufficient coverage for the code changes identified about,
- Fix regressions in Sugar, the Toolkit, and the Datastore,
- For affected activities, port Telepathy bindings to TelepathyGLib, see Port to TelepathyGLib.
- For affected activities, port to the latest Sugargame or CollabWrapper library,
- Port activities to Python 3, fixing any problems that prevent them from being ported or used,
See GitHub Project Port to Python 3 via six for some open issues and pull requests. Most activities do not have issues. Some activities have problems that prevent them from being ported.
The Telepathy library is used by some activities for network collaboration between Sugar users. The library does not have static bindings for Python 3, so porting Telepathy to the PyGObject binding is a prerequisite, see GitHub Project Port to TelepathyGLib.
Project Length
350 hours
Difficulty
Hard
Coding Mentors
Ibiam Chihurumnaya
Assisting Mentors
Srevin Saju
Prerequisites
- Experience with JavaScript/HTML5 development
- Experience with MongoDB
- Experience with node.js and EJS framework
Project length
350 hours
Difficulty: ★ ★ ★ (hard)
Description
Objective: Add features to Sugarizer/Sugarizer Server to allow teachers to give assignments to students.
Questions:
- What is an assignment?
- Something to do by a student in a period of time
- What could be represented as an assignment in Sugarizer?
- Every activity that could have a context. However, it's better if activities have a clear context or result. A document (image, PDF, …) can't be an assignment because it's stateless
- What are the characteristics of an assignment?
- An activity instance with its context
- A set of instruction
- A delivery date/time
- A state: assigned, started, submitted
- What is the difference between an assignment and a standard journal instance?
- An assignment should be identified as such
- An assignment should be submitted once done
- An assignment can't be change once submitted
Tasks
-
Update to implement on Sugarizer Server:
- Create new database collection for assignments
- Create new API for handling assignments
- Dashboard screens (the attached images indicate essential requirements and the actual implementation may look different)
-
Update to implement on Sugarizer:
- Store assignments in the remote Journal of the user (will be synchronized when the user will be connected)
- Add an assignments icon and a popup to notify a user that some assignments are expected for him
- Update the Journal view:
- Add a specific icon on assignment
- Change date to indicate the delay to submit (instead of the modification date?)
- Add a help button to see instructions
- Add a submit button
- Add a new filter to search for assignments only
- Forbid actions? Delete, Copy, Duplicate
- Update datastore library to forbid storage if assignment and submitted
-
Inspiration:
- Microsoft Teams Assignments: https://www.classpoint.io/assignments-in-microsoft-teams/
- Google Assignments: https://www.youtube.com/watch?v=cjKwRnG9I3o
First steps to starts
- Complete the Sugarizer Vanilla Javascript activity development tutorial to understand how Sugarizer work
- Install Sugarizer Server and dashboard
- Create different Sugarizer users/teachers/classrooms and see how the dashboard work
- Study the source code of dashboard, try to fix bug or, propose improvement
Mentor
Nikhil Mehra
Backup mentor
Lionel Laské
Prerequisites
- Experience with JavaScript/HTML5 development
- Experience with ReactJS framework development
- Good understanding of Exerciser activity and its implementation
Project length
350 hours
Difficulty: ★ ★ ☆ (medium)
Description
The Exerciser activity let you build interactive exercises, using multiple templates, and share these exercises with other users.
The idea of this project is to improve the activity and implement new features, specifically a way to use Exerciser as an evaluation platform.
Tasks
More precisely feature to implement are:
-
Upgrading ReactJS version: the activity use an old ReactJS version, the idea is to upgrade the activity to support a more recent one.
-
Improve the UI: the objective is to simplify the UI of the activity by taking inspiration from the Vote activity. Today to share an exercise, the user need to click three times: 1) click on shared palette, 2) click on shared button in the palette – it display shared buttons on exercises 3) click on shared button on the exercise to share.
The idea is to always display shared buttons on exercises. When the user click on one shared button on exercises: if the activity is not already shared, the button share the activity then share the exercise. If the activity is already shared, the exercise is share.
It should be possible to share exercise by clicking three times as today.
-
Run multiple exercises at the same time: the idea is to add a feature to run multiple exercises in one click. Things to do:
-
In settings mode, allow the user to reorder exercises so the user can choose exercises order.
-
Add a Run all button in the toolbar to launch all exercises. At the end of each exercise, the result screen is displayed as today but the "Redo" button is replaced by a "Next exercise" button (will be a "Finish" button on the last exercise).
-
Add a Share all button in the toolbar to share all exercises. Once all exercises are shared, users who joined the activity will have to complete all exercises.
-
Add a new label on the screen to see total score for all exercises.
-
-
Evaluation mode: the evaluation mode is a new way of working for Exerciser activity to allow teacher to evaluate students. The main difference with the current way of working is that in Evaluation mode, it's possible only to see the total score, not the detailed result (right/wrong answers).
The evaluation mode will be available in real time - when the activity is shared – and in asynchronous mode: an evaluation opened from the Journal.
In real time, all users who join the activity will be able to do the evaluation then see theirs scores. The user who shared the activity will be able to see both the score and the results of each students (like today).
In asynchronous mode, users who open the activity will be able to complete exercises and view their scores. They could review their answers to exercises but they can't change answers once one exercise is completed. If the activity contains multiple exercises, it's possible to complete exercises in several times but once an exercise is completed it can't be changed.
The evaluation mode will be available from a new toolbar palette. One button in this palette will be able to run evaluation in real time (by sharing all current exercises). Another button in this palette will export the activity in the Journal as an evaluation.
In evaluation mode, it's impossible to access to exercise settings.
First steps to starts
- Complete the Sugarizer Vanilla Javascript activity development tutorial
- Explore the implementation of Exerciser activity: https://github.com/llaske/ExerciserReact/
Mentor
Ashish Aggarwal
Backup mentor
Lionel Laské
Prerequisites
- Experience with JavaScript/HTML5 development
- Experience with Vue.js framework development
- Good understanding of Sugarizer Core architecture
Project length
350 hours
Difficulty: ★ ★ ☆ (medium)
Description
Sugarizer Core UI rely on EnyoJS, a deprecated frameworks initially developed for WebOS.
The idea of this project is to create a framework of Vue.js UI components matching the Sugar UI.
This framework will allow to replace EnyoJS in a future Sugarizer version.
Tasks
Here is the current set of UI components use by Sugarizer core UI and that need to be rewrite:
- Icon (js/icon.js): Fully encapsulate SVG icon for button, activities, menu, neighborhood, etc... include color handling, popup and disable mode. Use everywhere. Very generic.
- IconButton (js/iconbutton.js): An icon with a text under. Rely on Icon component. Use in dialog screen, first screen and for empty journal. Generic but could probably be a specialization of Icon.
- Searchfield (js/searchfield.js): The famous Sugar search field with a magnifier icon and a cancel button. Very generic. Use in each screen.
- Popup (js/popup.js): The famous Sugar Popup menu. With header, some items and an optional header. Rely on Icon component. Very generic. Use in each screen.
- Selectbox (js/selectbox.js): A simple selectbox (select a value in a list) component. Use only for language selection. Rely on Icon and Popup components.
- Password (js/password.js): The Sugarizer specific password box combining letters and emoji. Generic. Use in first screen and in dialog screen.
- Palette (js/palette.js): Mimic Sugar toolbar palette. Generic. Use only for filter option in Journal screen.
- Audio (js/audio.js): Encapsulation of HTML5+Cordova audio component. Use only for Easter Egg XO boot.
- Dialog (js/dialog.js): Dialog settings and subsettings. Use only here.
It will be probably useful to propose also in the framework an encapsulation for basic UI components: Button, Entryfield, Checkbox, Popup, …
Finally, a replacement for the deprecated Bootstrap tour library used for Tutorial (lib/tutorial.js) must be implemented.
First steps to starts
- Complete both the Sugarizer Vanilla Javascript activity development tutorial and the Sugarizer Vue.js activity development tutorial
- Read and test the SVG study here because the new Icon component should rely on direct SVG rendering. Explore the implementation of SVG based icon in the Xmas Lights activity here.
Mentor
Lionel Laské
Backup mentor
Ashish Aggarwal
Prerequisites
- Experience with JavaScript/HTML5 development
Project length
175 hours
Difficulty
Medium
Description
While we continue to focus on Music Blocks 4.0, we still need to
maintain Music Blocks v3. There are numerous issues with Music Blocks
v3 due to changes in browser security (and changes to JavaScript
dependencies). For example, on recent versions of Chromium, the Planet
is no longer accessible. Requires experience with JavaScript and web
development.
Mentor
Walter Bender
Backup mentor
Devin Ulibarri
Prerequisites
Project length
175 hours
Difficulty
Easy
Description
Sugar runs on RPi and we should take advantage of that to reach the
Maker community. This project involves ensuring that Sugar runs w/o
and issues; that it is packaged in a way that is suiable for inclusion
on https://www.raspberrypi.com/software/operating-systems/. Also,
there are any number of Sugar activities that could be enhanced by
knowing some of the details of the RPi, such as Turtle Blocks,
Measure, and Pippy, all of which could be tailored to take advantage
of the sensors available on RPi.
Mentor
Walter Bender
Backup mentor
Alex Perez
Difficulty: ★ ★ ★ ★ ☆
Description
The objective is to build the new Project Builder Framework for Music Blocks (v4). The
Project Builder is the graphical blocks component which can be used to create Music Blocks
programs. There is a prototype in musicblocks-v4-builder-framework
.
General objectives are:
- Refactor the prototype code
- Integrate it as an
npm
package inmusicblocks-v4
- Create a wrapper component Project Builder (builder) in
musicblocks-v4
- Add utilities to the wrapper component so that the Project Builder component can communicate with the Specification and Syntax Tree APIs of the Programming Framework
- Create a Palette (palette) component
Prerequisites
- Strong experience with JavaScript ES6+
- Strong experience with Web API's Document Object Model (DOM) interface
- Strong experience with React 17
- Experience with HTML 5, CSS 3, SCSS
- Experience with TypeScript 4
- Understanding of the prototype Builder Framework
- Understanding of the Music Blocks (v4) component architecture
Project Length
350 hours
Mentor
Anindya Kundu
Backup mentor
Walter Bender
Difficulty: ★ ★ ★ ★ ☆
Description
The objective is to create a powerful Code Editor for authoring Music Blocks (v4) programs.
Expected features are:
- Syntax Highlighting
- Abstract Syntax Tree (AST) generation from the code
- Syntax Tree snapshot generation
- Syntax and Semantic Validation (squiggly underlines)
- Prettification of code
- Intelligent Code Suggestion (e.g. dropdown lists when you're about to type an instruction)
- Status Box of the current code details (errors, warnings, etc.)
Note: The code syntax grammar will be specified later.
Prerequisites
- Strong experience with JavaScript ES6+
- Strong experience with Web API's Document Object Model (DOM) interface
- Strong experience with React 17
- Experience with HTML 5, CSS 3, SCSS
- Experience with TypeScript 4
- Understanding of the Music Blocks (v4) component architecture
Project Length
350 hours
Mentor
Anindya Kundu
Backup mentor
Walter Bender
Difficulty: ★ ★ ★ ☆ ☆
Description
The objective is to create new Syntax Elements for the Painter and Singer components in Music Blocks (v4) as well as for other miscellaneous tasks. Syntax Elements are concrete classes for individial instructions (statement, block) and arguments (value, expression).
The list of Syntax Elements will include ones currently in Music Blocks (v3) but not in Music Blocks (v4) at the time of starting the project.
General objectives are:
- Add Syntax Elements in the Painter for sprite-related actions
- Add Syntax Elements in the Singer for music-related actions
- Add Syntax Elements in the Programming Framework Library for general actions (data structures, program flow, etc) with Jest tests
- Add test scripts in Painter and Singer to run and test individual Syntax Element entries
- Configure loading of only Painter and Singer components in the app for their tests
- Add a module to interactively run runtime tests (for Painter and Singer)
Prerequisites
- Experience with JavaScript ES6+ and TypeScript 4
- Experience with p5.js and Tone.js
- Experience with Jest
- Understanding of the Programming Framework of Music Blocks (v4)
- Understanding of the Music Blocks (v4) component architecture
350 hours
Mentor
Anindya Kundu
Backup mentor
Walter Bender
Difficulty: ★ ★ ★ ☆ ☆
Description
The objective is to add an Export/Import
framework in Music Blocks (v4) for exporting/importing
projects and multimedia.
General objectives are:
- Generate the project syntax encapsulated in a
.html
file - Add markup and styling to the
.html
file which describes how to load the project from the file if the user opens it - Import project syntax from a project
.html
file - Communicate with the Syntax Tree API of the Programming Framework to fetch and set the syntax
- Export canvas drawing (Painter)
- Export music (Singer)
- Export animation of the canvas art and music (on running the project)
- Load resources (images, audio samples, etc.) to the browser storage which can be shared on demand when requested by a component
- Encapsulate the above in a component
Prerequisites
- Experience with JavaScript ES6+ and TypeScript 4
- Experience with JavaScript ES6 modules
- Experience with Web API's File interface
- Understanding of the Music Blocks (v4) component architecture
Project Length
350 hours
Difficulty: ★ ★ ☆ ☆ ☆
Description
The objective is to add an Internationaisation (i18n) framework in Music Blocks (v4) for multiple language strings' support in the UI components.
General objectives are:
- Create scripts to generate
.json
files of language strings from.po
files, which will be run at build-time (see sugarlabs/musicblocks/po) - Distribute the
.po
files per component so that every component contains only the strings it needs - Generate separate
.json
files per.po
file per language - Dynamically load (at runtime) only strings of the selected language
- Create functionality to supply strings to a component when it loads or updates (at runtime)
- Encapsulate the above in a component
Prerequisites
- Experience with JavaScript ES6+ and TypeScript 4
- Experience with JavaScript ES6 modules
- Understanding of the
.po
format insugarlabs/musicblocks/po
- Understanding of the Music Blocks (v4) component architecture
Project Length
175 hours
Mentor
Anindya Kundu
Backup mentor
Walter Bender
Difficulty: ★ ★ ★ ☆ ☆
Description
The objective is to explicitly configure the Music Blocks (v4) project with Webpack and
WebpackDevServer (for development-time hot reloading) and remove dependency on react-scripts
.
However, it is important to note that Music Blocks (v4) will not be a React application in strict
terms. We might want to leverage some of its features later on, but it isn't a necessity.
Music Blocks by itself doesn't have too many complex DOM components with inter-dependencies. Most
of the complexity of the application is in the background components which are in plain JavaScript
(TypeScript). Therefore, it is imperative not to rely on the create-react-app
template, or more
specifically react-scripts
. It is a good starter, however, it packs too many things than what we
require, and abstracts the configurations entirely.
Expected features are:
- Configure
webpack v5
,webpack-dev-server
, andwebpack-cli
- Create a basic configurations file (
webpack.config.common.js
) for both development and production - Use
webpack-merge
to inherit the basic configurations and add on top of that in separate files for development (webpack.config.dev.js
) and production (webpack.config.prod.js
) - Replicate basic
react-scripts
hot-reloading behaviour (includingeslint
checks) - Add fast build configurations for development
- Add optimised build configurations for production
- Add scripts to overwrite
webpack
logs with more select (and readable) logs
Prerequisites
- Strong Experience with Webpack 5 — Configuration and Node API
- Experience with JavaScript ES6+ and TypeScript 4
- Experience with JavaScript ES6 modules
Project Length
175 hours
Mentor
Anindya Kundu
Backup mentor
Walter Bender
Above are a list of ideas we've planned for GSoC 2022 projects. If you have any ideas which can be useful to us, but are not in the list, we'd love to hear from you. You need not be a potential student or a mentor to suggest ideas.
- Does it fill an empty pedagogy niche in the activity set for Sugar or Sugarizer,
- Does it increase quality of our software products (Sugar, activities, Music Blocks, or Sugarizer),
- Does it not involve any project infrastructure, e.g. not another app store, web site, or developer landing page,
- Do we have a developer now who would be willing and able to do it if a student was not available, and who can promise to do it if a student is not selected; these are shown as a coding mentor,
For each idea, we must have offers from one or more coding mentors willing and able to assist students with coding questions.
Requirements for a coding mentor are a demonstrated coding ability in the form of contributions of code to Sugar Labs.
Mentors for a project will be assigned after proposals are received.
mentors who do not code willing to assist students in various other ways, such as gathering requirements, visual design, testing, and deployment; these are shown as an assisting mentor.
The only requirement for an assisting mentor is knowledge of the project.
Mentors for a project will be assigned after proposals are received.
Everyone else in Sugar Labs may also be involved with these projects, through mailing lists, Wiki, and GitHub.
The difference between a mentor and everyone else, is that a mentor is obliged to respond when a student has a question, even if the answer is "I don't know."
When a mentor receives a question for which the best forum is everyone else, then they are to respectively redirect the student to ask everyone else. See Be flexible and When you are unsure, ask for help in our Code of Conduct.
For some ideas, there is a list of 'Suggested issues to work on'. These may help you to get familiar with the project. The more you work on these issues, the more experienced you will be for the project. However, this is not a strict list. You should try and explore other issues as well.