---
jupytext:
  notebook_metadata_filter: rise
  text_representation:
    extension: .md
    format_name: myst
    format_version: 0.13
    jupytext_version: 1.16.2
kernelspec:
  display_name: Python 3 (ipykernel)
  language: python
  name: python3
rise:
  auto_select: first
  autolaunch: false
  centered: false
  enable_chalkboard: true
  height: 100%
  margin: 0
  maxScale: 1
  minScale: 1
  scroll: true
  slideNumber: true
  start_slideshow_at: selected
  transition: none
  width: 90%
---

+++ {"slideshow": {"slide_type": "slide"}}

# Candyce : carnets numériques et Jupyter au service de l'enseignement

+++
:::{image} media/jupyter.png
:width: 50%
:align: right
:style: opacity:0.8;filter:alpha(opacity=100);
:::

<!--Diapos et tutoriel interactif en ligne:  
https://tutoriels-jupyter.pages.in2p3.fr/ -->

+++

[Nicolas M. Thiéry](https://Nicolas.Thiery.name/),
Professeur,
Laboratoire Interdisciplinaire des Sciences du Numérique ([LISN](https://lisn.upsaclay.fr/)), 
Université Paris-Saclay

+++

03 juin 2024, Orsay

+++ {"slideshow": {"slide_type": "skip"}}

## Résumé

L'usage des carnets numériques (notebook) et de Jupyter connaît un
essor rapide comme outil pour l'apprentissage de la programmation, du
calcul, du traitement des données, aussi bien dans l'enseignement
supérieur qu'au lycée (avec notamment Capytale).

Le programme Candyce (porté par Inria et l'Université Paris-Saclay)
vise à accompagner l'adoption de Jupyter dans l'enseignement supérieur
et le scolaire.

Ce diaporama présente rapidement Jupyter et Candyce

+++ {"slideshow": {"slide_type": "slide"}}

## Au programme

1. Carnets numériques et Jupyter
2. Exemple: utilisation et actions à Paris-Saclay
3. Candyce

+++ {"slideshow": {"slide_type": "slide"}}

## Carnets numériques (notebook)?

+++ {"slideshow": {"slide_type": "fragment"}}

Document riche interactif entrelaçant **Narration**, **Calcul**, **Visualisation**, **Interaction**, **Programmation**, voire **Inférence**

+++ {"slideshow": {"slide_type": "fragment"}}

:::{admonition} Exemple
:class: hint
%:class: dropdown

Ces diapos sont un carnet numérique!
:::

+++ {"slideshow": {"slide_type": "fragment"}}

#### Concrètement?

+++ {"slideshow": {"slide_type": "fragment"}}

Jusqu'ici, nous avons vu de la **narration**: raconter une histoire

+++ {"slideshow": {"slide_type": "fragment"}}

Maintenant, voici un petit **calcul** mathématique :

```{code-cell} ipython3
from sympy import *
x = symbols('x')

integrate( x/(x**2+2*x+1), x)
```

+++ {"slideshow": {"slide_type": "slide"}}

Un peu de **visualisation** de données :

```{code-cell} ipython3
from ipyleaflet import Map, Marker
# center = (48.70180933810075, 362.16683685639214)
# center = (48.842417580826314, 362.3446074074784) Paris
center = [48.7063, 362.1798]
m = Map(center=center, zoom=15)   
marker = Marker(location=center, draggable=True)
m.add_layer(marker);
m
```

+++ {"slideshow": {"slide_type": "slide"}}

Un peu d'**interaction** :
%    fig = plot(sin(2*np.pi*f*x),
%               xlim=(0,1), ylim=(-5,5), xlabel="temps (s)", ylabel="amplitude")

```{code-cell} ipython3
---
slideshow:
  slide_type: skip
---
from ipywidgets import Button, IntSlider, HBox, Label 
slider = IntSlider(value=3, vmin=0, vmax=10)
button = Button(description="Click me!")
label = Label()
def on_click(event):
    label.value = str(slider.value)
button.on_click(on_click)
HBox([slider, button, label])
```

+++ {"slideshow": {"slide_type": "skip"}, "editable": true}

%:::{todo}
%
%Add an example illustrating interaction and computation:
%hand drawing in an ipycanvas, automatic text recognition, and
%using it (e.g. open the map at the given spot?)
%
% Add an interact
%
%:::

```{code-cell} ipython3
---
slideshow:
  slide_type: ''
---
from matplotlib.figure import Figure
import numpy as np
from ipywidgets import interact

@interact
def f(A=(0, 5.), f=(0, 25.)):
    x = np.arange(0,1,0.001)
    y = A*np.sin(2 * np.pi * f * x)
    fig = Figure()
    subplot = fig.add_subplot()
    subplot.plot(x, y)
    subplot.set_xlabel('temps (s)'); subplot.set_ylabel('amplitude'); subplot.set_ylim([-6, 6])
    return fig
```

+++ {"slideshow": {"slide_type": "slide"}}

Un peu de **programmation**, avec visualisation interactive :

```{code-cell} ipython3
from laby.global_fr import *
Laby("1b")
```

```{code-cell} ipython3
debut()
avance()
droite()
avance()
prend()
# Compléter le programme!
```

+++ {"slideshow": {"slide_type": "slide"}}

#### Exemple : Étude d'un algorithme de parcours de graphes

##### Narration

:::{prf:definition} Graphe

Soit $G$ un graphe.

- un *chemin* est une suite de sommets $(v_0, v_1, v_2, ...)$ tel qu'il existe une arête entre chaque paire de sommets $v_i$ et $v_{i+1}$
- la *distance* entre deux sommets `u` et `v` est la longueur du plus court chemin entre `u` et `v` (ou la somme des poids des arêtes).
- On suppose ici que $G$ est non orienté. La *composante connexe* d'un sommet $u$ de $G$ est l'ensemble des sommets atteignables depuis $u$ en suivant un chemin dans $G$.

:::

+++ {"slideshow": {"slide_type": "slide"}}

##### Programmation : l'algorithme

```{code-cell} ipython3
%run -i graph_networkx
```

```{code-cell} ipython3
def parcours_visualisation(G, u):
    """
    INPUT:
    - 'G' - un graphe
    - 'u' - un sommet du graphe
    
    OUTPUT: la liste des sommets `v` de `G`
            tels qu'il existe un chemin de `u` à `v`
    """
    marked = {u} # L'ensemble des sommets déjà rencontrés
    todo   = {u} # L'ensemble des sommets déjà rencontrés, mais pas encore traités
    
    player.player.reset(copy.deepcopy(locals()))
    
    while todo:
        # Invariants:
        # - Si `v` est dans `marked`, alors il y a un chemin de `u` à `v`
        # - Si `v` est dans `marked` et pas dans `todo`
        #   alors tous les voisins de `v` sont dans dans `marked`
        v = todo.pop()
        # Observation des variables locales
        player.set_value(copy.deepcopy(locals()))
        for w in G.neighbors(v):
            
            if w not in marked:
                marked.add(w)
                todo.add(w)
                # Observation des variables locales
                player.set_value(copy.deepcopy(locals()))
        v = None
        # Observation des variables locales
        player.set_value(copy.deepcopy(locals()))
    return marked
```

+++ {"slideshow": {"slide_type": "slide"}}

##### Calcul

```{code-cell} ipython3
G = examples.parcours_directed()
parcours_visualisation(G, "A")
```

+++ {"nbgrader": {"grade": false, "grade_id": "cell-59f5a82baa8c62f1", "locked": true, "schema_version": 3, "solution": false, "task": false}, "slideshow": {"slide_type": "fragment"}}

##### Visualisation

```{code-cell} ipython3
player
```

+++ {"slideshow": {"slide_type": "slide"}}

### Quoi de neuf, vraiment, avec Jupyter? <https://jupyter.org>

+++ {"slideshow": {"slide_type": "fragment"}}

:::{figure} media/jupyter-community.jpg
:width: 50%
:style: opacity:0.8;filter:alpha(opacity=100);
:::

+++ {"slideshow": {"slide_type": "fragment"}}

**Une communauté internationale transverse**: académie, industrie, société civile

+++ {"slideshow": {"slide_type": "fragment"}}

qui développe des **standards ouverts**, des **logiciels libres** et des **services web**

+++ {"slideshow": {"slide_type": "fragment"}}

pour **le calcul avec l'humain dans la boucle**

+++ {"slideshow": {"slide_type": "slide"}}

#### Innovations

:::{admonition} Technologies web modernes
:class: hint
$\Longrightarrow$ En tout lieu, tout temps, sur tout dispositif
:::

+++ {"slideshow": {"slide_type": "fragment"}}

:::{admonition} Libre, ouvert, interopérable
:class: hint
Julia, Python, R, C++, et des dizaines d'autres langages et systèmes  
$\Longrightarrow$ **Une porte ouverte sur l'univers du calcul libre**
:::

+++ {"slideshow": {"slide_type": "fragment"}}

:::{admonition} Très modulaire
:class: hint
$\Longrightarrow$ **Flexibilité pour une large gamme de cas d'usages** (mais aussi complexité)
:::

+++ {"slideshow": {"slide_type": "fragment"}}

#### Massivement adopté

- pour l'enseignement, la recherche (sciences dures -> SHS), l'ingénierie, la science des données  
- millions d'utilisateurs et de ressources
- [Amazon SageMaker](https://aws.amazon.com/fr/sagemaker/), [Google Colaboratory](https://colab.research.google.com/), Microsoft Azure Notebooks, Bloomberg BQuant, Intel Trusted Analytics Platform, IBM Watson Studio, [Saturn Cloud](https://saturncloud.io/), noteable.io

+++ {"slideshow": {"slide_type": "slide"}}

#### Pouvoir transformant sur la pratique de la recherche, de la science

- Un support unique pour **penser** et **raconter**, avec du **code** et des **données**  
  exploration, transmission, reproduction, réutilisation, dissémination  
  $\Longrightarrow$ Science Ouverte

+++ {"slideshow": {"slide_type": "fragment"}}

- Granger, Brian E., and Fernando Pérez. "Jupyter: Thinking and storytelling with code and data." Computing in Science & Engineering 23.2 (2021): 7-14.
- Perkel, Jeffrey M. "Why Jupyter is data scientists' computational notebook of choice." Nature 563.7732 (2018): 145-147.

+++ {"slideshow": {"slide_type": "fragment"}}

:::{admonition} Belles histoires
:class: hint
- ACM Software System Award'17
- [The Virtual Research Environment](https://vre-hub.github.io/) by CERN and EOSC: basé sur Jupyter
- Déploiement national Calysto au Canada
- Initiative [Notebook Now](https://data.agu.org/notebooks-now/) de l'American Geophysical Union: [AGU 2023](https://agu.curve.space/)
- [GT notebook](https://gt-notebook.gitpages.huma-num.fr/site_quarto/) de l'infrastructure [Huma-Num](https://fr.wikipedia.org/wiki/Huma-Num) des humanités numériques
:::

+++ {"slideshow": {"slide_type": "slide"}}

#### Pouvoir transformant sur la dissémination de la connaissance

+++ {"slideshow": {"slide_type": "fragment"}}

:::{prf:example} Reprise de contrôle de leur données par des conducteurs Uber

%

:::

+++ {"slideshow": {"slide_type": "fragment"}}

::::{admonition} Un terrain fertile
:class: hint

Par leur souplesse, les carnets facilitent

:::{math}
\text{Dissémination} {\Longrightarrow \atop \Longleftarrow} \text{Exploration and montée en compétence}
:::

::::

+++ {"slideshow": {"slide_type": "fragment"}}

:::{admonition} Réduire les barrières entre
:class: hint
- experts et novices
- développeurs et utilisateurs
- enseignant et étudiants
- recherche, enseignement supérieur et scolaire
- académie et industrie

via les **communautées**, les **outils partagés**, et les **communs numériques**
:::

+++ {"slideshow": {"slide_type": "slide"}}

#### Pouvoir transformant sur l'enseignement

+++ {"slideshow": {"slide_type": "slide"}}

:::{admonition} **Autonomie** et **personnalisation**
:class: hint
grâce à la structure narrative, à la micro-scénarisation, aux retours immédiats  
$\Longrightarrow$ **massification**, gestion **hétérogénéité**
:::

+++ {"slideshow": {"slide_type": "fragment"}}

:::{admonition} **Engagement**  
:class: hint
  grâce à l'interaction et la liberté d'exploration
:::

+++ {"slideshow": {"slide_type": "fragment"}}

:::{admonition} Flexibilité
:class: hint
n'importe où, n'importe quand, sur n'importe quel terminal  
$\Longrightarrow$ **hybridation**, publics empêchés
:::

+++ {"slideshow": {"slide_type": "slide"}}

#### Pouvoir transformant sur l'enseignement par le numérique scientifique?

+++

2006: TED talk [Les meilleures stastistiques que vous ayez jamais vues](https://www.youtube.com/watch?v=jbkSRLYSojo) de Hans Rosling

$\Longrightarrow$ le pouvoir de la visualisation de données pour transmettre les idées et les faits

+++ {"slideshow": {"slide_type": "fragment"}}

Maintenant au bout des doigs des enseignants et étudiants pour exploration interactive :

```{code-cell} ipython3
from wealth_of_nation import application
application
```

(tiré de la documentation de bqplot)

+++ {"slideshow": {"slide_type": "fragment"}}

#### Ça ne reste qu'un outil!

Explorer, évaluer et partager les bonnes pratiques

+++ {"slideshow": {"slide_type": "slide"}}

## Adoption des carnets numériques et Jupyter pour l'enseignement

- [Data 8](https://data8.org/): science des données pour **tous** les étudiants à UC Berkeley
- **500k élèves des lycées** utilisant [Capytale](https://capytale2.ac-paris.fr/)
- Livre [teaching and learning with Jupyter](https://jupyter4edu.github.io/jupyter-edu-book/), Barba et al.

+++ {"slideshow": {"slide_type": "slide"}}

### Exemple: utilisation en enseignement à Paris-Saclay

- En Licence, Master, Doctorat, recherche, ...  
    - 600/1000 étudiants de L1 de la Faculté des Sciences d'Orsay
    - 5000 utilisateurs
- En Physique, Math, Info, Géophysique, Agronomie, Chimie, Médecine, STAPS, Droit, ...
- Pour:
    - L'introduction à la programmation  
	  Exemple: [Introduction à la Programmation Impérative (en
      C++)](https://nicolas.thiery.name/Enseignement/Info111/) L1 Math-Info
    - Le calcul  
      Exemple: [Méthodes Numériques](https://methnum.gitlab.dsi.universite-paris-saclay.fr/)
      en L1-L3 de physique
    - La science des données, l'IA  
	  Exemple: [Initiation à la Science des Données](https://nicolas.thiery.name/Enseignement/IntroScienceDonnees/)
      L1 Math-Info
    - ParcourSup!
- Avec **Python**, C++, SageMath, R, shell, ...
- Depuis: salle TP, services Jupyter@Paris-Saclay, mydocker (Centrale-Supélec), CoCalc

+++ {"slideshow": {"slide_type": "slide"}}

### Exemple: actions à Paris-Saclay

:::{admonition} Coordination projet Européen H2020 d'e-Infrastructure de recherche **OpenDreamKit** 2015-2019
:class: dropdown

- environnements virtuels de calcul pour les mathématiques et au delà,
- basé sur Jupyter  
- prix **Étoiles de l'Europe 2020** du CNRS, catégorie Science Ouverte

:::

:::{admonition} **Déploiement** et montée en gamme depuis 2017 du service [JupyterHub@Paris-Saclay](https://jupyterhub.ijclab.in2p3.fr/)
:class: dropdown

- 5000 utilisateurs inscrits (1800 hors Paris-Saclay); ~100 utilisateurs quotidiens
- Soutenu par le mésocentre [DataCenter@UPSud](https://www.informatique-scientifique.u-psud.fr/)
- Convergence en cours avec myDocker@CentraleSupélec

:::

:::{admonition} Animation d'un [groupe d'utilisateurs](https://jupyter.gitlab.dsi.universite-paris-saclay.fr/)
:class: dropdown

- [Espace eCampus «Enseigner avec Jupyter»](https://ecampus.paris-saclay.fr/course/view.php?id=99726#section-0)

:::

:::{admonition} Soutien institutionnel à l'**innovation pédagogique**
:class: dropdown

- Exploration, validation pédagogique et déploiement de solutions technologiques et de bonnes pratiques pédagogiques
- Soutenue par des **Congés pour Innovation Pédagogique**: 2020-2021,2021-2022,2023-2024?
- Projet CoSaclayCalc AAP Pédagogie École Universitaire

:::

:::{admonition} **Développement collaboratif** de **communs numériques**
:class: dropdown

- Production de ressources pédagogiques
- Contributions à l'écosystème Jupyter: adoption précoce, bonnes pratiques, rapports de bugs, code, ...
- [Travo](https://gitlab.com/travo-cr/travo/) solution
  innovante de gestion des devoirs informatique basée sur les
  forges logicielles, comme [GitLab@Paris-Saclay](https://gitlab.dsi.universite-paris-saclay.fr/).
- Soutenu par le **CMA SaclIA** (2022-):
    - financement interventions d'un ingénieur pédagogique
    - recrutement d'un ingénieur logiciel

:::

+++ {"slideshow": {"slide_type": "fragment"}}

**Des dynamiques similaires dans de multiples universités en France et dans le monde!**

+++ {"slideshow": {"slide_type": "slide"}}

## Synthèse

+++ {"slideshow": {"slide_type": "fragment"}}

:::{admonition} Jupyter
:class: hint
- **Une communauté internationale transverse**: académie, industrie, société civile  
  qui développe des **standards ouverts**, des **logiciels libres** et des **services web**  
  pour **le calcul avec l'humain dans la boucle**
- **Un écosystème riche d'outils extensibles et composables**  
  Le carnet en est juste une application
- Une adoption massive qui **transforme** la recherche, l'enseignement, la science
:::

+++ {"slideshow": {"slide_type": "fragment"}}

:::{admonition} La France à la pointe
:class: hint
- JupyterCon 2023, PyData 2024 à Paris!
- Pépite **QuantStack :** PME, core devs Jupyter, logiciel scientifique libre
- **Capytale (porté par Académie de Paris):** 500k utilisateurs dans les lycées (100k hebdomadaires)
- Actions locales: **CNAM**, **Grenoble Alpes**, **Lyon 1**, **Paris-Cité**, **Paris-Saclay**, **Rennes**, **Rouen**, ...
:::

+++ {"slideshow": {"slide_type": "slide"}}

## Potentiel: des millions d'utilisateurs, dans le scolaire et le supérieur

+++ {"slideshow": {"slide_type": "fragment"}}

### Comment pleinement réaliser ce potentiel?

+++ {"slideshow": {"slide_type": "fragment"}}

:::{admonition} Constat à Paris-Saclay et ailleurs

- Gros impact des actions locales
- qui ne tiennent que par le dévouement de quelques uns en marge de
  leurs missions
- Il y aurait tant à faire, rien que sur notre déploiement local:
  - scalabilité, qualité de service
  - accessibilité
  - diversité de logiciels
  - intégration d'agents conversationnels
- Alors que comparativement Paris-Saclay a des moyens!
:::

+++ {"slideshow": {"slide_type": "fragment"}}

:::{attention} Pas la bonne échelle!
.
:::

+++ {"slideshow": {"slide_type": "slide"}}

## Candyce: promouvoir Jupyter et les carnets dans l'enseignement

<https://candyce.org/>

+++ {"slideshow": {"slide_type": "fragment"}}

Proposition de soutien institutionnel national ambitieux à un mouvement de fond

+++ {"slideshow": {"slide_type": "fragment"}}

### Candyce I: WP 1 du PEPR d'accélération «Enseignement et Numérique», 12M€, 2023-2027

(finalement non financé)

+++ {"slideshow": {"slide_type": "fragment"}}

#### Actions

1. **Faire monter en gamme Jupyter pour les besoins de l'enseignement** (4M€)  
   accessibilité, facilité d'utilisation, besoins métiers
2. **Déployer une infrastructure nationale souveraine** (1.5M€)  
   pour l'enseigment scolaire et supérieur  
   et la recherche
3. **Accompagner dans le scolaire** (1.5M€)
4. **Accompagner dans le supérieur** (1.5M€)
5. **Fortifier un écosystème** public / industriel / société civile
6. **Embarquer et nourrir la recherche** (1M€)

+++ {"slideshow": {"slide_type": "slide"}}

#### Embarquer et nourrir la recherche?

- Un objet de recherche : notamment évaluer et informer :
    - la pertinence et les usages pédagogiques de Jupyter
	- la conciliation éthique, sécurité et valorisation des données
      pour tous les acteurs (apprenants, enseignants, chercheurs)
	- l'éco-responsabilité de l'infrastructure

+++ {"slideshow": {"slide_type": "fragment"}}

- Un observatoire d'usages pédagogiques :
    - traces d'apprentissage de millions d'utilisateurs!
	- financements de projets de recherche:
	    - par AAP Candyce (qq postdocs, stages, ...)
	    - par AAP du WP3 du PEPR «Enseignement et Numérique»
    - en lien avec la plateforme des données de l'éducation  
	  WP2 du PEPR «Enseignement et Numérique»

+++ {"slideshow": {"slide_type": "fragment"}}

- Un outil de recherche

+++ {"slideshow": {"slide_type": "slide"}}

#### Une fine équipe

- **Inria**: maîtrise d'ouvrage
- **Université Paris-Saclay**: maîtrise d'œuvre, coordination
  accompagnement dans le supérieur
- **Direction du Numérique pour l'Enseignement** (DNE), **Académie de Paris**:
  accompagnement dans le scolaire
- **Université ~~de Lorraine~~ Sciences Sorbonne Université (?)**:
  coordination recherche
- **Prestataire sur appel d'offre**: développement logiciel  
  Au moins un excellent candidat
- **France Université Numérique**: déploiement sur cloud public souverain
- **École Polytechnique**: accompagnement sup et sco
- **Établissements associés**: Grenoble, Rennes, Polynésie, Paris *, CNAM, Arts et Métiers, Erlangen, Bobo Dioulasso?, ...
- **et la communauté!**

+++ {"slideshow": {"slide_type": "slide"}}

## Conclusion

+++ {"slideshow": {"slide_type": "fragment"}}

Nous avons une **communauté**, un **écosystème**, des **partenaires mobilisables**, un **plan modulaire**, des **valeurs** fortes,  
et un **environnement national unique** pour **mutualiser et accélerer les actions locales**,

+++ {"slideshow": {"slide_type": "fragment"}}

pour mettre Jupyter, les carnets numériques et le numérique scientifique libre   
au bout des doigts de **millions d'apprenants et enseignants**,

par des outils, des services et des contenus,  
par un usage raisonné, éthique et souverain des **traces d'apprentissage**,

+++ {"slideshow": {"slide_type": "fragment"}}

pour **transformer demain l'enseignement du numérique scientifique**,  
pour **transformer après-demain l'enseignement par le numérique scientifique**?

+++ {"slideshow": {"slide_type": "fragment"}}

en France et au delà.

+++ {"slideshow": {"slide_type": "fragment"}}

Nous sommes prêts (depuis trois ans).

+++ {"slideshow": {"slide_type": "fragment"}}

**<center>Allons-y!</center>**

+++ {"slideshow": {"slide_type": "fragment"}}

## Candyce II: stratégie d'accélération

:::{note}

Par nature, le programme Candyce originel est composé d'une collection
modulaire d'actions indépendantes et complémentaires pour accélérer un
mouvement de fond. De ce fait, tout financement partiel sera utile.
Nous pourrons, selon le volume et les finalités, mettre en cohérence
un sous-ensemble d'actions et mobiliser les partenaires adéquats.  La
contrainte principale est de pouvoir, au moins pour certaines actions,
financer des partenaires privés.

:::


:::{admonition} En cours: travaux préparatoires
- Infrastructure locale avec potentialité de passage à l'échelle
- Outils métiers
Financements: locaux (SaclAI-School, Idex, ...)
:::

:::{admonition} Court terme: premières actions nationales
Exemples:
- Première infra nationale à horizon +1 an
- Besoins métiers urgents
- Production de ressources pédagogiques
- Recensement et animation de communauté
Besoin: quelques 100k€  
Quel vecteur(s) de financement?

:::

:::{admonition} Moyen terme

- Déploiement pérenne pour le sup et la recherche
- Besoins métiers
- Accompagnement
Besoin: quelques M€  
Quel vecteur(s) de financement?

:::
