From a6290ae866886bf5826d03c4af95351c1dcbc973 Mon Sep 17 00:00:00 2001 From: Fred Pauchet Date: Wed, 23 Mar 2022 09:05:33 +0100 Subject: [PATCH] Add LaTeX source folder --- sources/chapters/licence.tex | 3 + sources/main.tex | 293 +++++++++++++++++++++++++++++++++++ 2 files changed, 296 insertions(+) create mode 100644 sources/chapters/licence.tex create mode 100644 sources/main.tex diff --git a/sources/chapters/licence.tex b/sources/chapters/licence.tex new file mode 100644 index 0000000..76c1dd1 --- /dev/null +++ b/sources/chapters/licence.tex @@ -0,0 +1,3 @@ +\chapter{Licence} + + diff --git a/sources/main.tex b/sources/main.tex new file mode 100644 index 0000000..3696235 --- /dev/null +++ b/sources/main.tex @@ -0,0 +1,293 @@ +\documentclass[twoside=no,parskip=half,numbers=enddot,bibliography=totoc,index=totoc,listof=totoc]{scrbook} +\usepackage{makeidx} +\usepackage[french]{babel} +\usepackage{csquotes} +\usepackage{hyperref} +\usepackage{setspace} +\onehalfspacing + +\makeindex + +\title{Minor Swing with Django} +\author{Fred} +\date{Entre 2015 et 2032} +\publishers{Me, Myself and I Editions} + +\setcounter{tocdepth}{1} +\begin{document} +\maketitle + +\frontmatter + +\include{chapters/licence.tex} + + +\chapter{Introduction} + +\begin{quote} +The only way to go fast, is to go well + +--- Robert C. Martin +\end{quote} + +Nous n'allons pas vous mentir: il existe enormément de tutoriaux très +bien réalisés sur "\emph{Comment réaliser une application Django}" et +autres "\emph{Déployer votre code en 2 minutes}". Nous nous disions +juste que ces tutoriaux restaient relativement haut-niveaux et se +limitaient à un contexte donné, sans réellement préparer à la +maintenance et au suivi de l'application nouvellement développée. + +L'idée du texte ci-dessous est de jeter les bases d'un bon +développement, en survolant l'ensemble des outils permettant de suivre +des lignes directrices reconnues, de maintenir une bonne qualité de code +au travers des différentes étapes menant jusqu'au déploiement et de +s'assurer du maintient correct de la base de code, en permettant à +n'importe qui de reprendre ce qui aura déjà été écrit. + +Ces idées ne s'appliquent pas uniquement à Django et à son cadre de +travail, ni même au langage Python. Ces deux sujets sont cependant de +bons candidats et leur cadre de travail est bien défini, documenté et +suffisamment flexible. + +Django se présente comme un \emph{Framework Web pour perfectionnistes +ayant des deadlines} cite:{[}django{]} et suit ces quelques principes +cite:{[}django\_design\_philosophies{]}: + +\begin{itemize} +\item + Faible couplage et forte cohésion, pour que chaque composant dispose + de son indépendance, en n'ayant aucune connaissance des autres couches + applicatives. Ainsi, le moteur de rendu ne connait absolument rien + l'existence du moteur de base de données, tout comme le système de + vues ne sait pas quel moteur de rendu est utilisé. +\item + Plus de fonctionnalités avec moins de code: chaque application Django + doit utiliser le moins de code possible +\item + \emph{Don't repeat yourself}, chaque concept ou morceau de code ne + doit être présent qu'à un et un seul endroit de vos dépôts. +\item + Rapidité du développement, en masquant les aspects fastidieux du + développement web actuel +\end{itemize} + +Mis côte à côte, le suivi de ces principes permet une bonne stabilité du +projet à moyen et long terme. + +Comme nous le verrons par la suite, et sans être parfait, Django offre +une énorme flexibilité qui permet de se laisser le maximum d'options +ouvertes tout en permettant d'expérimenter facilement plusieurs pistes, +jusqu'au moment de prendre une vraie décision. Dans la majorité des cas +problématiques pouvant être rencontrés lors du développement d'une +application Web, Django proposera une solution pragmatique, +compréhensible et facile à mettre en place. En résumé de ce paragraphe, +pour tout problème commun, vous disposerez d'une solution logique. Tout +pour plaire à n'importe quel directeur IT. + +\textbf{Dans la première partie}, nous verrons comment partir d'un +environnement sain, comment le configurer correctement, comment +installer Django de manière isolée et comment démarrer un nouveau +projet. Nous verrons rapidement comment gérer les dépendances, les +versions et comment appliquer et suivre un score de qualité de notre +code. Ces quelques points pourront être appliqués pour n'importe quel +langage ou cadre de travail. Nous verrons aussi que la configuration +proposée par défaut par le framework n'est pas idéale dans la majorité +des cas. + +Pour cela, nous présenterons différents outils, la rédaction de tests +unitaires et d'intégration pour limiter les régressions, les règles de +nomenclature et de contrôle du contenu, comment partir d'un squelette +plus complet, ainsi que les bonnes étapes à suivre pour arriver à un +déploiement rapide et fonctionnel avec peu d'efforts. + +A la fin de cette partie, vous disposerez d'un code propre et d'un +projet fonctionnel, bien qu'encore un peu inutile. + +\textbf{Dans la deuxième partie}, nous aborderons les grands principes +de modélisation, en suivant les lignes de conduites du cadre de travail. +Nous aborderons les concepts clés qui permettent à une application de +rester maintenable, les formulaires, leurs validations, comment gérer +les données en entrée, les migrations de données et l'administration. + +\textbf{Dans la troisième partie}, nous détaillerons précisément les +étapes de déploiement, avec la description et la configuration de +l'infrastructure, des exemples concrets de mise à disposition sur deux +distributions principales (Debian et CentOS), sur une \emph{*Plateform +as a Service*}, ainsi que l'utilisation de Docker et Docker-Compose. + +Nous aborderons également la supervision et la mise à jour d'une +application existante, en respectant les bonnes pratiques +d'administration système. + +\textbf{Dans la quatrième partie}, nous aborderons les architectures +typées \emph{entreprise}, les services et les différentes manières de +structurer notre application pour faciliter sa gestion et sa +maintenance, tout en décrivant différents types de scénarii, en fonction +des consommateurs de données. + +\textbf{Dans la cinquième partie}, nous mettrons ces concepts en +pratique en présentant le développement en pratique de deux +applications, avec la description de problèmes rencontrés et la solution +qui a été choisie: définition des tables, gestion des utilisateurs, +\ldots\hspace{0pt} et mise à disposition. + +\hypertarget{_pour_qui}{% +\subsection{Pour qui ?}\label{_pour_qui}} + +Avant tout, pour moi. Comme le disait le Pr Richard Feynman: "\emph{Si +vous ne savez pas expliquer quelque chose simplement, c'est que vous ne +l'avez pas compris}". \footnote{Et comme l'ajoutait Aurélie Jean dans de + L'autre côté de la machine: \emph{"Si personne ne vous pose de + questions suite à votre explication, c'est que vous n'avez pas été + suffisamment clair !"} cite:{[}other\_side}{]} + +Ce livre s'adresse autant au néophyte qui souhaite se lancer dans le +développement Web qu'à l'artisan qui a besoin d'un aide-mémoire et qui +ne se rappelle plus toujours du bon ordre des paramètres, ou à l'expert +qui souhaiterait avoir un aperçu d'une autre technologie que son domaine +privilégié de compétences. + +Beaucoup de concepts présentés peuvent être oubliés ou restés inconnus +jusqu'au moment où ils seront réellement nécessaires. A ce moment-là, +pour peu que votre mémoire ait déjà entraperçu le terme, il vous sera +plus facile d'y revenir et de l'appliquer. + +\hypertarget{_pour_aller_plus_loin}{% +\subsection{Pour aller plus loin}\label{_pour_aller_plus_loin}} + +Il existe énormément de ressources, autant spécifiques à Django que plus +généralistes. Il ne sera pas possible de toutes les détailler; faites un +tour sur + +\begin{itemize} +\item + \url{https://duckduckgo.com}, +\item + \url{https://stackoverflow.com}, +\item + \url{https://ycombinator.com}, +\item + \url{https://lobste.rs/}, +\item + \url{https://lecourrierduhacker.com/} +\item + ou \url{https://www.djangoproject.com/}. +\end{itemize} + +Restez curieux, ne vous enclavez pas dans une technologie en particulier +et gardez une bonne ouverture d'esprit. + +\hypertarget{_conventions}{% +\subsection{Conventions}\label{_conventions}} + +Les notes indiquent des anecdotes. + +Les conseils indiquent des éléments utiles, mais pas spécialement +indispensables. + +Les notes importantes indiquent des éléments à retenir. + +Ces éléments indiquent des points d'attention. Les retenir vous fera +gagner du temps en débuggage. + +Les avertissements indiquent un (potentiel) danger ou des éléments +pouvant amener des conséquences pas spécialement sympathiques. + +Les morceaux de code source seront présentés de la manière suivante: + +\chapter{Remerciements} + + +\tableofcontents +\listoffigures +\listoftables + +\mainmatter +\part{Environnement et méthodes de travail} + +\chapter{Poésie de la programmation} +Text +\chapter{Fiabilité, évolutivité et maintenabilité} + +\chapter{Eléments d'architecture} + +\chapter{Le langage Python} + +\chapter{Démarrer un nouveau projet} + + +\part{Principes fondamentaux de Django} + +\chapter{Modélisation} + +\chapter{Migrations} + +\chapter{Shell} + +\chapter{Administration} + +\chapter{Forms} + +\chapter{Processus d'authentification} + +\chapter{Context Processors} + +\chapter{Conclusions} + +\part{Méthodes de déploiement} + +\chapter{Infrastructure et composants} + +\chapter{Code source} + +\chapter{Outils de supervision et de mise à disposition} + +\chapter{Journaux} + +\chapter{Méthodes} + +\chapter{On-premise: Debian} + +\chapter{PaaS: Heroku} + +\chapter{Outils complémentaires} + +\chapter{Ressources} + +\chapter{Conclusions} + +\part{Services Oriented Applications} + +\chapter{Application Programming Interfaces} + +\chapter{A/B Testing} + +\chapter{Modèles et relations} + +\chapter{Filtres et recherches} + +\chapter{URLs et espaces de noms} + +\chapter{i18n / l20n} + +\chapter{Conclusions} + +\part{Go Live!} + +\chapter{Gwift} + +\chapter{Khana} + +\chapter{Tests unitaires} + +\chapter{Refactoring} + +\chapter{Conclusions} + +\backmatter + +\printindex + +\bibliography{bibiography.bib} + +\end{document}