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