mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-22 14:13:21 +00:00
Finish the report
This commit is contained in:
parent
f6f78533e8
commit
d8c9575f88
BIN
doc/TO_Skia_LoJ/Rapport.pdf
Normal file
BIN
doc/TO_Skia_LoJ/Rapport.pdf
Normal file
Binary file not shown.
@ -49,9 +49,9 @@
|
|||||||
|
|
||||||
|
|
||||||
%inner meta
|
%inner meta
|
||||||
\title{Sith: Détail de quelques applications}
|
\title{Sith: Développement de nouvelles applications}
|
||||||
\author{Skia (Florent JACQUET)\\
|
\author{Skia (Florent \textsc{Jacquet})\\
|
||||||
Lo-J (Guillaume Renaud)}
|
Lo-J (Guillaume \textsc{Renaud} )}
|
||||||
\date{Dernière version: \today}
|
\date{Dernière version: \today}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
@ -61,13 +61,26 @@ Lo-J (Guillaume Renaud)}
|
|||||||
\tableofcontents
|
\tableofcontents
|
||||||
|
|
||||||
\chapter*{Remerciements}
|
\chapter*{Remerciements}
|
||||||
\section*{Lo-J (Guillaume RENAUD)}
|
\section*{Lo-J (Guillaume \textsc{Renaud})}
|
||||||
\par Je remercie tout d’abord Monsieur Frédéric Lassabe qui nous a permis d’effectuer cette TO52 lors de notre cursus à l’UTBM, nous permettant ainsi de mêler nôtre travail scolaire à nôtre envie de participer à l’amélioration de la vie associative de l’UTBM.
|
\par Je remercie tout d'abord Monsieur Frédéric \textsc{Lassabe} qui nous a permis d'effectuer cette TO52 lors de notre cursus à
|
||||||
|
l'UTBM, nous permettant ainsi de mêler nôtre travail scolaire à nôtre envie de participer à l'amélioration de la vie
|
||||||
|
associative de l'UTBM.
|
||||||
|
|
||||||
\par Je tiens aussi à remercier Florent Jacquet qui m’a aidé tout au long de ce travail et à qui j’ai pu poser mes différentes questions pour apprendre et comprendre plus rapidement que si j’avais été seul.
|
\par Je tiens aussi à remercier Florent \textsc{Jacquet} qui m'a aidé tout au long de ce travail et à qui j'ai pu poser mes
|
||||||
|
différentes questions pour apprendre et comprendre plus rapidement que si j'avais été seul.
|
||||||
|
|
||||||
|
\section*{Skia (Florent \textsc{Jacquet})}
|
||||||
|
\par Je remercie également Frédéric \textsc{Lassabe} , non seulement pour la TO, mais également pour la précédente TW. Sans ces
|
||||||
|
deux UV hors emploi du temps, jamais un projet comme ce site de l'AE n'aurait pu voir le jour. Cela a demandé beaucoup
|
||||||
|
d'investissement, et il est plus qu'appréciable de pouvoir obtenir quelques crédits en retour.
|
||||||
|
|
||||||
|
\par Je tiens également à remercier l'ensemble de l'équipe info de l'AE qui s'est motivée ce semestre à organiser des
|
||||||
|
réunions hebdomadaires afin de reprendre le projet du mieux possible. C'est maintenant à eux que va être confié le
|
||||||
|
projet, et il est agréable de constater qu'ils n'ont pas attendu le dernier moment pour se pencher sur la question.
|
||||||
|
|
||||||
|
|
||||||
\chapter{Introduction}
|
\chapter*{Introduction}
|
||||||
|
\addcontentsline{toc}{chapter}{Introduction}
|
||||||
\par Après le développement de la base du nouveau site de l'AE, le projet \emph{Sith}, au Printemps 2016, la mise en
|
\par Après le développement de la base du nouveau site de l'AE, le projet \emph{Sith}, au Printemps 2016, la mise en
|
||||||
production a pu avoir lieu avec succès fin Août 2016.
|
production a pu avoir lieu avec succès fin Août 2016.
|
||||||
|
|
||||||
@ -75,6 +88,14 @@ production a pu avoir lieu avec succès fin Août 2016.
|
|||||||
moins critiques, celles-ci n'ayant pas de rapport avec l'argent, mais tout de même très utiles pour le fonctionnement
|
moins critiques, celles-ci n'ayant pas de rapport avec l'argent, mais tout de même très utiles pour le fonctionnement
|
||||||
de l'AE.
|
de l'AE.
|
||||||
|
|
||||||
|
\par Parmis elles, se trouvait notamment une application de gestion des stocks, qui a été confiée à Lo-J, puisqu'elle
|
||||||
|
concernait en premier lieu le \emph{Bureau des Festivités} et qu'il en était le président. Il était donc parmis les
|
||||||
|
mieux placé pour évaluer le besoin et développer l'outil, d'autant qu'il fallait le concevoir depuis le début, ces
|
||||||
|
fonctions n'étant pas du tout présentes dans l'ancien site.
|
||||||
|
|
||||||
|
\par Du reste, Skia a eu la responsabilité de développer les autres applications, ou bien de gérer leur développement
|
||||||
|
lors qu'il était fait par quelqu'un d'autre.
|
||||||
|
|
||||||
\chapter{Eboutic}
|
\chapter{Eboutic}
|
||||||
\label{sec:eboutic}
|
\label{sec:eboutic}
|
||||||
\par Développeur principal: Skia
|
\par Développeur principal: Skia
|
||||||
@ -111,7 +132,7 @@ d'une documentation à l'autre, et le plus simple à ce niveau est encore de con
|
|||||||
|
|
||||||
\subsection{Accès concurrentiels}
|
\subsection{Accès concurrentiels}
|
||||||
\label{sub:acces_concurrentiels}
|
\label{sub:acces_concurrentiels}
|
||||||
\par En production, le projet Sith tourne à l'aide d'uWSGI, qui s'occupe lui de gérer les différents processus du
|
\par En production, le projet Sith tourne à l'aide d'\textbf{uWSGI}, qui s'occupe lui de gérer les différents processus du
|
||||||
logiciel. Cela se traduit par des accès concurrentiels à la base de donnée lors de l'appel de deux pages simultanément
|
logiciel. Cela se traduit par des accès concurrentiels à la base de donnée lors de l'appel de deux pages simultanément
|
||||||
qui ont besoin d'accèder aux mêmes ressources.
|
qui ont besoin d'accèder aux mêmes ressources.
|
||||||
|
|
||||||
@ -230,8 +251,8 @@ coup sûr un \emph{downtime}.
|
|||||||
\par Développeur principal: Lo-J
|
\par Développeur principal: Lo-J
|
||||||
\vskip 2em
|
\vskip 2em
|
||||||
|
|
||||||
\par Cette application s’occupe de la gestion des stocks des comptoirs de type « BAR ». Elle permet de suivre les
|
\par Cette application s'occupe de la gestion des stocks des comptoirs de type « BAR ». Elle permet de suivre les
|
||||||
quantités restantes afin de pouvoir déterminer de manière automatisée quels sont les produits qu’il faut acheter et en
|
quantités restantes afin de pouvoir déterminer de manière automatisée quels sont les produits qu'il faut acheter et en
|
||||||
quelle quantité.
|
quelle quantité.
|
||||||
|
|
||||||
\section{Liste des modèles}
|
\section{Liste des modèles}
|
||||||
@ -242,51 +263,51 @@ quelle quantité.
|
|||||||
|
|
||||||
\subsection{StockItem}
|
\subsection{StockItem}
|
||||||
\par Un StockItem possède un nom, une quantité unitaire, une quantité effective, une quantité minimale et est lié à la
|
\par Un StockItem possède un nom, une quantité unitaire, une quantité effective, une quantité minimale et est lié à la
|
||||||
classe Stock ainsi qu’à la classe ProductType. De cette manière, chaque élément appartient à un Stock et il est
|
classe Stock ainsi qu'à la classe ProductType. De cette manière, chaque élément appartient à un Stock et il est
|
||||||
catégorisé de la même manière que les Products (qui sont les objets utilisés pour la vente dans les comptoirs).
|
catégorisé de la même manière que les Products (qui sont les objets utilisés pour la vente dans les comptoirs).
|
||||||
|
|
||||||
\subsection{ShoppingList}
|
\subsection{ShoppingList}
|
||||||
\par Une ShoppingList possède un nom, une date, un booléen (fait ou à faire), un commentaire et est liée à un Stock.
|
\par Une ShoppingList possède un nom, une date, un booléen (fait ou à faire), un commentaire et est liée à un Stock.
|
||||||
Chaque ShoppingList est donc liée à un Stock ce qui permet d’avoir des listes de courses spécifique à chaque comptoir.
|
Chaque ShoppingList est donc liée à un Stock ce qui permet d'avoir des listes de courses spécifique à chaque comptoir.
|
||||||
|
|
||||||
\subsection{ShoppingListItem}
|
\subsection{ShoppingListItem}
|
||||||
\par Un ShoppingListItem possède un nom, une quantité demandée, une quantité achetée et est lié à la classe StockItem, à
|
\par Un ShoppingListItem possède un nom, une quantité demandée, une quantité achetée et est lié à la classe StockItem, à
|
||||||
la classe ShoppingList et à la classe ProductType. Cela permet de pouvoir faire plusieurs listes de courses différentes
|
la classe ShoppingList et à la classe ProductType. Cela permet de pouvoir faire plusieurs listes de courses différentes
|
||||||
en même temps et d’en garder un historique.
|
en même temps et d'en garder un historique.
|
||||||
|
|
||||||
\section{Fonctionnement}
|
\section{Fonctionnement}
|
||||||
\label{sec:fonctionnement}
|
\label{sec:fonctionnement}
|
||||||
|
|
||||||
\par Au départ, si le comptoir de type « BAR » n’a pas de stock, la seule chose qu’il est possible de faire est d’en
|
\par Au départ, si le comptoir de type « BAR » n'a pas de stock, la seule chose qu'il est possible de faire est d'en
|
||||||
créer un. Ensuite, il va falloir créer les objets StockItem en indiquant pour chacun les quantités qu’il y a dans le
|
créer un. Ensuite, il va falloir créer les objets StockItem en indiquant pour chacun les quantités qu'il y a dans le
|
||||||
stock.
|
stock.
|
||||||
|
|
||||||
\par De plus, la personne (généralement le Responsable du lieu de vie) qui aura la responsabilité d’informatiser les
|
\par De plus, la personne (généralement le Responsable du lieu de vie) qui aura la responsabilité d'informatiser les
|
||||||
stocks devra aussi définir la quantité unitaire, effective et minimale.
|
stocks devra aussi définir la quantité unitaire, effective et minimale.
|
||||||
\par Par exemple, les Cheeseburger vendus aux différents comptoirs sont achetés par boite de 6, la quantité unitaire
|
\par Par exemple, les Cheeseburger vendus aux différents comptoirs sont achetés par boite de 6, la quantité unitaire
|
||||||
sera donc 6, la quantité effective correspondra au nombre de boites restantes dans le stock (c’est à dire dans la
|
sera donc 6, la quantité effective correspondra au nombre de boites restantes dans le stock (c'est à dire dans la
|
||||||
réserve du lieu de vie, une boite sortie du stock est considérée comme consommée) et enfin, la quantité minimale servira
|
réserve du lieu de vie, une boite sortie du stock est considérée comme consommée) et enfin, la quantité minimale servira
|
||||||
de valeur seuil.
|
de valeur seuil.
|
||||||
\par Une fois l’état de la réserve retranscrit dans le site, il reste encore gérer les stocks de manière quotidienne.
|
\par Une fois l'état de la réserve retranscrit dans le site, il reste encore gérer les stocks de manière quotidienne.
|
||||||
Pour ce faire, l’application se décompose en 3 parties :
|
Pour ce faire, l'application se décompose en 3 parties :
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Création automatique des listes de courses
|
\item Création automatique des listes de courses
|
||||||
\item Approvisionnement du stock
|
\item Approvisionnement du stock
|
||||||
\item Prise d’éléments dans le stock
|
\item Prise d'éléments dans le stock
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\par Lorsque l’on accède à la partie qui s’occupe de la gestion des listes de courses, il y a un bouton permettant de
|
\par Lorsque l'on accède à la partie qui s'occupe de la gestion des listes de courses, il y a un bouton permettant de
|
||||||
créer une liste de courses en fonction de l’état des stocks à cet instant, puis un premier tableau contenant les listes
|
créer une liste de courses en fonction de l'état des stocks à cet instant, puis un premier tableau contenant les listes
|
||||||
de courses qu’il faut faire et enfin un second tableau servant d’historique des listes de courses déjà effectuées.
|
de courses qu'il faut faire et enfin un second tableau servant d'historique des listes de courses déjà effectuées.
|
||||||
\par Pour chaque liste de course ainsi créée, qu’elle soit « faite » ou « à faire », il est possible de cliquer sur son
|
\par Pour chaque liste de course ainsi créée, qu'elle soit « faite » ou « à faire », il est possible de cliquer sur son
|
||||||
nom pour voir le détail de ce qu’elle comprend.
|
nom pour voir le détail de ce qu'elle comprend.
|
||||||
|
|
||||||
\subsection{Création automatique des listes de courses}
|
\subsection{Création automatique des listes de courses}
|
||||||
\par En cliquant sur le bouton permettant de créer une nouvelle liste de courses, il faut remplir un formulaire. Les
|
\par En cliquant sur le bouton permettant de créer une nouvelle liste de courses, il faut remplir un formulaire. Les
|
||||||
informations à donner dans ce formulaire sont le nom de la liste de course (par exemple, une liste spéciale pour
|
informations à donner dans ce formulaire sont le nom de la liste de course (par exemple, une liste spéciale pour
|
||||||
Leclerc), ensuite, apparaissent tous les StockItem ayant une quantité effective inférieure au seuil fixé par leur
|
Leclerc), ensuite, apparaissent tous les StockItem ayant une quantité effective inférieure au seuil fixé par leur
|
||||||
quantité minimale. Il faut donc donner pour chacun de ces éléments une quantité à acheter. Enfin, un dernier champ de
|
quantité minimale. Il faut donc donner pour chacun de ces éléments une quantité à acheter. Enfin, un dernier champ de
|
||||||
commentaire peut être compléter, il sert à demander l’achat d’éléments qui n’apparaissent pas dans le Stock, par
|
commentaire peut être compléter, il sert à demander l'achat d'éléments qui n'apparaissent pas dans le Stock, par
|
||||||
exemple, des couteaux, fourchettes ou encore tasses...
|
exemple, des couteaux, fourchettes ou encore tasses...
|
||||||
\par Lors de la validation de ce formulaire, la liste de courses est créée et est ajoutée au tableau contenant les
|
\par Lors de la validation de ce formulaire, la liste de courses est créée et est ajoutée au tableau contenant les
|
||||||
listes de courses à faire.
|
listes de courses à faire.
|
||||||
@ -296,14 +317,14 @@ listes de courses à faire.
|
|||||||
jour le stock. Une opération « Mettre à jour le stock » est disponible pour chaque liste de courses du tableau « À
|
jour le stock. Une opération « Mettre à jour le stock » est disponible pour chaque liste de courses du tableau « À
|
||||||
faire ».
|
faire ».
|
||||||
\par En effectuant cette action, il va falloir indiquer les quantités effectivement achetées. En effet, les quantités
|
\par En effectuant cette action, il va falloir indiquer les quantités effectivement achetées. En effet, les quantités
|
||||||
demandées ne sont pas forcément celles achetées, c’est donc les quantités effectives qu’il faut ajouter au stock. Une
|
demandées ne sont pas forcément celles achetées, c'est donc les quantités effectives qu'il faut ajouter au stock. Une
|
||||||
fois ce formulaire validé, la liste de couses passera de l’état « à faire » à l’état « faite ».
|
fois ce formulaire validé, la liste de couses passera de l'état « à faire » à l'état « faite ».
|
||||||
|
|
||||||
\subsection{Prise d’éléments dans le stock}
|
\subsection{Prise d'éléments dans le stock}
|
||||||
\par La réserve étant accessible aux barmen afin qu’ils puissent réapprovisionner les réfrigérateurs à tout moment,
|
\par La réserve étant accessible aux barmen afin qu'ils puissent réapprovisionner les réfrigérateurs à tout moment,
|
||||||
l’interface permettant de prendre des éléments dans le stock a été ajoutée dans les onglets de l’interface des ventes
|
l'interface permettant de prendre des éléments dans le stock a été ajoutée dans les onglets de l'interface des ventes
|
||||||
(là où le barman inscrit le code du compte du client qui souhaite commander quelque chose). Ainsi, en revenant de la
|
(là où le barman inscrit le code du compte du client qui souhaite commander quelque chose). Ainsi, en revenant de la
|
||||||
réserve, le barman doit indiquer le nombre de chaque produit qu’il a rapporté.
|
réserve, le barman doit indiquer le nombre de chaque produit qu'il a rapporté.
|
||||||
\par Dans un souci de simplicité pour le gérant du lieu de vie, ce formulaire de prise des éléments dans le stock est
|
\par Dans un souci de simplicité pour le gérant du lieu de vie, ce formulaire de prise des éléments dans le stock est
|
||||||
aussi accessible depuis son interface de gestion.
|
aussi accessible depuis son interface de gestion.
|
||||||
|
|
||||||
@ -312,16 +333,16 @@ aussi accessible depuis son interface de gestion.
|
|||||||
\label{sec:amelioration_a_apporter}
|
\label{sec:amelioration_a_apporter}
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Il n’est pas encore possible de modifier les quantités demandées pour un ou plusieurs des produits d’une liste
|
\item Il n'est pas encore possible de modifier les quantités demandées pour un ou plusieurs des produits d'une liste
|
||||||
de course. Il faudrait rendre cela possible car actuellement, il faut supprimer la liste de courses et la
|
de course. Il faudrait rendre cela possible car actuellement, il faut supprimer la liste de courses et la
|
||||||
refaire en changeant les quantités souhaitées.
|
refaire en changeant les quantités souhaitées.
|
||||||
\item Il faudrait améliorer la manière dont on ajoute les éléments non définis en tant que StockItem dans la liste
|
\item Il faudrait améliorer la manière dont on ajoute les éléments non définis en tant que StockItem dans la liste
|
||||||
de course. Un objet ShoppingListItem avec une référence « Null » vers la classe StockItem pourrait être créé à
|
de course. Un objet ShoppingListItem avec une référence « Null » vers la classe StockItem pourrait être créé à
|
||||||
la place de compléter le champ de commentaires.
|
la place de compléter le champ de commentaires.
|
||||||
\item Dans les améliorations sur le long terme, il faudrait que la décrémentation des quantités de chaque élément
|
\item Dans les améliorations sur le long terme, il faudrait que la décrémentation des quantités de chaque élément
|
||||||
dans le stock soit automatique. En repensant une partie de l’architecture de l’application, on pourrait faire en
|
dans le stock soit automatique. En repensant une partie de l'architecture de l'application, on pourrait faire en
|
||||||
sorte que chaque vente faite au comptoir face diminuer les quantités restantes (cela remplacerait le formulaire
|
sorte que chaque vente faite au comptoir face diminuer les quantités restantes (cela remplacerait le formulaire
|
||||||
de « Prise d’éléments dans le stock », mais cela ne serait pas applicable à tous les produits mis en vente. Par
|
de « Prise d'éléments dans le stock », mais cela ne serait pas applicable à tous les produits mis en vente. Par
|
||||||
exemple, pour les cacahuètes que nous vendons au bol et non par paquet)
|
exemple, pour les cacahuètes que nous vendons au bol et non par paquet)
|
||||||
\item Avec le système de notifications qui a été mis en place sur le site, on pourrait faire en sorte que le ou les
|
\item Avec le système de notifications qui a été mis en place sur le site, on pourrait faire en sorte que le ou les
|
||||||
responsables des lieux de vie reçoivent une notification lorsque la liste de courses contient plus de 5 éléments
|
responsables des lieux de vie reçoivent une notification lorsque la liste de courses contient plus de 5 éléments
|
||||||
@ -415,7 +436,7 @@ préalable, d'où la nécessité d'indexer les entrées à chercher. Un indexeur
|
|||||||
courant, il n'a pas été difficile de trouver une application déjà existante fournissant ces fonctionnalités.
|
courant, il n'a pas été difficile de trouver une application déjà existante fournissant ces fonctionnalités.
|
||||||
|
|
||||||
\par Le choix s'est porté sur \textbf{Haystack}, en l'utilisant avec l'indexeur \textbf{Whoosh}, plutôt efficace pour
|
\par Le choix s'est porté sur \textbf{Haystack}, en l'utilisant avec l'indexeur \textbf{Whoosh}, plutôt efficace pour
|
||||||
des bases raisonnables, et surtout écrit en pure \textbf{Python}, donc ne nécessitant pas d'installation compliqué en
|
des bases raisonnables, et surtout écrit en pure \textbf{Python}, donc ne nécessitant pas d'installation compliquée en
|
||||||
parallèle du site.
|
parallèle du site.
|
||||||
|
|
||||||
\par Le résultat est plutôt satisfaisant, mais il faudrait encore améliorer les résultats en utilisant les fonctions de
|
\par Le résultat est plutôt satisfaisant, mais il faudrait encore améliorer les résultats en utilisant les fonctions de
|
||||||
@ -438,19 +459,29 @@ et de gestion des permissions sur les différentes branches.
|
|||||||
|
|
||||||
\section{Lo-J}
|
\section{Lo-J}
|
||||||
\label{sec:lo_j}
|
\label{sec:lo_j}
|
||||||
\par Je suis très heureux d’avoir pu participer à ce projet de TO52 sur le développement de modules sur le site de l’Association des Étudiants. J’ai pu apprendre à travailler avec un nouvel environnement informatique tout en contribuant au développement d’outils pour l’association dont je suis Président, le Bureau des Festivités.
|
\par Je suis très heureux d'avoir pu participer à ce projet de TO52 sur le développement de modules sur le site de
|
||||||
|
l'Association des Étudiants. J'ai pu apprendre à travailler avec un nouvel environnement informatique tout en
|
||||||
|
contribuant au développement d'outils pour l'association dont je suis Président, le Bureau des Festivités.
|
||||||
|
|
||||||
\subsection{Django}
|
\subsection{Django}
|
||||||
\par Ayant déjà travaillé avec le framework Spring et Java durant mon stage ST40, j’ai pu m’appuyer sur des notions générales afin d’apprendre et de comprendre le fonctionnement du Python et de Django que je ne connaissais pas du tout.
|
\par Ayant déjà travaillé avec le framework Spring et Java durant mon stage ST40, j'ai pu m'appuyer sur des notions
|
||||||
|
générales afin d'apprendre et de comprendre le fonctionnement du Python et de Django que je ne connaissais pas du tout.
|
||||||
|
|
||||||
\par Mon apprentissage a été assez long au départ, car il y avait beaucoup d’informations à intégrer. Django est un framework très pratique qui permet d’effectuer de nombreuses tâches assez rébarbatives de manière automatique certes, mais encore faut-il comprendre ce qu’il se passe en arrière-plan. C’est cet apprentissage qui m’a pris le plus de temps.
|
\par Mon apprentissage a été assez long au départ, car il y avait beaucoup d'informations à intégrer. Django est un
|
||||||
|
framework très pratique qui permet d'effectuer de nombreuses tâches assez rébarbatives de manière automatique certes,
|
||||||
|
mais encore faut-il comprendre ce qu'il se passe en arrière-plan. C'est cet apprentissage qui m'a pris le plus de temps.
|
||||||
|
|
||||||
\par Mon deuxième point de difficulté a été les formulaires. Là encore, Django est très pratique dès lors qu’il s’agit de faire un formulaire avec tous les champs d’un même Model. Cependant, il m’a fallu de l’aide et du temps pour comprendre comment faire pour ajouter d’autres champs en plus de ceux du Model au formulaire et pour comprendre comment récupérer les valeurs associées à chacun d’eux.
|
\par Mon deuxième point de difficulté a été les formulaires. Là encore, Django est très pratique dès lors qu'il s'agit
|
||||||
|
de faire un formulaire avec tous les champs d'un même Model. Cependant, il m'a fallu de l'aide et du temps pour
|
||||||
|
comprendre comment faire pour ajouter d'autres champs en plus de ceux du Model au formulaire et pour comprendre comment
|
||||||
|
récupérer les valeurs associées à chacun d'eux.
|
||||||
|
|
||||||
\subsection{Git}
|
\subsection{Git}
|
||||||
\par J’ai eu aussi à apprendre le fonctionnement de Git que j’avais déjà pu manipuler quelque peu mais il me manquait quand même beaucoup d’éléments.
|
\par J'ai eu aussi à apprendre le fonctionnement de Git que j'avais déjà pu manipuler quelque peu mais il me manquait
|
||||||
|
quand même beaucoup d'éléments.
|
||||||
|
|
||||||
\par Aujourd’hui, je pense pouvoir dire que j’ai progressé dans ce domaine mais il me reste encore bien des choses à apprendre pour être capable de l’utiliser de manière efficace.
|
\par Aujourd'hui, je pense pouvoir dire que j'ai progressé dans ce domaine mais il me reste encore bien des choses à
|
||||||
|
apprendre pour être capable de l'utiliser de manière efficace.
|
||||||
|
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
Loading…
Reference in New Issue
Block a user