Add LaTeX source folder

This commit is contained in:
Fred Pauchet 2022-03-23 09:05:33 +01:00
parent ac78de067c
commit a6290ae866
2 changed files with 296 additions and 0 deletions

View File

@ -0,0 +1,3 @@
\chapter{Licence}

293
sources/main.tex Normal file
View File

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