\documentclass[aspectratio=43]{beamer}

\usetheme{Berlin}
%\usefonttheme{professionalfonts}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{mathtools,amssymb}
\usepackage{microtype}
\usepackage{pgfgantt}
\usepackage{adjustbox}
\usetikzlibrary{positioning}
% \usepackage{qrcode}

\title[]{Systèmes centralisés, fédérés et pair à pair : vu par la théorie des graphs}
\author{Amaury JOLY}
\institute[AMU - Skeptikon - Parsec]{Aix-Marseille université, Skeptikon, Parsec.cloud}

\begin{document}

\begin{frame}{}
    \titlepage
\end{frame}

\note{test}
\begin{frame}{Qui suis-je}
    \begin{itemize}
        \item \textbf{Doctorant} en informatique distribué
        \begin{itemize}
            \item \textit{Étude de la cohérence des données dans les systèmes distribués}
        \end{itemize}
        \item Ingénieur R\&D chez \textbf{Parsec.cloud}
        \item Membre de l'association \textbf{Skeptikon}
    \end{itemize}
\end{frame}

\section{Introduction a l'algorithmie distribué}

\begin{frame}{Un système distribué c'est quoi}
    \begin{quote}
        On définit un système comme un ensemble de processus. On considère qu'un système est dit distribué lorsque plusieurs processus distincts travail à la réalisation d'une tâche commune.
    \end{quote}

    \vspace{1em}
    Par exemple la rédaction de documents collaboratifs (ex: cryptpad, grist, colabora), le chat (ex: matrix, signal, XMPP, IRC, IMAP), le partage d'annuaire de vidéo (ex: PeerTube), la résolution des noms de domaines (DNS).
\end{frame}

\begin{frame}{Définir un système distribué: le modèle de communication}
    La recherche traite globalement deux modèles de communication 
    \begin{itemize}
        \item Shared-Register

        \pause
        
        \resizebox{0.5\linewidth}{!}{%
          \begin{tikzpicture}[
            node distance=1.8cm and 2.4cm,
            process/.style={draw, circle, thick, minimum size=1cm, font=\small},
            mem/.style={draw, thick, rounded corners, minimum width=5cm, minimum height=1.8cm, fill=gray!10},
            reg/.style={draw, thin, minimum width=1.1cm, minimum height=0.7cm, font=\scriptsize},
            arrow/.style={-Latex, thick}
          ]
        
          % --- Mémoire partagée (abstraction) ---
          \node[mem] (mem) {};
        
          % Quelques registres logiques dans la mémoire
          \node[reg] (r1) at ($(mem.west)!0.2!(mem.east)$) {$R_1$};
          \node[reg] (r2) at ($(mem.west)!0.5!(mem.east)$) {$R_\dots$};
          \node[reg] (r3) at ($(mem.west)!0.8!(mem.east)$) {$R_n$};
        
          \node[font=\scriptsize, below=0.15cm of mem]{Tous les processus voient la même mémoire logique};
        
          % --- Processus concurrents ---
          \node[process] (p1) [left=of p2] {$P_1$};
          \node[process] (p2) [above=1.8cm of mem] {$P_\dots$};
          \node[process] (p3) [right=of p2] {$P_n$};
        
          % --- Accès mémoire : opérations read/write ---
          \draw[arrow] (p1.south) -- (r1.north);
          \draw[arrow] (p1.south) -- (r2.north);
          \draw[arrow] (p1.south) -- (r3.north);
          \draw[arrow] (p2.south) -- (r2.north);
          \draw[arrow] (p2.south) -- (r1.north);
          \draw[arrow] (p2.south) -- (r3.north);
          \draw[arrow] (p3.south) -- (r1.north);
          \draw[arrow] (p3.south) -- (r2.north);
          \draw[arrow] (p3.south) -- (r3.north);
        
          \end{tikzpicture}
        }
    \end{itemize}
\end{frame}

\begin{frame}{Définir un système distribué: le modèle de communication}
    \begin{itemize}
        \item Shared-Register
        \item \textbf{Message-passing}

        \centering
        \resizebox{0.2\linewidth}{!}{%
          \begin{tikzpicture}[
            node distance=2.2cm and 1.4cm,
            process/.style={draw, circle, thick, minimum size=1cm, font=\small},
            state/.style={draw, thin, rounded corners, minimum width=1.6cm, 
                          minimum height=0.7cm, font=\scriptsize, fill=gray!10},
            msg/.style={-Latex, thick},
            netbox/.style={draw, dashed, rounded corners, thick, inner sep=0.4cm}
          ]
        
          % --- Processus avec état local ---
          \node[process] (p1) {$P_1$};
          \node[process] (p2) [above=of p1] {$P_2$};
          \node[process] (p3) [right=of p1] {$P_3$};
        
          \node[state] (s1) [below=0.7cm of p1] {état local $S_1$};
          \node[state] (s2) [above=0.7cm of p2] {état local $S_2$};
          \node[state] (s3) [below=0.7cm of p3] {état local $S_3$};
        
          % --- Messages entre processus ---
          \draw[msg] (p1) to[bend left=15] node[above, font=\scriptsize]{message $m_1$} (p2);
          \draw[msg] (p2) to[bend left=15] node[above, font=\scriptsize]{message $m_2$} (p3);
          \draw[msg] (p3) to[bend left=15] node[above, font=\scriptsize]{message $m_3$} (p1);
                
          \end{tikzpicture}
        }%
        
    \end{itemize}
\end{frame}

\begin{frame}{Définir un système distribué: le modèle de synchronisme}
    La recherche distingue deux grandes hypothèses de synchronisme :
    \begin{itemize}
        \item \textbf{Synchrone} (temps découpé en tours / rounds)

        \pause
        
        \centering
        \resizebox{0.7\linewidth}{!}{%
          \begin{tikzpicture}[
            x=1.4cm, y=0.9cm,
            msg/.style={-Latex, thick},
            proc/.style={font=\small},
            roundline/.style={thick},
            sep/.style={dashed, gray}
          ]
          
          % --- Processus ---
          \node[proc, anchor=east] at (0,0)   {$P_1$};
          \node[proc, anchor=east] at (0,-1)  {$P_2$};
          \node[proc, anchor=east] at (0,-2)  {$P_3$};

          % --- Lignes de temps pour chaque processus ---
          \foreach \y in {0,-1,-2}{
            \draw[roundline] (0.2,\y) -- (3.0,\y);
          }

          % --- Séparation en tours synchrones ---
          \foreach \x/\t in {0.8/1,1.6/2,2.4/3}{
            \draw[sep] (\x,0.3) -- (\x,-2.3);
            \node[font=\scriptsize] at (\x+0.35,0.35) {tour \t};
          }

          % --- Messages livrés dans le tour suivant ---
          \draw[msg] (0.35,0)   .. controls (0.55,-0.2) .. (0.75,-1);   % P1 -> P2 dans le tour 1
          \draw[msg] (1.0,-1)   .. controls (1.2,-1.8) .. (1.4,-2);     % P2 -> P3 dans le tour 2
          \draw[msg] (1.7,-2)   .. controls (1.9,-1.2) .. (2.1,0);      % P3 -> P1 dans le tour 3

          % --- Légende ---
          \node[font=\scriptsize, align=center] at (1.6,-2.6){Bornes connues sur les durées de calcul et de communication,\\
             tous les processus avancent par tours synchrones};
          
          \end{tikzpicture}
        }
    \end{itemize}
\end{frame}

\begin{frame}{Définir un système distribué: les modèles de synchronisme}
    \begin{itemize}
        \item Synchrone
        \item \textbf{Asynchrone}
    \end{itemize}

    \pause

    \centering
    \resizebox{0.7\linewidth}{!}{%
      \begin{tikzpicture}[
        x=1.4cm, y=0.9cm,
        msg/.style={-Latex, thick},
        proc/.style={font=\small},
        opbox/.style={draw, rounded corners, thick}
      ]
      
        % --- Processus ---
        \node[proc, anchor=east] at (0,0)   {$P_1$};
        \node[proc, anchor=east] at (0,-1)  {$P_2$};
        \node[proc, anchor=east] at (0,-2)  {$P_3$};

        \pause

        % --- Lignes de temps pour chaque processus ---
        \foreach \y in {0,-1,-2}{
          \draw[thick] (0.2,\y) -- (3.0,\y);
        }

        \pause

        % --- "Ticks" locaux non alignés (horloges indépendantes) ---
        \foreach \x in {0.5,1.2,2.3}{
          \draw (\x,0.1) -- (\x,-0.1);       % P1
        }
        \foreach \x in {0.4,1.5,2.6}{
          \draw (\x,-0.9) -- (\x,-1.1);      % P2
        }
        \foreach \x in {0.7,1.8,2.1}{
          \draw (\x,-1.9) -- (\x,-2.1);      % P3
        }

        \pause

        % --- Messages ---
        \draw[msg] (0.35,0) -- (0.8,-1);
        \draw[msg] (0.35,0) -- (2.5,-2);

        \pause

        \draw[msg] (1.0,-1) -- (1.8,0);
        \draw[msg] (1.0,-1) -- (2.2,-2);

        \pause

        \draw[msg] (1.4,-2) -- (2.1,0);
        \draw[msg] (1.4,-2) -- (2.5,-1);

        \pause
        % op_1 : diffusion de P1
        % commence à x = 0.35 (émission) et finit à x = 2.5 (dernier reçu : P3)
        \draw[opbox,densely dotted] (0.35,0.25) rectangle (2.5,-0.25);
        % ligne de vie de P1 en pointillé dans l'intervalle de op_1
        \draw[thick,densely dotted] (0.35,0) -- (2.5,0);
        \node[font=\scriptsize, anchor=west] at (2.55,-0.2) {$op_1$};

        \pause
        % op_2 : diffusion de P2
        % commence à x = 1.0 (émission) et finit à x = 2.2 (dernier reçu : P3)
        \draw[opbox,densely dotted] (1.0,-0.75) rectangle (2.2,-1.25);
        % ligne de vie de P2 en pointillé dans l'intervalle de op_2
        \draw[thick,densely dotted] (1.0,-1) -- (2.2,-1);
        \node[font=\scriptsize, anchor=west] at (2.25,-1.2) {$op_2$};
        
        \pause
        % op_3 : diffusion de P3
        % commence à x = 1.4 (émission) et finit à x = 2.5 (dernier reçu : P2)
        \draw[opbox,densely dotted] (1.4,-1.75) rectangle (2.5,-2.25);
        % ligne de vie de P3 en pointillé dans l'intervalle de op_3
        \draw[thick,densely dotted] (1.4,-2) -- (2.5,-2);
        \node[font=\scriptsize, anchor=west] at (2.55,-2.2) {$op_3$};

      \end{tikzpicture}
    }
\end{frame}

\begin{frame}{Définir un système distribué: les modèles de synchronisme}
    \begin{itemize}
        \item Synchrone
        \item \textbf{Asynchrone}
    \end{itemize}

    \centering
    \resizebox{0.7\linewidth}{!}{%
      \begin{tikzpicture}[
        x=1.4cm, y=0.9cm,
        msg/.style={-Latex, thick},
        proc/.style={font=\small},
        opbox/.style={draw, rounded corners, thick}
      ]
      
        % --- Processus ---
        \node[proc, anchor=east] at (0,0)   {$P_1$};
        \node[proc, anchor=east] at (0,-1)  {$P_2$};
        \node[proc, anchor=east] at (0,-2)  {$P_3$};

        % --- Lignes de temps pour chaque processus ---
        \foreach \y in {0,-1,-2}{
          \draw[thick] (0.2,\y) -- (3.0,\y);
        }

        % op_1 : diffusion de P1
        % commence à x = 0.35 (émission) et finit à x = 2.5 (dernier reçu : P3)
        \draw[opbox,densely dotted] (0.35,0.25) rectangle (2.5,-0.25);
        % ligne de vie de P1 en pointillé dans l'intervalle de op_1
        \draw[thick,densely dotted] (0.35,0) -- (2.5,0);
        \node[font=\scriptsize, anchor=west] at (2.55,-0.2) {$op_1$};

        % op_2 : diffusion de P2
        % commence à x = 1.0 (émission) et finit à x = 2.2 (dernier reçu : P3)
        \draw[opbox,densely dotted] (1.0,-0.75) rectangle (2.2,-1.25);
        % ligne de vie de P2 en pointillé dans l'intervalle de op_2
        \draw[thick,densely dotted] (1.0,-1) -- (2.2,-1);
        \node[font=\scriptsize, anchor=west] at (2.25,-1.2) {$op_2$};
        
        % op_3 : diffusion de P3
        % commence à x = 1.4 (émission) et finit à x = 2.5 (dernier reçu : P2)
        \draw[opbox,densely dotted] (1.4,-1.75) rectangle (2.5,-2.25);
        % ligne de vie de P3 en pointillé dans l'intervalle de op_3
        \draw[thick,densely dotted] (1.4,-2) -- (2.5,-2);
        \node[font=\scriptsize, anchor=west] at (2.55,-2.2) {$op_3$};

      \end{tikzpicture}
    }
\end{frame}

\section{Les différentes architectures de systèmes}

\subsection{Les systèmes centralisés}

\begin{frame}{Système centralisé}
    \begin{itemize}
        \item Architecture client--serveur
        \item Un seul serveur central maintient l'état
    \end{itemize}

    \vspace{0.3cm}
    \centering
    \resizebox{0.6\linewidth}{!}{%
      \begin{tikzpicture}[
        node distance=1.8cm and 2.5cm,
        client/.style={draw, circle, thick, minimum size=1cm, font=\small},
        server/.style={draw, thick, rounded corners, minimum width=2.8cm, 
                       minimum height=1.2cm, font=\small, fill=gray!10},
        msg/.style={-Latex, thick},
        resp/.style={Latex-, thick, dashed}
      ]

        % --- Serveur central ---
        \node[server] (srv) at (0,0) {Serveur central};

        % --- Clients ---
        \node[client] (c1) at (-3,0) {$P_1$};
        \node[client] (c2) at (0,-2) {$P_2$};
        \node[client] (c3) at (3,-0) {$P_3$};

        % --- Messages requête / réponse ---
        \draw[msg]  (c1.east) -- (srv.west);
        \draw[msg]  (c2.north) -- (srv.south);
        \draw[msg]  (c3.west) -- (srv.east);

      \end{tikzpicture}
    }
\end{frame}


\begin{frame}{Système centralisé : exécution parallèle des clients}
    \begin{itemize}
        \item Requêtes concurrentes côté clients
        \item Traitement séquentiel côté serveur (ordre total)
    \end{itemize}

    \vspace{0.3cm}
    \centering
    \resizebox{0.6\linewidth}{!}{%
      \begin{tikzpicture}[
        x=1.4cm, y=0.9cm,
        msg/.style={-Latex, thick},
        proc/.style={font=\small},
        opbox/.style={draw, rounded corners, thick, fill=gray!10}
      ]

        % --- Processus : serveur + clients (lignes de vie) ---
        \node[proc, anchor=east] at (0,0)    {$Serveur$};
        \node[proc, anchor=east] at (0,-1)   {$P_1$};
        \node[proc, anchor=east] at (0,-2)   {$P_2$};
        \node[proc, anchor=east] at (0,-3)   {$P_3$};

        \pause

        % --- Lignes de temps ---
        \foreach \y in {0,-1,-2,-3}{
          \draw[thick] (0.2,\y) -- (4.0,\y);
        }

        \pause
        % --- Requêtes des clients vers le serveur (légèrement décalées) ---
        \draw[msg] (0.8,-1) -- (1.2,0)
           node[midway, left, font=\scriptsize] {$op_1$};
        \draw[msg] (0.9,-2) -- (1.3,0)
           node[midway, left, font=\scriptsize] {$op_2$};
        \draw[msg] (1.0,-3) -- (1.4,0)
           node[midway, left, font=\scriptsize] {$op_3$};

        % (On suggère qu'elles sont émises "en parallèle" côté clients.)

        \pause
        % --- Traitement séquentiel au serveur : op_1, op_2, op_3 ---
        % op_1
        \node[opbox, minimum width=0.2cm, minimum height=0.5cm] (o1) at (1.8,0) {$op_1$};
        % op_2
        \node[opbox, minimum width=0.2cm, minimum height=0.5cm, right=0.2cm of o1] (o2) {$op_2$};
        % op_3
        \node[opbox, minimum width=0.2cm, minimum height=0.5cm, right=0.2cm of o2] (o3) {$op_3$};

        % Relier dans l'ordre pour bien montrer la séquentialisation
        \draw[->, thick] (o1.east) -- (o2.west);
        \draw[->, thick] (o2.east) -- (o3.west);

        % --- Réponses (optionnelles, pour fermer la boucle) ---
        \pause
        \draw[msg] (o1.south) -- (2,-1);
        \draw[msg] (o1.south) -- (2,-2);
        \draw[msg] (o1.south) -- (2,-3);
        \draw[msg] (o2.south) -- (2.8,-1);
        \draw[msg] (o2.south) -- (2.8,-2);
        \draw[msg] (o2.south) -- (2.8,-3);
        \draw[msg] (o3.south) -- (3.8,-1);
        \draw[msg] (o3.south) -- (3.8,-2);
        \draw[msg] (o3.south) -- (3.8,-3);

        % --- Évolution de l'état (optionnel mais parlant) ---
        \node[font=\scriptsize, align=left] at (2.7,0.9)
           {$S_0 \xrightarrow{op_1} S_1 \xrightarrow{op_2} S_2 \xrightarrow{op_3} S_3$};
      \end{tikzpicture}
    }
\end{frame}

\subsection{Les systèmes pair à pair}

\begin{frame}{Système pair à pair}
    \begin{itemize}
        \item Pas de serveur central
        \item Chaque processus entretient son état local en fonction des messages recu.
    \end{itemize}

    \vspace{0.3cm}
    \centering
    \resizebox{0.6\linewidth}{!}{%
      \begin{tikzpicture}[
        node distance=1.8cm and 2.5cm,
        peer/.style={draw, circle, thick, minimum size=1cm, font=\small},
        link/.style={<->, thick}
      ]

        % --- Pairs ---
        \node[peer] (p1) at (-2,0) {$P_1$};
        \node[peer] (p2) at ( 2,0) {$P_2$};
        \node[peer] (p3) at ( 0,-2) {$P_3$};

        % --- Connexions pair à pair ---
        \draw[link] (p1) -- (p2);
        \draw[link] (p1) -- (p3);
        \draw[link] (p2) -- (p3);

      \end{tikzpicture}
    }
\end{frame}

\begin{frame}{Système pair à pair : exécution parallèle}
    \begin{itemize}
        \item Chaque pair exécute des opérations concurrentes
        \item Pas de serveur central pour imposer un ordre total
    \end{itemize}

    \centering
    \resizebox{0.7\linewidth}{!}{%
      \begin{tikzpicture}[
        x=1.4cm, y=0.9cm,
        proc/.style={font=\small},
        opbox/.style={draw, rounded corners, thick}
      ]
      
        % --- Processus ---
        \node[proc, anchor=east] at (0,0)   {$P_1$};
        \node[proc, anchor=east] at (0,-1)  {$P_2$};
        \node[proc, anchor=east] at (0,-2)  {$P_3$};

        % --- Lignes de temps pour chaque processus ---
        \foreach \y in {0,-1,-2}{
          \draw[thick] (0.2,\y) -- (3.0,\y);
        }

        % op_1 : opération de P1
        % commence à x = 0.35 et finit à x = 2.5
        \draw[opbox,densely dotted] (0.35,0.25) rectangle (2.5,-0.25);
        % ligne de vie de P_1 en pointillé dans l'intervalle de op_1
        \draw[thick,densely dotted] (0.35,0) -- (2.5,0);
        \node[font=\scriptsize, anchor=west] at (2.55,-0.2) {$op_1$};

        % op_2 : opération de P2
        % commence à x = 1.0 et finit à x = 2.2
        \draw[opbox,densely dotted] (0.45,-0.75) rectangle (1.2,-1.25);
        % ligne de vie de P_2 en pointillé dans l'intervalle de op_2
        \draw[thick,densely dotted] (1.0,-1) -- (2.2,-1);
        \node[font=\scriptsize, anchor=west] at (2.25,-1.2) {$op_2$};
        
        % op_3 : opération de P3
        % commence à x = 1.4 et finit à x = 2.5
        \draw[opbox,densely dotted] (1.4,-1.75) rectangle (2.5,-2.25);
        % ligne de vie de P_3 en pointillé dans l'intervalle de op_3
        \draw[thick,densely dotted] (1.4,-2) -- (2.5,-2);
        \node[font=\scriptsize, anchor=west] at (2.55,-2.2) {$op_3$};

      \end{tikzpicture}
    }
\end{frame}

\subsection{Les systèmes fédérés}

\begin{frame}{Système fédéré}
    \begin{itemize}
        \item Plusieurs serveurs, chacun gère un sous-ensemble de processus
        \item Les serveurs se synchronisent entre eux (fédération)
    \end{itemize}

    \vspace{0.3cm}
    \centering
    \resizebox{0.4\linewidth}{!}{%
      \begin{tikzpicture}[
        node distance=1.8cm and 2.5cm,
        server/.style={draw, thick, rounded corners, minimum width=2.8cm,
                       minimum height=1.2cm, font=\small, fill=gray!10},
        client/.style={draw, circle, thick, minimum size=0.9cm, font=\scriptsize},
        srvlink/.style={<->, thick}
      ]

        % --- Serveurs fédérés ---
        \node[server] (s1) at (0,1.5)  {Serveur $S_1$};
        \node[server] (s2) at (-3,-0.5){Serveur $S_2$};
        \node[server] (s3) at ( 3,-0.5){Serveur $S_3$};

        % --- Processus locaux à chaque serveur ---
        \node[client] (p1) at (0,3)  {$P_1$};
        \node[client] (p2) at (-3,-2.5) {$P_2$};
        \node[client] (p3) at ( 3,-2.5) {$P_3$};

        % --- Liens client -- serveur local ---
        \draw[-Latex, thick] (p1.south) -- (s1.north);
        \draw[-Latex, thick] (p2.north) -- (s2.south);
        \draw[-Latex, thick] (p3.north) -- (s3.south);

        % --- Fédération entre serveurs ---
        \draw[srvlink] (s1) -- (s2);
        \draw[srvlink] (s1) -- (s3);
        \draw[srvlink] (s2) -- (s3);

      \end{tikzpicture}
    }
\end{frame}

\begin{frame}{Système fédéré : exécution parallèle des serveurs}
    \begin{itemize}
        \item Chaque serveur impose un ordre total local sur ses opérations
        \item Globalement, les opérations sur différents serveurs sont concurrentes
    \end{itemize}

    \centering
    \resizebox{0.7\linewidth}{!}{%
      \begin{tikzpicture}[
        x=1.4cm, y=0.9cm,
        proc/.style={font=\small},
        opbox/.style={draw, rounded corners, thick}
      ]
      
        % --- Processus (serveurs fédérés) ---
        \node[proc, anchor=east] at (0,0)   {$S_1$};
        \node[proc, anchor=east] at (0,-1)  {$S_2$};
        \node[proc, anchor=east] at (0,-2)  {$S_3$};

        % --- Lignes de temps pour chaque serveur ---
        \foreach \y in {0,-1,-2}{
          \draw[thick] (0.2,\y) -- (3.2,\y);
        }

        % op_1 : opération sur S_1 (longue)
        \draw[opbox,densely dotted] (0.35,0.25) rectangle (2.3,-0.25);
        \draw[thick,densely dotted] (0.35,0) -- (2.3,0);
        \node[font=\scriptsize, anchor=west] at (2.35,-0.2) {$op_1$};

        % op_2 : opération sur S_2 (décalée, plus courte)
        \draw[opbox,densely dotted] (0.8,-0.75) rectangle (2.0,-1.25);
        \draw[thick,densely dotted] (0.8,-1) -- (2.0,-1);
        \node[font=\scriptsize, anchor=west] at (2.05,-1.2) {$op_2$};
        
        % op_3 : opération sur S_3 (commence plus tard, finit après op_2)
        \draw[opbox,densely dotted] (1.3,-1.75) rectangle (2.8,-2.25);
        \draw[thick,densely dotted] (1.3,-2) -- (2.8,-2);
        \node[font=\scriptsize, anchor=west] at (2.85,-2.2) {$op_3$};

      \end{tikzpicture}
    }
\end{frame}



\begin{frame}{Jeu : placer les applications dans les architectures}
    \begin{itemize}
        \item À quel type d'architecture appartient chaque application ?
    \end{itemize}

    \vspace{0.3cm}
    \centering
    \resizebox{0.95\linewidth}{!}{%
      \begin{tikzpicture}[
        archibox/.style={draw, rounded corners, thick,
                         minimum width=3.5cm, minimum height=1.6cm,
                         font=\small, align=center, fill=gray!10},
        app/.style={draw, rounded corners, thick,
                    minimum width=2.0cm, minimum height=0.8cm,
                    font=\scriptsize, align=center}
      ]

        % --- Zones d'architecture ---
        \node[archibox] (central)   at (-4, 1.5) {Centralisé};
        \node[archibox] (p2p)       at ( 0, 1.5) {Pair à pair};
        \node[archibox] (federated) at ( 4, 1.5) {Fédéré};

        % --- Jetons d'applications à placer ---
        \node[app] at (-5, -0.2) {cryptpad};
        \node[app] at (-2.5,-0.2) {grist};
        \node[app] at ( 0, -0.2) {colabora};
        \node[app] at ( 2.5,-0.2) {matrix};
        \node[app] at ( 5, -0.2) {signal};

        \node[app] at (-5, -1.8) {XMPP};
        \node[app] at (-2.5,-1.8) {IRC};
        \node[app] at ( 0, -1.8) {IMAP};
        \node[app] at ( 2.5,-1.8) {PeerTube};
        \node[app] at ( 5, -1.8) {DNS};

      \end{tikzpicture}
    }
\end{frame}


\begin{frame}{Un petit Quizz}
    % \qrcode{partici.fi/38956702}
\end{frame}

\begin{frame}
    \frametitle{MERCI !}

    

\end{frame}
    

\end{document}