**On May 30th**, Prof. Barba presented at the Open edX Conference, together with Miguel Amigot II, CTO of IBL Education, the recent work to integrate Jupyter with the Open edX platform. The talk showcased two new Open edX extensions (XBlocks): one for pulling content into a course from any public Jupyter notebook (from its URL), and the other to integrate auto-graded assignments based on Jupyter notebooks, and the `nbgrader`

Jupyter extension.

Prof. Barba has been teaching with Jupyter for the last five years. Her first open teaching module using Jupyter was "CFD Python" (a.k.a. "The 12 steps to Navier-Stokes"), released in July 2013. In 2014, Barba developed and taught the first massive open online course (MOOC) at the George Washington University: "Practical Numerical Methods with Python." The course was written entirely as Jupyter notebooks, and it was self-hosted on a custom Open edX site (where it amassed more than 8000 users over 3 years). Since that time, she has been thinking about ways to integrate Jupyter with Open edX.

Open edX is the software platform used by the edX Consortium to serve thousands of online courses to millions of users around the world. —Read Prof. Barba's guest post in Class Central: What’s Open edX?

Jupyter is a set of open-source tools for interactive and exploratory computing. At the center of them is the Jupyter Notebook, a document format for writing narratives that interleave multi-media content with executable code, using any of a set of available languages (of which Python is the most popular).

The work presented at the conference is the brainchild of Prof. Lorena Barba, implemented by her tech partners at IBL Education. It consists of two Open edX extensions:

**Jupyter Notebook Viewer XBlock**—from any public Jupyter notebook (e.g., in a public repo on GitHub), pull content into a course learning sequence using only the URL, and optional*start*and*end*marks (any string from the first cell to include, and the first cell to exclude). This allows course authors to develop their course content as Jupyter notebooks, and to build learning sequences reusing that content, without duplication. It also has the added benefit that the development of the material can be hosted on a version-controlled repository. (Open edX, itself, doesn't provide version control of course content.) See IBL's post about the XBlock, and the code repository—the XBlock is open source under a BSD3 license.**Graded Jupyter Notebook XBlock**—create an assignment using the`nbgrader`

Jupyter extension, then insert a graded sub-section in Open edX that will deliver this assignment (as a download), auto-grade the student's uploaded solution, and record the student's score in the gradebook. The XBlock instantiates a Docker container with all the required dependencies, runs`nbgrader`

on the student-uploaded notebook, and displays immediate feedback to the student in the form of a score table. See IBL's post, and the code repository—the XBlock is open source under BSD3.

The two XBlocks are in use in Prof. Barba's newest online short course: "Get Data Off the Ground with Python."

- Barba, Lorena A.; Amigot, Miguel (2018): Jupyter-based courses in Open edX: Authoring and grading with notebooks. figshare. Presentation. https://doi.org/10.6084/m9.figshare.6553550.v1

Announcing the #Jupyter Viewer XBlock, #OpenEdx extension to dynamically display content from a notebook available on a public URL: https://t.co/yPP0gvn6My

— Lorena Barba (@LorenaABarba) April 25, 2018

We now announce the Graded #Jupyter Notebook Integration for #OpenEdx, in collaboration with @iblstudios: instructors can assign #nbgrader-instrumented notebooks in the #MOOC platform! https://t.co/1vz9NK5xHb https://t.co/rDywbvUPWb

— Lorena Barba (@LorenaABarba) May 15, 2018

Fantastic Open edX conference and talks about@GlobalKnowledge ‘s enterprise ecosystem from PoC to Pilot to MVP and@ProjectJupyter integrations

with the great @LorenaABarba , @tocatlian and @shellslocks #OpenedX2018 pic.twitter.com/EDZrmu6XJ1

— Miguel Amigot (@miguelamigot) June 1, 2018

This work is funded under NSF Award #1730170: CyberTraining: DSE—The Code Maker: Computational Thinking for Engineers with Interactive, Contextual Learning. Full proposal available online at https://doi.org/10.6084/m9.figshare.5662051.v1

]]>How I got started using Jupyter for teaching: I met Fernando Perez at a workshop, where he gave a talk about IPython notebooks, and immediately I knew I wanted to use this in my classes. I have used them in my classes ever since. First, in my Computational Fluid Dynamics (CFD Python) at Boston University. Then, in my new Aerodynamics class at the George Washington University: this class traditionally is taught purely on pen-and-paper, but I decided to change the approach and teach it computationally (AeroPython).

With my research students, we are using Jupyter everyday: for internal reports, for organizing ideas and results to prepare for publication, and constructing narratives before writing a paper. We have other software, of course, that runs outside notebooks, to produce simulations on our workstations with GPUs or the university cluster and recently on public clouds. But the results need to be post-processed, and we use Jupyter notebooks for that, looking to make that process reproducible. We want to eliminate GUI-based post-processing and instead do that programmatically, so it is reproducible.

In my JupyterCon keynote, I discussed how reproducibility is a process of relationship-building between the researchers, and though tools can help, it is up to the researchers to anticipate a conversation that you will have, virtually, with others who might want to build from your work, and make a commitment to do the work in a form that will enable the other researchers to comprehend it, inspect it, come to trust it, and build from it. We can have tools that facilitate reproducible research, but we cannot relinquish the responsibility as the humans in this process, to work reproducibly. You can’t give the tools and machines that responsibility.

I also have a big interest in open education, not only creating open educational resources, but building the communities, and sharing experiences, etc. I created a MOOC in 2014 in numerical methods for engineers (NumericalMOOC), and it was self-hosted on our Open edX site. The course is still live and people continue to follow it—more than 8,000 people enrolled in it. Open edX is a learning management system and a platform for delivering MOOCs. We write our materials on Jupyter and share them on GitHub. To integrate this effort with online course creation, we are building tools to convert the material from Jupyter to content in an Open edX course, and to use nbgrader within Open edX as an external grader for assignments written in Jupyter.

Some best-practice parameters for designing a course with these types of delivery methods. One of these is the idea of *modularization*: a course should be built like a lego construction of smaller learning units that are stackable. A course in a university might last a semester, but we don’t have to follow that as unit, but we can make a course built of four or five units that can be mixed-and-matched. Each module can be a set of Jupyter notebooks, the “lesson” unit, that should not be too long and can finish with a nice sense of accomplishment for the learner.

We led a BOF at JupyterCon with Robert Talbert focusing on teaching with Jupyter. Educators using Jupyter want to connect, share ideas, collect best practices, share stories of things that can go wrong and recipes for fixing those. Many concerns came up several times at the BOF, and we can share our solutions, but these will be changing. What doesn’t change is that educators need to connect and empower each other.

PhD student Natalia Clementi and Prof. Barba taught a 3-hour tutorial for high-school students for the *Caminos Al Futuro* program of the GW Cisneros Hispanic Leadership Institute. It was a hands-on tutorial titled "Data Science for a Better World," and it guided the students through the basics of using Python with data.

The students, who had never written code before, learned to use a Jupyter notebook to manipulate data in the form of arrays, visualize the data with line plots, and analyze it with linear regression. The context applications were the decreasing size of households in the US (leading to more energy consumption per capita), and the increasing earth temperature over time.

*Caminos al Futuro* is a Summer program for high-achieving juniors (rising seniors). The program aims to develop leadership and scholarship in the Latino community. Students are fully funded to attend.

]]>Exhausted but proud! We just taught with @ncclementi a 3-hour tutorial with #Jupyter, at #GWU Caminos al Futuro https://t.co/2FH0DdytmZ

— Lorena Barba (@LorenaABarba) July 18, 2017