Vade-mecum de l'informatique contemporaine (TCP, SOA, Linux, Python, Docker, HDFS, RDF, Adam, OWASP, KPI, UML, Scrum...)
Eva Laude
Christian Goglin
Henri Laude
Editions ENI
Introduction « TL;DR »
Chapitre 1
Au coeur de la machine
1. Présentation du processeur central de l'ordinateur19
2. Fonctionnement du processeur et assembleur22
2.1 Zoom sur une unité centrale de traitement (CPU)22
2.2 Programmation assembleur24
2.3 Pourquoi apprendre l'assembleur ?30
3. Autour du CPU30
3.1 Début de la séquence de démarrage d'un ordinateur30
3.2 Agencement des différents composants matériels à mettre en oeuvre32
4. Les ordinateurs actuels calculent en binaire35
4.1 Petites réflexions au sujet de la représentation décimale des entiers (base 10)36
4.2 Introduction aux calculs en hexadécimal (base 16)37
4.2.1 Conversion hexadécimal vers décimal38
4.2.2 Conversion décimal vers hexadécimal38
4.3 L'octal41
4.4 Le binaire42
4.4.1 Binaire vers décimal43
4.4.2 Trucs, remarques et astuces44
5. Encodage des caractères46
6. Systèmes de fichiers53
7. Carte graphique GPU, CUDA et IA57
8. Réseaux et communications applicatives59
8.1 Les réseaux locaux, introduction59
8.2 Le protocole TCP/IP62
8.3 Les adresses IP64
8.3.1 IPv465
8.3.2 IPv665
8.3.3 Adresses IP à connaître67
8.3.4 Relation entre IPv4 et IPv670
8.4 Plan d'adressage IP et DMZ70
8.5 SSL/TLS HTTPS72
8.6 L'accès à un serveur au travers d'un réseau, SSH73
8.7 Socket programming : communication inter-processus sur le réseau74
8.8 L'accès à une application ou à des microservices web via OAuth277
Chapitre 2
Méthodes - Les bases
1. Introduction81
2. Assurer la convergence d'une action ou d'un projet82
2.1 Penser le projet en se mettant en mode « PDCA »82
2.1.1 Zoom sur le SWOT85
2.1.2 Zoom sur le diagramme d'Ishikawa86
2.2 Évaluer les principales phases d'un projet en mode cascadé (waterfall)91
2.3 Cycle en V94
2.4 Agilité97
2.4.1 SCRUM, la référence actuelle des méthodes agiles97
2.4.2 SAPe104
2.4.3 Git105
2.4.4 DevOps CI/CD108
2.5 KPI et mesures111
2.5.1 Mesurer la performance d'un projet111
2.5.2 Le cas de la performance d'un projet agile.117
2.5.3 Tableau de bord de la sécurité117
2.5.4 Tableau de bord du plan de secours informatique123
2.5.5 Tableau de bord DevOps125
2.5.6 Tableau de bord de l'exploitation informatique127
3. Modéliser129
3.1 Algorithmes129
3.1.1 Exemple préliminaire129
3.1.2 Test des algorithmes131
3.2 Penser au travers de représentations normalisées : UML132
3.2.1 Utilisation de là-modélisation UML pour différents styles de programmation132
3.2.2 Diagramme de cas d'utilisation (use case)135
3.2.3 Diagramme de classe (héritage, composition, association message)137
3.2.4 Diagramme de séquence140
3.3 Diagramme entité-association (ER, EA, MCD) et langage SQL142
3.4 Règles et règles métiers (business rules)150
3.5 Modèles de processus, BPMN ou UML153
3.6 Architecture d'entreprise (EA) et architecture technique du projet157
3.7 Quelques concepts facilitant la structuration et la collaboration des couches du SI159
3.7.1 SOA : Architectures Orientées Services159
3.7.2 Les services du cloud computing161
3.8 TOGAF162
4. Comment structurer une étude de cas163
4.1 Méthode générale pour aborder une étude de cas163
4.2 Compléments concernant les choix de solutions informatiques fonctionnelles166
4.2.1 Liste de progiciels fonctionnels166
4.2.2 Choix de progiciels ou de solutions « clés en main »168
4.2.3 Exemples de critères de choix de progiciels169
Chapitre 3
Méthodes - Bien gérer les données
1. Introduction171
2. Les concepts CRUD, 3NF, ACID, OLTP (et pas OLAP !)172
2.1 CRUD172
2.2 Les formes normales, en se limitant au niveau 3NF173
2.2.1 Relations (associations)173
2.2.2 Les trois formes importantes : 1FN, 2FN, 3FN174
2.3 Les propriétés ACID175
2.4 L'OLTP176
3. Les concepts liés aux databases de la BI et du BigData177
3.1 OLAP178
3.2 Le BIGDATA - architecture de référence179
3.2.1 Un exemple d'architecture « Lambda »183
3.2.2 Hadoop et ses principales distributions186
3.2.3 MapReduce, un algorithme exceptionnel187
3.2.4 Apache Spark (Release 3.1.x)191
3.2.5 Apache Hadoùp vs Apache Spark193
Chapitre 4
Découvrir l'algorithmique
1. Notions élémentaires195
1.1 Un premier exemple d'algorithme195
1.2 Un peu d'histoire197
1.3 La place de l'algorithme dans le développement d'un programme198
2. Algorithme et programmation201
2.1 L'objectif de l'algorithme201
2.2 Exécution pas à pas d'un exemple pour induire un principe plus général202
2.3 Décomposer par analyse descendante204
2.4 Définir l'environnement de l'algorithme206
2.5 Le cadre de l'algorithme : objectif, principe, exemple(s), décomposition et environnement207
3. Rudiments de formalisation209
3.1 Données et actions élémentaires209
3.1.1 Le type numérique NUM210
3.1.2 Le type caractère CAR211
3.1.3 Le type chaîne de caractères CHA211
3.1.4 Le type logique LOG211
3.1.5 Le type date DAT212
3.1.6 Le type composé : CMP213
3.2 La déclaration et la portée des données213
3.2.1 Sans affectation214
3.2.2 Avec affectation214
3.3 Interaction utilisateurs214
3.4 Schéma conditionnel215
3.5 L'itération219
3.5.1 Le schéma : POUR_FAIRE_FINFAIRE219
3.5.2 Le schéma : TANT QUE_FAIRE_FINFAIRE222
3.6 Écriture modulaire224
3.6.1 Les procédures225
3.6.2 Les fonctions226
3.7 Traduction vers un langage de programmation227
3.7.1 Algorithme de calcul du reste de la division de deux entiers écrit en pseudo-code228
3.7.2 Récursivité229
4. Micro boîte à outils d'algorithmes231
4.1 Le load balancing231
4.2 La transformée de Fourier rapide234
4.3 Optimisation au travers d'un gradient stochastique, le cas Adam237
4.4 Algorithmes génétiques, application à la recherche d'un optimum242
4.4.1 Sélection des parents243
4.4.2 Crossover (croisement)244
4.4.3 Mutations244
4.4.4 Coder un algorithme génétique245
4.5 Parcourir un arbre250
4.6 Bibliothèque d'algorithmes utiles252
Chapitre 5
Code et Web
1. Introduction253
2. Connaissance, ontologie, markup language, web sémantique253
3. HTML5 et CSS3269
3.1 En bref269
3.2 Exemple de page web triviale271
4. Le DOM274
5. JavaScript275
5.1 Exemple de JavaScript276
5.2 Insertion de code JavaScript dans une page HTML277
5.3 Page web via Python, apartés sur Flask, POST et GET279
Chapitre 6
Linux, Shell, Conteneurs, WSL - quésako ?
1. En guise d'introduction285
2. Survivre avec Linux - Le minimum à savoir288
2.1 Points de repère288
2.2 Manipuler un fichier290
2.3 Redirection, pipe, grep292
2.4 Installation, en bref292
2.5 Permissions293
3. Daemons (divinités ou démons) et cron295
4. Suggestions pour une utilisation plus professionnelle de Linux297
4.1 Apprendre le shell bash297
4.2 Étudier et implémenter « Systemd" et travailler sur les »cgroups«301
4.3 Suggestions - Réseau et services303
4.4 Suggestions - Sécurité306
5. Conteneurs et Docker308
5.1 Docker, VM, services, en bref308
5.1.1 Démarrer avec Docker308
5.1.2 Persistance312
5.2 Exemple d'architecture multiconteneurs314
Chapitre 7
Python - « starter » TL;DR
1. L'esprit de ce starter Python319
2. Dénominations et conventions320
3. Zen de Python322
4. Contexte de travail325
5. Pour commencer326
5.1 Python, comme une calculette326
5.2 Faire des choix327
5.3 Structures de contrôle itératives328
5.4 Créer ses propres fonctions330
5.4.1 Portée des variables et passage de paramètres333
5.4.2 Mourir vite334
5.5 Créer ses propres bibliothèques de fonction335
5.6 Vos deux premiers types built-in composés336
5.6.1 Les t_uplets (tuple)336
5.6.2 map et lambda340
5.6.3 Les ensembles (set)342
6. Manipulations de données courantes343
6.1 Utiliser la fonction print et découvrir les strings343
6.2 Utiliser les listes347
6.3 Créer et transformer des listes349
6.3.1 Les bases349
6.3.2 Effectuer une boucle sur une liste351
6.3.3 Manipulation vectorielle d'une liste352
6.4 Numpy, tenseurs, matrices en bref354
6.4.1 Manipulations de bases354
6.4.2 Sauvegarde et accès intelligent à un tenseur357
7. Les dictionnaires Python359
7.1 Introduction aux dictionnaires359
7.2 Se doter d'une fonction print pour les structures complexes via pprint361
7.3 Manipulation des dictionnaires361
8. Zoom sur les générateurs364
9. Créer ses propres objets366
9.1 Création de classes et d'objets366
9.2 Création de classe et notion d'encapsulation369
9.3 Les méthodes spéciales372
9.4 Les décorateurs373
9.4.1 Le décorateur méthodes de classes pour créer des bibliothèques de fonctions373
9.4.2 Le décorateur « property » pour simplifier l'appel des »getters«375
9.5 Créer son propre décorateur : transformation simple d'un attribut376
9.6 Créer son propre décorateur : le design pattern Singleton377
9.6.1 Passage d'arguments par position ou par nom (arg et kwargs)377
9.6.2 Création du décorateur @singleton379
Chapitre 8
Développement, savoir-faire complémentaires
1. Introduction381
2. Manipulation de données avec Pandas381
2.1 Introduction à Pandas381
2.2 Lecture d'un fichier csv et transformation via Pandas382
2.3 Pandas et SQL386
3. Valider et affecter des types simples en toute sécurité389
4. Gestion des exceptions, en bref392
5. Tri récursif d'un vecteur de données (liste)393
6. Gérer les dates de façon normalisée et efficace, datetime & pytz395
7. Un programme utilisable en ligne de commande396
Chapitre 9
Documenter tous les aspects d'un projet : check-list
1. Introduction399
2. Principales caractéristiques de la documentation d'un projet informatique400
3. Documentation des enjeux et des modes de gestion du projet402
3.1 Besoins motivant la création du projet402
3.2 Champ d'application et situation403
3.2.1 Définition du problème403
3.2.2 Positionnement du produit ou de la solution403
3.2.3 Contexte404
3.3 Définition et objectifs404
3.4 Décrire un ou plusieurs scénario(s) pour le projet404
3.5 Trajectoire du projet405
3.6 Calendrier global du projet406
3.7 Bénéfices attendus406
3.8 Évaluation des coûts407
3.9 Planifier et budgétiser le sous-projet informatique408
3.10 Gestion des risques410
3.11 Qualité de projet411
3.12 Plan de communication413
3.12.1 Communication initiale414
3.12.2 Communication pendant le projet414
3.12.3 Go !415
4. Architecture globale du SI en relation avec le projet415
4.1 Personnalisation de l'architecture globale415
4.2 Portée de l'architecture globale416
4.2.1 Définitions, acronymes et abréviations416
4.2.2 Synthèse pour les non-techniciens416
4.3 Architecture d'entreprise417
4.3.1 Introduction417
4.3.2 Contexte métier417
4.3.3 Processus métier418
4.3.4 Événements métier419
4.3.5 Impacts métier419
4.4 Architecture fonctionnelle et services à déployer420
4.4.1 Composition des fonctions/services420
4.4.2 Fonctionnalités et cas d'utilisation les plus importants420
4.4.3 Communication et interactions fonctionnelles420
4.4.4 Impacts fonctionnels421
4.4.5 Traçabilité métier421
4.4.6 Modèle de données ou modèle sémantique (ontologie)421
4.4.7 Cycles de vie des objets422
4.4.8 Données de référence422
4.4.9 Traçabilité fonctionnelle422
4.4.10 Conformité à l'architecture d'entreprise423
4.5 Architecture d'Application423
4.5.1 Composition de l'application423
4.5.2 Dépendances d'Application425
4.5.3 Services d'Applications425
4.5.4 Flux et interactions des applications426
4.5.5 Impacts sur une application existante426
4.5.6 Traçabilité fonctionnelle426
4.5.7 Bases de données et nomenclatures de référence426
4.5.8 Conformité à l'architecture générale de l'entreprise427
4.6 Exigences en matière d'Architecture Logicielle427
4.6.1 Taille et performances427
4.6.2 Autres exigences et contraintes427
4.7 Architecture Technique429
4.7.1 Composition Technique429
4.7.2 Réutilisation429
4.7.3 Traçabilité de l'Application429
4.8 Architecture de Déploiement430
4.8.1 Déploiement Géographique430
4.8.2 Infrastructure430
4.8.3 Contraintes Opérationnelles431
4.9 Stratégie de Développement431
4.10 Stratégie de Migration des Données431
4.11 Stratégie de Déploiement au niveau hardware, réseaux, virtualisation et (micro) services431
4.12 Stratégie de Gestion de Configuration et de Version432
4.13 Contraintes de Sécurité, de résilience et de Conformité432
4.14 Catalogue des Risques en relation avec l'architecture433
4.14.1 Conformité aux Normes et Standards433
4.14.2 Conformité de l'Architecture Fonctionnelle d'entreprise435
4.14.3 Risques IT, analyse en profondeur435
5. Fiches de « Cas d'Utilisation Métier »437
6. Documentation de la gestion des Problèmes et des Défauts440
7. Release note (note décrivant le contenu d'une version livrée)444
8. Documentation technique moderne des applications et des Systèmes d'information445
Chapitre 10
Aide-mémoire
1. Introduction449
2. Aide-mémoire : directives et commandes assembleur449
2.1 Directives assembleur449
2.1.1 SECTION449
2.1.2 EXTERN450
2.1.3 EQU451
2.1.4 DB451
2.1.5 DW452
2.2 Commandes assembleur452
2.2.1 MOV452
2.2.2 ADD453
2.2.3 SUB454
2.2.4 CMP454
2.2.5 JMP455
2.2.6 CALL456
3. Aide-mémoire HDFS et Hadoop, gestion de fichiers456
3.1 Afficher les informations de base sur un fichier457
3.2 Gestion des fichiers et des répertoires457
3.3 Transfert de fichiers entre HDFS et le système de fichiers local458
4. Aide-mémoire SQL459
4.1 Clause WHERE - utilisation avec SELECT/UPDATE/DELETE/INSERT459
4.1.1 SELECT avec WHERE459
4.1.2 UPDATE avec WHERE459
4.1.3 DELETE avec WHERE460
4.1.4 INSERT avec WHERE460
4.1.5 SELECT DISTINCT avec WHERE460
4.2 Clause WHERE - opérations simples461
4.3 Clause WHERE - opérateurs logiques462
4.4 Clause WHERE - avec jointure463
4.4.1 Jointure interne (INNER JOIN)463
4.4.2 Jointure externe (LEFT JOIN)466
5. Aide-mémoire Git468
5.1 Initialisation d'un dépôt Git468
5.2 Gestion des branches Git468
5.3 Gestion des commits Git469
5.4 Gestion des conflits de fusion470
5.5 Gestion des tags Git470
6. Aide-mémoire Linux : Gestion fichiers/processus/utilisateurs/paquets/archives471
6.1 Gestion de fichiers471
6.2 Gestion des processus471
6.3 Gestion des utilisateurs472
6.4 Gestion des paquets472
6.5 Gestion des archives473
7. Aide-mémoire Linux : changer les attributs d'un fichier, dont les permissions473
7.1 Changer le propriétaire et le groupe d'un fichier473
7.2 Modifier les permissions par défaut pour les nouveaux fichiers474
7.3 Changer les permissions d'un fichier476
7.4 Modifier l'heure de modification d'un fichier476
8. Aide-mémoire Linux : cron477
8.1 Création d'une tâche cron477
8.2 Syntaxe de la planification des tâches477
8.3 Exemples de tâches cron478
8.4 Gestion des erreurs478
8.5 Sécurité478
9. Aide-mémoire Linux : réseau479
9.1 Afficher les informations d'interface réseau479
9.2 Afficher les informations de routage480
9.3 Afficher les informations DNS480
9.4 Afficher les informations ARP481
9.5 Afficher les informations de connexion réseau482
10. Aide-mémoire Linux : le « bash », en bref482
10.1 Les bases482
10.2 Les variables483
10.3 Les conditions484
10.4 Les boucles486
10.5 Les fonctions489
11. Aide-mémoire Linux : systemd et cgroups490
12. Aide-mémoire Linux : serveur HTTP Apache2 (dans un contexte Systmed)494
12.1 Démarrer, arrêter et redémarrer Apache2494
12.2 Gestion des fichiers de configuration495
12.3 Gestion des hôtes virtuels495
12.4 Gestion des journaux496
12.5 Gestion de la sécurité496
13. Aide-mémoire Linux : fireWall497
13.1 Configurer un pare-feu avec iptables497
13.2 Configurer un pare-feu avec firewalld497
13.3 Configurer un pare-feu avec ufw498
13.4 Configurer un pare-feu avec nftables498
13.5 Configurer un pare-feu avec Shorewall498
14. Aide-mémoire Linux : SSH499
14.1 Connexion à un serveur distant via SSH499
14.2 Gestion des clés SSH500
14.3 Configuration du serveur SSH500
14.4 Gestion des sessions SSH501
15. Aide-mémoire Linux : SSL502
15.1 Création d'un certificat SS Lautosigné502
15.2 Création d'un certificat SSL signé par une autorité de certification503
15.3 Conversion de formats de clés et de certificats504
16. Aide-mémoire Docker : commandes de base505
16.1 Démarrer un nouveau conteneur505
16.2 Gérer les images Docker505
16.3 Gérer les conteneurs Docker506
16.4 Gérer les réseaux Docker506
17. Aide-mémoire Docker : gestion des volumes507
17.1 Créer un volume507
17.2 Utiliser un volume507
17.3 Copier des fichiers vers/depuis un volume508
17.4 Sauvegarder/restaurer des volumes508
17.5 Synchroniser des volumes entre les hôtes509
18. Aide-mémoire Docker : instructions contenues dans les Dockerfile509
18.1 Créer une image Docker509
18.2 Créer un utilisateur non privilégié510
18.3 Installer des dépendances510
18.4 Utiliser des variables d'environnement511
18.5 Utiliser des arguments de construction511
19. Aide-mémoire Docker : instruction de gestion des conteneurs DockerCompose511
19.1 Création d'un service511
19.2 Lancement d'un service512
19.3 Arrêt et suppression d'un service513
19.4 Gestion des réseaux513
19.5 Gestion des volumes514
20. Aide-mémoire Pandas : l'indispensable515
20.1 Création d'un DataFrame515
20.2 Manipulation rapide d'un DataFrame515
20.3 Indexation et sélection516
20.4 Complément utile : Manipulation de chaînes de caractères (strings)517
21. Aide-mémoire Pandas : zoom sur les manipulations de données517
22. Aide-mémoire Pandas : zoom sur les jointures522
Annexes
1. Bibliothèque d'algorithmes525
1.1 Algorithmes à la mode ces dernières années526
1.2 Algorithmes autour des graphes528
1.3 Algorithmes qui ouvrent des perspectives529
2. Types MIME531
2.1 Applications531
2.1.1 Applications génériques531
2.1.2 Applications bureautiques532
2.2 Images533
2.3 Multiparts534
2.4 Texts534
2.5 Vidéos535
2.6 Syntaxe MIME, en bref535
3. Codes permettant de générer certaines illustrations de l'ouvrage536
3.1 NameNodes, code en syntaxe PlantUML536
3.2 Tableau de topologies, code en syntaxe PlantUML537
3.3 Vocabulaire réseau, code en syntaxe PlantUML538
3.4 Plan d'adressage IP et DMZ, code en python utilisant le package diagrams539
3.5 Diagramme de séquence OAuth2, code en syntaxe PlantUML541
3.6 PDCA, roue de Deming, code en syntaxe GraphViz541
3.7 Cas d'utilisation (use case), code en syntaxe PlantUML542
3.8 Diagramme de classes, code en syntaxe PlantUML543
3.9 Symbolique SDL adaptée aux processus, code en syntaxe PlantUML544
3.10 Un algorithme c'est un chemin, code en syntaxe PlantUML545
Index
547