diff --git a/tiramisu.tex b/tiramisu.tex new file mode 100644 index 0000000..2d1c06f --- /dev/null +++ b/tiramisu.tex @@ -0,0 +1,398 @@ +\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} + \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}