\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}