Lycée Galilée.
Mission donnée par l'enseignant des BTS domotique.
Projet necessaire pour la note de la spécialité SIN (système d'information et numérique) du baccalauréat de la formation STI2D.
Projet en groupe de 3.
Création d'un système permettant de récupérer les données fournies par un compteur électrique et de les afficher sur un site internet.
Le projet a été demandé par l'enseignant du BTS domotique.
Le principe du projet était de mesurer la consommation relevée sur un compteur électrique et d'afficher les valeurs sur un site internet en fonction du mode de consommation choisi.
Cela permettait de connaitre le mode le plus économique,
les gens ne se rendent pas forcément compte de ce qu'ils consomment, ce système pourrait donc les pousser à consommer moins.
Le projet a été réalisé avec une carte Arduino, nous avons d'abord utilisé une carte Arduino Uno, mais au moment de rassembler les 3 programmes il y a eu un manque de place sur la carte, nous sommes donc passé à la carte Arduino Mega qui possède beaucoup plus de mémoire.
L'un de mes collègues a pris l'archivage des données, réalisé sur une carte SD pour avoir la possibilité de lire des informations plus détaillées (prévu uniquement pour les élèves de domotique et non pour le consommateur),
cela représentait moins de travail que les autres, il s'est donc aussi occupé de mettre en place une horloge pour afficher la date.
L'autre collègue s'est occupé de la démodulation du signal (les données du compteur n'arrivaient pas de façon à ce que la carte puisse les comprendre).
Je me suis donc chargé du site internet (programmation de la carte, design du site, enregistrement de toutes les valeurs, réglage des valeurs par rapport au mode, offset).
Nous avions besoin d'un shield Ethernet pour mettre le site en ligne, il s'emboite tout simplement sur le microcontrôleur.
Le site devait afficher une période de 10 jours dans un tableau et 2 à 6 valeurs pour chaque jour en fonction du mode du compteur électrique
(il y avait un total de 3modes : les 2 premiers possédaient 2 valeurs et le 3 ème en avait 6, celui-ci était le plus couramment utilisé, les 2 premiers étant obsolète).
J’ai utilisé le langage Arduino (pour faire marcher la carte Arduino) qui était le socle de tout le programme, ainsi que le html et le CSS (pour le site), ils étaient envoyés au navigateur par le biais de commandes codées en Arduino.
Voici les évolutions majeures de l'apparence du site, vous pouvez cliquer sur les images pour les voir en détail.
#define nbJ : représentait le nombre total de jours à afficher, les "define" fonctionnent comme des variables statiques mais remplacent les noms par la valeur désirée avant la compilation, cela ne prend donc aucune mémoire et permet de changer le nombre total de jours très facilement. (très pratique car la mémoire est très limitée sur ces microcontrôleurs)
Variable « valeurs » : variable en 2 dimensions (l'une pour les jours et l'autre pour les valeurs).
En cas de changement de mode toutes les valeurs sont remises à 0 et le mode est mis à jour (cette fonctionnalité a été demandée vers la fin de l'année par l'enseignant de domotique qui ne voulait pas devoir appuyer sur le bouton "reset").
Une boucle a été utilisée pour la création et le remplissage du tableau.
Les valeurs du compteur électrique sont récupérées par un composant fixé à la carte, ce composant les démodule puis les envoie à la carte, les caractères inutiles (ADCO, OPTARIF etc...) sont supprimés puis les valeurs sont enregistrées dans la variable « allVal », on y soustrait ensuite l'offset afin de placer les variables dans la variable « valeurs », puis le tableau est mis à jour.
Service Informatique de l'ARS Rhône Alpes (Agence Régionale de Santé).
Dans le cadre d'une enquête visant à savoir pourquoi les dialyses en urgence sont si nombreuses, un formulaire Excel a été demandé afin de permettre aux médecins d'envoyer facilement des informations sur leurs patients possédant des insuffisances rénales qui accèptent de participer à l'enquête.
Ce formulaire devait être capable de stocker plusieurs fiches, de permettre de consulter les fiches déjà inscrite et d'envoyer les données vers une base de données.
Le médecin en charge de l'enquête a également souhaité avoir un formulaire qui lui permettra d'inscrire rapidement dans la base de donnée les fiches papier envoyées par les médecins qui n'ont pas accès à Excel.
Ce formulaire sera placé sur un site local accessible uniquement au médecin en charge de l'enquête et à sa secrétaire.
Excel offre la possibilité de programmer en Visual Basic.
Pour ouvrir le volet de programmation il suffit d’appuyer simultanément sur les touches Alt et F11 ou de cliquer sur l’icône « Visual Basic » dans l’onglet « Développeur » s’il a été rendu visible dans les réglages.
Des macros seront codées et pourront être utilisées par des boutons Excel par exemple.
A mon arrivée le projet avait déjà été entamé par un ancien stagiaire, cependant il y avait de nombreuses malfaçons dans le code et il n’y avait aucun commentaire.
J’ai donc passé une longue période pour pouvoir comprendre le code, ajouter des commentaires et corriger les malfaçons.
C’est uniquement après avoir corriger tous ces problèmes que je pus terminer le code entamé.
Une vérification a été ajoutée afin d’éviter les erreurs dans les numéros fiche patient qui sont assez stricts et représentent la clé primaire dans la base de données.
Le message d’erreur affiche tous les problèmes présents dans le numéro.
Un bouton « Supprimer la dernière colonne » a été ajouté,
Il permet de supprimer proprement la dernière colonne de données saisie,
Il redimensionnera les colonnes, effacera toutes les valeurs dont que celles qui sont cachées et il mettra à jour la variable du nombre de colonnes.
La première page contient le formulaire qui devra être rempli par le médecin et le bouton « Enregistrer »,
lorsqu’il est cliqué, il vérifie que le numéro de fiche est correctement rempli, s’il n’y a pas d’erreur, l’intégralité du formulaire sera copiée dans la page 2 et sera effacée de la page 1.
Elle contient également une case affichant la date actuelle et une case possédant une valeur qui représente la colonne à remplir lors du prochain enregistrement, cette valeur est incrémentée de 1 à chaque enregistrement.
La deuxième page contient tous les formulaires enregistrés ainsi qu’un bouton permettant de chercher un formulaire par rapport à son numéro de fiche, un bouton « supprimer la dernière colonne » et des boutons « supprimer toutes les colonnes » et « envoyer vers la base de données » qui sont réservés au médecin en charge de l’enquête.
Ce questionnaire devait permettre au médecin en charge de l’enquête et à sa secrétaire d’insérer facilement les données dans la base de données depuis les formulaires au format papier envoyés par les médecins ne possédant pas Excel.
Comme il s’agit de la même enquête, le contenu du questionnaire est presque totalement identique,
Dans un premier temps une grande partie du travail aura donc été du copier/coller de questions et de parties et sous-parties.
Il m’a été demandé de bloquer les cases « autre » si l’élément de la liste déroulante sélectionné n’est pas « autre » afin d’éviter une mauvaise manipulation.
J’ai donc dû apprendre le JavaScript que je n’avais jamais utilisé auparavant.
Il était possible que les médecins fassent une erreur lors de la saisie du numéro de fiche patient et écrivent le même numéro plusieurs fois,
Une fonctionnalité permettant de modifier ce numéro a été créée, si un numéro entré est déjà présent dans la base de données, la fonction ajoutera un numéro à la suite de celui-ci ce qui permettra de quand même enregistrer le formulaire dans la base de données.
Si un même numéro de fiche patient a été rentré plus de dix fois, il sera impossible de renommer le champ à l'aide de la fonction de renommage car la taille de ce champ est limitée, il faudra donc demander au médecin de le modifier lui-même et replacer les données dans les champs afin qu'il n'ait pas à les réécrire.
Pour faire cela il a fallu utiliser du PHP qui garde les valeurs de chaque champ en mémoire et les restitue si cela est nécessaire.
Nous incarnons l'entreprise EllaSIO qui réalise différentes missions pour ses clients.
Dans ce contexte, nous travaillons pour Prixy qui est une société qui dispense des formations.
En tant que membre de l'entreprise EllaSIO, nous avons dû créer un site internet pour l'entreprise Prixy, ce site devait pouvoir gérer les réservations aux formations proposées par Prixy.
Ce contexte est entièrement fictif.
La base de données devait contenir les formations proposées avec pour chacune d'elles les objectifs, des étapes et sous-étapes, la catégorie et les sessions durant lesquelles elles seraient dispensées.
Une formation peut nécessiter d'en avoir effectué une autre et peut délivrer une certification.
Les membres y sont aussi reliés lorsqu'ils s'y inscrivent.
Dans la base de données, le mot de passe des utilisateurs est hashé.
Lors de la connexion, si les identifiants sont justes, une session contenant le login et le mot de passe de l'utilisateur est démarrée, cela modifie l'apparence de la barre de navigation et permet d'accéder à la page "mon compte".
Si la case "connexion auto" est cochée, un cookie contenant les informations de connexion de l'utilisateur sera créé et permettra de remplir les champs d'authentifications automatiquement.
Il nous a été demandé d'internationaliser le site, il devait pouvoir être visionné en français et en anglais.
Pour cela, nous avons inséré l'intégralité des textes du site sur une base de données, chaque page y récupérait alors son texte par rapport à la langue choisie,
deux boutons ont été placés sur le footer et permettent de choisir la langue que l'on désire.
Nous avons utilisé le site "subdelirium mentions légales" pour générer les mentions légales.
Comme le reste du site, elles ont été internationalisées.
Voici des copies des pages les plus importantes.
SSII créant des sites internet en asp.net pour ses clients
Mon travail au sein de cette entreprise a été de terminer certaines fonctionnalités de leur site web qui n'était pas encore fonctionnel.
Leur site avait pour but de présenter l’activité de l’entreprise et de recruter des programmeurs tout en analysant leurs maitrises des langages à l’aide de QCMs.
L'existant sur lequel j'ai travaillé possédait déjà le côté graphique de la majorité des pages demandées, je n'ai donc pas eu à me soucier de l'apparence du site web.
Le site sur lequel j'ai travaillé avait déjà été commencé,
mais le code existant contenait un grand nombre de malfaçons et était presque totalement dépourvu de commentaires,
j'ai donc dû passer beaucoup de temps pour comprendre le fonctionnement du code et pour corriger le plus de malfaçons possible.
J'ai d'abord dû m'occuper des fonctions permettant de s'inscrire, de se connecter, de se déconnecter et de montrer si l'utilisateur s'est identifié.
La fonction d'inscription était déjà quasiment fonctionnelle, j'y ai simplement ajouté une vérification afin d'éviter qu'un même utilisateur ne puisse s'inscrire plusieurs fois.
La fonction de connexion a dû être créée en totalité, elle vérifie d'abord que le mail entré existe dans la base de données puis vérifie que le mot de passe est correct et que ce compte a été validé par mail, si la connexion est impossible la raison est indiquée, si elle est possible un cookie d'authentification est créé.
La fonction de déconnexion va simplement supprimer le cookie d'authentification et afficher un message pour indiquer que la déconnexion a fonctionnée.
La barre de navigation est légèrement modifié lorsque l'utilisateur est connecté (les boutons "s'inscrire" et "se connecter" sont remplacés par le bouton "se déconnecter").
Pour rendre la fonctionnalité "se souvenir de moi" fonctionnelle, j'ai modifié la fonction de connexion, si la case est cochée et que l'authentification de l'utilisateur fonctionne, un cookie contenant les identifiants sera créé.
Lors de l'affichage de la page "se connecter" une fonction vérifie s'il existe un cookie d'OP Consulting et place son contenu dans les champs de connexion si c'est le cas.
La page QCM était déjà créée graphiquement, nous avons dû coder son comportement.
Cette page devait : afficher dans un menu déroulant l'intégralité des thèmes présents dans la base de données, afficher 10 questions en rapport avec le thème sélectionné, enregistrer dans la base de données les réponses de l'utilisateur.
La liste déroulante était remplie grâce à une requête SQL qui récupérait l'intégralité des thèmes et leur id,
une autre requête récupérait alors toutes les questions qui étaient associées à ce thème et les plaçait dans un tableau, ensuite un nombre aléatoire était généré pour choisir une question au hasard à afficher et cette question était supprimée du premier tableau afin de ne pas avoir de doublon, cette opération était répétée 10 fois,
pour l'enregistrement des réponses de l'utilisateur une session de QCM était créée dans la base de données et 10 lignes y étaient associées, elles contenaient les réponses de l'utilisateurs ainsi que les questions auxquelles il avait répondu.
Une page permettant de créer des questions était nécessaire pour les administrateurs,
j'ai donc créé une page qui permet de créer une question selon le thème choisi et d'insérer un nouveau thème si on sélectionne "créer un thème" dans la liste des thèmes, on choisi la réponse et l'explication qui sera donnée si l'utilisateur ne répond pas correctement.
L'aspect graphique de cette page n'a pas été abordé durant mon stage.
Nous incarnons l'entreprise EllaSIO qui réalise différentes missions pour ses clients.
Dans ce contexte, nous travaillons pour Prixy qui est une société dispensant des formations.
Nous avions pour mission de créer une application mobile permettant de gérer des rendez-vous et de saisir un compte-rendu de visite pour chacun d'eux.
L’application devait permettre de visualiser les informations sur le rendez-vous ainsi que sur le client qui y était lié,
les données devaient être récupérées sur le mobile depuis la base de données présente sur le serveur de l’entreprise et il devait être possible d'y envoyer les comptes-rendus insérés, la synchronisation des données devait être réalisée par des web services hébergés sur le serveur web de Prixy.
Pour conserver les données dans l'application mobile, nous avons utilisé une base SQLite.
La base MySQL présente sur le serveur possédait la même architecture.
Il nous fallait enregistrer des rendez-vous et les clients qui y étaient associés avec toutes les informations importantes.
L'apparence des pages de l'application mobile a été codée en XML.
Indiquer la taille et la position des objets en utilisant des dp (Density-independent pixel) plutôt que des pixels a permis de rendre les interfaces de l'application quasiment identiques sur n'importe quel mobile, quelle que soit la taille de son écran.
L'import et l'export des données entre l'application mobile et l'ordinateur se font de façon asynchrone afin d'éviter qu'Android ne considère que l'application a planté
(en effet, pour Android, toute application qui ne réagit pas à une demande utilisateur dans un délai de 10 secondes est réputée pour ne pas répondre et l’application est alors susceptible d’être arrêtée par le système).
La fonction d'export génère un tableau JSON contenant les comptes-rendus de chaque rendez-vous présent dans la base de données du mobile et l'envoie vers le web service d'export.
La fonction d'import récupère un tableau JSON créé par le web service d'import contenant tous les rendez-vous et les clients de la base de données de l'entreprise et insère ces valeurs dans la base de données du mobile.
Les web services ont été réalisés en PHP, ils sont executés lorsque les fonctions d'import et d'export de l'application mobile sont lancées.
Il existe 3 fichiers : l'un est exécuté pour l'import, un autre pour l'export et le troisième contient les fonctions d'accès aux données.
Service Informatique de l'ARS Auvergne-Rhône-Alpes (Agence Régionale de Santé).
L'ARS a l'obligation de tenir un registre de santé et de sécurité au travail dans chaque service. (abrégé en RSST ou R2ST)
Chaque agent a la possibilité de contribuer à ce registre. Il peut y inscrire les observations et suggestions qu'il souhaite.
Celles-ci devront être en rapport avec l'amélioration des conditions de travail ou des risques professionnels.
Cependant, ces documents sont mal connus et peu ou pas utilisés en raison de leur complexité.
L'objectif du projet est de faciliter l'accès à ces registres pour tous les agents,
améliorer la transmission des informations et le traitement des demandes,
répondre efficacement aux obligations légales.
Avant de créer l'application, une documentation technique a été créée afin de simplifier le développement
et d'anticiper tous les éventuels besoins.
La future base de données a également été modélisée à l'aide d'un MCD
et des maquettes fonctionnelles ont été créées et présentées au client afin de s’assurer que l’aspect graphique
de l’application lui convenait pour limiter les demandes de modifications futures.
Les compte AD des agents sont utilisés pour l'authentification.
Lors de chaque connexion, l'application vérifie si les données de l'agent ont été modifiées (ou si l'agent est absent de la base de données).
Le cas échéant elle les met à jour.
L'application a la possibilité de connaitre le responsable d’un agent à l’aide d’un web service interne de l’ARS.
Cette fonctionnalité est utile pour la validation de la fiche (uniquement pour les agents qui ne souhaitent pas être anonymes).
Les agents ont la possibilité de remplir une fiche de façon anonyme en cochant une case,
toutes les données liant cet agent à la fiche seront supprimées dès validation,
il sera totalement impossible de remonter jusqu'à l'agent.
Différents types de comptes sont necessaire pour la validation des fiches :
La loi autorise toute personne à demander la récupération des informations qui lui sont propres détenues par toute organisation.
Une fonctionnalité permettant de récupérer toutes les informations d’une personne donnée a été mise en place.
Pour réaliser cet export, il faut renseigner le nom et le prénom de cette personne, l’export de ces informations est réalisé au format Excel.
Seuls les administrateurs peuvent utiliser cette fonctionnalité.
Lorsqu’un agent utilise l’outil, une communication a lieu entre son poste de travail et le serveur hébergeant l’application RSST,
ce serveur récupère les données relatives à l’utilisateur lorsque celui-ci se connecte.
Durant chaque opération, l’application communique avec la base de données qui est présente sur le même serveur.
Le serveur pourra également être amené à envoyer des mails sur la messagerie de l’agent.
Silico. Société de service à taille humaine
L'application était une GED gérant un nombre conséquent de paramettres et de nombreux process de validation différents pour chacun de ses documents.
Mon travail sur ce projet fut assez général, aussi bien backend que frontend.
A mon arrivée, l'application était déjà en production.
A cause des délais trop courts demandés par le client au commencement du projet,
l'application a dû être codée le plus rapidement possible au détriment de la qualité.
Du code métier pouvait être trouvé au milieu de contrôleurs trop lourds, des goto étaient utilisés,
les requêtes SQL étaient mal optimisées à cause de multiples modifications et l'application était extrêmement vulnérable aux injections.
A mon arrivée, mon travail a consisté dans un premier temps à corriger un maximum d’erreurs.
Cette tâche n’a pas été totalement terminée à cause du manque de temps et de l'absence de commentaires/documentation.
J'ai pu modifier et ajouter des contrôleurs par rapport à l'évolution constante de l'application.
J'ai créé des commandes pour de la gestion journalière de données et pour de la vérification,
par la suite elles furent appelées par des crons.
Enfin j'ai créé des formulaires Symfony et des API Rest.
En évoluant, l'application devait recevoir la majorité de ses données par requêtes Ajax,
un long travail a donc été fait sur la création d'API REST.
Elles pouvaient avoir des fonctionnalités très variées tel que l'enregistrement de données,
la récupération de listes déroulantes, la récupération de l'état d'une fiche, etc...
Par la suite, des API en NodeJS ont été créées pour remplacer certaines requêtes faites sur des bases externes,
le projet a malheureusement été mis en suspens au profit de tâche plus importantes.
Concernant le Front, Devextrem, un framework JS disposant d'un très grand nombre de fonctionnalités, était le plus largement utilisé,
cependant son utilisation était particulièrement compliquée et le temps alloué à son apprentissage relativement court.
Il fut principalement utilisé pour de la création de tableaux et de formulaires.
La partie fonctionnelle des pages était gérée en JavaScript et fut progressivement migrée en TypeScript.
La structure était rendue avec Twig.
Pour le visuel nous utilisions Bootstrap et un peu de CSS pure.
L'application utilisait d'abord SQL Server pour la gestion de ses données, mais une migration vers PostgreSQL fut ensuite envisagée
pour sa rapidité et ses nombreuses fonctionnalités (notamment la gestion du JSON).
Pour préparer cette migration, j'ai commencé par concevoir une documentation de l'intégralité des tables et des vues puis des requêtes de l'application.
Cela a permis d'avoir une vue d'ensemble de la base de données et de simplifier la migration.
J'ai ensuite adapté les requêtes pour que leur syntaxe corresponde à Postgres et je les ai optimisées.
Certaines vues ont également été optimisées ou supprimées.
J'ai cependant quitté l'entreprise avant que la migration ne soit réalisée.