nbgrader auf z2jh mit Moodle-Integration

Problemstellung

nbgrader ist ein beliebtes Werkzeug für die Erstellung von bearbeitbaren und automatisch bewertbaren Jupyter Notebooks. Es wird von vielen Universitäten und Hochschulen eingesetzt, um die Abgabe von Aufgaben zu vereinfachen und die Bewertung zu automatisieren (siehe auch das zugehörige GitHub Repository). Leider ist nbgrader nicht für den Einsatz in der Cloud (in unserem Fall ein auf Kubernetes laufender Jupyterhub) und auch nicht für den direkten Einsatz in oder mit einer Moodle Platform wie unserem elearning-Portal geeignet.

Ziele

In dieser Arbeit sollen nbgrader und daran anknüpfende Komponenten angepasst werden, sodass:

  1. Studenten, Kurse, Tutoren und Aufgaben in Form von Notebooks, die auf Moodle hinterlegt sind, nach nbgrader bzw. unserem Jupyterhub synchronisiert werden.
  2. Studenten, welche sich über Moodle auf einem Jupyterhub anmelden, reibungslos zu den Aufgaben geleiten werden und die Aufgaben über die JupyterLab- bzw. Notebook-GUI direkt abgeben können.
  3. Von nbgrader bewertete Aufgaben nach Moodle zurückgespielt werden, um dort Punkte zu hinterlegen.

Arbeitspakete und Roadmap

In einem ersten Schritt gilt es, sich mit den Technologien und Softwarekomponenten vertraut zu machen. Hierzu zählt: Grundlegens Verständnis über die Architektur von Jupyterhub, ngbrader und Moodle (vorzugsweise die LTI 1.3 API)

Letztendlich soll ein vertikaler Prototyp entstehen, um den Prozess darzustellen, der in der Einleitung skizziert wurde. Grobe Planung des Projektes:

  • 1. Recherchieren Sie zu den folgenden Themen:
    • 1.1 Welche Informationen können über ein externes Tool in einem Moodle-Kurs via LTI abgefragt werden?
    • 1.2 Wie können diese Informationen (sicher und Seiteneffekt frei) in eine nbgrader-Installation übertragen werden.
  • 2. Testen Sie die Moodle API mit Postman oder ähnlichem
  • 3. Bauen Sie Ihre Erkenntnisse in den Authentifizierungsprozess unseres Jupyterhubs ein. (Hierfür haben wir eine dev-Instanz)
  • 4. Erstellen Sie ein Konzept für die Synchronisation mit nbgrader. Hier einige Requirements:
    • 4.1 Ein Student darf nach dem Login über Moodle nur seine eigenen Aufgaben sehen und natürlich auch keinen Zugang zu den Grading-Funktion von nbgrader erhalten.
    • 4.2 Ein Dozent der in Moodle hinterlegt ist sollte die Aufgaben auf möglichst einfache Weise bewerten können. Die wahrscheinlich beste Variante ist hierfür ein eigenes Image zur verfügung zu stellen, welches für Studenten nicht sichtbar ist.
    • 4.3 Bisher wird für die Synchronisation der Aufgaben aus Moodle ein nbgitpuller verwendet, dies bedingt die Nutzung von Github. Dies ist erstmal kein Problem, es kann jedoch sein, dass hierfür auch die Dateiverwaltung von Moodle geeignet sein könnte. Recherchieren Sie, ob dies möglich oder sinnvoll wäre.

An dieser Stelle können zusätzliche Anforderungen entstehen, da nbgrader womöglich an einigen Stellen angepasst werden muss. Zum Beispiel ist es denkbar, dass die dateibasierte Datenspeicherung von nbgrader gegen eine Datenbank ausgetauscht werden muss. Ein ähnliches Projekt existiert bereits unter dem Namen ngshare, verwendet allerdings trotzdem Dateibäume und SQlite. Auch ist die Integration mit dem nbgrader-Frontend wie Formgrader nicht ausgereift.

  • 5. Prototypische Umsetzung des Konzeptes und Deployment auf unserer dev-Instanz
  • 6. Erweiterung/Anpassung der GUI-Elemente von nbgrader. Speziell für unseren Use-Case sollten sowohl Studenten als auch Dozenten so wenig Zeit auf einer Kommandozeile verbringen wie möglich.

Natürlich stehen Sie bei dieser Arbeit nicht alleine im Wald, sondern erhalten stets Unterstützung, speziell wenn es um die Integration der einzelnen Komponenten oder das Deployment geht.

Alternative ist auch denkbar, einzelne Positionen als horizontale Prototypen zu erstellen. Hierzu eignen sich insbesondere Punkt 6 sowie ausgewählte Komponenten unter Punkt 5, wenn diese sich gut trennen lassen.

Was sollten Sie mitbrigen?

  • Keine Angst vor komplexen Softwaresystemen
  • Hohe Motivation sich in die relativ umfangreiche Archtiekltur einzuarbeiten
  • Gute Kenntisse in Python
  • Kenntnisse von Docker oder Kubernetes sind von Vorteil aber nicht notwendig
  • Gegebenfalls sehr gute Datenbankkenntnisse

Was bekommen Sie von dieser Arbeit?

  • Einblicke in den Livebetrieb verteilter Softwaresysteme
  • Erfahrung über die Integration und Herstellung von Interoperabilität verschiedener Services
  • Das System, das Sie (weiter-)entwickeln wird an unserer Hochschule eingesetzt und bereichert unseren Lehrbetrieb langfristig

Organisatorisches

Es ist möglich, Teile dieser Arbeit als eigene Prototypen umzusetzen. Je nach Umfang gerne auch als Team.

Ihr(e) Ansprechpartner:

Christian Gawron
gawron.christian@fh-swf.de

Max Kuhmichel
kuhmichel.max@fh-swf.de