<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Jupyter Blog - accessibility</title><link href="https://jasongrout.github.io/medium-archive/pelican/" rel="alternate"/><link href="https://jasongrout.github.io/medium-archive/pelican/feeds/tag-accessibility.atom.xml" rel="self"/><id>https://jasongrout.github.io/medium-archive/pelican/</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://jasongrout.github.io/medium-archive/pelican/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>Project Jupyter</name></author><id>tag:jasongrout.github.io,2023-12-16:/medium-archive/pelican/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;Towards a more accessible Jupyter Notebook&lt;/p&gt;
&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>Desktop GIS software in the cloud with JupyterHub: A QGreenland workshop success story</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2023/desktop-gis-software-in-the-cloud-with-jupyterhub/" rel="alternate"/><published>2023-08-02T16:23:00+00:00</published><updated>2023-08-02T16:51:00+00:00</updated><author><name>Matt Fisher</name></author><id>tag:jasongrout.github.io,2023-08-02:/medium-archive/pelican/posts/2023/desktop-gis-software-in-the-cloud-with-jupyterhub/</id><summary type="html">&lt;p&gt;A QGreenland workshop success story&lt;/p&gt;
</summary><content type="html">&lt;p&gt;👋 We are Trey Stafford and Matt Fisher, co-authors of the &lt;a href="https://github.com/nsidc/qgreenland"&gt;QGreenland&lt;/a&gt; data package’s source code. This year, we had the pleasure of running a hands-on geospatial data and open science &lt;a href="http://qgreenland-workshop-2023-researcher.github.io/"&gt;QGreenland Researcher Workshop&lt;/a&gt;. It was important for attendees to participate in the workshop in a hands-on way while minimizing the negative impacts of installing software, requiring expensive personal computers, and troubleshooting unique computer configurations. We felt a &lt;a href="https://jupyter.org/hub"&gt;JupyterHub&lt;/a&gt; was a good fit for our workshop for this reason, if it could accommodate our need for running QGIS — a desktop application.&lt;/p&gt;
&lt;p&gt;In this blog post, we will introduce QGreenland, describe our experience using JupyterHub in the cloud for our workshop’s computing environment, and discuss challenges we overcame to enable our attendees to use QGIS in a cloud graphical desktop environment. Finally, we will highlight some workshop outcomes and discuss opportunities for enhancement based on new developments in the Jupyter ecosystem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In our workshop, 25–30 international learners (including from Germany, India, France, Canada, Poland, and the United States) used &lt;em&gt;QGIS&lt;/em&gt; in a &lt;em&gt;JupyterHub&lt;/em&gt;’s browser-based Linux desktop environment to collaboratively test, explore, visualize, and process Earth science data simultaneously with the same user experience they expect from using &lt;em&gt;QGIS&lt;/em&gt; on their personal computers! Better yet, getting started was as simple as logging in.&lt;/strong&gt; Our workshop was a success story not just in education, but also in open source and collaborative development, and we want to share what we learned.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="A map depicting Greenland is displayed within QGIS software running in a cloud-based desktop environment. A visualization of September 2012 Arctic sea ice concentration is overlaid." src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/desktop-gis-software-in-the-cloud-with-jupyterhub/images/001-1_ZG76hcKdS3-4PppQ6lSnuQ.jpg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Note the browser tabs at the top of this screenshot; this is a full desktop-based GIS environment running QGreenland in the cloud!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The JupyterHub used by the QGreenland 2023 Researcher Workshop was generously provided by the &lt;a href="https://cryointhecloud.com/"&gt;NASA CryoCloud&lt;/a&gt; team, whose mission is to help researchers transition to cloud-based collaboration.&lt;/p&gt;
&lt;h2 id="about-qgreenland"&gt;About QGreenland&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://qgreenland.org/"&gt;QGreenland&lt;/a&gt; is an open-source Greenland-focused geospatial data package for &lt;a href="https://qgis.org/en/site/"&gt;QGIS&lt;/a&gt;, a community-owned graphical Geographic Information System (GIS) platform. Researchers and members of the public leverage QGreenland’s ready-to-use interdisciplinary datasets to do field planning, teach about glaciers, and much more.&lt;/p&gt;
&lt;p&gt;QGreenland’s MIT-licensed &lt;a href="https://github.com/nsidc/qgreenland/"&gt;source code&lt;/a&gt; uses community-maintained open software like &lt;a href="https://gdal.org/index.html"&gt;GDAL&lt;/a&gt; and &lt;a href="https://qgis.org/pyqgis/latest"&gt;PyQGIS&lt;/a&gt; to automate data normalization and populate the QGIS project with important information like data provenance and the order of layers in the QGIS Layers Panel. Check out &lt;a href="https://qgreenland.readthedocs.io"&gt;our documentation&lt;/a&gt; to learn more! QGreenland also has a &lt;a href="https://www.youtube.com/@qgreenland/videos"&gt;YouTube channel&lt;/a&gt; with tutorials produced by &lt;a href="https://cires.colorado.edu/outreach/programs/qgreenland"&gt;CIRES Education and Outreach&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="A map depicting Greenland is displayed within QGIS software running in a cloud-based desktop environment. Visualizations of bathymetric depth, Greenland ice sheet thickness, and Arctic sea routes are overlaid." src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/desktop-gis-software-in-the-cloud-with-jupyterhub/images/002-0__t2MDU659mlYEvxD.jpg" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;&lt;em&gt;Once QGIS is installed, opening QGreenland is as easy as double-clicking the included “.qgs” file. Here, a representative view of QGreenland v3 alpha in QGIS is displayed with newly updated layers: Arctic sea routes (National Geospatial Intelligence Agency), bathymetric depth (General Bathymetric Chart of the Oceans (GEBCO)), and ice thickness (IceBridge BedMachine Greenland v5) layers.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Based on user research, QGreenland has enabled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the public to more easily access data gathered by researchers visiting Greenland: &lt;em&gt;“In Greenland, people are often asking, ‘how can we find the data the foreign scientists bring back from Greenland?’ Now we can directly utilize much of it.”&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;researchers to plan field work: &lt;em&gt;“Being able to use QGreenland at our field station was critical to our research process!”&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;educators to develop interactive lessons about Greenland and climate change: &lt;em&gt;“…using QGreenland for presentations because it is presentation quality already.”&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="qgreenlands-2023-researcher-workshop"&gt;QGreenland’s 2023 researcher workshop&lt;/h2&gt;
&lt;p&gt;One of the QGreenland team’s most important forms of direct user interaction and support is facilitating workshops. Most recently, we hosted a 3-day (total of 9 hours) virtual workshop for researchers focused on working with geospatial data in an open science framework. All of the &lt;a href="https://qgreenland-workshop-2023-researcher.github.io/content/materials.html"&gt;materials&lt;/a&gt; covered in the workshop were built &lt;a href="https://qgreenland-workshop-2023-researcher.github.io/content/built-with-open-source.html"&gt;using open-source tools&lt;/a&gt; and are MIT-licensed and &lt;a href="https://github.com/qgreenland-workshop-2023-researcher/qgreenland-workshop-2023-researcher.github.io"&gt;published on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="a-personal-computer-in-the-cloud"&gt;A “personal computer” in the cloud&lt;/h3&gt;
&lt;p&gt;We decided early on that we wanted to use JupyterHub to solve the diverse problems that come with “bring your own device” workshops. We experimented with administering our own &lt;a href="http://z2jh.jupyter.org"&gt;JupyterHub on Kubernetes&lt;/a&gt;, but the setup overhead was too high for our short workshop. CryoCloud’s JupyterHub enabled us to avoid this overhead and focus on serving our participants. Because the software that comprises CryoCloud is open-source and developed in collaboration with the communities CryoCloud serves, we could directly contribute to curating a computing environment ideal for our participants.&lt;/p&gt;
&lt;p&gt;JupyterHub is known for providing access to Jupyter Notebooks via JupyterLab, but it turns out it can also be used to host pretty much any interactive web based application! The &lt;a href="https://github.com/jupyterhub/jupyter-server-proxy/"&gt;jupyter-server-proxy&lt;/a&gt; project enables this, and there are additional packages that make running specific applications easier. &lt;a href="https://github.com/jupyterhub/jupyter-rsession-proxy"&gt;jupyter-rsession-proxy&lt;/a&gt; makes it easy to run &lt;a href="https://posit.co/download/rstudio-server/"&gt;RStudio&lt;/a&gt; inside JupyterHub, &lt;a href="https://github.com/betatim/vscode-binder/"&gt;jupyter-vscode-proxy&lt;/a&gt; allows running code-server (fully open source self-hosted version of Visual Studio Code) inside a JupyterHub, etc. Pertinent to our use case is &lt;a href="https://github.com/jupyterhub/jupyter-remote-desktop-proxy"&gt;jupyter-remote-desktop-proxy&lt;/a&gt;, which lets you run a complete Linux desktop environment inside your JupyterHub! This was critical for our workshop, as it allowed us to use QGIS — purely desktop software, not adapted for the web — from inside a web browser. Workshop participants did not need to install anything. This enabled participants to focus on the &lt;em&gt;content&lt;/em&gt; of our workshop rather than the logistics of setting up and debugging tools on their varied machines.&lt;/p&gt;
&lt;p&gt;The CryoCloud JupyterHub enabled each of our workshop participants to provision their own compute environment (JupyterLab + Linux Desktop) with all of our workshop’s dependencies pre-installed. It also set everyone on equitable footing — someone accessing the workshop on a 10 year old laptop would get the same computing resources as someone on a brand new MacBook Pro.&lt;/p&gt;
&lt;h3 id="challenges-scaling-qgreenland"&gt;Challenges scaling QGreenland&lt;/h3&gt;
&lt;p&gt;The CryoCloud JupyterHub already had &lt;em&gt;jupyter-remote-desktop-proxy&lt;/em&gt; and &lt;em&gt;QGIS&lt;/em&gt; installed, so we could validate this approach to our workshop quickly. However, to use &lt;em&gt;QGreenland&lt;/em&gt; at this scale, we needed to solve a couple of usability problems. The first issue was a user experience problem: the operating system did not have appropriate file type associations for &lt;em&gt;QGIS&lt;/em&gt;, so files like the &lt;em&gt;QGreenland&lt;/em&gt; project file would not open in &lt;em&gt;QGIS&lt;/em&gt; when double-clicked in the desktop file browser. We quickly discovered a solution and integrated it with a &lt;a href="https://github.com/CryoInTheCloud/hub-image/pull/59"&gt;simple pull request&lt;/a&gt; to the Docker image we were using.&lt;/p&gt;
&lt;p&gt;The second problem was a performance problem: QGIS would take several minutes to open QGreenland from the hub’s shared storage drive. After some investigation, it turned out this was due to us loading multiple GB of data from an NFS share! While a long term solution might involve getting QGIS to load data directly from cloud object storage (like S3), we instead decided to go a different route — provision each user a small, fast and temporary &lt;a href="https://aws.amazon.com/ebs/"&gt;Elastic Block Store&lt;/a&gt; disk. At the start of the workshop, we provided all users a small script that would copy the dataset from NFS to this faster disk once, and this drastically reduced load times from about 5 minutes to under 3 seconds! You can follow our debugging process &lt;a href="https://github.com/CryoInTheCloud/hub-image/issues/60"&gt;on this issue&lt;/a&gt;, and find the JupyterHub config used to provision these disks &lt;a href="https://github.com/2i2c-org/infrastructure/blob/5078e5b6e2115930468f910f3095a9ffd1261eb3/helm-charts/basehub/values.yaml#L616"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By overcoming these challenges, we created a smooth, intuitive, and performant computing experience for all of our participants, most of whom had never been exposed to this sort of collaborative computing environment.&lt;/p&gt;
&lt;h3 id="outcomes"&gt;Outcomes&lt;/h3&gt;
&lt;p&gt;The workshop participants engaged in small group work to complete various exercises, group discussions, and data scenarios. Each group produced Jupyter Notebooks and GitHub Discussions posts as deliverables. We created an &lt;a href="https://qgreenland-workshop-2023-researcher.github.io/outcomes/"&gt;outcomes&lt;/a&gt; webpage to summarize our participants’ accomplishments. One highlight was &lt;a href="https://github.com/orgs/qgreenland-workshop-2023-researcher/discussions/categories/fair-care"&gt;participants’ insightful commentary on FAIR &amp;amp; CARE principles.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Based on these outcomes, we consider our workshop a success. While we put in a significant amount of time creating our materials, CryoCloud’s cloud costs and our time investment in preparing computing resources were relatively small. For approximately 25 people, our cloud costs break down to roughly &lt;strong&gt;$1/person/day&lt;/strong&gt;!&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The CryoCloud JupyterHub met our workshop needs and provided a delightful experience for administrators and participants alike, and we are excited for what’s next. JupyterLab 4 and jupyter_collaboration v1.0.0, a real-time collaboration extension, were &lt;a href="/posts/2023/jupyterlab-4-0-is-here/"&gt;just announced&lt;/a&gt;, and the CryoCloud team is currently working to integrate these new releases into their hub. Real-time collaboration will enable exciting cloud use cases, like small groups working together on the same notebook without a screen share, or organizers providing technical support in a live notebook. We anticipate running this workshop again. We are excited to use JupyterHub again and look forward to experimenting with these new features!&lt;/p&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;h3 id="reviewers"&gt;Reviewers&lt;/h3&gt;
&lt;p&gt;In alphabetical order, thanks to Twila Moon, Yuvi Panda, Tasha Snow, and Alyse Thurber for their time contributing to this post!&lt;/p&gt;
&lt;h3 id="cryocloud"&gt;CryoCloud&lt;/h3&gt;
&lt;p&gt;Snow, Tasha, Millstein, Joanna, Scheick, Jessica, Sauthoff, Wilson, Leong, Wei Ji, Colliander, James, Pérez, Fernando, James Munroe, Felikson, Denis, Sutterley, Tyler, &amp;amp; Siegfried, Matthew. (2023). CryoCloud JupyterBook (2023.01.26). Zenodo.&lt;a href="https://doi.org/10.5281/zenodo.7576602"&gt;https://doi.org/10.5281/zenodo.7576602&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="2i2c"&gt;2i2c&lt;/h3&gt;
&lt;p&gt;2i2c is a non-profit organization that runs open-source &lt;a href="https://github.com/2i2c-org/infrastructure"&gt;infrastructure&lt;/a&gt; for collaborative computing, and maintains the CryoCloud JupyterHub used in this workshop. You can see the complete configuration of this JupyterHub in this &lt;a href="https://github.com/CryoInTheCloud/hub-image"&gt;public repository&lt;/a&gt;.&lt;/p&gt;
</content><category term="accessibility"/><category term="cloud computing"/><category term="education"/><category term="events"/><category term="geoscience"/><category term="JupyterHub"/><category term="science"/><category term="workshops"/></entry><entry><title>A theme editor for JupyterLab</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2023/a-theme-editor-for-jupyterlab/" rel="alternate"/><published>2023-06-19T08:11:00+00:00</published><updated>2023-06-19T08:11:00+00:00</updated><author><name>Florence Haudin</name></author><id>tag:jasongrout.github.io,2023-06-19:/medium-archive/pelican/posts/2023/a-theme-editor-for-jupyterlab/</id><summary type="html">&lt;p&gt;JupyterLab is a comprehensive web user interface for scientific and technical computing providing tools such as notebooks, text editors…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;JupyterLab is a comprehensive web user interface for scientific and technical computing providing tools such as &lt;a href="https://jupyterlab.readthedocs.io/en/stable/user/notebook.html#notebook"&gt;notebooks&lt;/a&gt;, text editors, consoles, and terminals. Like many similar tools, it allows users to choose from light or dark color themes. However, users may want to further adjust the looks of the interface, just for fun or for specific personal preferences or needs.&lt;/p&gt;
&lt;p&gt;The ability to fine-tune contrast, color palettes, and fonts can be very useful for accessibility, an essential requirement for software to be usable by the whole community. There is an ongoing &lt;a href="https://jupyter-accessibility.readthedocs.io/"&gt;project-wide effort&lt;/a&gt; to improve accessibility in Jupyter. Choices of color palettes impact color-blind users while font choices can have a significant impact on people affected by dyslexia, or who suffer from migraines.&lt;/p&gt;
&lt;p&gt;This diversity of requirements and preferences shows that end users should have the means to adjust parameters and tweak existing themes. Subtle differences can improve comfort significantly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JupyterLab themes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Theming in JupyterLab is enabled by the fact that most of the layout and colors of the UI are defined by a set of CSS variables. There is no need for a complete stylesheet: one can set values for the base parameters from which the appearance of the user interface is derived. This system ensures a consistent look and feel throughout the application.&lt;/p&gt;
&lt;p&gt;Custom themes provide a set of values for the base CSS variables and package the resulting CSS file in JupyterLab extensions. &lt;a href="https://github.com/search?q=jupyter+lab+theme"&gt;A search on GitHub&lt;/a&gt; returns 29 repositories defining such custom themes for JupyterLab.&lt;/p&gt;
&lt;p&gt;Creating a theme requires implementing values for &lt;em&gt;dozens&lt;/em&gt; of base CSS variables. This is often achieved by theme authors tweaking the values given in the default dark or light themes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Generating a consistent palette, testing, and packaging the outcome in the form of a JupyterLab extension requires development skills and is neither direct nor trivial.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;A new tool for authoring JupyterLab themes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To lower the bar for customizing JupyterLab we created a new tool providing a simple interface for tuning the JupyterLab appearance interactively, allowing theme authors to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use the selected colors in their application and “pin down” the result in the configuration,&lt;/li&gt;
&lt;li&gt;export the outcome in a form amenable to packaging into a new JupyterLab theme.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The theme editor extension is a theme prototyping tool, a sandbox to test changes in colors, font family and font size, and a configuration tool for end users. It displays a reduced set of parameters one can play with, allowing users to select:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;colors through color pickers,&lt;/li&gt;
&lt;li&gt;numerical values from sliders (for font size, border radius and width),&lt;/li&gt;
&lt;li&gt;font families from a predefined dropdown list.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A screenshot of JupyterLab with the theme editor panel is displayed in Figure 1, with a notebook opened in light theme. Figure 2 shows different screenshots with different custom themes.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="Screenshot of JupyterLab interface with the theme editor on the left panel and a notebook opened. The theme chosen is the light default one." src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/a-theme-editor-for-jupyterlab/images/001-0_vj7tjopuS2GvZg3N.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Figure 1: The theme editor extension in JupyterLab.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img alt="4 screenshots of the JupyterLab interface are shown to illustrate the kinds of themes that can be generated by the theme editor, with gray, blue, orange and pink tones and different font families." src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/a-theme-editor-for-jupyterlab/images/002-0_5OLBiA8tmTbD1Nan.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Figure 2: Examples of dynamically editing the color and fonts scheme of JupyterLab with the theme editor.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Color palettes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For all the colors (accent, brand, border, error, info, layout, success, warn), the same logic is applied. The user picks a base color and a palette is automatically calculated using Microsoft’s &lt;a href="https://www.fast.design/docs/api/fast-colors.colorpalette"&gt;fast-colors&lt;/a&gt; library.&lt;/p&gt;
&lt;p&gt;Let’s take the specific example of the layout colors impacting the background of most elements of the interface. They are defined using &lt;em&gt;— jp-layout-colori&lt;/em&gt; CSS variables from white to light grays (for the light theme).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jp-layout-color0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;white&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jp-layout-color1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;white&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jp-layout-color2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;-md-grey-200&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jp-layout-color3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;-md-grey-400&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jp-layout-color4&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;-md-grey-600&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The number of colors in the palette fits the number of colors in the CSS set of variables (here the palette contains 5 colors). There are different ways to define colors (hexadecimal, RGBA, HSLA). The latter format has the advantage of giving direct access to luminance &lt;em&gt;L&lt;/em&gt;, a measure of the lightness of a given color.&lt;/p&gt;
&lt;p&gt;An inverse layout palette is computed for use with most text elements. The luminance of the inverse layout color &lt;em&gt;L’&lt;/em&gt; is calculated as &lt;em&gt;1-L&lt;/em&gt; plus a correction depending on how &lt;em&gt;1-L&lt;/em&gt; is close to 0.5. There isn’t a general CSS rule in JupyterLab concerning elements on top of a background but some PRs were proposed to reinforce the coupling between inverse layout elements and layout backgrounds with the same color index. The contrast still needs to be improved though, by using other palettes or better corrections when defining the inverse layout colors.&lt;/p&gt;
&lt;p&gt;The full process just described from picking a layout color to resulting palettes and the corresponding interface is illustrated in Figure 3.&lt;/p&gt;
&lt;figure&gt;
&lt;img alt="The figure is divided into 3 parts. Part 1 is a screenshot with color picker with a green color selected. Part 2 is a capture showing the resulting palette calculated from this color choice. Finally, part 3 is a screenshot of JupyterLab interface with the different green tones calculated from the base color that has been picked." src="https://jasongrout.github.io/medium-archive/pelican/posts/2023/a-theme-editor-for-jupyterlab/images/003-0_vD9AcycD3qSCAJgu.webp" loading="lazy" data-body-image=""&gt;
&lt;figcaption&gt;Figure 3: From a color to the layout, and inverse layout palettes with the resulting interface.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Font size and font family&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As mentioned previously, font size and font family can be tuned too. Let’s take the example of the &lt;em&gt;— jp-ui-font-size[i]&lt;/em&gt; CSS variables defining the text size of most of the text elements in the interface:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jp-ui-font-scale-factor&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;2&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jp-ui-font-size0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;8333em&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jp-ui-font-size1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;13px&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c"&gt;/* Base font size */&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jp-ui-font-size2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;2em&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jp-ui-font-size3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;44em&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A slider lets the user control the base font size associated with &lt;em&gt;— jp-ui-font-size1&lt;/em&gt;. The other font sizes are then calculated by applying a scale factor to the base font.&lt;/p&gt;
&lt;p&gt;Concerning font families, a non-exhaustive list is proposed (i.e., default browser fonts or Google fonts). It includes both standard accessible fonts (Arial, Courier, Helvetica, Sans Serif, system-ui, Times New Roman, Verdana) and less usual ones to create artistic or special interfaces with cursive fonts ( for instance Dancing Script or Single Day). Only 2 fonts are proposed for code: Space Mono and monospace.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Storing the new theme&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Once satisfied with a new theme, users can export it using a button at the top of the theme editor panel. This creates a &lt;em&gt;variable.css&lt;/em&gt; file that can be packaged in a theme extension (see the &lt;a href="https://github.com/jupyterlab/extension-cookiecutter-ts/"&gt;extension template&lt;/a&gt;). The new parameters are also synchronously saved in the settings editor and can be restored for the next JupyterLab opening if the boolean &lt;em&gt;useSettings&lt;/em&gt; is set to true. If not, the interface will look like in Figure 1: with light theme default CSS values. Resetting &lt;em&gt;useSettings&lt;/em&gt; to true will restore the formerly tuned parameters.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Future development&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The look and feel of the theme editor UI still needs to be improved. We will work on unifying the styling of all interfaces making use of &lt;a href="https://github.com/rjsf-team/react-jsonschema-form"&gt;react-jsonschema-form&lt;/a&gt;. It is already used for the JupyterLab settings editor, the notebook metadata editor of JupyterLab 4.0, and several extensions.&lt;/p&gt;
&lt;p&gt;Moreover, the current implementation is bound to fast-colors palettes and we may want to use a different approach, like decoupling the layout and inverse layout palettes to reach better contrasts or give more freedom in the color choices.&lt;/p&gt;
&lt;p&gt;Any help (e.g., filling issues for bugs or enhancement requests, opening pull requests) to improve &lt;a href="https://github.com/jupyterlab-contrib/jupyterlab-theme-editor"&gt;the extension&lt;/a&gt; is welcome.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Try it out&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can install the &lt;a href="https://pypi.org/project/jupyter-theme-editor"&gt;PyPI package&lt;/a&gt; by running:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nx"&gt;pip&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;jupyter_theme_editor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can also try the theme editor on &lt;a href="https://mybinder.org/v2/gh/jupyterlab-contrib/jupyterlab-theme-editor/main?urlpath=lab"&gt;Binder&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aknowledgement&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Many thanks to &lt;a href="https://twitter.com/ihuicatls"&gt;Isabel Paredes&lt;/a&gt; for drawing the palette icon!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;About the authors&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Florence Haudin is a scientific software developer at &lt;a href="https://twitter.com/QuantStack"&gt;QuantStack&lt;/a&gt;. She contributes to JupyterLab and to ipyleaflet.&lt;/p&gt;
&lt;p&gt;Frédéric Collonval supervised this work as a technical director at QuantStack. He is a member of the JupyterLab core team and authored several JupyterLab extensions.&lt;/p&gt;
</content><category term="accessibility"/><category term="extensions"/><category term="JupyterLab"/></entry><entry><title>Improving the accessibility of Jupyter</title><link href="https://jasongrout.github.io/medium-archive/pelican/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>QuantStack</name></author><id>tag:jasongrout.github.io,2023-02-24:/medium-archive/pelican/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;Towards a more accessible Jupyter notebook&lt;/p&gt;
&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;/em&gt; &lt;a href="https://jupyter.org/governance/list_of_subprojects.html"&gt;&lt;em&gt;official Jupyter Subproject&lt;/em&gt;&lt;/a&gt; &lt;em&gt;and received&lt;/em&gt; &lt;a href="https://github.com/jupyter/accessibility/blob/main/docs/funding/czi-grant-roadmap.md"&gt;&lt;em&gt;a grant from the Chan Zuckerberg Initiative&lt;/em&gt;&lt;/a&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;h3 id="codemirror-6-and-notebook-7"&gt;CodeMirror 6 and Notebook 7&lt;/h3&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;h3 id="initial-accessibility-audits"&gt;&lt;strong&gt;Initial accessibility audits&lt;/strong&gt;&lt;/h3&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://jasongrout.github.io/medium-archive/pelican/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://jasongrout.github.io/medium-archive/pelican/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;h3 id="beyond-accessibility-audits"&gt;&lt;strong&gt;Beyond accessibility audits&lt;/strong&gt;&lt;/h3&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;h3 id="acknowledgements"&gt;&lt;strong&gt;Acknowledgements&lt;/strong&gt;&lt;/h3&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="/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;h3 id="about-the-authors"&gt;&lt;strong&gt;About the Authors&lt;/strong&gt;&lt;/h3&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>Introducing JupyterHub’s Outreachy interns! — December 2022 Cohort</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyterhubs-outreachy-interns-december-2022/" rel="alternate"/><published>2022-12-07T07:45:00+00:00</published><updated>2022-12-07T07:45:00+00:00</updated><author><name>Sarah Gibson</name></author><id>tag:jasongrout.github.io,2022-12-07:/medium-archive/pelican/posts/2022/introducing-jupyterhubs-outreachy-interns-december-2022/</id><summary type="html">&lt;p&gt;As part of the community strategic support project funded by CZI’s EOSS grant series, the JupyterHub sub-project has funding to support…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/introducing-jupyterhubs-outreachy-interns-december-2022/images/001-1_mRtgDdoRwjO3Kb2nSGOsdw.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;As part of the &lt;a href="/posts/2021/czi-awards-three-eoss-grants-to-jupyter-community/"&gt;community strategic support project funded by CZI’s EOSS grant series&lt;/a&gt;, the JupyterHub sub-project has funding to support Outreachy interns through four cohorts over the next two years. We would like to introduce you to the first cohort and the projects they will be working on!&lt;/p&gt;
&lt;h2 id="ogoh-blessing-onyowoicho-improve-accessibility-in-jupyterhub"&gt;Ogoh Blessing Onyowoicho — Improve Accessibility in JupyterHub&lt;/h2&gt;
&lt;p&gt;Accessibility is the ability of tools (in our case web tools) to be used by a variety of communities with different disabilities. There are a variety of standards and tools for evaluating and ensuring that a web page can be used effectively by as many people as possible. Work by the &lt;a href="https://jupyter-accessibility.readthedocs.io"&gt;Accessibility team&lt;/a&gt; is ongoing to define a set of standard tools to improve accessibility across the Jupyter ecosystem.&lt;/p&gt;
&lt;p&gt;The JupyterHub project is working to improve the accessibility of its pages to ensure we are providing tools that are as useful as they can be to as many people as we can. During the internship, we will evaluate JupyterHub’s accessibility, find ways to improve it, and integrate accessibility testing into the development process, in collaboration with the Accessibility team, to ensure we do a better job going forward.&lt;/p&gt;
&lt;h3 id="ogoh-blessing-says"&gt;Ogoh Blessing says:&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;My name is Ogoh Blessing Onyowoicho. I am a self-taught Frontend developer based in Lagos, Nigeria and I am an Outreachy intern working on Improving the accessibility of JupyterHub.&lt;br&gt;
I am excited to work on JupyterHub because it is giving me the opportunity to use skills that I have accrued over the years to proffer solutions to problems that affect people’s lives directly. On hearing accessibility, the first thought one has is that it involves building web products that people with special needs can use seamlessly. Though this is part of it, accessibility goes way beyond this. It involves building products that different users (e.g users at different locations, users with different devices etc) can use easily. The thought of contributing to improving the experience of so many people alone excites me.&lt;br&gt;
In the coming months, I hope to learn and continue to hone my skills as I am guided by my mentors and members of the community I get to interact with.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="allan-wasega-restructure-and-improve-jupyterhub-documentation-by-implementing-the-diataxis-framework"&gt;Allan Wasega — Restructure and improve JupyterHub documentation by implementing the Diátaxis framework&lt;/h2&gt;
&lt;p&gt;JupyterHub has a range of documentation that covers both developer and user audiences in order to help them deploy, maintain, and use their own instance of a JupyterHub. The success of an open source software project to (i) be adopted by users, and (ii) receive meaningful contributions relies heavily on the quality, navigability and accessibility of documentation so that users and developers have all the information they need to achieve what they want to do.&lt;/p&gt;
&lt;p&gt;A framework for organising technical documentation has arisen called &lt;a href="https://diataxis.fr"&gt;diátaxis&lt;/a&gt;. It takes a systematic approach to understanding user requirements of documentation throughout the lifecycle of interaction with a product and posits that different user needs require different approaches in creation of the documentation, as well as a layout to navigate these different “modes” of documentation.&lt;/p&gt;
&lt;p&gt;This project will focus on a refactoring of the documentation for the &lt;a href="https://github.com/jupyterhub/jupyterhub"&gt;JupyterHub package&lt;/a&gt;. We will begin by performing a review of the present documentation, categorise these into the diataxis framework, and then restructure the documentation files in the repository. Once we have transformed the documentation into this framework, it will be much easier to identify missing and unclear documentation (those that were difficult to categorise). We can then begin to curate resources that can fill the gaps and improve documentation that is not specific enough.&lt;/p&gt;
&lt;h3 id="allan-says"&gt;Allan says:&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;I am Allan Wasega, from Nairobi, Kenya. Broadly, I like to describe myself as a researcher and a writer. Researcher because looking into things to find patterns or hidden information has always been of interest to me. Writer because I figured early on that words allow me to express myself and to communicate to a larger audience than that inside my head :). As a Computer Science student, I looked for ways to bring these two skills together within the realm of computing and that is how I found myself in the technical writing space.&lt;br&gt;
As an undergraduate student, I used Jupyter Notebooks extensively for most of my programming assignments and projects. As a result, when making my Outreachy application, the JupyterHub project immediately piqued my interest because I did not know that there was a way to serve Jupyter Notebooks to multiple users, such as within a classroom setting. Presently, I serve as a mentor at KamiLimu, which is a mentorship program for students pursuing technology-aligned courses in tertiary institutions in Kenya. One of the objectives of KamiLimu is to introduce students to tech specializations such as Data Science and Machine Learning, which, from experience, uses Jupyter Notebooks! Therefore, I am excited to work on JupyterHub because I will be learning about and helping to improve a product I hold dear and which I can use to advance the skills of the next generation of computer technologists in Kenya.&lt;br&gt;
First, I hope to gain a deep understanding of how JupyterHub works so as to spread the word about it and its functionalities. Second, I hope to apply and advance my technical writing skills. I encountered the Diataxis Framework earlier this year while working as a technical writer at Tingle Software, a Nairobi-based software company. I have also been following Daniele Procida (the author of the framework) on Twitter for a while now and his work has been quite inspiring. Through this project, I will apply the Diataxis Framework to restructure JupyterHub’s documentation and, in doing so, further my understanding of the framework. Finally, I am passionate about mentorship, especially in the tech field. Therefore, besides expanding my professional and personal networks, this project will enable me to learn how to conduct mentorship within a global setting, and I can, in turn, apply this knowledge within my local community.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="sheila-kahwai-create-a-reusable-jupyterhub-pytest-plugin"&gt;Sheila Kahwai — Create a reusable JupyterHub pytest plugin&lt;/h2&gt;
&lt;p&gt;JupyterHub is a modular and extensible project, with parts, like the proxy, authenticator and spawner, that can be easily changed and extended. Testing the functionality of these components against JupyterHub is important and it requires various hub setups that can sometimes become complicated.&lt;/p&gt;
&lt;p&gt;Currently, each of these hub components and the hub itself define their own testing infrastructure, building everything from the ground up using the pytest framework. But some of this complex work is either repetitive across JupyterHub sub-projects, or under-specified for some of them.&lt;/p&gt;
&lt;p&gt;This project will abstract out these common parts into a separate testing framework. This framework should be a pip-installable pytest plugin that would provide various hub functionalities through pytest fixtures. These fixtures can then be re-used by JupyterHub and its components to bootstrap their own testing suite.&lt;/p&gt;
&lt;p&gt;Integrating this plugin will drive some important refactoring work of the current testing architecture of JupyterHub and have a great impact in improving the overall test coverage, maintainability and continuity of the JupyterHub project.&lt;/p&gt;
&lt;h3 id="sheila-says"&gt;Sheila says:&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;My name is Sheila Kahwai. I am a self-taught python developer from Nairobi, Kenya, working to specialize in back-end engineering.&lt;br&gt;
I am excited to work on JupyterHub because it has made many products I have used throughout my learning journey. It is a privilege to work with a diverse community that has created products that are very useful to equally diverse users like myself.&lt;br&gt;
While creating a reusable JupyterHub pytest plugin, I hope to gain more insight into creating plugins for massive codebases to improve maintainability and scalability with clean and reusable code. Through this project, I look forward to improving the overall testing infrastructure of the various JupyterHub components.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Welcome to the interns! We’re so excited to start working with you!&lt;/p&gt;
</content><category term="accessibility"/><category term="documentation"/><category term="JupyterHub"/><category term="Outreachy"/></entry><entry><title>Jupyter Accessibility Workshops Wrap Up</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2022/jupyter-accessibility-workshops-wrap-up/" rel="alternate"/><published>2022-04-09T04:48:00+00:00</published><updated>2022-04-09T04:48:00+00:00</updated><author><name>Isabela Presedo-Floyd</name></author><id>tag:jasongrout.github.io,2022-04-09:/medium-archive/pelican/posts/2022/jupyter-accessibility-workshops-wrap-up/</id><summary type="html">&lt;p&gt;All good things must come to an end, and Jupyter accessibility workshops are no exception. While I may be sad that this series is over…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/jupyter-accessibility-workshops-wrap-up/images/001-1_QIA-0zt6dhu3vh3HmwWPhA_2x.webp" alt="Jupyter Accessibility Workshops Wrap Up surrounded by the planet Jupiter, an eye, a bar chart, check boxes, and a computer mouse." loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;All good things must come to an end, and Jupyter accessibility workshops are no exception. While I may be sad that this series is over, there are many, many things to celebrate and more to look forward to! Let’s break it up into what we did, what we’ve learned, and what we’re going to do in the future.&lt;/p&gt;
&lt;p&gt;A quick recap: Jupyter accessibility workshops were a series of events where we connected &lt;a href="https://docs.jupyter.org/en/latest/community/content-community.html#what-is-a-jovyan"&gt;Jovyans&lt;/a&gt;, accessibility experts, and the wider open-source ecosystem for learning and practice in improving accessibility across Jupyter projects. For more specifics on the events individually, visit the &lt;a href="/posts/2022/join-us-for-the-jupyter-accessibility-workshops-part-1/"&gt;January&lt;/a&gt; and &lt;a href="/posts/2022/join-us-for-the-jupyter-accessibility-workshops-part-2/"&gt;March event announcements&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="what-we-did"&gt;What we did&lt;/h2&gt;
&lt;p&gt;We gathered, we learned, we contributed fixes, all with a dose of laughter. Across three events, our attendees were small in number but mighty, greeting our corner of the internet with&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 &lt;a href="https://livecaptioninguk.com/"&gt;fantastic captioner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2 expert accessibility talks from &lt;a href="https://www.frank.computer/"&gt;Frank Elavsky&lt;/a&gt; and &lt;a href="https://ericwbailey.design/"&gt;Eric Bailey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;3 Saturdays&lt;/li&gt;
&lt;li&gt;4 first-time contributors to Jupyter projects&lt;/li&gt;
&lt;li&gt;5 Jupyter projects discussed to better understand how we can support the ecosystem’s accessibility needs as a whole&lt;/li&gt;
&lt;li&gt;6 hours of events&lt;/li&gt;
&lt;li&gt;25 participants, with several friendly faces appearing for more than one event&lt;/li&gt;
&lt;li&gt;88 image descriptions written (contributed between &lt;a href="https://github.com/jupyter/jupyter/pull/607"&gt;Juptyer documentation&lt;/a&gt; and &lt;a href="https://github.com/jupyter/jupyter.github.io/pull/680"&gt;Jupyter.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;~1000 smiles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What a busy season!&lt;/p&gt;
&lt;p&gt;We kicked off the events with the knowledge of Frank Elavsky. This included an energetic discussion around the ways that data visualization is already an accessibility accommodation, how to prioritize user feedback and needs, and how to repurpose or reconfigure what we already have to something accessible.&lt;/p&gt;
&lt;p&gt;For the second event, our community contributed accessibility fixes to Jupyter projects in the form of image descriptions. This event not only introduces these descriptions — usually alt text — but gives participants a chance to try it out for themselves. Practice always leads to more questions and great conversations, like how to handle long documentation diagrams or when the documentation might benefit from removing an image.&lt;/p&gt;
&lt;p&gt;We regrouped in March to learn from Eric Bailey’s vast accessibility experience and to better understand the discussion from a wider perspective. He gave us wonderful examples of accessibility efforts from history, as well as inspiration for how to continue our community’s efforts.&lt;/p&gt;
&lt;p&gt;You can find all event resources by date at the following links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Quansight-Labs/jupyter-accessibility-workshops/blob/main/events/2022-january-15/README.md"&gt;January 15&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Quansight-Labs/jupyter-accessibility-workshops/blob/main/events/2022-january-22/README.md"&gt;January 22&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Quansight-Labs/jupyter-accessibility-workshops/blob/main/events/2022-March-12/README.md"&gt;March 12&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-we-learned"&gt;What we learned&lt;/h2&gt;
&lt;p&gt;With such a rich mix of people and the spotlight on some wonderful speakers, these workshops were privy to discussions at the intersection of digital accessibility and open source. Here are the biggest themes that emerged across all the events.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Guidelines are the floor. not the ceiling. Creating a pleasant accessible experience will require more than sticking to guidelines.&lt;/li&gt;
&lt;li&gt;Do it, don’t just read about it. Once we started trying to describe Jupyter images, the best questions and discussions appeared.&lt;/li&gt;
&lt;li&gt;It’s all about context. What an image is communicates is determined by what is around it; use this to write good descriptions.&lt;/li&gt;
&lt;li&gt;Don’t be afraid mistakes. Because accessibility still isn’t the norm in many open source spaces, expect to be trying, failing, and iterating.&lt;/li&gt;
&lt;li&gt;Listen to community members first! If they say communicate accessibility failures that are blocking them, prioritize those efforts when you can.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="whats-next"&gt;What’s next&lt;/h2&gt;
&lt;p&gt;Accessibility in Jupyter spaces is far from over, and we’d love to have you find your new favorite place on the internet here. Just as Jupyter is not a single project, accessibility goes beyond what we covered in the workshops.&lt;/p&gt;
&lt;p&gt;We started somewhere designed to be approachable for people of all experience levels, but the next major steps include prioritizing the feedback of disabled people in Jupyter, solving existing issues across projects, and creating methods for sustainable accessibility within our community. These problems won’t be solved with Jupyter knowledge alone, accessibility experience alone, code sorcery alone, documentation brilliance alone, or any other single skill set alone. But they can be solved together. Bring your skills with you, and we can find a place for you here!&lt;/p&gt;
&lt;p&gt;If you’d like to get more involved with accessibility efforts, feel free to join our community via&lt;/p&gt;
&lt;p&gt;• The &lt;a href="https://github.com/jupyter/accessibility/"&gt;jupyter/accessibility GitHub repository&lt;/a&gt;, a place for gathering cross-project on GitHub.&lt;/p&gt;
&lt;p&gt;• &lt;a href="https://discourse.jupyter.org/c/special-topics/accessibility/29"&gt;Jupyter’s Discourse section for accessibility&lt;/a&gt;, a place for gathering cross-project separate from Jupyter codebases.&lt;/p&gt;
&lt;p&gt;• Fortnightly JupyterLab accessibility meetings (found on the &lt;a href="https://docs.jupyter.org/en/latest/community/content-community.html#jupyter-community-meetings"&gt;community calendar&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;• For JupyterLab efforts, visit the &lt;a href="https://github.com/orgs/jupyterlab/projects/1"&gt;JupyterLab accessibility GitHub project&lt;/a&gt;, where issues and pull requests for are listed.&lt;/p&gt;
&lt;p&gt;• &lt;a href="https://github.com/jupyter/accessibility/issues"&gt;Open a GitHub issue to propose an accessibility change&lt;/a&gt; (please check if a similar issue already exists and add a comment to that one if possible).&lt;/p&gt;
</content><category term="accessibility"/><category term="events"/><category term="workshops"/></entry><entry><title>Join us for the Jupyter Accessibility Workshops (Part 2)</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2022/join-us-for-the-jupyter-accessibility-workshops-part-2/" rel="alternate"/><published>2022-03-04T15:55:00+00:00</published><updated>2022-03-04T15:55:00+00:00</updated><author><name>Isabela Presedo-Floyd</name></author><id>tag:jasongrout.github.io,2022-03-04:/medium-archive/pelican/posts/2022/join-us-for-the-jupyter-accessibility-workshops-part-2/</id><summary type="html">&lt;p&gt;I’m happy to announce the next pair of Jupyter accessibility workshops happening this March! As a part of the third community workshop…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/join-us-for-the-jupyter-accessibility-workshops-part-2/images/001-1_3OIwnxchEIUmvNykISrNiA_2x.webp" alt="“Jupyter accessibility workshops part 2” surrounded by the planet Jupiter a wheelchair symbol, and check boxes in different colors." loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;I’m happy to announce the next pair of Jupyter accessibility workshops happening this March! As a part of the &lt;a href="/posts/2019/jupyter-community-workshops-call-for-proposals-for-jan/"&gt;third community workshop cycle&lt;/a&gt;, these workshops are designed to increase accessibility knowledge within the ecosystem and make Jupyter projects more usable for disabled people.&lt;/p&gt;
&lt;p&gt;With community feedback as the inspiration, the following two events will open up discussions around general accessibility foundations and evaluating software with manual testing. If learning, contributing, and making connections in accessibility spaces sounds interesting to you, please join us. No previous experience needed.&lt;/p&gt;
&lt;h2 id="what-was-part-1"&gt;What was part 1?&lt;/h2&gt;
&lt;p&gt;If you noticed the “Part 2” in the title, you might want to &lt;a href="/posts/2022/join-us-for-the-jupyter-accessibility-workshops-part-1/"&gt;visit the blog post announcing the last two workshops&lt;/a&gt; for more context.&lt;/p&gt;
&lt;p&gt;We also have resources from the last two events available!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/NMb9kbiaBvw"&gt;January 15: How to build inclusive data representations with Frank Elavsky recording&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/KMWGClxcJGc"&gt;January 22: Writing image descriptions for documentation sprint recording&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="whats-up-next"&gt;What’s up next?&lt;/h2&gt;
&lt;h3 id="part-2-march-12-and-19"&gt;Part 2: March 12 and 19&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;On March 12,&lt;/strong&gt; we’ll be joined by &lt;a href="https://ericwbailey.design/"&gt;Eric Bailey&lt;/a&gt; as he introduces us to accessibility and inclusive design strategies. This event will provide some much-needed foundation and common language for our community as we continue to make accessibility a collective priority. People have often asked me how to get started in considering accessibility in their day-to-day work, so we are extremely fortunate to learn from one of the best!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On March 19,&lt;/strong&gt; it’s sprint time. For this event, we’ll be focused on learning how to manually audit software for accessibility. This skill is great no matter what you spend your time on, whether testing your own work, reviewing someone else’s, or understanding expected accessibility experiences. We’ll practice testing methods as a group before contributing our review to projects across the Jupyter ecosystem. Don’t be intimidated, though, all are welcome at this event; no prior Git or GitHub knowledge is necessary!&lt;/p&gt;
&lt;p&gt;To find these events in your timezone, please visit the &lt;a href="https://docs.jupyter.org/en/latest/community/content-community.html#jupyter-community-meetings"&gt;Jupyter community calendar&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="who-can-attend-these-events"&gt;Who can attend these events?&lt;/h2&gt;
&lt;p&gt;As with the last two, Jupyter accessibility workshops are open to everyone! These events are also entirely remote, so all you need is to be online. Each event is stand-alone, so you can sign up to attend one or all depending on your availability and interest.&lt;/p&gt;
&lt;p&gt;Ideally, these events will be attended by a mix of&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jupyter contributors to provide specific insight about the community and projects&lt;/li&gt;
&lt;li&gt;People with accessibility skills to advise on the knowledge areas the Jupyter community currently lacks&lt;/li&gt;
&lt;li&gt;Newcomers willing to learn and give us feedback on how to make these learning curves better for everyone&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please consider attending if any of these descriptions sound like you!&lt;/p&gt;
&lt;h2 id="how-do-i-sign-up"&gt;How do I sign up?&lt;/h2&gt;
&lt;p&gt;You can sign up for a Jupyter accessibility workshop individually. You are welcome to attend both events, though you will need to sign up on both forms. Please note that attendance is limited to about 40 attendees per event to make sure we can provide a quality experience with a small event team. (But don’t despair! Recordings of speaking events and notes for all events will be available to all afterwards.)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hopin.com/events/jupyter-accessibility-workshop-intro-to-accesibility-and-inclusive-design-with-eric-bailey"&gt;&lt;strong&gt;March 12&lt;/strong&gt;: Intro to accessibility and inclusive design with Eric Bailey sign up form&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hopin.com/events/jupyter-accessibility-workshop-auditing-in-open-source"&gt;&lt;strong&gt;March 19:&lt;/strong&gt; Auditing in open source sprint sign up form&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="where-can-i-get-more-information"&gt;Where can I get more information?&lt;/h2&gt;
&lt;p&gt;These events are planned publicly on GitHub; you can explore the &lt;a href="https://github.com/Quansight-Labs/jupyter-accessibility-workshops/"&gt;accessibility workshop planning repository&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2 id="thanks"&gt;Thanks!&lt;/h2&gt;
&lt;p&gt;Once again, these events would not be possible without a number of people across the Jupyter community. My thanks wouldn’t be complete without acknowledgement for all &lt;a href="https://docs.jupyter.org/en/latest/community/content-community.html?highlight=jovyan#what-is-a-jovyan"&gt;Jovyans&lt;/a&gt; who have already joined in accessibility efforts, like our wonderful attendees from the last two events whose spirit keeps me inspired every day!&lt;/p&gt;
&lt;p&gt;Of course, many thanks to the &lt;a href="https://jupyter.org/governance/communitybuildingcommittee.html"&gt;Jupyter Community Building Committee&lt;/a&gt; for supporting funded community events and being a constant presence throughout all our planning adventures. And thank you to the original team that proposed these workshops and made them possible.&lt;/p&gt;
</content><category term="accessibility"/><category term="events"/><category term="workshops"/></entry><entry><title>Join us for the Jupyter Accessibility Workshops (Part 1)</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2022/join-us-for-the-jupyter-accessibility-workshops-part-1/" rel="alternate"/><published>2022-01-06T18:30:00+00:00</published><updated>2022-01-10T16:24:00+00:00</updated><author><name>Isabela Presedo-Floyd</name></author><id>tag:jasongrout.github.io,2022-01-06:/medium-archive/pelican/posts/2022/join-us-for-the-jupyter-accessibility-workshops-part-1/</id><summary type="html">&lt;p&gt;At long last, Jupyter accessibility workshops are here! This is a series of Jupyter community workshops aimed at increasing accessibility…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2022/join-us-for-the-jupyter-accessibility-workshops-part-1/images/001-1_ZORe-fp96fICnLv1-p-GLw.webp" alt="“Jupyter accessibility workshops part 1” surrounded by the planet Jupiter and wheelchair symbol." loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;At long last, Jupyter accessibility workshops are here! This is a series of &lt;a href="/posts/2018/jupyter-community-workshops/"&gt;Jupyter community workshops&lt;/a&gt; aimed at increasing accessibility awareness within the ecosystem and making Jupyter projects more usable for disabled people.&lt;/p&gt;
&lt;p&gt;The goal is to make existing accessibility efforts more prominent across the many Jupyter projects. Much of what we discuss will relate to the &lt;a href="https://en.wikipedia.org/wiki/Web_Content_Accessibility_Guidelines"&gt;Web Content Accessibility Guidelines&lt;/a&gt; and how to apply them in open source, scientific spaces where this work has historically been neglected.&lt;/p&gt;
&lt;p&gt;These workshops are a series of events proposed for and supported by the &lt;a href="/posts/2019/jupyter-community-workshops-call-for-proposals-for-jan/"&gt;third community workshop cycle&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="what-are-these-events"&gt;What are these events?&lt;/h2&gt;
&lt;p&gt;These workshops are a series of four virtual events alternating between learning from experts and contributing to projects.&lt;/p&gt;
&lt;p&gt;They’ve been designed by listening to community requests and combining event types to include people of different skills and across communities. In total, they combine Jupyter experts and accessibility experts, learning and action, and working with old friends and making new connections.&lt;/p&gt;
&lt;h3 id="part-1-january-15-and-22"&gt;Part 1: January 15 and 22&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;On January 15&lt;/strong&gt; we’ll be hearing from Frank Elavsky about how to build inclusive data representations. You can learn more about this work at &lt;a href="https://chartability.fizz.studio/"&gt;Chartability&lt;/a&gt;, a framework for creating enjoyable and accessible data visualization experiences. I’ve heard so many questions from the community about how to author more accessible content in notebooks and otherwise, so I’m personally thrilled to announce this speaker. (&lt;a href="https://arewemeetingyet.com/Los%20Angeles/2022-01-15/8:30/Jupyter%20Accessibility%20Workshops%20with%20Frank%20Elvasky:%20How%20to%20build%20inclusive%20data%20representations"&gt;Check the event time in your timezone.&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On January 22&lt;/strong&gt; we’ll host a sprint to learn how to write image descriptions and practice by contributing as a team to Jupyter documentation. Image descriptions, usually alt text, are a great place to make use of different skills and learn from one another. Whether you’re a Jupyter community member who wants to learn about accessibility, an accessibility expert who wants to learn about Jupyter, or someone new to both, all are welcome at this event. No prior git or GitHub knowledge necessary! (&lt;a href="https://arewemeetingyet.com/Los%20Angeles/2022-01-22/8:30/%20Jupyter%20Accessibility%20Workshops:%20Writing%20image%20descriptions%20for%20documentation"&gt;Check the event time in your timezone.&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id="part-2-march"&gt;Part 2: March&lt;/h3&gt;
&lt;p&gt;Two more events — a speaker and sprint event — are scheduled in March 2022. Mark your calendars and get excited for more details after the first two events.&lt;/p&gt;
&lt;h2 id="who-can-attend-these-events"&gt;Who can attend these events?&lt;/h2&gt;
&lt;p&gt;Jupyter accessibility workshops are open to everyone! These events are also entirely remote, so all you need is to be online. Each event is stand-alone, so you can sign up to attend one or all depending on your availability and interest.&lt;/p&gt;
&lt;p&gt;Ideally, these events will be attended by a mix of&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jupyter contributors to provide specific insight about the community and projects&lt;/li&gt;
&lt;li&gt;People with accessibility skills to advise on the knowledge areas the Jupyter community currently lacks&lt;/li&gt;
&lt;li&gt;Newcomers willing to learn and give us feedback on how to make these learning curves better for everyone&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please consider attending if any of these descriptions sound like you!&lt;/p&gt;
&lt;p&gt;Some events may be more useful to you if you already have certain skills, so be sure to review the sign up forms per-event for specific details.&lt;/p&gt;
&lt;h2 id="how-do-i-sign-up"&gt;How do I sign up?&lt;/h2&gt;
&lt;p&gt;You can sign up for a Jupyter accessibility workshop per-event. Please note that attendance is limited to about 40 attendees per event to make sure we can provide a quality experience with a small event team. (But don’t despair! Recordings of speaking events and notes for all events will be available to all post-event.)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hopin.com/events/jupyter-accessibility-workshop-1?code=zQATeMRKrHhGBFQ4SojTUXIdk"&gt;&lt;strong&gt;January 15&lt;/strong&gt;: How to build inclusive data representations with Frank Elavsky sign up form&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hopin.com/events/jupyter-accessibility-sprint-1/registration"&gt;&lt;strong&gt;January 22&lt;/strong&gt;: Writing image descriptions for documentation sprint agenda sign up form&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="where-can-i-get-more-information"&gt;Where can I get more information?&lt;/h2&gt;
&lt;p&gt;These events are planned in public on GitHub; you can explore the &lt;a href="https://github.com/Quansight-Labs/jupyter-accessibility-workshops/"&gt;accessibility workshop planning repository&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;You can also read the agendas for the first two events:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Quansight-Labs/jupyter-accessibility-workshops/blob/main/events/2022-january-15/group_agenda.md"&gt;&lt;strong&gt;January 15&lt;/strong&gt;: How to build inclusive data representations with Frank Elavsky agenda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Quansight-Labs/jupyter-accessibility-workshops/blob/main/events/2022-january-22/mentored_sprint_agenda.md"&gt;&lt;strong&gt;January 22&lt;/strong&gt;: Writing image descriptions for documentation sprint agenda&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="thanks"&gt;Thanks&lt;/h2&gt;
&lt;p&gt;I want to take a moment to thank some of the many people that have helped make these events happen.&lt;/p&gt;
&lt;p&gt;First off, thanks to the &lt;a href="https://jupyter.org/governance/communitybuildingcommittee.html"&gt;Jupyter Community Building Committee&lt;/a&gt; for encouraging and supporting the logistics of this and other community workshops. Thank you to the original team that proposed an accessibility workshop for their hard work and help in keeping the proposal going. And, of course, thanks to everyone in the Jupyter ecosystem who have already been committed to accessibility efforts. None of this would be possible alone.&lt;/p&gt;
</content><category term="accessibility"/><category term="events"/><category term="workshops"/></entry></feed>