3 min read

GdT-Pyr 23 - Genie et Pluto - Applis web et notebooks interactifs avec Julia

Séance 23 du groupe de travail PyR sur le développement d’applications web et de notebooks intéractifs en Julia:

  • notebook interactifs: Pluto.jl
  • applis web: Genie.jl

Les exemples sont visibles dans les repo suivants:

Genie

Genie propose plusieurs manière de construire une ui (user interface cad le visuel du site web). La partie server (cad le code Julia) est à peu près la même.

La démo “low-code” n’est peut être pas complètement à jour (le framework à beaucoup évolué entre le début de notre investigation et la fin).

Version “no-code” editor aka Genie Builder

Cette version no code est complètement intégrée à VSCode, ou en ligne avec GenieCloud qui propose les mêmes fonctions sur un serveur avec l’énorme avantage de pouvoir déployer l’appli en un click!

Ici un example.

Installation

Dans VSCode on installe l’extansion Genie Builder.

Création d’une app

Dans l’exploreur de fichier de nouveaux onglets sont apparus: Genie server et Genie App.

Faites Start Server, puis le + pour créer une app.

C’est tout…

Il est également possible de faire des “live preview”.

UI no code app.jl.html

On peut ensuite modifier le template de base, ajouter des éléments du no code editor, utiliser le Genie UI assistant (= GPT4).

server app.jl

On écrit son code.

Version “low-code” editor

La version low code ressemble un peu plus à la syntaxe R-Shiny.

Installation de Genie (ou tout autre package julia)

Pour installer un package dans Julia:

  1. Ouvrir Julia dans une console puis taper:

using Pkg

  1. Installer le package

Pkg.add("Genie")

C’est fait.

Installation d’autres packages utiles

Toujours dans la console julia:

Pkg.add("Stipple")
Pkg.add("StippleUI")
Pkg.add("StipplePlotly")
Pkg.add("DataFramesMeta")
Pkg.add("CSV")
Pkg.add("StatsPlots") # attention, conflit avec StipplePlotly, choisir entre les 2

https://juliadatascience.io/

Test de Genie: applis test1 et test2

2 fichiers .jl à executer tel quel dans la console pour tester le rendu. J’ai juste modifié la fin de l’adresse du serveur local car celle de base 8000 ne fonctionnait pas, je ne sais pas pourquoi.

up(8001; async = false) 

l’appli sera à l’adresse suivante: http://127.0.0.1:8001.

Utilisation de Genie: appli mouton_genie.jl

L’appli mouton_genie permet de:

  • choisir entre 2 datasets WOW à analyser
  • choisir un animal dans le dataset sélectionné
  • représenter l’évolution du poids de l’anaimal sélectionné
  • donner le tableau des valeurs brutes de l’animal sélectionné

L’appli mouton_genie contient les fichiers suivants:

mouton_genie
|--> data/ (contient les fichiers CSV sources)
|--> mouton_genie.jl (contient la logique de l'appli - la partie Server de Shiny)
|--> ui.jl (contient la partie UI de l'appli - idem à Shiny)

Dans Genie, pour définir une variable qui pourra être utilisée dans la logique de l’appli, on utilise @out:

@out title = "Un Titre trop cool!"

Execution d’une appli Genie

Pour executer une appli Genie, 2 possibilités:

1/ Dans une console Julia:

include("monApp.jl")

1/ Dans une console bash:

julia monApp.jl

Pluto notebook

Dans Pluto, les notebooks sont réactifs, cad ce qu’on voit dans le notebook décrit complètement l’état du notebook. C’est un fichier Julia donc facilement manipulable. On peut rajouter plein de trucs interactifs. C’est reproductible, tous les packages (avec version) sont contenus dans le notebook et si une cellule est mise à jour, les autres cellules dépendants de celle-ci sont également mises à jour.

Vos pouvez les faire tourner avec Julia (et Pluto installé et lancé) ou sans Julia en cliquant sur run le notebook (et choisissez option Binder).

Il est très facile d’exporter en pdf, html (même faire une vidéo!) du notebook.

PlutoSliderServer.jl

Non testé

Il y a aussi cette possibilité (plus limité sans doute mais peut être plus simple)

Si je comprends bien PlutoSliderServer.jl permet quand herbergé sur un repo (GitHub, Lab) de rendre interactif la partie sliders du notebook (et apparement d’autres choses sont possibles).

Pas mal d’opportunités à explorer.