--- interact_link: content/presentation.ipynb kernel_name: python3 kernel_path: content has_widgets: false title: |- Présentation pagenum: 0 prev_page: url: next_page: url: /Seance1/index.html suffix: .ipynb search: jupyter avec de et visualisation des la pour en un support algorithmique interactive contribuer sur code media png python github laby openscad jupyterlab ter collectif org objectifs y recherche c dautres donnes lexcution sujets com frontend javascript algorithme du lien programmation monalgo dans d au le pas janvier avril encadrant nicolas m thiry diapos interactives binder mybinder v git u psud frfnicolas thieryfter master filepath presentation ipynb explorer lcosystme widgets commencer dveloper outils lenseignement contexte documents interactifs mlant texte mathmatiques visualisations centerimg src jupyterpreview width center multisystme plus dune centaine utilis enseignement analyses banques br million notebooks bas protocoles web comment: "***PROGRAMMATICALLY GENERATED, DO NOT EDIT. SEE ORIGINAL FILES IN /content***" ---
Présentation

TER collectif: Algorithmique Interactive avec Jupyter

Janvier-Avril 2019

Encadrant: Nicolas M. Thiéry

Diapos interactives sur Binder

Objectifs:

  • explorer l'écosystème des widgets Jupyter et commencer à y contribuer.
  • déveloper des outils pour l'enseignement et la recherche

Contexte: Jupyter

  • Documents interactifs mêlant texte, mathématiques, code et visualisations:
  • Multisystème: Python, C++, et plus d'une centaine d'autres
  • Utilisé en enseignement, recherche, analyses des données, banques, ...
    1 million de notebooks sur GitHub
  • Basé sur protocoles web standards
  • Tout un écosystème: hébergement et partage, visualisation, ...

Algorithmique interactive: un exemple basique

import random
import copy
from bqplot import Bars, LinearScale, Figure
from ipywidgets import interact, IntSlider, VBox
def melange(l, duration):
    for t in range(duration):
        i = random.randint(0, len(l)-1)
        j = random.randint(0, len(l)-1)
        l[i], l[j] = l[j], l[i]
l = list(range(10)); l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
melange(l, 10); l
[7, 8, 4, 3, 9, 0, 1, 6, 2, 5]

Mieux comprendre l'algorithme? Traçons l'exécution:

def melange(l, duration):
    for t in range(duration):
        i = random.randint(0, len(l)-1)
        j = random.randint(0, len(l)-1)
        l[i], l[j] = l[j], l[i]
        print(l)
melange(l, 10)
[7, 8, 4, 5, 9, 0, 1, 6, 2, 3]
[7, 8, 6, 5, 9, 0, 1, 4, 2, 3]
[7, 8, 6, 5, 9, 3, 1, 4, 2, 0]
[7, 8, 6, 5, 9, 3, 1, 4, 2, 0]
[7, 8, 6, 5, 4, 3, 1, 9, 2, 0]
[7, 8, 6, 5, 4, 3, 1, 9, 2, 0]
[7, 6, 8, 5, 4, 3, 1, 9, 2, 0]
[7, 6, 8, 5, 9, 3, 1, 4, 2, 0]
[7, 4, 8, 5, 9, 3, 1, 6, 2, 0]
[7, 5, 8, 4, 9, 3, 1, 6, 2, 0]

Visualisation interactive de l'exécution:

def melange(l, duration):
    history = [copy.copy(l)]
    for t in range(duration):
        i = random.randint(0, len(l)-1)
        j = random.randint(0, len(l)-1)
        l[i], l[j] = l[j], l[i]
        history.append(copy.copy(l))
    return history
l = list(range(10))
history = melange(l, 100)
l = history[0]
bars = Bars(x=range(len(l)), y = l, scales={'x': LinearScale(), 'y': LinearScale()})
w = Figure(marks=[bars])
w
slider = IntSlider(0, 0, 99)
slider
def update(change):
    w.marks[0].y = history[change["new"]]
slider.observe(update, names='value')
VBox([slider, w])

Sujets

Contribuer à laby-jupyter

Pour la fête de la science et 300 étudiants chaque année!

Objectifs:

  1. Améliorations diverses
  2. Support Python
  3. Support multilangage avec frontend JavaScript

Choisir un algorithme et visualiser son évolution

Exemples:

  • Algos de tris, ...
  • Dijkstra, Voyageur du commerce
    En lien avec: Graphes, Algorithmique Avancée
  • Algorithmes en lien avec Programmation Distribuée

Widget générique pour controler la visualisation du code

Objectif: rendre trivial l'instrumentation de code

    visualisation = ...

    def mon_algo(...):
        for ...
            ...
            visualisation.value = y
            ...

    mon_algo(...)
  1. Support pour Python
  2. Support pour C++
  3. Support mutilangage avec frontend JavaScript

Piloter l'évolution d'un algorithme d'optimisation avec sa manette xbox

from IPython.display import YouTubeVideo
YouTubeVideo("p7Hr54VhOp0", t=1009)

Géométrie constructive interative dans Jupyter

  • Programmation d'objet 3D
  • Comme avec openscad, mais avec un vrai langage de prog
  • Impression 3D au FabLab à la clé!

Plein d'autres sujets; à vous d'être créatifs!

  • Contribuer des extensions jupyter
  • Contribuer la fonctionalité XXX au projet YYY (xcanvas, xeus-cling, ...?)
  • Contrôle interactif de robot depuis Jupyter
  • visualisation de données dans le débogueur pas à pas Jupyter (je rêve un peu :-))

TER collectif: Algorithmique Interactive avec Jupyter

  • Des technos fun, en pleine émergence, qui recrutent
  • De vrais utilisateurs
  • Des intervenants extérieurs