relecture du fichier

This commit is contained in:
Gregory Trullemans 2023-04-21 15:44:57 +02:00
parent 7c4682e29b
commit d0dc086e93
1 changed files with 29 additions and 38 deletions

View File

@ -5,7 +5,7 @@
Concrètement, nous pourrions tout à fait nous limiter à Notepad ou Notepad++. Concrètement, nous pourrions tout à fait nous limiter à Notepad ou Notepad++.
Mais à moins d'aimer se fouetter avec un câble USB, nous apprécions la complétion du code, la coloration syntaxique, l'intégration des tests unitaires et d'un debugger, ainsi que deux-trois sucreries qui feront plaisir à n'importe quel développeur. Mais à moins d'aimer se fouetter avec un câble USB, nous apprécions la complétion du code, la coloration syntaxique, l'intégration des tests unitaires et d'un debugger, ainsi que deux-trois sucreries qui feront plaisir à n'importe quel développeur.
Si vous manquez d'idées ou si vous ne savez pas par où commencer: Si vous manquez d'idées ou si vous ne savez pas par où commencer :
\begin{itemize} \begin{itemize}
\item \item
@ -42,13 +42,11 @@ Ceci dit, disposer d'un terminal séparé facilite parfois certaines tâches.
A nouveau, si vous manquez d'idées : A nouveau, si vous manquez d'idées :
\begin{enumerate} \begin{enumerate}
\item \item Soit vous utilisez celui qui intégré à VSCodium et qui fera suffisament bien son travail
Soit vous utilisez celui qui intégré à VSCodium et qui fera suffisament bien son travail
\item \item
Si vous êtes sous Windows, téléchargez une copie de \href{https://cmder.net/}{Cmder}. Si vous êtes sous Windows, téléchargez une copie de \href{https://cmder.net/}{Cmder}.
Il n'est pas le plus rapide, mais propose une intégration des outils Unix communs (\texttt{ls}, \texttt{pwd}, \texttt{grep}, \texttt{ssh}, \texttt{git}, \ldots\hspace{0pt}) sans trop se fouler. Il n'est pas le plus rapide, mais propose une intégration des outils Unix communs (\texttt{ls}, \texttt{pwd}, \texttt{grep}, \texttt{ssh}, \texttt{git}, \ldots\hspace{0pt}) sans trop se fouler.
\item \item Pour tout autre système, vous devriez disposer en natif de ce qu'il faut.
Pour tout autre système, vous devriez disposer en natif de ce qu'il faut.
\end{enumerate} \end{enumerate}
\begin{figure}[H] \begin{figure}[H]
@ -61,7 +59,7 @@ A nouveau, si vous manquez d'idées :
\section{Un gestionnaire de mots de passe} \section{Un gestionnaire de mots de passe}
Nous en auront besoin pour gé(né)rer des phrases secrètes pour nos applications. Nous en auront besoin pour gé(né)rer des phrases secrètes pour nos applications.
Si vous n'en utilisez pas déjà un, partez sur \href{https://keepassxc.org/}{KeepassXC}: il est multi-plateformes, suivi et s'intègre correctement aux différents environnements, tout en restant accessible. Si vous n'en utilisez pas déjà un, partez sur \href{https://keepassxc.org/}{KeepassXC} : il est multi-plateformes, suivi et s'intègre correctement aux différents environnements, tout en restant accessible.
\includegraphics{images/environment/keepass.png} \includegraphics{images/environment/keepass.png}
@ -73,40 +71,34 @@ Il est une aide précieuse pour développer rapidement des preuves de concept, s
Ses deux plus gros défauts concernent sa courbe d'apprentissage pour les nouveaux venus et la complexité des actions qu'il permet de réaliser. Ses deux plus gros défauts concernent sa courbe d'apprentissage pour les nouveaux venus et la complexité des actions qu'il permet de réaliser.
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics{images/xkcd-1597-git.png} \includegraphics{images/xkcd-1597-git.png}
\caption{\url{https://xkcd.com/1597/}} \caption{\url{https://xkcd.com/1597/}}
\end{figure} \end{figure}
Même pour un développeur solitaire, un système de gestion de versions (quel qu'il soit) reste indispensable. Même pour un développeur solitaire, un système de gestion de versions (quel qu'il soit) reste indispensable.
Chaque "\textbf{branche}" correspond à une tâche à réaliser: un bogue à corriger (\emph{Hotfix A}), une nouvelle fonctionnalité à ajouter ou un "\emph{truc à essayer}" \footnote{Oui, comme dans "Attends, j'essaie vite un truc, si ça marche, c'est beau."} (\emph{Feature A} et \emph{Feature B}). Chaque "\textbf{branche}" correspond à une tâche à réaliser: un bogue à corriger (\emph{Hotfix A}), une nouvelle fonctionnalité à ajouter ou un "\emph{truc à essayer}"\footnote{Oui, comme dans "Attends, j'essaie vite un truc, si ça marche, c'est beau."} (\emph{Feature A} et \emph{Feature B}).
Chaque "\textbf{commit}" correspond à une sauvegarde atomique d'un état ou d'un ensemble de modifications cohérentes entre elles.\footnote{Il convient donc de s'abstenir de modifier le CSS d'une application et la couche d'accès à la base de données, sous peine de se faire huer par ses relecteurs au prochain stand-up.} Chaque "\textbf{commit}" correspond à une sauvegarde atomique d'un état ou d'un ensemble de modifications cohérentes entre elles.\footnote{Il convient donc de s'abstenir de modifier le CSS d'une application et la couche d'accès à la base de données, sous peine de se faire huer par ses relecteurs au prochain stand-up.}
De cette manière, il est beaucoup plus facile pour le développeur de se concenter sur un sujet en particulier, dans la mesure où celui-ci ne doit pas obligatoirement être clôturé pour appliquer un changement de contexte. De cette manière, il est beaucoup plus facile pour le développeur de se concenter sur un sujet en particulier, dans la mesure où celui-ci ne doit pas obligatoirement être clôturé pour appliquer un changement de contexte.
\begin{figure}[H] \begin{figure}[H]
\centering \centering
\includegraphics{images/diagrams/git-workflow.png} \includegraphics{images/diagrams/git-workflow.png}
\caption{Git en action} \caption{Git en action}
\end{figure} \end{figure}
Cas pratique: vous développez cette nouvelle fonctionnalité qui va révolutionner le monde de demain et d'après-demain, quand, tout à coup (!), vous vous rendez compte que vous avez perdu votre conformité aux normes PCI parce les données des titulaires de cartes ne sont pas isolées correctement. Cas pratique : vous développez cette nouvelle fonctionnalité qui va révolutionner le monde de demain et d'après-demain, quand, tout à coup (!), vous vous rendez compte que vous avez perdu votre conformité aux normes PCI parce les données des titulaires de cartes ne sont pas isolées correctement.
Il suffit alors de: Il suffit alors de :
\begin{enumerate} \begin{enumerate}
\item \item Sauver le travail en cours (\texttt{git\ add\ .\ \&\&\ git\ commit\ -m\ {[}WIP{]}})
Sauver le travail en cours (\texttt{git\ add\ .\ \&\&\ git\ commit\ -m\ {[}WIP{]}}) \item Revenir sur la branche principale (\texttt{git\ checkout\ main})
\item \item Créer un "hotfix" (\texttt{git\ checkout\ -b\ hotfix/pci-compliance})
Revenir sur la branche principale (\texttt{git\ checkout\ main}) \item Solutionner le problème (sans doute un \texttt{;} en trop ?)
\item \item Sauver le correctif sur cette branche (\texttt{git\ add\ .\ \&\&\ git\ commit\ -m\ "Did\ it!"})
Créer un "hotfix" (\texttt{git\ checkout\ -b\ hotfix/pci-compliance}) \item Récupérer ce correctif sur la branche principal (\texttt{git\ checkout\ main\ \&\&\ git\ merge\ hotfix/pci-compliance})
\item
Solutionner le problème (sans doute un \texttt{;} en trop ?)
\item
Sauver le correctif sur cette branche (\texttt{git\ add\ .\ \&\&\ git\ commit\ -m\ "Did\ it!"})
\item
Récupérer ce correctif sur la branche principal (\texttt{git\ checkout\ main\ \&\&\ git\ merge\ hotfix/pci-compliance})
\item \item
Et revenir tranquillou sur votre branche de développement pour fignoler ce générateur de noms de dinosaures rigolos que l'univers vous réclame à cor et à a cri (\texttt{git\ checkout\ features/dinolol}) Et revenir tranquillou sur votre branche de développement pour fignoler ce générateur de noms de dinosaures rigolos que l'univers vous réclame à cor et à a cri (\texttt{git\ checkout\ features/dinolol})
\end{enumerate} \end{enumerate}
@ -118,10 +110,11 @@ Les plus connus sont \href{https://www.gitflow.com/}{Gitflow} et \href{https://w
\subsection{Décrire ses changements} \subsection{Décrire ses changements}
La description d'un changement se fait \emph{via} la commande \texttt{git\ commit}. La description d'un changement se fait \emph{via} la commande \texttt{git\ commit}.
Il est possible de lui passer directement le message associé à ce changement grâce à l'attribut \texttt{-m}, mais c'est une pratique relativement déconseillée: un \emph{commit} ne doit effectivement pas obligatoirement être décrit sur une seule ligne. Il est possible de lui passer directement le message associé à ce changement grâce à l'attribut \texttt{-m}, mais c'est une pratique relativement déconseillée : un \emph{commit} ne doit effectivement pas obligatoirement être décrit sur une seule ligne.
Une description plus complète, accompagnée des éventuels tickets ou références, sera plus complète, plus agréable à lire, et plus facile à revoir pour vos éventuels relecteurs. Une description plus complète, accompagnée des éventuels tickets ou références, sera plus complète, plus agréable à lire, et plus facile à revoir pour vos éventuels relecteurs.
De plus, la plupart des plateformes de dépôts présenteront ces informations de manière ergonomique. Par exemple: De plus, la plupart des plateformes de dépôts présenteront ces informations de manière ergonomique.
Par exemple :
\begin{figure}[H] \begin{figure}[H]
\centering \centering
@ -144,11 +137,12 @@ D'autres moteurs nécessitent des librairies tierces (Oracle, Microsoft SQL Serv
\subsection{SQLite} \subsection{SQLite}
Parfois, SQLite peut être une bonne option: Parfois, SQLite peut être une bonne option :
\begin{quote} \begin{quote}
Write througput is the area where SQLite struggles the most, but there's not a ton of compelling data online about how it fares, so I got some of my own: I spun up a Equinix m3.large.x86 instance, and ran a slightly modified1 version of the SQLite kvtest2 program on it. Write througput is the area where SQLite struggles the most, but there's not a ton of compelling data online about how it fares, so I got some of my own: I spun up a Equinix m3.large.x86 instance, and ran a slightly modified1 version of the SQLite kvtest2 program on it.
Writing 512 byte blobs as separate transactions, in WAL mode with synchronous=normal3, temp\_store=memory, and mmap enabled, I got 13.78$\mu$s per write, or \textasciitilde72,568 writes per second. Going a bit larger, at 32kb writes, I got 303.74$\mu$s per write, or \textasciitilde3,292 writes per second. Writing 512 byte blobs as separate transactions, in WAL mode with synchronous=normal3, temp\_store=memory, and mmap enabled, I got 13.78$\mu$s per write, or \textasciitilde72,568 writes per second.
Going a bit larger, at 32kb writes, I got 303.74$\mu$s per write, or \textasciitilde3,292 writes per second.
That's not astronomical, but it's certainly way more than most websites being used by humans need. That's not astronomical, but it's certainly way more than most websites being used by humans need.
If you had 10 million daily active users, each one could get more than 600 writes per day with that. If you had 10 million daily active users, each one could get more than 600 writes per day with that.
\end{quote} \end{quote}
@ -168,16 +162,13 @@ Parfois, SQLite peut être une bonne option:
\subsection{Gestionnaires} \subsection{Gestionnaires}
Il n'est pas obligatoire de disposer d'une application de gestion pour ces moteurs: pour les cas d'utilisation simples, le shell Django pourra largement suffire (nous y reviendrons). Il n'est pas obligatoire de disposer d'une application de gestion pour ces moteurs : pour les cas d'utilisation simples, le shell Django pourra largement suffire (nous y reviendrons).
Mais pour faciliter la gestion des bases de données elles-même, et si vous n'êtes pas à l'aise avec la ligne de commande, choisissez l'une des applications d'administration ci-dessous en fonction du moteur de base de données que vous souhaitez utiliser. Mais pour faciliter la gestion des bases de données elles-même, et si vous n'êtes pas à l'aise avec la ligne de commande, choisissez l'une des applications d'administration ci-dessous en fonction du moteur de base de données que vous souhaitez utiliser.
\begin{itemize} \begin{itemize}
\item \item Pour \textbf{PostgreSQL}, il existe \href{https://www.pgadmin.org/}{pgAdmin}
Pour \textbf{PostgreSQL}, il existe \href{https://www.pgadmin.org/}{pgAdmin} \item Pour \textbf{MariaDB} ou \textbf{MySQL}, partez sur \href{https://www.phpmyadmin.net/}{PHPMyAdmin}
\item \item Pour \textbf{SQLite}, il existe \href{https://sqlitebrowser.org/}{SQLiteBrowser} PHPMyAdmin ou PgAdmin.
Pour \textbf{MariaDB} ou \textbf{MySQL}, partez sur \href{https://www.phpmyadmin.net/}{PHPMyAdmin}
\item
Pour \textbf{SQLite}, il existe \href{https://sqlitebrowser.org/}{SQLiteBrowser} PHPMyAdmin ou PgAdmin.
\end{itemize} \end{itemize}
\section{Intégration continue} \section{Intégration continue}