introduction
Cartographier pour le Web avec quarto
GEO UNIV’R Tunisie 2024
Nicolas Lambert, Ronan Ysebaert, Elina Marveaux
Le Web
Internet et WWW
Internet est né d’une initiative militaire américaine. Le premier nœud du réseau ARPANET (Advanced Research Project Agency Network) à l’origine d’Internet a été mis en place en 1969.
12 Mars 1989 : première version du Web - Tim Berners-Lee, chercheur britannique au CERN, a inventé le WWW.
A l’origine, le projet, baptisé « World Wide Web », a été conçu et développé pour que des scientifiques travaillant dans des universités et instituts du monde entier puissent s’échanger des informations instantanément.
Web ou Internet ?
Internet est une plateforme qui permet de faire parvenir des informations d’un ordinateur à un autre. Le web, lui, est un moyen de visiter des pages de sites à partir de navigateurs via des ordinateurs, des tablettes ou des smartphones.
1991 - le Web s’ouvre à tous.
En 1993, la technologie devient publique. Le Web voit très vite son usage exploser sur Internet.
fin 1994, le nombre de serveurs web atteint les 10 000 !
Le lancement de Netscape, le premier navigateur réellement grand public, participera aussi largement à sa démocratisation.
Janvier 1994 : Yahoo !
Le nombre de sites explose, à tel point qu’il devient très difficile pour l’internaute béotien de s’y retrouver. Deux étudiants de Stanford, Jerry Yang et David Filo, décident de créer un gigantesque annuaire de sites, classés de façon thématique. Il va vite devenir le portail numéro 1 de la Toile.
1998 Google lance son moteur de recherche
2010 : l’émergence du HTML5, le futur du Web
25 ans après son invention, le HTML fait une douce révolution, toujours sous l’impulsion de Tim Berners-Lee. Grâce à la cinquième version du standard de balisage des pages Web – et de nombreuses technologies associées – de nouveaux services émergent. Objectif de ce standard : transformer les pages Web, encore trop statiques, en véritables programmes informatiques, qui n’auraient rien à envier aux applications pour smartphones ou aux logiciels que vous installez sur votre ordinateur. Et faire du navigateur l’unique appli dont vous aurez besoin.
Aujourd’hui
Plus de 4 milliard d’utilisateurs
Les langages du Web
Derrière le web, il y a des langages informatiques qui sont interprétés directement dans les navigateurs.
Le HTML
Le HyperText Markup Language, généralement abrégé HTML est ce qui correspond au squelette d’une page web. C’est la structuration du document. Le HTML est structuré par des balises.
<!DOCTYPE html><html><head><title>Page Title</title></head><body><h1>This is a Heading</h1><p>This is a paragraph.</p></body></html>
Le CSS
Les feuilles de style en cascade, généralement appelées CSS de l’anglais Cascading Style Sheets, forment un langage informatique qui décrit la présentation des documents HTML. Le CSS définit le style et le positionnement des éléments sur la page.
body {background-color:lightblue;}h1 {color:white;text-align:center;}p {font-family:verdana;font-size:20px;}
Canvas
Depuis HTML5, on peut directement dessiner dans le navigateur web. Avec Canvas en mode raster (pixels)
Le format SVG (Scalable Vector Graphics) est un format de données conçu pour décrire des ensembles de graphiques vectoriels. C’est le format qu’on utilise dans le logiciel Inkscape.
Attention, les coordonnées [0,0] sont en haut à gauche.
Le JavaScript
C’est le langage de script du navigateur.
Le JavaScript
Le JavaScript est un langage de programmation qui a presque 30 ans.
1995
Le langage Javascript a été créé en dix jours en mai 1995 pour la Netscape Communications Corporation par Brendan Eich. Au départ, l’idée était de construire un petit langage pour faire des interactions sur les pages web. Attention, Javascript n’est pas JAVA !
1997
Le langage Javascript est normalisé depuis 1997 par la commission TC39 de l’organisation ECMA International.
2008
Les navigateurs web ont travaillé à de nouveaux moteurs pour améliorer les performances. V8 est un moteur JavaScript open-source développé par le projet Chromium pour les navigateurs Web Google Chrome et Chromium (dernière version 31 janvier 2022). Il y a aussi SpiderMonkey pour Firefox, Chakra pour Microsoft Edge et JavaScriptCore pour Safari.
2009
Création de Node.js par Ryan Dahl, qui permet d’utiliser le JavaScript comme langage de programmation côté serveur (back-End).
2015
Depuis 2015 (ES6 ou ES2015), le langage JavaScript est mature. Performant. Et est implémenté de manière harmonisée dans tous les navigateurs. On parle de modern JavaScript
demain ?
De nouvelles fonctionnalitées sont ajoutées au langage chaque année.
Un langage dédié à la visualisation de données pour le web
Observable, kezako ?
L’Observable javascript (ojs) est un ensemble d’améliorations apportées à vanilla JavaScript créé par Mike Bostock (également auteur de D3). Observable JS se distingue par son exécution réactive, qui convient particulièrement bien à l’exploration et à l’analyse interactives des données. Objectif : faire collaborer une communauté autour de la visualisation de données.
Observable est aussi une startup fondée par Mike Bostock et Melody Meckfessel, qui propose une plateforme 100% en ligne pour concevoir, partager et diffuser des visualisations de données.
C’est aussi une plateforme web disponible à l’adresse https://observablehq.com/ qui héberge des notebookscomputationnels sur la visualisation de données.
Les notebooks sont comme des billets de blog. Ils contiennent du texte, des images et du contenu multimédia. Ils peuvent être rangés dans des collections. Ils sont disponibles en ligne via une url. Comme on peut s’y attendre, ils contiennent aussi des lignes de code. L’objectif : faire de la Programmation lettrée (literate programming).
Les notebooks Observable permettent de travailler en ligne, directement dans le navigateur, sans avoir besoin d’installer le moindre logiciel. Il faut bien sur avoir une bonne connexion internet.
Depuis cette année, Observable a lancé un nouvel outil nommé Observable Framework
Observable dans Quarto
Quarto permet de créer des documents markdown, des articles, des rapports, des présentations, des sites web, des blogs et des livres, aux formats HTML, PDF, Word, ePub, etc.
Il permet de créer un contenu dynamique dans différents langages : Python, R, Julia et Observable JavaScript.
Cela permet de créer des documents, des rapports et des analyses entièrement reproductibles
JavaScript ≠ ojs
OJS c’est du JavaScript + plein de bibliothèques pré chargées :
Symbol
Name
Version
_
Lodash
4.17.21
aq
Arquero
Arrow
Apache Arrow
4.0.1
d3
D3.js
dot
Graphviz
0.2.1
htl
Hypertext Literal
Inputs
Observable Inputs
L
Leaflet
mermaid
Mermaid
9.1.6
Plot
Observable Plot
SQLite
SQL.js
1.7.0
topojson
TopoJSON Client
3.1.0
vl
Vega, Vega-Lite
5.22.1, 5.2.0
OJS c’est aussi une évolution du langage javascript pour en faire un langage adapté à l’analyse et la visualisation de données sur le web.
Les cellules / chunk {ojs}
Dans Quarto, on peut écrire/exécuter du code Observable en utilisant des chuncks {ojs}.
Chaque ligne définit une variable et une cellule qui doit être unique.
cellule 1 :
a =5
cellule 2 :
b =7
cellule 3 :
a + b
Avec ojs, l’ordre d’écriture n’a pas d’importance 🤔 On peut donc écrire :
Ceci :
c * d
Avant ça
c =3
et ça
d =8
La raison est que la relation entgre les cellules s’effectue de manière topologique.
Chaque cellule doit impérativement être unique. En conséquance, je n’ai pas le droit de redéfinir une de ces variables.
e =10e =5
Il est donc souvent utile de créer des blocs de code avec des {…} quand le traitement devient plus complexe.
Mais la plupart du temps, pour faire ce genre de calcul, on écrira plutôt des fonctions. Comme ceci :
functionsum(a, b) {return a + b;}// Appel de la fonctionsum(10,30)
Ou comme cela :
multi = (a, b) => a * b// Appel de la fonctionmulti(3,8)
Ce parti pris fort, peut être déroutant. Mais il a un gros avantage. Il permet d’organiser un document indépendemment de la façon dont on code. Cela permet par exemple de mettre une carte en haut de la page et en annexe technique tout en bas le code qui la génère.
Les Inputs
Dans Observable, on a à disposition des Inputs directement prêts à l’emploi.
Dans Observable, grâce à la relation topologique entre les cellules, tout est réactif. Chaque fois qu’on bouge quelque chose, ce qui en dépend est ré-éxécuté.
viewof age = Inputs.range([15,70], {label:"age",value:30,step:1,})viewof nom = Inputs.text({label:"nom",value:"Nicolas"})
Par exemple :
md`Je m'appelle **${nom}** et j'ai **${age}** ans :-)`
Et voici à quoi il ressemble si on l’affiche (nous verrons plus tard comment…)
viz =require("geoviz@0.5.9"){let svg = viz.create({domain: basemap,width:500,zoomable:true})svg.path({data: basemap,tip:true,fill:"red",})return svg.render()}
Librairies externes
Observable javascript n’est pas un écosystème fermé. Des millions de librairies javascript existent sur NPM (équivalent du CRAN pour R). Il est possible de les utiliser.
Ici, nous pouvons les importer directement avec l’instruction require()
geo =require("geotoolbox")
Généralisation cartographique
viewof k = Inputs.range([0.01,0.5], { label:"k",step:0.01,value:0.05 })geo.simplify(world, { k })
world =FileAttachment("data/world.json").json()viewof k = Inputs.range([0.01,0.5], { label:"k",step:0.01,value:0.05 })world_light = geo.simplify(world, { k }){let svg = viz.create({domain: world,width:500})svg.path({data: world_light,tip:true,fill:"none",stroke:"red"})return svg.render()}
Imports
On l’a dit tout à l’heure, Observable c’est aussi une plateforme web hébergeant des notebooks.
Si on a une connexion internet, il ets possible d’importer n’importe quelle cellule de n’importe quel notebook avec la fonction import. Dit autrement, toutes les notebooks hébergés sur observablehq.com fonctionnent comme des api.