\textbf{Flymingo} est la suite de produits principale de \entityb{Moment}, qui est aujourd'hui déployée dans plus de 200 avions, 30 bateaux et 300 trains.
\textbf{Mood} (auparavant appelé \entity{Flymingo}) est la suite de produits principale de \entityb{Moment},
qui est aujourd'hui déployée dans plus de 200 avions, 30 bateaux et 300 trains.
La plateforme \entity{Flymingo} permet aux companies de transport de proposer du divertissement à ses passagers,
avec une installation et une gestion simplifiée et sans le besoin d'installer des tablettes dans les sièges des passagers.
@ -277,15 +283,20 @@ sur lequel les passagers peuvent se connecter pour profiter des divertissements.
Différentes applications sont développées autour de la \entity{Flymingo Box}:
\begin{description}
\item[Flymingo Entertainment] aussi appelé \entity{Flymingo Digital}, est une application web,
\item[Mood Entertainment] aussi appelé \entity{Mood Digital}, est une application web,
sur laquelle les passagers se connectent pour regarder des films,
lire de la presse ou jouer à des jeux dans le navigateur.
L'application peut être utilisée sur les téléphones, tablettes et ordinateurs.
\\
L'application peut aussi être adaptée visuellement aux besoins des clients,
L'application peut aussi être adaptée aux besoins des clients, pour être en accord avec le langage visuel de leur marque
ou pour supporter différents services comme l'achat en ligne, les informations de voyage, etc.
\end{description}
\begin{description}
\item[Mood TV] est une application tournant sur les télévisions connectées et permettant de profiter du contenu directement sur une télévision.
Ces télévisions sont surtout utilisées sur les bateaux de croisière.
\end{description}
\begin{description}
\item[Content API et Media API] sont deux \term{API} (interfaces de programmation) qui gèrent les films et autres médias stockées sur la box,
ainsi que leurs informations (titres, durée, etc.).
@ -294,33 +305,11 @@ Différentes applications sont développées autour de la \entity{Flymingo Box}:
\begin{description}
\item[La \og Crew App \fg] est une application sur \entity{iOS} pour les membres de l'équippage,
qui permet de mettre en pause la lecture des médias pour faire des annonces aux passagers,
accéder aux informations des achats faits sur l'application \entity{Flymingo Digital}.
Afin de pouvoir comparer différents ensembles de valeurs,
@ -1047,6 +1033,45 @@ Faire ce travail m'a permis d'avoir une compréhension plus profonde sur différ
\section{Conclusion}
\subsection{Synthèse des résultats}
J'ai été globalement satisfait du travail que j'ai pu fournir durant ce stage:
les résultats attendus étaient obtenus (le système d'envoi de mail marche encore au moment où j'écris ce rapport, la télévision charge consistemment en moins de 5 secondes, etc.)
et j'ai pu écrire des tests unitaires pour une bonne partie de mon code, ce qui permettra de maintenir sa fonctionnalité dans les années à venir.
\subsection{Appréciation des technologies utilisées}
J'ai eu durant ce stage des sentiments partagés \entity{React}:
D'un côté, je trouve que la programmation avec React souffre de la décision de React à être à mi-chemin entre de la programmation réactive \og fine \fg\cite{reactivity}
et de la gestion manuelle de mise à jour.
J'ai rencontré beaucoup de bugs causés par des effets de bord du système de React,
dont certains qui ne pouvaient qu'être résolus en changeant en profondeur l'organisation de plusieurs composants.
De l'autre côté, le refactor de \entity{Mood TV} pour extraire ses composants et les placer dans une librairie était très agréable,
car j'avais le contrôle sur l'organisation que ces composants allaient avoir, et le résultat était très satisfaisant une fois ces composants agencés ensemble.
J'ai apprécié la programmation autour de \entity{Nest.JS}:
le principe d'inversion de contrôle permet d'écrire du code facilement vérifiable et réutilisable,
ce qui rend la base de code plus agréable à naviguer et utiliser.
J'ai enfin été agréablement surpris par \entity{TypeScript}:
si on active l'ensemble des vérifications du code, alors il y a très peu de chances d'avoir des erreurs de type au runtime.
Le système de type est assez avancé pour pouvoir concevoir des types qui garantissent des invariantes qui auraient été difficiles à garantir dans d'autres langages typés.
Écrire des types avancés en TypeScript est presque un art. \figref{types}
\subsection{Estimation du gain apporté}
Pour donner une estimation du gain que mon travail a apporté à l'entreprise,
j'estime que j'ai contribué à 10\% du code sur l'ensemble des applications dévelopées pour \entity{Moment Care}.
Si on estime ensuite que notre équipe contribue à la moitié de la valeur ajoutée par \entity{Moment Care},
et que \entity{Moment Care} génère environ 200,000€ par an (les bénéfices de l'année 2022 de \entity{Moment Care} étaient de 183,000€),
alors on obtient une fourchette basse du gain que j'ai apporté, qui s'élève à 10,000€/an pour les quelques années à suivre.
Naturellement, ma part de contribution va diminuer, via du code écrit par d'autres personnes dans le futur, et via des refactors de mon code.
Une rapide analyse du code sur la monorepository indique que la demi-vie du code est de 6 mois; \figref{halflife}
ceci donne environ 2.9 années d'espérance à mon code, soit une fourchette basse de 30,000€ de gain sur les années à venir.
\makeutbmbackcover{}
\newpage
@ -1059,8 +1084,6 @@ Faire ce travail m'a permis d'avoir une compréhension plus profonde sur différ
\newpage
\section{Annexes}
\subsection{Listings de code}
\inputfig{nestjs1}
\inputfig{nestjs2}
\inputfig{email-src-hbs}
@ -1069,4 +1092,12 @@ Faire ce travail m'a permis d'avoir une compréhension plus profonde sur différ
\inputfig{fromeffectloop}
\inputfig{normalitytest}
\begin{figure}[H]
\includegraphics[width=\textwidth]{survival_plot}
\caption{Graphique de survivabilité du code sur la monorepository}