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!
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:
- Ouvrir Julia dans une console puis taper:
using Pkg
- 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
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
Références Genie
- https://genieframework.com/app-gallery/
- https://genieframework.com/blog/how-to-build-a-data-app-with-a-CSV-file-uploader/
- https://genieframework.com/blog/how-to-build-data-apps-with-new-genieframework-api.html
- https://www.freecodecamp.org/news/how-to-build-web-apps-in-julia/
- https://genieframework.com/blog/how-to-quickly-turn-your-julia-code-into-a-web-app-with-genie-builder/
- https://genieframework.com/docs/genie/v5.11/tutorials/Getting-Started.html
- https://github.com/GenieFramework/Genie.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.
Références Pluto
- https://plutojl.org/
- https://www.juliapackages.com/p/pluto
- https://github.com/fonsp/Pluto.jl
- https://www.juliafordatascience.com/first-steps-5-pluto/
- https://towardsdatascience.com/interactive-data-visualization-with-julia-and-pluto-notebooks-6fad6f3eca2
- https://towardsdatascience.com/reactive-data-analysis-with-julia-in-pluto-notebooks-b4652defd03e