Formations Développeurs Web Fullstack
Streaming Applicatif
Formation Web Fullstack
Historique de publication de logiciels
En étant ingénieur logiciel, une des problématiques principale est de
- créer des applications
- et ensuite de les distribuer aux utilisateurs.
Depuis des décennies, l'écosystème logiciel a beaucoup évolué.
-
Années '80:
- modèle de la publication des livres
- boom de l'informatique personnelle (PC)
- achat par boites cartonnées dans les grandes surfaces
-
Années '00:
- Sites internet pour publier directement du contenu
- 2008: AppStore, Google Play
- 30% de commissions
-
Années '20:
- Distribution directe par WebApps
- WebApps
- Web3
-
Le métier de développeur doit gérer beaucoup de limites humaines
-
La puissance des ordinateurs dépasse largement les capacités humaines
Pourquoi utiliser PHP et SQL ?
Bases d'un ordinateur
- Disque Dur (SSD) (1 To)
- Processeur (CPU & GPU) (3 Ghz)
- Mémoire Vive (RAM) (16 Go)
SYSTEME EXPLOITAION
- Programme principal qui est démarré quand on allume l'ordinateur
Pour stocker les données, les systèmes d'exploitation (OS) proposent le système de fichiers:
- une organisation en hiérarchie arborescente
- par des dossiers
- et des fichiers.
ECRITURE
- Un fichier permet de stocker des données
- On peut séparer les données en plusieurs fichiers
- Quand on commence à avoir trop de fichiers, on peut alors créer des dossiers
- Chaque disque dur propose un dossier "racine"
- Et ensuite, on peut créer des fichiers et des sous-dossiers
LECTURE
- Une fois qu'on a beaucoup de données réparties dans beaucoup de fichiers
- il faut ensuite pouvoir sélectionner les informations intéressantes
- Les systèmes d'exploitation ne sont pas très performants pour cette recherche
- Il faut alors ajouter une base de données
- Les bases de données (BDD) sont des logiciels spécialisés
- dans le stockage
- et surtout la recherche des informations
SQLITE
-
SQLite est une base de données très légère et facile à utiliser
-
Une BDD SQLite tient dans un seul fichier
-
Il est possible de construire une base de données comme un système de fichiers d'un OS
- chemin (path): structure de sous-dossiers
- fichier (filename): nom unique du fichier dans son sous-dossier
- extension (extension): information complémentaire sur le type de contenu stocké dans le fichier
- contenu (data): contenu du fichier (texte ou binaire)
- dates: dates de création et de modification du fichier
-
SQLite est capable de gérer facilement un grand fichier de données
- +500Mo
- +50.000 lignes
- < 100ms de temps de recherche pour +20 requêtes
- par ajout d'index sur les colonnes
STREAMING APPLICATIF
- Une application évolue et propose régulièrement
- des corrections de bugs
- ou de nouvelles fonctionnalités
- Les utilisateurs doivent donc régulièrement obtenir le nouveau code
- Les AppStores téléchargent régulièrement les mises à jour
- même si on n'utilise pas le logiciel
- même si on n'a pas besoin des nouvelles fonctionnalités
- même si les n'est pas concerné par les bugs corrigés
- Les AppStores téléchargent régulièrement les mises à jour
- Streaming Applicatif
- But: Optimiser une application
- en réduisant les téléchargements par les utilisateurs
- le code
- et le contenu
- en réduisant les téléchargements par les utilisateurs
- Front End
- Les réseaux mobiles fournissent maintenant du haut débit
- VOD de streaming vidéos en FullHD du plusieurs Go
- le code est très léger (Ko ou Mo)
- Il est donc possible de streamer le code d'une application
- Un utilisateur ne charge que le code dont il a besoin
- => Front End en WebApp (HTML, CSS, JS)
- Back End
- Il ne faut activer que le code nécessaire
- PHP propose le mécanisme de chargement automatique de classes
- spl_autoload_register
- => Programmer en Orienté-Objet avec PHP
- La POO permet de gérer des grands volumes de code
- +1 million de lignes de code
- But: Optimiser une application
PHP
- Programmation Orienté Objet (POO)
- capable de gérer de très grands volumes de code
- plusieurs millions de lignes de code
- capable de gérer de très grands volumes de code
- Chargement automatique de code
- spl_autoload_register
- Chargement automatique de classe au moment où PHP en a besoin
- => Streaming Applicatif
- Possibilité de stocker le code
- dans une archive .zip
- ou dans une BDD (SQLite ou SQL)
- création de fichiers caches
Volumes de code
-
Travail à temps plein
- environ 220 jours de travail par an
- environ 1.600 heures de travail par an
- 35 heures par semaine
- 7 heures par jour
-
Un développeur devrait produire environ 400 lignes de code par jour
- 7 heures de travail par jour
- 7 x 60 = 420 minutes de travail par jour
- environ 1 ligne de code par minute ?
-
3 Etapes pour le travail de développeur
- Réfléchir avant de coder
- Coder
- Vérifier que le code fonctionne correctement
- => Un développeur n'écrit du code qu'un tiers du temps de travail !
- => 20 secondes pour écrire une ligne de code
-
Entreprise avec une équipe de développeurs
- 4 personnes
- 1 dev => 200 jours de travail x 400 lignes de code par jour
- 1 dev => +80.000 lignes de code par an
- 4 dev => +300.000 lignes de code par an
Conclusion: une entreprise qui emploie une équipe de développeur
- a besoin d'outils pour gérer plusieurs centaines de milliers de lignes de code
Techniques de programmation
-
Programmation fonctionnelle (années '80)
-
programmation Orienté Objet (années '90)
-
Programmation fonctionnelle
- le dev range son code dans des fonctions
- 100 x 100 = 10.000 lignes de code
-
Programmation Orienté Objet
- le dev range ses fonctions dans des classes
- 100 x 100 x 100 = 1.000.000 lignes de code
- la Programmation Orienté Objet est bien adaptée aux besoins d'une entreprise
-
note: la POO prévoit encore plus de "boîtes" pour ranger les classes...
-
Depuis les années '90, la POO est devenu un standard pour le développement en entreprise
function afficherPage ()
{
// ma ligne de code 1
// ...
}
function ajouterPage ()
{
// ma ligne de code 1
// ...
}
class Site
{
function afficherPage ()
{
// ma ligne de code 1
// ...
}
function afficherFormulaire ()
{
// ...
}
// ... ajouter plus de fonctions
}
class Database
{
function ajouterPage ()
{
// ma ligne de code 1
// ...
}
// ... ajouter plus de fonctions
}
// ... ajouter plus de classes
AVANTAGES DE LA POO
- Organisation de millions de lignes de code
- Codage en "langage naturel"
- Sujet Verbe Compléments
- Classe Méthode Paramètres
- Approche progressive
- Du plus général au plus détaillé
DIVIDE AND CONQUER
-
Diviser et Conquérir
-
Sun Tzu: l'art de la guerre (environ -500 av.JC)
-
Technique humaine très ancienne pour mener de grands projets
-
Pyramides en Egypte (-2500 av.JC)
-
Divide: Diviser
-
And: Et ensuite
-
Conquer: Rassembler
-
Qualités requises:
- Patience
- Rigueur
SETUP MATERIEL
-
Mac avec processeurs Silicon (Mx)
-
8 cores
-
16 Go de RAM
-
1 To de SSD
-
écran externe 4K (3840x2160)
-
optionnel: clavier externe étendu (avec numpad)
SETUP LOGICIEL
- HomeBrew pour installer les autres logiciels
- Google Chrome / Chromium
- VSCode
- PHP
- MySQL / MariaDB
- Blender
- ffmpeg
HEBERGEMENTS ET SERVEURS DEDIES
- OVH Cloud Kimsufi et SoYouStart
- Kimsufi à 6 euros/mois (TTC)
- 1TO Disque
- 4Go RAM DDR3
- Atom N2800
- 1.86 Ghz
- 2c/4t
- Kimsufi à 6 euros/mois (TTC)
WORDOPS
- outils pour gérer facilement un serveur web
PROJETS
One Page
Pour démarrer le marketing d'un projet, il faut installer une Landing Page avec un formulaire d'inscription à une Newsletter et un formulaire de contact.
Site Vitrine
Quand le projet avance, il y a plus de contenus à présenter. Un site de plusieurs pages permet d'organiser le contenu suivant les centres d'intérêts. Les moteurs de recherche vont indexer les pages et attirer de nouveaux visiteurs.
Blog
Pour créer une communauté, il faut publier régulièrement des actualités. Les moteurs de recherche préfèrent aussi un site régulièrement mis à jour et qui ajoute de nouveaux contenus.
CMS
La production de contenus demande une bonne organisation pour gérer le volume croissant de pages du site.
MarketPlace
Les visiteurs peuvent créer un compte et ainsi créer une communauté active. Les publications des membres participent au développement de la plateforme.