12ème séquence - Boulder Dash

Voir projet : Créer un jeu Boulder Dash

1 J'aime

Lundi 02 mars

Plénière

Sujet : Lecture de code sur le projet Game Of Life
Lien : https://github.com/adatechschool/GameOfLife/blob/master/CircleOfLife/CircleOfLife.pde

On a essayé de voir les éléments qu’on pourrait reprendre dans ce projet.

Le tableau de cellules ligne 31 : int[][] cells;
Initialisation des tableaux ligne 91 :
cells = new int[width/cellSize][height/cellSize];

Ligne 96 : for(int x = 0; x < width/cellSize; x++) {
Ligne 97 : for(int y = 0; y < height/cellSize; y++) {

Spectacle

Groupe Fayal, Lydia, Laurine : On a une grille et un personnage (un bulbizarre) qui bouge.
Demain on fait les murs !
Lien: https://github.com/adatechschool/-Sequence12_BoulderDash_FLA

Groupe Nicolas, Patricia, Zakia : On a une grille, un personnage qui se déplace de case en case, et des murs (mais ils ne nous empêchent pas encore de passer). On a également une « trainée » qui suit le personnage pour savoir où il est passé.
Demain on prévoit de faire en sorte qu’on ne puisse plus traverser les murs, et ajouter des éléments que le personnage peut ramasser.
Lien : https://github.com/adatechschool/Sequence12_Boulder_Dash_Pat_Zak_Nic

Groupe Wara, Soumayaat : On a une grille (visuelle et également dans le code). On a une boucle qui ne permet pas de parcourir les éléments du tableau, mais surtout visuellement.
Lien : https://github.com/adatechschool/Sequence12_BoulderDash_SouDelMoh

Loan : J’ai fais un tuto processing pour le prendre en main. Résultat : On a un élément qui bouge et qui rebondit sur les bords. (Type image de veille Windows 7). Pas de but précis, le but était juste de faire quelque chose.

1 J'aime
  • int [][] grille une case dans grille correspond à un entier. On peut donc donner à la case une valeur qu’on peut associer à une image.

  • on fait une boucle for dans une boucle for pour dessiner les cases

  • on donne à image(var de l’image qui récupère l’image via PImage,coordonnée x, coordonnée y, largeurColonne pour redimensionner la largeur de l’image, hauteurRangee pour redimensionner la hauteur de l’image)

  • je déclare px=i et py=j dans la boucle où il y a i et j pour pouvoir utiliser la position des cases en dehors de la boucle car i et j n’est rien en dehors de draw.

  • on déclare pion de type PImage. Dans setup on lui donne la valeur loadImage(nomDuFIchier). Et on utilise pion dans draw.

Mardi 03 mars

Plénière

Sujet : Base de données & versions d’un projet

1. Intro / Discussion sur les bases de données (Théorique)

Une base de données c’est quoi ?
Format csv ?
Fichier excel ?
Map ? -> Base de données relationnelles ?

Il y a deux grandes familles de bases de données :

  1. Les BDD relationnelles, très utilisés pour les sites internet & les applications. (login / mdp / articles / comptes clients). La BDD c’est un concept.

Les trucs importants d’une BDD relationelle :

  • Les tables
    Exemple :
    BDDrelationelles

  • Les base de données relationnelles implique souvent du SQL.
    En Sql il y a pleins de commandes, des commandes pour rechercher des données, d’autres pour extraire des données …
    SELECT prix, description FROM produits WHERE prix < 49.3
    -> La base de données va nous renvoyer tout les produits où le prix est inférieur à 49.3€.

  • Comment rajouter une entrée en SQL ?
    INSERT INTO produits (code, prix, description) VALUES (prix, description..)

  • ALTER TABLE ........ -> permet d’ajouter une nouvelle colonne / supprimer colonne.

  • Il existe énormément de commandes SQL.

  • Primary Key permet d’identifier des articles, on peut pas la supprimer, sauf si on change la base de données.

Système gestion de base de données relationelles (SGBDR)
Exemple : SQLite, Oracle, PostgreSQL, MySQL/MariaDB
-> Pratique pour données statiques.

Dans python, import sqlite3 pour utiliser sqlite dans code python.
PostgreSQL pour un GROS projet. Serveur inclus. Compliqué à installer.
MySQL/MariaDB plus facile à installer.
SQLite c’est le plus simple. C’est juste un fichier. (Utile pour un gestionnaire de mots de passes. & Utile pour petites application qui stocke localement des données.)

  1. Bases de données NoSQL

=> Pas de langage de programmation.

=> :warning: Interessant de revenir sur le NoSQL dans une autre plénière !! :warning:

2. Lien entre les différentes versions d’un projet (Pratique)

(Version test, vs version utilisée par tous)

Vocabulaire :
Une application est testée activement pour éviter les bugs. Les étapes :

  • Staging (test/développement) : c’est surement pété. Le code change souvent.
  • Préproduction (préprod) : peut être quelques bugs. Le code change peu.
  • Production (prod) : En théorie y’a pas de bugs. Le code change très peu.

Git : (suit le même schéma qu’au dessus).

  • Branche dev (qui est la pour bouger en permanance)
  • Branche test
  • Branche master
    => On a un fichier de configuration de BDD différent dans chaque branche.
    :warning: On a 3 bases de données DIFFERENTES ! Et INDEPENDANTES. Mais elles se ressemblent. On a des données fictives vs des vrais données.

Petit Kata en SQLite (dans la console) :
sqlite> .open mabase.sqlite3
sqlite> CREATE TABLE Produits (Prix float, Code int, Description text);
sqlite> .tables
Produits
sqlite> INSERT INTO Produits (Prix, Code, Description) VALUES (10, 12345, "T-shirt pas cher made in China
sqlite> SELECT * FROM Produits;
sqlite> DELETE FROM Produits; (on supprime une ligne dans la table)
sqlite> DROP TABLE Produits; (on supprime la table)

Code de la plénière : https://github.com/adatechschool/katas (voir les branches bdd-test et bdd-prod).

Objectif suivant : Avoir un code statique avec une partie mouvante en fonction de si on est en prod ou en test.
On crée une branche bdd-test, et une branche bdd-prod et une branche bdd.

On a séparé le code fonctionnel (dans Bdd.py) des éléments de configuration situés dans configuration.py. Alors que des fonctionnalités qui seraient implémentées dans la branche de développement feraient leur chemin progressivement vers la branche de production dans Bdd.py, le fichier de configuration doit tout le temps être différent entre les branches afin de ne pas connecter une application de test à une base de données de production.

3. Un peu de doc

1 J'aime

Mercredi 4 mars

Je propose d’utiliser le temps de plénière pour faire une sorte de kata individuel, ou éventuellement en binôme.

Idée : coder en langage libre la brique de base d’un craqueur de mots de passes.

Première étape : écrire une fonction qui prend une chaine de caractères en paramètre et retourne une liste de chaines de caractères qui sont des transformations habituelles que les gens mettent à leur mot de passe.

Exemple : à partir de la chaine salut, on pourrait retourner : ["Salut", "SaLuT", "s41ut", "salut!", "salut:)"]. À vous d’établir quelques règles de transformation à votre convenance.

Deuxième étape : lire un fichier qui contient un mot par ligne et appeler la fonction qu’on a écrite pour chacun de ses mots.

Voilà, on a la base de fonctionnement des logiciels conçus pour craquer des mots de passe !

Pour faire une petite liste test, on peut se baser sur les mots de passe les plus courants : https://www.welivesecurity.com/fr/2018/12/18/mots-de-passe-2018-palmares/.

Page Wikipédia de John the Ripper, un des logiciels les plus connus qui fait ça : https://fr.wikipedia.org/wiki/John_the_Ripper.

Tour de table après une petite heure :

  • Fayal : deux manières essayées : en utilisant la fonction replace, problème à l’exécution, peut-être que la fonction ne fait pas ce que j’attends ; autre méthode : utiliser une chaine de caractères à partir d’une liste ; erreur également. Python.
  • Laurine : pas encore commencé à coder, je lis la doc. Chercher les méthodes qu’on peut utiliser sur une chaine de caractères pour la modifier. J’ai essayé dans la console Python pour tester comment elles fonctionnent. Cherché comment convertir une chaine de caractères en une liste de chaine de caractères. Pas facile, je me suis un peu perdue. Vu la fonction dir(). Permet de voir toutes les fonctions utilisables ssur ce qu’on passe en paramètre.
  • Del : Python ; commencé par écrire des tests unitaires pour vérifier l’application de certaines règles de transformation de chaines (par exmple changer une minuscule en majuscule). Pas encore écrit de code. Installé mon environnement.
  • Lydia : Pyhon ; je me suis un peu perdue au début. Parlé avec Laurine pour qu’elle éclaircisse des points. J’ai fait les tests d’abord, mis au propre une todo, écrit un début de fonction, j’essaie de retourner "salut" pour le moment. Les tests ne passent pas encore.
  • Patricia : Javascript ; commencé par tenter de générer le SaLuT, comme première règle. J’ai utilisé un array, et la méthode split() pour traiter chaque lettre du mot séparément. Utilisé une boucle for et touppercase pour changer la casse des mots. Un peu bloquée sur ça car je ne connais pas bien la syntaxe.
  • Adriel : Bash ; galéré avec sed au début. Ensuite utilisé tr. Trouvé une doc intéressante sur sed car c’est un outil un peu obscur mais puissant. Je lis les mots de passe depuis un fichier. Je travaille d’abord sur la casse avant d’autres transformation. J’ai une fonction qui renvoie en majuscules, en minuscule, en camel-case, etc. Le tout à base de tr et sed. Passé du temps sur les expression régulières avec sed, pas facile, pas dans la doc.

Après les deux heures, tour de table et démonstration optionnelle :

  • Adriel : utilisation de tr et sed pour faire du upper et lower case et du camelcase, ainsi que du leetspeek.
  • Del : utilisation de tests unitaires et une fonction avec deux transformation, qui utilise capitalize() et ajoute un point d’exclamation ; utilisation de swapcase() ; utilisation de list() pour convertir une chaine en liste de caractères
  • Nicolas : création d’une classe qui regroupe différentes fonctions de transformation
2 J'aimes

Reprise du journal

Me revoilà après une longue période d’installation gentoo.

J’ai appris à manipuler des objets en processing.
J’ai appris la « multiple inheritance » (que je n’ai pas trouvé en processing).
J’ai vu, de loin, la notion d’interface et d’implémentation.
J’ai appris qu’il y avait de la syntaxe bien barbare en processing (HashMap).
J’ai beaucoup pratiqué l’objet, je commence à prendre un peu la main.

J’ai appris l’existence de pass, et d’un script de conversion depuis keepassxc.

Journal (mercredi 4)

J’ai appris que processing permettait de passer un objet descendant à une méthode qui attendait son enfant en paramètre.
J’ai commencé à manipuler des interfaces, et des implémentations.

J’ai manipulé tr avec qui je commence à être à l’aise.
J’apprends à utiliser sed. un super truc à ce propos.

J’apprends toujours à utiliser gentoo. C’est quand même bien galère…
Bien que ce soit très puissant.

Journal (Jeudi 5)

J’ai appris à utiliser des ArrayList<> en processing.
J’ai compris la différence entre arraylist et array pour ce langage.

Je ne comprends pas trop certaines subtilités de processing.
Par exemple, (CustomType[]) subset(CustomType[], élément).
Je ne vois pas à quoi sert le premier (CustomType[]).
Il ne peut pas le déduire tout seul ?
Je me tue à rendre le langage le plus concis possible, il ne me le rend pas.

J’ai appris à me simplifier la vie, en intégrant une caméra.
Au lieu de bouger par code les coordonnées des murs (très crade).
Je bouge, naturellement, le joueur.
C’est à l’affichage que je donne l’illusion qu’il est immobile.
Merci la puissante fonction translate() pour éviter les offsets partout.

J’ai encore du mal à concevoir et faire interagir des objets entre eux.
(enfin… D’une manière qui soit logique, parce que sinon ça va)

Journal (vendredi 6)

J’ai appris ce qu’était l’eXtrem learning.
Je saurais le réutiliser dans d’autres cadres.
C’est un outil très utile pour apprendre plein de choses.
Et finalement essayer d’utiliser ce qui est disponible sur Internet.
Il y a beaucoup de choses, et c’est compliqué de faire le tri.

J’ai vraiment appris et compris les concepts de privé, public, et protégé.
C’est le principe de visibilité d’une méthode, ou d’une classe qui hérite.
Je retiens ce tableau (ou équivalent) de Wikipédia :

                         |              Classe dérivée
                         |-----------|--------------|------------
                         |  privé    |    public    |   protégé
-------------------------|-----------|--------------|------------
méthode d’une | privé    |  ø        |    ø         |   ø
classe de     | public   |  privé    |    public    |   protégé
base          | protégé  |  privé    |    protégé   |   protégé

ø → quand elle n’est pas héritée

Je ne m’attendais pas à ce que cette notion soit applicable pour l’héritier.

Masterclass du 05 mars

Rose Mazari (28 ans)

Elle est actuellement Leader Data User Knowledge.

Elle fait du Tennis, et de l’ultimate Frizbee.

Parcours :

2010-2012 : DUT Mesure Physique (parcours très divers, 60% pratique, 40% théorique).

2012-2015 : Ecole Ingénieur à Grenoble dans l’eau, l’énergie et l’environnement pendant 1 an, ensuite spécialisation en traitement du signal en langage C, Matlab, et Java.

2015 - 2018 : Bosse chez Telice - CNRS Telecommunications

1ere mission : SOS Pédro.
Objectif : retrouver Pedro grâce aux signaux du téléphone de Pédro et en envoyant un drone.
Elle a utilisé le logiciel MIMOSA, avec des antennes de réception, et des antennes de propagation.
Elle a également utilisé le logiciel Altium, qui te donne une bibliothèque de composants, qui vont permettre de schématiser les relations entre les micro-controlleurs, les processeurs, les résistances, les transistors … .
Elle codait en Assembleur après avoir créé de ses propres mains la carte (carte pas forcément mère, juste une carte).

Elle a appris à faire de l’électronique, de l’assembleur, de la programmation android …
Elle a découvert le principe de l’électronique embarqué.

2018-2020 : Data Engineer chez Decalthlon.

2 mantrats : Responsabilité, vivabilité.
Décathlon privilégie le savoir être sur les compétences techniques en entretiens.
Elle était curieuse, elle savait apprendre vite, elle sait prendre des initiatives. Elle a expliqué en entretiens qu’elle aimait la bière et qu’elle aimait en faire, avec tout les outils nécessaires. C’est le fait qu’elle ai expliqué en entretien sa passion pour la bière, qui a fait pencher la balance en sa faveur pour avoir ce job. Ca montrait qu’elle était à fond, motivée, déterminée, et curieuse.
=> Ne pas se freiner dans ses passions en entretiens !

Data Engineer :

  • Ingestion de données : Sources opérationnelles & Open Data
  • Data Cleanage / Normalization
  • Data Calculation
  • Manages the Data Infrastructure & pipelines

data

=> Si on devait apprendre un langage en particulier, ce serai le Python. Il y a une énorme communauté derrière, beaucoup de librairies, et on peut tout faire avec du Python (même si tout ne sera pas forcément évident.)

Elastic Search -> outil d’indexation, sur lequel on va poser des API (en Node), qu’on lie avec le Front (en React).

Decathlon produit pleins de Front, avec comme objectif de tout créer dans le même langage, pour se créer une bibliothèque dans l’entreprise.

Outil Cloud Data :
Quick Sense : outil de data visualisation (Framework).
Langage Air : pour faire de la transformation de données.
Power BI (Microsoft).
Looker (Récupérer par Google).
Quicksight (Amazon).
Tout ces outils s’interconnectent ensemble

1 J'aime