<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Jupyter Blog - Nicolas Brichet</title><link href="https://jupyter.org/blog/" rel="alternate"/><link href="https://jupyter.org/blog/feeds/author-nicolas-brichet.atom.xml" rel="self"/><id>https://jupyter.org/blog/</id><updated>2023-12-16T09:48:00+00:00</updated><subtitle>The Project Jupyter blog: news, releases, and community stories, archived from blog.jupyter.org.</subtitle><entry><title>Recent keyboard navigation improvements in Jupyter</title><link href="https://jupyter.org/blog/posts/2023/recent-keyboard-navigation-improvements-in-jupyter/" rel="alternate"/><published>2023-12-16T09:48:00+00:00</published><updated>2023-12-16T09:48:00+00:00</updated><author><name>Nicolas Brichet</name></author><id>tag:jupyter.org,2023-12-16:/blog/posts/2023/recent-keyboard-navigation-improvements-in-jupyter/</id><summary type="html">&lt;p&gt;Towards a more accessible Jupyter Notebook&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Upcoming versions of JupyterLab (4.1.0) and Notebook (7.1.0) will include major keyboard accessibility fixes.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG21/Understanding/keyboard-accessible"&gt;Keyboard accessibility&lt;/a&gt; is fundamental to overall app accessibility. Interactions that require pointing devices like mice or trackpads are usability barriers for many users across a wide spectrum of disabilities. Ensuring that all UI features are seamlessly accessible through keyboard-only navigation is imperative for an inclusive user experience.&lt;/p&gt;
&lt;h2 id="keyboard-navigation-in-jupyterlab"&gt;Keyboard navigation in JupyterLab&lt;/h2&gt;
&lt;p&gt;A recent audit of the JupyterLab UI highlighted significant gaps in keyboard navigation, posing obstacles to usability and accessibility. One of the main obstacles to efficient keyboard navigation in JupyterLab is the number of UI items to skim through before being able to perform an action, such as typing in a document or creating a file. Indeed, as with any feature-rich application, the JupyterLab UI includes many menus, widgets, and inputs to interact with. The user interface is made of three main areas (left, center, and right), each one split into several panels. And most of these panels include toolbars with buttons to perform specific actions.&lt;/p&gt;
&lt;p&gt;Improving this navigation required separate fixes for different elements of the page:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Menu bar (&lt;a href="https://github.com/jupyterlab/lumino/pull/465"&gt;Lumino #465&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Tab bar (&lt;a href="https://github.com/jupyterlab/lumino/pull/612"&gt;Lumino #612&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Toolbar (&lt;a href="https://github.com/jupyterlab/jupyterlab/pull/15021"&gt;JupyterLab #15021&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All these changes follow the same logic: the Tab key is used to navigate between top-level elements (toolbar, menu, tab list), but not to navigate between items for which one should use arrow keys, nor to select an item for which one can use the Enter/Space keys. Most of these changes were actually applied to low-level components of JupyterLab, so that any JupyterLab extension built upon them will benefit from these improvements.&lt;/p&gt;
&lt;p&gt;The changes to the toolbar make use of a new &lt;a href="https://github.com/jupyterlab-contrib/jupyter-ui-toolkit"&gt;UI toolkit&lt;/a&gt;, based on web components, which natively includes these accessibility features, but also helps standardize the widgets used across the JupyterLab UI and JupyterLab extensions.&lt;/p&gt;
&lt;h2 id="notebook-tab-traps"&gt;Notebook Tab Traps&lt;/h2&gt;
&lt;p&gt;Another blocker to keyboard navigation was the existence of “tab traps” or “focus traps” in the notebook widget. Tab traps occur when a user cannot move focus away from an interactive element with the Tab key.&lt;/p&gt;
&lt;p&gt;The main problem was that, while the input area of each notebook cell could be reached by using the Tab key, the input area itself, which is a text editor, does not allow moving to the next item using the Tab key since the Tab key is used to insert spaces into the editor.&lt;/p&gt;
&lt;p&gt;This has been fixed in &lt;a href="https://github.com/jupyterlab/jupyterlab/pull/14115"&gt;JupyterLab PR #14115&lt;/a&gt;, by changing the tabbable items in the Notebook from the cell input to the cell itself. Now the Notebook follows the same logic mentioned above. Arrow keys are used to navigate the cells, whereas the Tab key is reserved mostly to navigate into and then back out of the Notebook. Entering or exiting the input element of the cell is done using the Enter and Escape keys, respectively.&lt;/p&gt;
&lt;p&gt;These changes required a complete inversion in the way the keyboard events are handled in the notebook, especially with respect to keyboard shortcuts. These modifications were required to retain keyboard shortcuts in the output widget and at the notebook level, while changing the way element focus is managed in the notebook.&lt;/p&gt;
&lt;h2 id="future-accessibility-improvements"&gt;Future accessibility improvements&lt;/h2&gt;
&lt;p&gt;Accessibility work at Jupyter is grounded in the recommendations of the &lt;a href="https://www.w3.org/WAI/"&gt;W3C Web Accessibility Initiative&lt;/a&gt;, in particular their standards for web content (WCAG), web apps (ARIA), and authoring tools (ATAG). There has been particular interest recently in addressing the authoring part of the equation.&lt;/p&gt;
&lt;p&gt;That’s because a crucial aspect of the accessibility of notebooks lies in the content itself. It is imperative that Jupyter front ends actively support notebook authors in creating accessible content. This involves, for instance, prompting authors to include descriptive alt text for images, and issuing warnings when heading ranks are skipped. Skipping heading ranks can lead to difficulties in navigating the document outline, especially for users relying on screen readers. Such warnings could be brought through the language server protocol for markdown cells for example.&lt;/p&gt;
&lt;p&gt;If your organization is interested in supporting such accessibility improvements, please reach out to the &lt;a href="https://github.com/jupyter/accessibility"&gt;Jupyter accessibility team&lt;/a&gt;!&lt;/p&gt;
&lt;h2 id="feedback"&gt;Feedback&lt;/h2&gt;
&lt;p&gt;Please try out the latest pre-release of JupyterLab 4.1. Try opening, editing, and saving a notebook without using your mouse or trackpad. Be aware that there are still areas of the UI as well as extensions that need fixing for mouseless use. We are keeping track of accessibility issues in a few places: &lt;a href="https://github.com/jupyterlab/jupyterlab/labels/tag%3AAccessibility"&gt;JupyterLab GitHub accessibility label&lt;/a&gt;, &lt;a href="https://github.com/jupyter/notebook/issues?q=is%3Aopen+is%3Aissue+label%3Atag%3AAccessibility"&gt;Notebook 7 GitHub accessibility label&lt;/a&gt;, JupyterLab issue &lt;a href="https://github.com/jupyterlab/jupyterlab/issues/9399"&gt;#9399&lt;/a&gt;. As you will find at those links, there’s still loads more to do. If you can help with either fixing those things or identifying other issues, please come help us, your contribution is valuable and you are welcome!&lt;/p&gt;
&lt;h2 id="about-the-authors"&gt;About the Authors&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://twitter.com/NicolasBrichet_"&gt;Nicolas Brichet&lt;/a&gt; is a scientific software developer at &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt;, and a JupyterLab core team member. Prior to this work on keyboard navigation, Nicolas contributed to improving the accessibility of Jupyter by addressing the issues detected by the Axe accessibility testing engine.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/gabalafou"&gt;Gabriel Fouasnon&lt;/a&gt; is a frontend developer at &lt;a href="https://twitter.com/quansightai"&gt;Quansight&lt;/a&gt;, a member of the Jupyter Software Steering Council representing the accessibility subproject, and a JupyterLab core team member.&lt;/p&gt;
&lt;h2 id="acknowledgments"&gt;Acknowledgments&lt;/h2&gt;
&lt;p&gt;This work on improving the keyboard navigation of JupyterLab was started with an audit of the keyboard navigation of the Jupyter Notebook v7 by Isabela Presedo-Floyd.&lt;/p&gt;
&lt;p&gt;The work of Gabriel Fouasnon and Isabela Presedo-Floyd at Quansight on Jupyter accessibility was funded by the Chan Zuckerberg Initiative, through the “&lt;a href="https://chanzuckerberg.com/eoss/"&gt;Essential Open Source Software for Science&lt;/a&gt;” (EOSS) grant program.&lt;/p&gt;
&lt;p&gt;The work by Nicolas Brichet at QuantStack on the accessibility of Jupyter was funded by &lt;a href="https://www.insee.fr/"&gt;INSEE&lt;/a&gt;, the French National Institute of Statistics and Economic Studies.&lt;/p&gt;
&lt;p&gt;We also want to acknowledge all of the members of the Jupyter Accessibility Council: Tania Allard, Alex Bozarth, Frédéric Collonval, Martha Cryan, Afshin T. Darian, R Ely, Tony Fast, Gabriel Fouasnon, Michał Krassowski, and Isabela Presedo-Floyd, without whom this work would not be possible.&lt;/p&gt;
</content><category term="accessibility"/><category term="JupyterLab"/></entry><entry><title>Improving the accessibility of Jupyter</title><link href="https://jupyter.org/blog/posts/2023/improving-the-accessibility-of-jupyter/" rel="alternate"/><published>2023-02-24T11:11:00+00:00</published><updated>2023-02-24T11:11:00+00:00</updated><author><name>Nicolas Brichet</name></author><id>tag:jupyter.org,2023-02-24:/blog/posts/2023/improving-the-accessibility-of-jupyter/</id><summary type="html">&lt;p&gt;Towards a more accessible Jupyter notebook&lt;/p&gt;
</summary><content type="html">&lt;p&gt;The adoption of Jupyter has grown significantly in the past few years — especially in education contexts. The project has become a foundational component of our digital experience, from the first lines of code written by high-school students to the most advanced research and engineering use cases.&lt;/p&gt;
&lt;p&gt;In this context of global adoption, it is even more important to ensure that as many people as possible can use the project. It is estimated that 15% of the population has a disability that may impair their ability to use online services. If we don’t want them to be excluded from learning sciences, technology, and engineering, we must improve the tools to make them usable by everyone…&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;To address this issue, a Jupyter accessibility working group formed and has now become an &lt;a href="https://jupyter.org/governance/list_of_subprojects.html"&gt;official Jupyter Subproject&lt;/a&gt; and received &lt;a href="https://github.com/jupyter/accessibility/blob/main/docs/funding/czi-grant-roadmap.md"&gt;a grant from the Chan Zuckerberg Initiative&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Creating accessible user interfaces is a challenging task as it requires accommodating a broad range of disabilities, including vision, motor, and cognitive impairments. This article presents some of the recent accessibility improvements in the Jupyter Notebook codebase.&lt;/p&gt;
&lt;h2 id="codemirror-6-and-notebook-7"&gt;CodeMirror 6 and Notebook 7&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/jupyter/enhancement-proposals/pull/79"&gt;Jupyter Notebook 7&lt;/a&gt;, which is the next major release of the Jupyter Notebook frontend, has been rebuilt with modern JupyterLab components and extensions while maintaining the classic Jupyter Notebook user experience. Notebook 7 will be released shortly after JupyterLab 4 and will take advantage of JupyterLab improvements.&lt;/p&gt;
&lt;p&gt;Improving the accessibility of Jupyter had long been impeded by significant obstacles. The primary obstacle was that the text editor underlying the Jupyter Notebook (CodeMirror 5) had major accessibility issues.&lt;/p&gt;
&lt;p&gt;Fortunately, this accessibility bottleneck has been unblocked as JupyterLab has been upgraded to use &lt;a href="https://codemirror.net/6/"&gt;CodeMirror 6&lt;/a&gt;, a complete rewrite of the text editor with a strong focus on accessibility. Although this upgrade required extensive codebase modifications, the changes landed a few months ago and will be available with JupyterLab 4. Jupyter Notebook 7 will benefit from the CodeMirror 6 upgrade.&lt;/p&gt;
&lt;h2 id="initial-accessibility-audits"&gt;Initial accessibility audits&lt;/h2&gt;
&lt;p&gt;Shortly after the &lt;a href="https://github.com/jupyterlab/jupyterlab/issues/10370"&gt;CodeMirror 6 migration&lt;/a&gt; landed, we made an automated audit of the accessibility of Notebook 7 with these changes, and found that the number of warnings and errors reported by Axe Auditor went down from several hundreds to a few dozen, most of which seemed fixable. Encouraged by these results, we decided to work on bringing that count to zero!&lt;/p&gt;
&lt;p&gt;With a series of fixes ranging from simple changes to the DOM structure of components to fixing up base Lumino components (&lt;a href="https://github.com/jupyterlab/lumino"&gt;Lumino&lt;/a&gt; is a JavaScript framework that underlies a lot of the JupyterLab frontend architecture), we were able to make the Notebook 7 codebase pass the Axe Auditor tests with zero error or warning. While we have not reached that yet in JupyterLab, both JupyterLab and Jupyter Notebook benefit from these improvements made for Notebook 7 since they are built from the same components.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Screenshot of the output of the Axe accessibility audit tool on the classic Jupyter notebook user interface with a test notebook, showing a total of 242 errors, including 20 “critical” errors, 88 “serious” errors, and 134 errors of “moderate” severity." src="https://jupyter.org/blog/posts/2023/improving-the-accessibility-of-jupyter/images/001-0_-v-lL8LJ8DIqlgXb.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Axe Auditor output with the “classic” Notebook UI (v6) with a &lt;a href="https://nbviewer.org/github/waltherg/notebooks/blob/master/2013-12-03-Crank_Nicolson.ipynb"&gt;test notebook&lt;/a&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img alt="Screenshot of the output of the Axe accessibility audit tool on the new Jupyter notebook user interface with a same test notebook, showing zero detected errors." src="https://jupyter.org/blog/posts/2023/improving-the-accessibility-of-jupyter/images/002-0_7imwXY7uST5QSNfi.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Axe Auditor output with the “next” Notebook UI (v7 alpha 13) with the same &lt;a href="https://nbviewer.org/github/waltherg/notebooks/blob/master/2013-12-03-Crank_Nicolson.ipynb"&gt;test notebook&lt;/a&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Similar results were achieved with the file explorer and text editor tabs of the application.&lt;/p&gt;
&lt;h2 id="beyond-accessibility-audits"&gt;Beyond accessibility audits&lt;/h2&gt;
&lt;p&gt;Improving the accessibility of Jupyter requires more than just addressing issues flagged by automated audit tools and the &lt;a href="https://github.com/jupyter/accessibility"&gt;Jupyter Accessibility Subproject&lt;/a&gt; is working on improving accessibility across the board in Project Jupyter. These results with the Notebook 7 codebase are very encouraging, but working with end-users and getting their feedback will also be necessary to make the user interface truly accessible.&lt;/p&gt;
&lt;p&gt;To address the diversity of accessibility requirements, we will approach specific use cases separately (for example, users with screen readers, or users who can operate a keyboard but not a pointing device). While the resulting changes may improve usability for everyone, we need to learn from users who have specific needs to make meaningful improvements.&lt;/p&gt;
&lt;p&gt;Finally, many of the accessibility challenges in Jupyter stem from the &lt;em&gt;content&lt;/em&gt; of the notebooks, as notebook authors may not follow the best practices to make their content usable by everyone (such as adding alt text to images and figures, or properly using headings to communicate the organization of a notebook). To promote these best practices, Jupyter could provide linting tools that produce inline warnings and hints for notebooks that do not follow these guidelines.&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;The work by Johan Mabille at &lt;a href="https://twitter.com/QuantStack"&gt;&lt;strong&gt;QuantStack&lt;/strong&gt;&lt;/a&gt; on migrating JupyterLab to use CodeMirror 6 was funded by &lt;a href="https://www.twosigma.com/"&gt;&lt;strong&gt;Two Sigma&lt;/strong&gt;&lt;/a&gt;. This upgrade also enabled significant performance improvements in the rendering of Jupyter notebooks, as detailed in this &lt;a href="https://jupyter.org/blog/posts/2022/accelerating-jupyterlab/"&gt;earlier post&lt;/a&gt; by Frédéric Collonval.&lt;/p&gt;
&lt;p&gt;We are grateful to members of the Jupyter Accessibility Subproject who produced a thorough review of the Notebook 7 UI with a focus on keyboard navigation. This is an example of an issue that cannot be easily detected by auditing tools.&lt;/p&gt;
&lt;h2 id="about-the-authors"&gt;About the Authors&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://twitter.com/NicolasBrichet_"&gt;&lt;strong&gt;Nicolas Brichet&lt;/strong&gt;&lt;/a&gt; is a scientific software developer at &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt; active in the Jupyter ecosystem. Among other things, Nicolas made significant contributions to the JupyterLab and Voilà projects, and worked on porting the &lt;a href="https://github.com/jupyter/nbgrader/"&gt;nbgrader&lt;/a&gt; package to JupyterLab. Nicolas worked on accessibility improvements in the JupyterLab and Lumino packages.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/JohanMabille"&gt;&lt;strong&gt;Johan Mabille&lt;/strong&gt;&lt;/a&gt; is a technical director at &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt;. He was honored with the Distinguished Contributors award in 2020 for his contributions to the Jupyter project. Among other things, he is one of the main authors of the JupyterLab visual debugger, and the creator of Xeus, a C++ implementation of the Jupyter kernel protocol at the basis of many Jupyter kernels. Johan was responsible for the migration of JupyterLab to CodeMirror 6.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/jtpio"&gt;&lt;strong&gt;Jeremy Tuloup&lt;/strong&gt;&lt;/a&gt; is a technical director at &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt;, and a Jupyter Distinguished Contributor. He is a core maintainer of JupyterLab and Voilà, and the creator of the JupyterLite project. Jeremy is the main initiator of the Notebook 7 project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Frédéric Collonval&lt;/strong&gt; is a technical director at &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt;, and a Jupyter Distinguished Contributor. He is a core maintainer of the JupyterLab project. Frédéric contributed to the CodeMirror 6 migration and helped numerous new contributors to get their enhancements accepted.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/SylvainCorlay"&gt;&lt;strong&gt;Sylvain Corlay&lt;/strong&gt;&lt;/a&gt; is the founder and CEO of &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt;, and a Jupyter Distinguished Contributor. He has worked on many areas of the Jupyter project, from interactive widgets to language kernels and other core components.&lt;/p&gt;
</content><category term="accessibility"/></entry><entry><title>Upgrading Nbgrader</title><link href="https://jupyter.org/blog/posts/2022/upgrading-nbgrader/" rel="alternate"/><published>2022-09-15T07:51:00+00:00</published><updated>2022-09-15T08:09:00+00:00</updated><author><name>Nicolas Brichet</name></author><id>tag:jupyter.org,2022-09-15:/blog/posts/2022/upgrading-nbgrader/</id><summary type="html">&lt;p&gt;Project Jupyter provides a broad collection of open-source tools for interactive computing that has become ubiquitous in data science and scientific computing, and is very popular in educational contexts.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Project Jupyter&lt;/em&gt; provides a broad collection of open-source tools for interactive computing that has become ubiquitous in data science and scientific computing, and is very popular in educational contexts.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nbgrader.readthedocs.io/en/stable/"&gt;&lt;em&gt;Nbgrader&lt;/em&gt;&lt;/a&gt;, started by &lt;a href="https://twitter.com/jhamrick"&gt;Jessica Hamrick&lt;/a&gt; in 2014, is an extension for creating notebook-based assignments, online courses, and for auto-grading these assignments. It is central to many Jupyter-based services used by teaching institutions.&lt;/p&gt;
&lt;p&gt;As a large part of the Jupyter user base has adopted the JupyterLab frontend, most of the popular extensions to the classic notebook UI now have an equivalent in the JupyterLab world. Unfortunately, the nbgrader extension was still outstanding as it had not yet been ported to the JupyterLab extension system. Resolving this has become critical as it was recently decided in a &lt;a href="https://github.com/jupyter/enhancement-proposals/blob/master/79-notebook-v7/notebook-v7.md"&gt;Jupyter Enhancement Proposal&lt;/a&gt; (JEP) that the next major version of the Notebook package (v7) will be based on JupyterLab components, and will rely on the JupyterLab extension mechanism. As part of this JEP, it was decided that the release of Notebook 7 should be contingent on porting certain popular classic notebook extensions to JupyterLab, including nbgrader.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Upgrading nbgrader is an important step for the advancement of the Jupyter project!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="nbgrader-08"&gt;Nbgrader 0.8&lt;/h2&gt;
&lt;p&gt;The port of nbgrader to JupyterLab is a longstanding request of the community. A lot of work had already been done on this front by contributors to the &lt;a href="https://ngshare.readthedocs.io/en/latest/"&gt;ngshare&lt;/a&gt; project (Kevin Rong, Abigail Almanza, Lawrence Lee, and Eric Li) who developed a large part of the JupyterLab-based UI, but did not finalize the migration due to lack of time. Fortunately, they made their work available to the community for others to complete the upgrade. This includes the development of the remaining elements of the UI, the adaptation of the server-side extension, and adding tests on the JupyterLab extensions to improve the CI. The nbgrader 0.8 release also includes other significant work items such as the upgrade to nbconvert 6, the switch from the notebook server to jupyter-server, and the adoption of the jupyter releaser.&lt;/p&gt;
&lt;p&gt;Today, we are pleased to announce the release of nbgrader 0.8.0, the first release of the extension to support the JupyterLab frontend.&lt;/p&gt;
&lt;h3 id="creating-an-assignment"&gt;Creating an assignment&lt;/h3&gt;
&lt;p&gt;Teachers can create assignments directly in the notebook UI by setting the proper information for each cell, such as the cell type (whether it is a locked cell, a manually graded answer, or an automatically graded answer) and the number of points the answer is worth.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Screencast, of the UI for creating an assignment in the notebook (teachers)." src="https://jupyter.org/blog/posts/2022/upgrading-nbgrader/images/001-1_apqtMnPMoBql8XXbIQOpYA.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;The UI for creating an assignment in the notebook (teachers).&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="managing-assignments-on-the-teacher-side"&gt;Managing assignments on the teacher side&lt;/h3&gt;
&lt;p&gt;Formgrader is the part of the nbgrader UI for the teachers to manage the assignments.&lt;/p&gt;
&lt;p&gt;From this UI, teachers will be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;generate assignments from a Notebook file&lt;/li&gt;
&lt;li&gt;share assignments with students&lt;/li&gt;
&lt;li&gt;fetch assignments after student submission&lt;/li&gt;
&lt;li&gt;grade assignments&lt;/li&gt;
&lt;li&gt;provide feedback to students&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;img alt="Formgrader UI" src="https://jupyter.org/blog/posts/2022/upgrading-nbgrader/images/002-1_S2B9CFCZi4fLA-spXbqhzg.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;The Formgrader UI to manage assignments (teachers).&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id="managing-assignments-on-the-student-side"&gt;Managing assignments on the student side&lt;/h3&gt;
&lt;p&gt;The assignments list UI is used by students to fetch assignments released by the teacher, submit their answers, and benefit from the feedback after the evaluation by teachers.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="assignments list UI" src="https://jupyter.org/blog/posts/2022/upgrading-nbgrader/images/003-1_iDhidg4ebeIL2a6pYJOOvw.mp4" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;The assignments list UI to fetch and submit assignments (students).&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="what-about-the-future"&gt;What about the future?&lt;/h2&gt;
&lt;p&gt;Creating and grading assignments in nbgrader uses the metadata of individual notebook cells. The current release of nbgrader provides a widget to interact with the corresponding metadata.&lt;/p&gt;
&lt;p&gt;As other extensions need a similar functionality, we are expanding the generic cell metadata editor to address this requirement in a more generic and pluggable way. The new metadata editor allows any extension to create a specific form to interact with the relevant part of the metadata, specified with a JSON schema and rendered with &lt;a href="https://react-jsonschema-form.readthedocs.io/en/latest/"&gt;react-jsonschema-form&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Nbgrader could take advantage of this improvement in a future release.&lt;/p&gt;
&lt;h2 id="try-it-online"&gt;Try it online&lt;/h2&gt;
&lt;p class="standalone-image"&gt;&lt;a href="https://mybinder.org/v2/gh/jupyter/nbgrader.git/v0.8.0"&gt;&lt;img src="https://jupyter.org/blog/posts/2022/upgrading-nbgrader/images/004-1_KlCHlIFqOeXmqzGmwlh52w.webp" alt="binder" loading="lazy" data-body-image=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;p&gt;You can install the latest version of nbgrader using pip:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip install nbgrader
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The GitHub repository can be found &lt;a href="https://github.com/jupyter/nbgrader/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;This work at &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt; was partly funded by &lt;a href="https://u-paris.fr/"&gt;Université Paris Cité&lt;/a&gt; in the context of the &lt;a href="http://plasmabio.org"&gt;PlasmaBio&lt;/a&gt; project.&lt;/p&gt;
&lt;p&gt;We are grateful to &lt;a href="https://twitter.com/jhamrick"&gt;Jessica Hamrick&lt;/a&gt;, &lt;a href="https://twitter.com/jtpio"&gt;Jeremy Tuloup&lt;/a&gt;, and Ian Stuart for their help and code reviews during the upgrade to nbgrader 0.8.0.&lt;/p&gt;
&lt;h2 id="about-the-author"&gt;About the Author&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://twitter.com/NicolasBrichet_"&gt;Nicolas Brichet&lt;/a&gt; is a scientific software developer at &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt; active in the Jupyter ecosystem. In the past few months, he has been working on the Nbgrader extension, as well as other developments in core JupyterLab such as an improved notebook metadata editor. Before joining QuantStack, Nicolas was a software engineer at INRAE.&lt;/p&gt;
</content><category term="education"/></entry></feed>