formations/tiramisu.tex

399 lines
12 KiB
TeX
Raw Permalink Normal View History

2013-05-26 17:57:12 +02:00
\documentclass{beamer}
%\usertheme{Madrid}
\setbeamercovered{transparent}
\setcounter{tocdepth}{2}
\usepackage[french]{babel}
%\usepackage[utf8,utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xunicode} %Unicode extras!
\usepackage{xltxtra} %Fixes
\setmainfont{CaviarDreams}
\usepackage{multicol}
%\usepackage{colortbtl}
\usepackage{graphicx}
\usepackage{verbatim} % Pour l'insertion de fichier en mode verbatim
\usepackage{ucs}
\usepackage{tabto}
\usepackage{xcolor}
\usepackage{hyperref}
\usepackage{hyperxmp}
\hypersetup{%
colorlinks=true,linkcolor=blue,urlcolor=blue,pdfpagemode=UseNone,
pdftitle={Tiramisu},
pdfkeywords={eole, cadoles, python, tiramisu},
pdfauthor={Emmanuel Garette},
pdflang={fr-FR},
pdfcopyright={Copyright © 2013 Cadoles}, % Nécessite XeTeX
pdflicenseurl={http://creativecommons.org/licenses/by-sa/2.0/fr/},
}
%\usecolortheme{crane}
\definecolor{UniBlue}{RGB}{83,121,180}
\definecolor{CleanWhite}{RGB}{255,255,255}
\setbeamercolor{title}{fg=UniBlue}
\setbeamercolor{frametitle}{fg=CleanWhite}
\setbeamercolor{structure}{fg=UniBlue}
\newcommand{\eolesmall}{
\begin{minipage}[c]{0.10\textwidth}
\includegraphics[width=1cm]{beamer-skel/img/logo-eole.png}
\end{minipage}
}
\newcommand{\eolebig}{\includegraphics[width=2cm]{beamer-skel/img/logo-eole.png}}
\newcommand{\eolefull}{\includegraphics{beamer-skel/img/logo-eole.png}}
%\setmonofont[Scale=0.86]{Andale Mono}
%\usepackage{colortab}
\setbeamertemplate{background}{\includegraphics[width=128mm]{beamer-skel/img/banner01.png}}
\title[]{Tiramisu}
\subtitle{Version 0.48 et supérieur}
\author[Equipe Auteur]{Emmanuel Garette}
%\institute[E.O.L.E]{\includegraphics[width=2cm]{beamer-skel/img/logo-eole.png}}
\institute[Cadoles]{\includegraphics[width=2cm]{beamer-skel/img/logo-cadoles-01.png}}
\date{{\small 8 avril 2013}}
\subject{Talks}
\AtBeginSubsection[]
{
\begin{frame}<beamer>
\frametitle{}
\tableofcontents[currentsection,currentsubsection]
\end{frame}
}
\logo{
%\includegraphics[width=1cm]{beamer-skel/img/logo-ecologie.png}~
%\hspace{120pt}
\includegraphics[width=2cm]{beamer-skel/img/logo-cadoles-01.png}~
%\hspace{113pt}
%\includegraphics[width=1cm]{beamer-skel/img/logo_en.jpg}~
}
%%%presentation
%\documentclass{beamer}
%\usepackage{beamerthemetree}
%%%impression
%%\documentclass[a4paper,9pt]{extarticle}
%%\usepackage{beamerarticle}
%%%
%
%% class FR
%\usepackage[T1]{fontenc}
%\usepackage[utf8]{inputenc}
%\usepackage[frenchb]{babel}
%
%% image
%\usepackage{graphicx}
%
%\usecolortheme{crane}
%\beamertemplatetransparentcovered
%
%% le logo
%%\logo{\includegraphics[height=1cm]{ban.png}}
%
%\title{Tiramisu}
%\subtitle{Version 0.48 et supérieur}
%
%\author{GARETTE Emmanuel}
%\institute{Cadoles}
%\date{\today}
\begin{document}
\frame{\titlepage}
\section{Introduction}
\begin{frame}{Plan}
\small \tableofcontents[currentsection, hideothersubsections]
\end{frame}
\begin{frame}
\frametitle{Introduction}
\begin{itemize}
\item Tiramisu :
\begin{itemize}
\item résultat d'une réflexion en gestation dès le début de EOLE 2.3 ;
\item première ligne de code environ septembre 2011 ;
\item un an de travail sur le code ;
\item 207 commits, 1 262 lignes de codes, 473 lignes de commentaires.
\end{itemize}
\end{itemize}
\end{frame}
\section{Les objets Tiramisu}
\begin{frame}{Plan}
\small \tableofcontents[currentsection, hideothersubsections]
\end{frame}
\begin{frame}
\frametitle{Présentation}
\begin{itemize}
\item Les 4 types d'objets :
\begin{itemize}
\item les Options
\begin{itemize}
\item UnicodeOption, ChoiceOption, ... = les variables ;
\item les OptionDescriptions = l'arborescence (familles, groupes, ...) ;
\end{itemize}
\item les Values : valeurs personnalisées d'une configuration, calcul de la valeur et gestion des multis ;
\item les Settings : propriétés particulières d'une configuration et read\_only/read\_write ;
\item les Configs : point d'entrée et lien entre des options/des valeurs/des propriétés = un serveur ;
\end{itemize}
\item notes :
\begin{itemize}
\item des options en "lecture seule" ;
\item des options communes à plusieurs serveurs : définition de variantes ;
\item des configs, values, settings uniques et spécifiques à un serveur, un utilisateur.
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Option}
\begin{itemize}
\item name : nom de la variable ;
\item informations : libellé, aide, séparateur, ... ;
\item default : valeur par défaut ;
\item callback : calcul pour obtenir la valeur par défaut ;
\item values, open\_values : valeur possible (pour ChoiceOption), booléen pour savoir si les valeurs sont ouvertes ;
\item opt\_type : type de l'objet (unicode, choice, ...) ;
\item properties : propriété par défaut d'une variable (mandatory, ...) ;
\item requires : modification des propriétés suivant la valeur d'une autre variable ;
\item multi : booléen pour savoir si c'est une multi ;
\item validator : option de validation supplémentaire ;
\item multitype, master\_slaves, default\_multi : default ou master ou slave, valeur de la master pour une slave et inversement, valeur simple pour l'ajout dans une multi sur une slave.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{OptionDescription}
\begin{itemize}
\item name : nom de la famille, ... ;
\item informations : aide, ... ;
\item properties : propriété par défaut (hidden, ...)
\item requires : modification des propriétés suivant la valeur d'une variable ;
\item children : ensemble des fils (structure arborescente) ;
\item group\_type : default, family ou master ;
\item cache\_paths : cache (chemin, option) généré à la création de l'objet Config.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Values}
\begin{itemize}
\item values : dictionnaire ( \{option: (owner, value)\}) ;
\item ne conserve pas les valeurs par défaut ou calculées.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Settings}
\begin{itemize}
\item Properties : dictionnaire
\begin{itemize}
\item de l'objet Config : liste de propriétés à "vérifier" ;
\item d'un objet Option : liste des propriétés de l'objet Option modifié (ex. : calcul) ;
\end{itemize}
\item permissives : dictionnaire
\begin{itemize}
\item de l'objet Config : liste de propriétés à ne pas vérifier de manière temporaire (ex. : pour un calcul) ;
\item d'un objet Option : liste de propriétés à ne jamais vérifier pour l'objet Option (ex. : basic/normal/expert) ;
\end{itemize}
\item owner : propriétaire de l'application.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Config}
\begin{itemize}
\item Config/SubConfig :
\begin{itemize}
\item descr : l'objet OptionDescription ;
\end{itemize}
\item Config :
\begin{itemize}
\item settings ;
\item values.
\end{itemize}
\item objet Config unique par serveur ;
\item objet SubConfig construit "à la demande" ;
\item création du cache de l'objet OptionDescription si nécessaire.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Nouveautés version 0.48}
\begin{itemize}
\item Création des Values ;
\item séparation stricte Option/Settings/Values/Config ;
\item Option/OptionDescription ne sont plus modifiées ;
\item optimisation mémoire/temps de chargement ;
\item suppression des adaptations spécifiques à l'ancien gen\_config et nettoyage de l'API.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Reste à faire pour la version 1}
\begin{itemize}
\item Finir le nettoyage de Config ;
\item créer un object MetaConfig pour Zéphir.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Optimisations}
\begin{itemize}
\item ConfigObj/fichier INI trop lent et pas adapté ;
\item voir si les variables de Values/Settings => base de données ;
\item cache des valeurs calculées (notamment pour le Zéphir).
\end{itemize}
\end{frame}
\section{Intégration à Créole}
\begin{frame}{Plan}
\small \tableofcontents[currentsection, hideothersubsections]
\end{frame}
\begin{frame}
\frametitle{Propriétés}
\begin{itemize}
\item Liste des propriétés utilisées :
\begin{itemize}
\item *mandatory* : variable obligatoire ;
\item hidden : variable cachée (mais accessible en lecture seule) ;
\item disabled : variable désactivée (jamais accessible) ;
\item *frozen* : non modifiable ;
\item auto\_freeze : variable non modifiable si enregistrée ;
\item force\_default\_on\_freeze : retour à la valeur par défaut si frozen ;
\item basic ou normal ou expert : les modes ;
\end{itemize}
\item dans la gen\_config :
\begin{itemize}
\item defaut : read\_write ;
\item mode : ajoute les modes supérieurs au mode courant ;
%FIXME je ne suis pas sur que le mode soit mis par défaut
\item "debug" : active "hidden".
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Requires}
\begin{itemize}
\item hidden\_if\_(not\_)in == disabled\_if\_(not\_)in => disabled
\item freeze\_if\_(not\_)in => frozen + hidden + force\_default\_on\_freeze
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Permissives}
\begin{itemize}
\item Pour la Config : basic, normal, expert, hidden ;
\item variable modifiée : basic, normal, expert.
\end{itemize}
\end{frame}
\section{Performances}
\begin{frame}{Plan}
\small \tableofcontents[currentsection, hideothersubsections]
\end{frame}
\begin{frame}
\frametitle{Mémoire}
\begin{itemize}
\item UnicodeOption : 620 bytes
\item OptionDescription : 960 bytes (+ cache)
\item Values : 344 bytes
\item Settings : 416 bytes
\item Config : 384 bytes
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Temps}
\begin{itemize}
\item 100 000 UnicodeOptions : 1.460 seconds
\item 100 000 OptionDescriptions : 2.257 seconds
\item 1er Config avec 100 000 UnicodeOptions et 100 000 OptionDescriptions : 0.977 seconds
\item 100 000 Configs : 3.111 seconds
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Cas pratique}
\begin{itemize}
\item Serveur avec 294 variables.
\item 1 variante, 1 serveur :
\begin{itemize}
\item 812 280 bytes
\item 0.061 seconds
\end{itemize}
\item 1 variante * 10 serveurs :
\begin{itemize}
\item 1 155 064 bytes
\item 0.326 seconds
\end{itemize}
\item 10 variantes * 1 serveurs :
\begin{itemize}
\item 4 414 904 bytes
\item 0.598 seconds
\end{itemize}
\item 10 variantes * 100 serveurs :
\begin{itemize}
\item sans eol : 0.8 seconds
\item avec eol : 21 seconds
\end{itemize}
\end{itemize}
\end{frame}
\section{Conclusion}
\begin{frame}{Plan}
\small \tableofcontents[currentsection, hideothersubsections]
\end{frame}
\begin{frame}
\frametitle{Conclusion}
\begin{itemize}
\item Créole est un environnement complexe :
\begin{itemize}
\item beaucoup de variables, mais peu de valeurs modifiées ;
\item valeur par défaut provenant de différentes sources (défaut, variante, calcul, ...) ;
\item types de valeur différents ;
\item peut évoluer/être redéfini ;
\item gestion de différents modes (basic, normal, expert) ;
\item valeur obligatoire ;
\item valeur simple/multiple/groupée ;
\item valeur calculée ;
\item valeur inaccessible ;
\item utilisation non arborescente d'une structure arborescente ;
\item ... ;
\end{itemize}
\item Tiramisu est adapté :
\begin{itemize}
\item structure de données volatile (pas besoin de réflecteur) ;
\item rapide/économe en mémoire ;
\item très flexible.
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Licence}
Cette œuvre est mise à disposition sous licence \href{http://creativecommons.org/licenses/by-sa/2.0/fr/}{\textsc{cc-by-sa-2.0}}
\begin{itemize}
\item Attribution
\item Partage dans les Mêmes Conditions 2.0
\item France
\end{itemize}
Pour voir une copie de cette licence, visitez
\href{http://creativecommons.org/licenses/by-sa/2.0/fr/}{http://creativecommons.org/licenses/by-sa/2.0/fr/}
ou écrivez à Creative Commons, 444 Castro Street, Suite 900,
Mountain View, California, 94041, USA.
\end{frame}
\end{document}