A+ v1.8 Release Notes
January 2021
Highlights
Revamped sections:
- A+ front page
- Login page
- User profile page
- Course archive page
- Course news
- Questionnaire layout
Significant changes:
- Added accessibility statement and fixed many accessibility issues.
- In multilingual courses, the user’s language choice is saved in each course separately. The URL may include the new
hl=en
query parameter in order to open the page in the given language. - Changed the main colours of the user interface. The new colours have higher contrast and they are used more consistently.
- Fixed many link issues in RST courses. If a chapter contains links to other chapters or files in the course git repository, the generated links have changed, thus it is important to use the latest a-plus-rst-tools v1.3 with A+ v1.8.
- When you compile an RST course on your computer, the links in the built HTML files work locally so that you may browse them by opening HTML files under the
_build
directory in the web browser. - In a-plus-rst-tools, added a new way (called
aplusmeta_substitutions
) for defining all the course module opening and closing times in one place in the course conf.py file. - In multilingual RST courses, you may use
doc
andref
links to other files and chapters in the course without manually appending the language suffix_en
to the label. - A+ frontend styles are developed in Sass instead of plain CSS. Courses of course still use plain CSS in the A+ course head URLs setting in order to change the styles of the A+ course pages.
More details below.
We thank all the contributors who made this release possible, including but not limited to:
- Jhosimar Aguacia
- Veera Alt
- Ella Anttila
- Matthew Higgins
- Jaakko Kantojärvi
- Sami Laine
- Markus Murhu
- Markku Riekkinen
- Saara Satokangas
- Teemu Sirkiä
- Henrik Sundell
- Artturi Tilanterä
For end-users
A+
https://github.com/apluslms/a-plus
Added
- After the course has ended, show a notification in the course page that the course is over. It includes a link to the latest course instance.
- (August 2020 hotfix) Added accessibility statement to the site footer (required by law).
- User’s language choice is saved for each (multilingual) course separately (in the enrollment object, thus the student must be enrolled). If the user is not enrolled, then the preferred language is saved in the site-wide user profile object. Previously, the user’s chosen language was only saved in a (browser) cookie. Unauthenticated users still use cookies. NB: monolingual courses always use the language defined in the course settings.
- Added
hl=en
query parameter to URLs for opening the page in the given language. In multilingual courses, you may link to a certain language version of the course page by adding?hl=fi
or?hl=en
to the end of the URL. A+ does not include the language parameter in the URL when you normally browse the pages, but if the parameter is added, it will remain in the URL so that other pages opened via links stay in the same language. - Added a warning to the course page if the user is viewing the content in another language than set in her preferences. The warning includes a button for changing the language (if the user is enrolled in the course).
Changed
- Revamped the A+ front page. The new front page has a section for the user’s own courses that the user is studying or teaching. The front page shows the courses 30 days after the ending time instead of removing them immediately after ending. The front page displays the course instance name. Previously, the course image was the only practical method of differentiating multiple course instances of the same course. The course cards have a cleaner appearance and most of the area is clickable.
- Revamped the course archive page. The new archive uses a card layout similar to the new front page and arranges the courses by starting calendar year.
- Revamped the login page. The new page is clearer and more accessible.
- Revamped the user profile page. The avatar icon was removed in order to remove the dependency on external gravatar.com and wordpress.com accounts. The page layout is much clearer and more accessible. NB: the user avatar icon has not yet been removed from the student group interface.
- Revamped the course news. The contents of the news items are visible without clicking (removed folding). The news section is clearer and more apparent. Items may be pinned to the top of the news section. Removed the alert option from the news because it was a confusing feature that broke the consistent structure of the news section. You may no longer make news items look like red or yellow alert boxes. Use pinned items instead of alerts. The news section shows the three latest or pinned news items and the rest are displayed under the “show older” button. NB: existing alert news items do NOT automatically become pinned items in the server upgrade.
- Revamped the look and layout of questionnaires.
- Feedback shows correct and incorrect answers clearly. Symbols and text are used in addition to colourful points badges.
- Selected options (checkbox/radio buttons) are bolded in the feedback.
- Validation errors are highlighted at the top of the feedback.
- In checkbox questions (pick-any in RST), hints tied to specific options are displayed right under the option in the questionnaire feedback. It is much clearer to the student that the hint was activated by that option.
- Common hints for the checkbox question are shown below the whole question. These common hints are the ones that trigger when a correct answer is NOT selected.
- In A+ chapters, removed the modal dialog that popped up after making a submission in a questionnaire.
- Removed the notification about the total points from the top of the feedback.
- Fixed unique id attributes and HTML classes in the form labels. Form labels are coloured with red in the feedback when the question has errors.
- Questionnaire model answer indicates neutral options in checkbox questions.
- Changed the colours used in the user interface. The new colours are more consistent, convey the semantics more clearly, have better contrast to fulfil accessibility requirements and avoid decorative use of colour.
- Clarified date formatting. The new formats are more consistent and follow Finnish and British English conventions. American formats are avoided.
- Updated the EU-U.S. Privacy Shield description in the privacy warnings (for LTI links). The European Court of Justice declared that the EU-U.S. Privacy Shield is invalid in August 2020.
Fixed
- Many accessibility issues have been fixed in the pages that students use the most.
- The pages that were completely revamped were designed for accessibility.
- Added a consistent focus state.
- Added skip links to the top navbar and the course menu for keyboard users.
- Added landmarks to templates: main landmark, navigation landmarks (with correct ARIA labels), swapped the footer to a contentinfo.
- Questionnaire feedback uses distinct symbols and text to highlight correct and incorrect answers in addition to the old colourful points badges. (Colour alone is not accessible to all users.)
- Changed the main colours of the user interface so that the colours fulfil WebCAG-AAA contrast requirements. Particularly, the main layout, button and badge colours were changed.
- Added an icon and a description to screen readers to all links that open in new tabs (based on the
<a>
element’s attributetarget="_blank"
). - Increased the base font size to 16px.
- Fixed the contrast in the page footer.
- Removed the colour gradient from the top navbar.
- Added ARIA role button to submission dropdown menus that use the HTML
<a>
element. Screen readers announce them correctly as push buttons that expand the menu. - Removed unnecessary
role="presentation"
from navigation menus. - Fixed the tab navigation order of the course pagination element (next/previous chapter links).
- Fixed the layout and accessibility of the mobile menu that is activated on small screens (behind the hamburger button).
- Fixed many link issues in RST courses. If a chapter contains links to other chapters or files in the course git repository, the generated links have changed, thus it is important to use the latest a-plus-rst-tools v1.3 with A+ v1.8.
- When you compile an RST course on your computer, the links in the built HTML files work locally so that you may browse them by opening HTML files under the
_build
directory in the web browser. - Links to chapters that are defined in subdirectories under the module directory in the RST course repository.
- In multilingual courses, A+ removes the language suffix from links such as
chapter1_en.html#anchor
. (The language suffix is not part of the A+ chapter key.) - Fixed static file links (e.g., images) in exercise descriptions when the exercise is defined in a chapter that is defined in a subdirectory under the module directory.
- When you compile an RST course on your computer, the links in the built HTML files work locally so that you may browse them by opening HTML files under the
- Duplicate course enrollments are not possible anymore. Previous duplicates are removed so that the chronologically first one is preserved.
- HTML pages in the cache are compressed. Large pages should cause less cache errors.
- If A+ fails to download exercise template files from the exercise service, A+ shows a “file not found” error instead of crashing.
MOOC-Grader
https://github.com/apluslms/mooc-grader
Added
- Added new grading container settings that are specific to the Kubernetess installation at Aalto University.
- These are documented in the courses/README.md under
access.types.stdasync.acceptFiles
. resources
(already existed but added documentation): CPU and memory limits for the containerrequire_constant_environment
(already existed but added documentation): Setting this to true enables an environment that runs only one submission at a time. The execution time should not vary due to hardware differences and other competing tasks. Intended for courses that use the execution time as a grading criterion.enable_network
: Setting this to true enables generic network access.privileged
: Setting this to true essentially grants root access to the grading node where the container is run. This can be needed, e.g., in exercises requiring access to/dev/kvm
or docker-in-docker exercises. Privileged submissions are run on a separate node entirely dedicated to them. This should generally be used as a last resort, and the exercise creator should make sure that student code cannot escape the container.
- These are documented in the courses/README.md under
Changed
- Revamped the look and layout of questionnaires. The HTML structure of questionnaires has changed.
- More details are given in the A+ release notes.
Fixed
- When retrieving an exercise template file that is defined in the exercise configuration and the file is not found in the file system, return HTTP 404 Not found instead of crashing.
Removed
- Removed the code for the personal directory feature, which was an unused addition to personalized exercises. NB: personalized exercises still work and have not been changed.
- Removed
ENABLE_PERSONAL_DIRECTORIES
from the server’ssettings.py
. - The code for the grading chroot sandbox was already removed in the release v1.7 (June 2020) and some parts of the personal directory were already removed at that time. (Containers replaced the chroot sandbox.)
- Personal directory was originally developed for the chroot sandbox and it did not fully work with containers.
- Removed
a-plus-rst-tools
https://github.com/apluslms/a-plus-rst-tools/
New directives are documented in the a-plus-rst-tools README.md.
Added
- Added a new way for defining all the course module opening and closing times in one place in the course conf.py file.
- These are called
aplusmeta_substitutions
in the a-plus-rst-tools README.md. - You can define labels for the time values in conf.py and use the labels in the
aplusmeta
directives in the course module index.rst files. - This is useful in both monolingual and multilingual courses. You can define all the deadlines in one place and in multilingual courses, you do not need to duplicate the same dates in each language version of the module index.rst.
- These are called
- In multilingual RST courses, you may use
doc
andref
links to other files and chapters in the course without manually appending the language suffix_en
to the label.- For example, you may use the file name
chapter1
in adoc
link even though the target file is actually namedchapter1_en.rst
. - Likewise, the language suffix is automatically appended to labels and
ref
links pointing to the labels. - You can disable the automatic link modifications in the conf.py file:
enable_ref_link_multilang_suffix_correction = False
andenable_doc_link_multilang_suffix_correction = False
.
- For example, you may use the file name
- Added a new
rst-tabs
directive that is used to created tabbed content. One tab is displayed at a time. There are many use cases for tabbed content. One is to display an RST code block in one tab and the rendered output of the RST code in another tab. - Added the JavaScript and CSS code of the annotated (code block) directive to the a-plus-rst-tools.
- The annotated directive has been part of a-plus-rst-tools for a long time, but it depended on frontend JavaScript and CSS code that was not distributed with the a-plus-rst-tools. Now the code is included.
- Since many courses in production already use the annotated directive and they have included the JS and CSS code in the course repository, a-plus-rst-tools do not enable by default its own JS and CSS code for the annotated directive. The default code can be activated in the conf.py settings of the course:
include_annotated_js = True
andinclude_annotated_css = True
.
- Added tip and hint admonitions to the aplus theme default styles (default.css).
- Added new
row
andcolumn
directives. They are primarily intended for thepoint-of-interest
directive, but they may work also elsewhere. They are used to create a table layout for the content. For example, you may define text and an image side by side in columns. NB: use table directives for real tables that present data in rows and columns. - Added Swedish translations for the strings used by a-plus-rst-tools. The RST build does not crash if you have Swedish course contents.
Changed
- When you compile an RST course on your computer, the links in the built HTML files work locally so that you may browse them by opening HTML files under the
_build
directory in the web browser.- The built links have changed. The links are always made relative to the built output directory so that the built link path includes the parent directories even if the source and target files are in the same directory.
- This change was required so that A+ can fix relative links inside A+. A+ needs to know the directories in the original file path.
- It is critical to use a-plus-rst-tools v1.3 with A+ v1.8 due to the changes in the links to chapters and static course files.
- In the aplus theme default styles for the
styled-topic
directive, changed link styles to be more apparent and fixed the alignment of the definition lists. - a-plus-rst-tools save an internal field
_rst_srcpath
to the built exercise configuration YAML files. This field was changed so that it uses the forward slash/
as the directory separator even when building on Windows computers.
Fixed
- Fixed syntax highlight colour issues in code blocks when the
pygments_style
option is changed in the Sphinx aplus theme settings. - Fixed the width of code blocks when the
linenos
option is used. The blocks use the full page width now. - Fixed the language detection from file name suffixes like
chapter1_en.rst
(en equals English). Only 2-character long suffixes that consist of a-z characters are used as languages.2a
inchapter_start_2a.rst
is not used as a language code.
MOOC-Jutut - course feedback gathering and management tool
https://github.com/Aalto-LeTech/mooc-jutut/
Added
- Added the new time usage app that plots bar graphs of the amount of time students have spent on A+ chapters. The data comes from the MOOC-Jutut chapter feedback questionnaires in which the students themselves estimate the time they have spent on the chapter. The time usage app assumes that the questionnaire contains a question with the key
timespent
that takes the time in minutes.
Changed
- Changed the widgets of certain options in the feedback filter form into multistate buttons. The buttons change their state on each press and cycle back to the first state in the end. These buttons are easier to use than dropdown menus for certain options in which the user selects one of the given options.
- Exercise names include the hierarchical numbering like “1.2.3 Feedback”.
- Upgraded the Django framework to the version 2.2 (long-term support).
Presentation maker - create presentations from points-of-interest in A+ course materials
https://github.com/apluslms/presentation-maker
- New tool for creating HTML and PDF presentation slides from points-of-interest defined in the A+ course materials.
- The tool was already developed in the summer 2019 and the project continued until May 2020. We announce it in the release notes now that the last pieces have been finalized.
- More information is available:
Radar - similarity/plagiarism detection
https://github.com/Aalto-LeTech/radar/
Added
- Added detailed deployment instructions.
Changed
- Upgraded the Django framework to the version 2.2 (long-term support).
Acos server - reusable and interoperable browser-based smart learning content
https://github.com/acos-server/acos-server
Added
- Added live reloading for local development. It is faster to develop new content packages and types when the Acos server can reload itself without a manual shutdown and restart.
Lab queue - Neuvontajono - interactive queueing system for lab sessions
https://github.com/ttsirkia/neuvontajono
Latest updates were already deployed at Aalto during the autumn 2020.
- Added support for local (face-to-face) and online lab sessions. Each exercise session can be separately configured to allow participation only locally, remotely, or allow both.
Code vault - Koodisäilö - share small code snippets over LTI to the course staff
https://github.com/ttsirkia/koodisailo
No changes.
Rubyric - manual assessment with rubrics
https://github.com/Aalto-LeTech/rubyric
- Added instructions for how to run Rubyric locally for development and testing.
Aplus manual - A+ course for teachers about creating A+ courses
https://github.com/apluslms/aplus-manual
- Changed the structure of the course.
- Added new instructions for setting up the course development environment.
- Added instructions for the new VS Code extension Aplus Tools.
- Added a module about points-of-interest and Presentation maker.
- Added examples of Rubyric exercises integrated in A+.
- Many improvements are under construction, for example, better documentation of questionnaires and multilingual courses.
VS Code extension Aplus Tools - easier development of A+ courses
https://github.com/apluslms/vscode-aplus-tools
Published in the Visual Studio Marketplace: https://marketplace.visualstudio.com/items?itemName=jaguarfi.aplus-tools
The extension was presented in the May 2020 A+ webinar. You may watch the video in Panopto.
Astra Moodle plugin - A+ exercises in Moodle
- https://github.com/apluslms/moodle-mod_astra
- https://github.com/apluslms/moodle-block_astra_setup
Changed
- Update the plugin for Moodle 3.9 (long-term support). The new version does not work on older Moodle releases.
- Removed exercises from the Moodle gradebook. The gradebook contains only the total points of the exercise round. This change was necessary due to gradebook changes in Moodle 3.8. Moodle no longer supports a variable number of grade items per one activity instance in the gradebook. Therefore, Astra adds only one grade item per activity instance to the gradebook and that grade item shows the total points of the exercise round (one exercise round corresponds to one activity instance in Astra). In older Moodle versions, it was possible to create a different number of grade items for each activity instance.
- Astra does not modify the gradebook total aggregation method anymore. You can change it manually.
- There is no limit on the number of exercises in one exercise round. The summer 2020 release had a limit of 30 exercises as a workaround for the gradebook issues.
- The Astra edit course page has a new gradebook synchronization feature in the botton of the page. You may use if the grades in the gradebook seem to be outdated and to not correspond to the best submissions. Normally, it is not necessary to run the synchronization manually, but it is useful if the grades become somehow broken.
- Updated the CSS styles so that they work with MOOC-Grader v1.8. The grader has changed the HTML structure of questionnaires.
- Updated the relative link fixes in chapters since A+ v1.8 and a-plus-rst-tools v1.3 have changed their behaviour.
Upgrading (for system administrators)
When an old installation is upgraded, the gradebook grades for the Astra exercise grade items must be manually removed before upgrading the Astra plugin to the Moodle 3.9 version. The grade items are easy to remove with the given script. Follow these instructions:
- Copy the new mod_astra to the Moodle mod directory. Do not run the upgrade in the Moodle admin UI yet.
- Run the command-line command:
php moodle/mod/astra/cli/remove_exercise_gradeitems.php
- Run the upgrade in the Moodle admin UI.
- Run the command-line command:
php moodle/mod/astra/cli/sync_gradebook_grades.php
For system administrators and developers
A+
Added
- Added accessibility statement (required by law). Sites should include institution-specific information in the statement by copying and overriding the templates
templates/accessibility_issues_en.html
andtemplates/institution_accessibility_text_en.html
in the directorylocal_templates
(template directories are configured in settings.py). - Added new Django admin manage.py commands:
list_exercises_services
lists all exercise services used by all courses.count_active_users
counts active users based on thelast_login
timestamp.
Changed
- Database migrations work in production between stable release versions. Some migrations have been reordered afterwards due to surprising issues. The reordering does not cause issues in production assuming that only stable releases have been deployed (no unstable versions directly from the master branch).
- lz4 compressor should be installed in the server so that HTML page compression in the cache is more efficient. In Ubuntu,
apt-get install python3-lz4
. - Duplicate course enrollments are not possible anymore. The migration adds a unique together constraint and deletes previous duplicates so that the chronologically first one is preserved.
- Changes in
local_settings.py
. Seeaplus/local_settings.example.py
.BRAND_NAME
andBRAND_DESCRIPTION
are used in LTI parameters.- Added
BRAND_DESCRIPTION
. - Added
BRAND_INSTITUTION_NAME
andBRAND_INSTITUTION_NAME_FI
.
- A+ as LTI Tool Consumer: use
settings.BASE_URL
instead ofrequest.get_host()
to calculate LTI parameters. End-users may manipulate HTTP request data, but not the server settings. - Deployed Sass stylesheets that replace native CSS. The built CSS files are also committed to the git repository, but they should not be modified manually.
- Sites may modify the brand colours in the file
a-plus/assets/sass/colors/_theme.scss
(variables$aplus-brand-primary
and$aplus-brand-secondary
). The CSS must be built after changing variables.
- Sites may modify the brand colours in the file
- Updated
doc/README.md
with new information for A+ developers. The frontend assets are now built with Drone. Rundrone exec
. - Updated deployment instructions in
doc/DEPLOYMENT.md
with small improvements. - Changed date formatting. Updated format variables in
aplus/en/formats.py
andaplus/fi/formats.py
. - Updated the EU-U.S. Privacy Shield description in the privacy warnings (for LTI links). Note that it is now questionable to continue using external services that don’t offer any better privacy than the Privacy Shield.
- Removed information specific to Aalto University from the site’s privacy notice base template. Sites should add local information by overriding the
privacy_notice_{en,fi}.html
template inlocal_templates
(template directories are configured in settings.py). - (August 2020 hotfix) Added the
max_submissions
andmax_points
fields to the exercise list in the API (added them toExerciseBriefSerializer
). - Buttons use new HTML classes starting with
aplus-button--
: https://apluslms.github.io/a-plus-design-system/components/button.html - (August 2020 hotfix) Added a new list of submissions called
submissions_with_points
to/api/v2/courses/<course-id>/points/me/
. This list contains grades for each submission whereas the oldsubmissions
list had only URLs. - (August 2020 hotfix) Added the grade field to the submission lists in the API. Added
grade
toSubmissionBriefSerializer
. - (August 2020 hotfix) Added an error message if submissions are made with an invalid student group ID. Previously, the error was silently ignored.
- Added new
hierarchical_name
field toExerciseBriefSerializer
which affects exercise lists in the API. The hierarchical name of the exercise is always like “1.2.3 Exercise title”. - Removed line numbers from the translation django.po file. Use this command when adding new strings:
python manage.py makemessages --no-obsolete --add-location file
.
Fixed
- (August 2020 hotfix) When submitting via the API, the grading language may be set with the POST parameter
__aplus__={"lang": "en"}
. - (August 2020 hotfix) Submissions remember the value of the language parameter used in the grader protocol (for regrading). The course default language is used if no value is supplied.
- (August 2020 hotfix) The course exercise API endpoint
/api/v2/courses/ID/exercises/
shows course modules to the course staff even before they have opened.
MOOC-Grader
Changed
- Added a versioned HTML class attribute to the exercise HTML:
exercise-mooc-grader-v1
andaplus-quiz1
.
Removed
- Removed the personal directory feature, which was never used.
ENABLE_PERSONAL_DIRECTORIES
should be removed fromlocal_settings.py
.