Mes notes du Symfony Live – Jour 2

Vous avez dit Symfony 6.1? – Nicolas Grekas

Ici, un autre « core dev » de Symfony pour cette première conférence, qui nous rappelle qu’au sein même d’une même version majeure, il y a promesse de rétrocompatibilité … D’une version majeure à une autre, le chemin de migration continue. Il est conseillé de faire un composer update tous les mois; et tous les 6 mois, un composer update pour passer en version mineure suivante, pour corriger les dépréciations.
Il est déconseillé de commencer ou rester sur une version LTS, pour ne pas rester « lent » ou « stable ».
En 6.1 on a droit à :
– une modernisation du code via nouvelles syntaxes / fonctions
– une meilleure description des types natifs et génériques
– une simplification par abandon : SwiftMailer, Twig, FlexServer
– une revisitation des classiques : composer runtime, symfony new (l’option –-full pour le website skeleton devient –website)
– des serveurs à longue durée d’exécutions
– une performance accrue.
Retour sur le nombre de PR : 6PR/jour en 12 mois soit 2000PR : 400 features, 700 bugs, +900 mineures)
Je vous laisse le loisir de regarder la rediffusion de la conférence pour avoir l’aperçu complet, et non exhaustif de cette mise à jour !

Mon avis : un bon tour de découverte de cette nouvelle version de SF, bien hâte de la tester en fait !

Code asynchrone dans une application Symfony synchrone – Jérôme Tamarelle

Petit rappel : Composer utilise depuis la version 2 des composants de ReactPHP, et peu de gens le savent.
Il est question de ces différents concepts :
1. I/O non bloquants
Fonctions natives de PHP pour les flux non-bloquants : stream_select, curl_multi_select, Symfony HTTPClient est non-bloquant.
2. Délégation de traitement à des processus parallèles
Effectuer des traitements en parallèle sans bloquer le processus courant, avec Sf Process ou encore Messenger
3. Branches de code concurrentes dans un même thread
Ici , on parle de promesses, coroutine, et fibers pour exécuter plusieurs branches de code en concurrence, sur le même thread.
A retenir :
– Une fonction synchrone peut appeler une fonction synchrone mais pas une fonction asynchrone.
– Une fonction asynchrone peut appeler une fonction synchrone et une fonction asynchrone.

Mon avis : je suis peu familiarisée avec ces concepts. Intéressant à découvrir par la pratique, peut-être avec un projet futur.                                     

Développer une application web décentralisée avec Symfony et API Platform – Kevin Dunglas

SAUVONS LE WEB !!! DECENTRALISONS !!! Tel est le message de cette conférence de Dunglas, connu de tous pour être un des core devs de Api Platform.
Les GAFAM représentent 57% de tout le trafic mondial, la majorité de l’usage du web passe par ces quelques acteurs-là, et leur donne un contrôle quasi total des contenus des internautes. Ce qui était à des milliards de lieues de la volonté de Tim Berners-Lee quand il a crée le web ! Au départ il voulait vraiment créer un espace de libre expression pour les gens qui ne pouvaient pas le faire … le Web devait donner une voie aux personnes marginalisées, les autres médias étant réellement contrôlés, tous ceux qui avaient quelque chose à dire pouvaient le faire, via les URL, qui relient les sources les unes aux autres (on a donc un graphe de connaissances). Or les GAFAM donnent donc pas mal de problèmes de démocratie, vu qu’ils censurent à tout-va.
Aux origines, le Web 1.0, tout était décentralisé.
Puis le Web 2.0 (terme marketing) est arrivé, permettant aux utilisateurs de bénéficier des formulaires pour publier du contenu, créer des mixs de communautés. On a vu apparaitre les API web, ainsi qu’un mix d’acteurs non-commerciaux et commerciaux, ça se passait plutôt bien. Mais l’argent est entré en jeu.
Puis on voit naitre le Web 3, la promesse : re-décentraliser le web, casser le pouvoir des états surveillants. On propose d’utiliser la blockchain d’Ethereum et d’exécuter ce code sur les ordinateurs du réseau pour faire des sites web. Donc base sur les cryptomonnaies, trustless et permissionless. Sauf que des problèmes se posent : consommation énergétique (Ethereum toujours en POW), d’énormes structures américaines sont intéressées par le concept, chaine de Ponzi.
Donc, voici le concept du Web 3.0, apparu avec le web sémantique, crée par Tim Berners-Lee, qui consiste à utiliser le web comme immense base de données, le web est donc considéré comme base de connaissances, les opérations auraient une grande interopérabilité.
Pour cela on utilise un modèles de données abstrait pour représenter n’importe quel set de données : RDF. Mais on a d’autres formats : tableau HTML, N-Tuple dans un fichier texte, Turtle, JSON-LD.
Tim Berners-Lee présente son projet : SOLID. Les considérations physiques, politiques, etc … dont détaillées dans des documents émis en dur. Solid Toolkit permet de créer des application décentralisées et interopérables, la décentralisation des données personnelles, etc …
A mentionner qu’on peut construire une application Symfony avec Solid. Dunglas propose son bundle.

Mon avis : je suis TRES sensibilisée sur sujet, et j'avais envie, avant la pandémie de faire un gros projet lié au web, son évolution et sa centralisation, hélas remis à plus tard. L'idée est interessante et je vais me pencher sur le sujet, et regarder Solid d'un peu plus près ... mais toutefois, je me pose des questions. N'est-il pas mieux de sensibiliser les gens à faire leur propre site internet, comme avant ? et de créer l'arborescence de leur communauté à cet effet ? Leur faire comprendre ce qu'est le logiciel libre ? Si Dunglas passe par là, je serai ravie qu'il puisse répondre à mon interrogation ;) !

Mon avis global sur le séminaire

Une joie de retrouver tout ce beau monde et l’ambiance des séminaires sans entendre les mots maske aubligatouar, pace vaksinale et tout le toutim. J’aspire vraiment à retrouver la vie active d’avant que je menais sur ce point-là. Les différents stands étaient attractifs, et je suis bien contente d’avoir eu un beau t-shirt en cadeau, et un autre gagné sur le stand des Tilleuls.coop. Il faut juste que je pense la prochaine fois à imprimer mon badge avant de venir ! Les thèmes des conférences étaient variées, et la plupart étaient bien intéressantes et donnent envie de creuser le sujet abordé.
Sinon … gros bémol pour les déjeuners. J’adorais le concept du buffet proposé lors de ma dernière venue, qui permettait un éventail varié. Je fais très attention à ce que je mange, surtout quand je ne trouve pas le temps de faire du sport, que je mange au resto le soir avec ma chérie + les copains que je n’ai pas revus depuis un bail, et que j’ai de gros problèmes avec certains aliments (comme le fromage). Là c’était vraiment bourratif, trop riche et pas varié (sérieux les gars, un gâteau au Daim ? Pas un seul fruit !). Le souci c’est que le tarif du SfLive est plutôt conséquent, et pour moi chaque centime compte, la nourriture en fait partie. Et qu’on ne me parle pas de « raisons sanitaires », vu qu’on reste toujours tous mélangés dans les différentes salles … mais bon, on va me répondre qu’on n’a pas eu le choix, c’est ça ou rien … Oui, je suis exigeante 😀 !

Mes notes du Symfony Live – Jour 1

Quelle joie pour moi de revenir à cette vie d’avant qui m’avait tant manquée … Il s’agit ici du deuxième Symfony Live auquel j’assiste, et comme bien des séminaires, j’ai appris pas mal de choses, que j’ai notées, remises au propre, et vous fais partager !

La keynote de Fabien Potencier

Fabien est en forme pour cette nouvelle session ! Pour démarrer le show, il nous fait un retour d’expérience sur un bug qu’il a eu avec Twig. Après une mise à jour des tests des selectors css, il y a eu un problème de « match » avec une expression qui devait figurer dans le code, via preg_match(). Il commence alors une session de debug, pour avoir un détail plus explicite de la source du bug.
S’inclut alors un petit speech sur l’open source, qui consiste à contribuer pour :
– éviter aux autres ou à soi de refaire la même erreur
– éviter à quelqu’un, voire des centaines de gens de réfléchir de nouveau à un problème
Du coup, quick fix, on fork, on ouvre le code, on essaye de faire le changement, on écrit les tests, on les exécute, on pull request et on croise les doigts 🙂 …
Quand il s’agit d’un package, on peut aussi modifier le code et faire un link dans les vendors pour pouvoir tester plus efficacement.
Cependant, ici il s’agit d’une modification dans ExpressionLangage, qui est une sous-partie de Twig. On peut faire mieux que simplement corriger, ou faire une fonctionnalité qui peut poser problème avec d’autres cas de figure. Du coup, Fabien a poussé la réflexion plus loin … On est en PHP8.1 et on supporte PHP7 dans Twig, ce qui pose problème pour la contribution. La solution : travailler sur Twig4 pour moderniser le code. On ouvre les issues, entre autres : résolution des mismatches camelcase vs. snake_case, ne plus avoir de fonctions globales, analyse syntaxique …
En fin de compte : Twig sera intégré en tant que composant de Symfony, Twig4 sera alors nommé Twig6.2 en parallèle à la nouvelle version de Symfony, et changera de namespace.

Mon avis : une bonne mise en bouche, qui m'a poussée à la réflexion quand à certains de mes side projects.

Comment valider de la donnée – Marion Horteau

Ici, Marion nous fait un parallèle avec l’univers de Pokémon. Personnellement, je ne suis pas du tout fan, mais je me suis laissée tenter.
Pour rappel, un validateur est composé d’une contrainte, qui est appliquée à un objet, et elle est appliquée à un validateur. nativement, il y en a une bonne dizaine (que j’ai du bûcher par cœur pour ma certif …).
Mais certaines contraintes ne sont pas forcément liées à un validateur, comme UniqueEntity dans Doctrine.
On valide sur une propriété, dans un formulaire, dans une méthode (getter ou autre), ou sur une classe entière, et soit dans le code, soit lors d’un submit dans un formulaire.
Mais ici on veut faire de la validation dynamique …
Marion propose donc une solution basée sur une API avec des paramètres qui varient.
Dans le contrôleur, on alimente un objet Evolution, avec un attribut Callback. Comme les contraintes sont différentes, on peut en ajouter avec Assert\Collection. InContext permet de rendre la validation récursive.
Pour externaliser les contraintes, elle crée une interface pour les différents types de contraintes. Elle ajoute des tags dans la définition des services. La persistance se fait soit par Doctrine, soit par Json.

Mon avis : dommage que le contexte Pokémon me rebute, mais il s'agit ici d'un avis personnel. L'introduction sur les validateurs natifs est toutefois un peu longuette, j'aurais aimé qu'elle détaille plus en détails cette validation dynamique. Mais intéressant.

Du DDD avec API Platform – Mathias Arlaud, Robin Chalas

Rappelons-le, ce pattern permet une conception tactique et architecturale. le DDD ce n’est pas du RAD, la conception est pilotée par le métier, et ça ne permet pas de développer rapidement.
Petit rappel de l’archi hexagonale : les layers sont des couches où on écrit du code, ils obéissent à la règle des dépendances.
– Couche basse : domaine (models, events, repo, services …)
– Couche application : contient les services applicatifs pour traiter les use-case métier
– Couche infrastructure : porte vers le monde extérieur (controllers, bases de données, caches, vendors …), c’est la SEULE qui aura accès à du code tiers.
Les avantages :
– on préserve l’intégrité de notre domaine,
– le code est d’avantage testable,
– on est capable de repousser les décisions technologiques,
– le domaine est agnostique du contexte utilisé (ligne de commande, terminal, navigateur …)
Dans Api Platform, on peut configurer via ApiResource les opérations, via new Get() et new Post(). Mais ce n’est pas la bonne approche.
Le pattern command bus va nous permettre de reprendre complètement le main sur nos use case métier en faisant appel à nos domaines. Ça implique : Notion de commande (objet PHP) + un handler (service applicatif) + bus (trouver le bon handler pour une commande données) + deuxième bus (query) pour nous permettre de contrôler la manière dont on interagit avec notre domaine.
On manipule entre autres :
ItemOperations
CollectionOperations (ça dépend si on a un id dans le chemin) – supprimée dans ApiP3, tout est operation
– Notion de ChainProvide qui fait appel aux autres providers
– On peut créer nos propres providers, qui auront d’autres priorités
– Création de DataTransformers

Mon avis :  Haaa ! API Platform ! J'adooore ce framework, et je voulais vraiment en savoir plus sur le Domain Design Development. Je comprends ici que je n'ai pas fait le tour de ce framework, je pense à certains side projects que je définis en DDD, qui font appel à une API crée par ApiP, mais j'ai envie de remanier tout ça. Conférence très interessante qui m'a remise en question. Merci :D !

Doctrine, objet typé, et colonne JSON – Grégoire Pineau

Ici, on parle CMS, notamment celui utilisé par JoliCode. Composé de blocs, qui représentent chacun un objet.
L’objectif de ces blocs :
– éviter la duplication de code
– pouvoir stocker les blocs en BDD
– avoir un maximum d’objets PHP
– et si possible, un objet par type de bloc
Pour ce faire, deux solutions : utiliser l’héritage Doctrine, et stocker du PHP sérialisé.
Les options :
MappedSuperClass : Doctrine ne sait pas gérer les relations avec
Single Table (genre une première classe) avec une entité. On aura une entité mais la deuxième classe sera vide, si la première est remplie.
Class Table : crée une table par type de bloc, pas très pratique à administrer.
On rejette d’emblée le PHP sérialisé via serialize() et unserialize(), non interopérable ! Quand à l’objet stocké en JSON, c’est « so 2013 » …
La solution proposée c’est le Concept Unit Of Work, la donnée est encapsulée via l’EntityManger qui :
– contient le cache de toutes les entitées passées
– gère les écritures en BDD,
– gère les transactions,
– s’occupe de quel objet doit être insert / delete / update
– s’occupe de gérer les dépendances entre les objets
– fait des snapshots des objets qu’il rencontre pour faire un diff au moment du flush.
On utilise alors les event Doctrine, qu’on hooke dans notre code, avec un listener Doctrine.

Mon avis : Je vais me faire taper sur les doigts, mais je vais être franche. C'est assez pénible quand les slides sont passées vite-vite quand on ne connait pas vraiment le sujet (qui ici est spécifique, puisque retour d'expérience). J'ai eu beaucoup de mal à suivre. Personnellement, j'aurais préféré moins de contenu, mais peut-être plus d'explications.

Connaissez-vous vraiment JWT ? – Karim Pinchon

Pour rappel, JWT (prononcé abusivement « jot ») = Json Web Token.
C’est une solution simple et sécurisée, qui a une référence et une valeur.
La cryto, ça obéit à des régles : c’est mathématique, c’est de confiance, ça communique, ça passe sur un canal non sûr, et c’est CAIN.
ça implique :
– la signature numérique
– le chiffrement
– le hachage (intégrité et sens unique)
– Mac / HMac (intégrité et authentification)
– encodage (chaine de caractères)
Pour voir à quoi ça ressemble, il existe les outils token.dev et jwt.io
Après un tour des tokens existants (JWE, JOSE …), quelques conseils :
– attention à ne pas tout accepter côté serveur
– valider les claims
– préférer l’asymétrique
– utiliser une librairie existante et éprouvée
– ne vous battez pas pour révoquer les JWT (ça doit avoir un cycle de vie)
– éviter de logger les jetons (pour la confidentialité)

Mon avis : je suis peu familière avec le cryptage des données, car je n'en ai fait que rarement dans ma carrière, mais c'est bon à savoir.

Des composants Symfony méconnus qui valent le détour – Alexandre Daubois

  • HTMLSanitizer : prévu pour SF 6.1, expérimental.
    HTMLPurifier : garde au mieux l’arborescence des noeuds, supprime les données potentiellement dangereuses.
    Le Sanitizer reconstruit les données du HTML en extrayant les données safe de l’input, la structure de base peut être perdue. Le comportement est défini par HTMLSanitizerConfig. Il peut forcer les https pour les URL, autorise les Schemes, autorise les media hosts.
  • STRING : arrivé en SF 5.0, il permet de faire de la manipulation simplifiée de codepoints, par exemple des emojis : combinaisons possibles pour faire des couleurs de peau, crée des chaines par contructeur (CodePointString, UnicodeString, ByteCodeString …), crée des chaines par factories.
  • OptionsResolver (remplace SPL) : valeurs obligatoires, callbacks, etc … , normalisation pour résoudre les options.
  • L’internationalisation : ce n’est pas seulement de la traduction (dates, nombres, monnaies, etc …), INTL depuis SF 2.3 (mai 2013).
    International Component For Unicode : quelques entreprises bien connues l’utilisent. Permet de formater : les langues, les locales, les monnaies, les timezones (reprises par les forms, qui vont puiser dans ce composant.)
Mon avis : je connaissais déjà OptionsResolver, mais c'est bien sympa d'en connaitre d'autres ! :D ...

Mon projet de refacto BioPHP – Partie 1

J’aime bien la biologie, depuis ma tendre enfance. Je pensais même pouvoir un jour pouvoir faire de la bioinformatique mais j’ai vite été lassée des études en fac, donc j’ai dû faire un peu une croix sur ce projet.

Then, I left to Marseille, tout ça …

Mais dernièrement, j’ai eu pas mal de remous professionnels, quitté la dernière entreprise où j’étais en CDI (plutôt rageusement). J’ai donc passé quelques mois à construire des relations avec des clients, privilégiant l’approche freelance, et j’ai également trouvé un projet perso qui puisse m’occuper et approfondir mes connaissances en Symfony. Parce que depuis Spark, j’ai horreur d’être inoccupée. Et puis quand mon chat est mort, il a fallu un échappatoire pour penser à autre chose. Et puis j’avais une revanche perso à relever (n’est-ce pas, Guillaume ?).

J’ai trouvé donc le projet BioPHP (qui est sans URL Fixe, y’a un site ici aussi), cherchant une librairie de bioinformatique en PHP, par curiosité après avoir vu que des librairies du genre existaient en GO. Et … comment dire ? Voir des 2003, dernières mises à jour en 2009 peut-être, des fonctionnalités en PHP4, du HTML, du PHP, des data mélangées dans le code. Aucun design pattern, du code spaghetti, des fonctionnalités qui se retrouvent un peu partout. Ouch. Pourtant les fonctionnalités sont intéressantes et offrent du potentiel, les algorithmes sont hyper poussés. Cette librairie a été développée par d’excellents biologistes qui ne sont pas familiarisés avec le dev. D’ailleurs en poussant la recherche, le projet est critiqué et mal noté.

L’idée de départ des gars était super sympa : intégrer une librairie pour créer des applis de bioinformatique (plutôt orientées génétique) en PHP, comme il en existe en PERL, Go, Python … Mais il est vrai qu’à l’époque, à moins de télécharger bêtement et utiliser les fonctions require, on ne pouvait pas faire grand-chose d’autre. A part peut-être les intégrer dans PEAR ou PECL, chose que je n’ai jamais faite, donc je ne connais pas le process. PHP était vraiment à l’époque le vilain petit canard du monde des langages, et c’est à ce niveau qu’on voit son évolution fulgurante. Car aujourd’hui les outils ont évolué, nous avons les frameworks, Composer, Packager, Github, les tests unitaires et fonctionnels … en un coup de « composer install », on peut intégrer une librairie.

Comment procéder quand on est face à ce genre de challenges ? A vrai dire je n’ai pas vraiment établi de plan d’action dès le départ, peut-être une mauvaise idée, mais je me suis dit que c’était un projet pour lequel j’avais tout mon temps, et le droit à l’erreur. Car ce projet pris sur mon temps perso a été commencé en février dernier. En gros voici comment je suis en train de procéder :

Fonctionnement global de la librairie est des éléments-satellites après la refacto
  1. Installation de Symfony, création de 3 bundles : AppBundle (core de l’appli, MinitoolsBundle (qui intègre des outils qui pouvaient utiliser la librairie), et DatabaseBundle, qui m’a servi de « bundle temporaire » pour créer mes classes entités, raccordées avec Doctrine (parce que franchement, la classe seq.php … non, non, et non).
  2. Premier coup de machette dans le code. Nettoyage des fonctionnalités, renommage des variables suivant leur type, restructuration des classes originales. Séparation des classes-entités de ce qui sera intégré dans des services.
  3. Mise de côté des data. D’abord j’avais pensé à les inclure en YAML dans des paramètres, très mauvaise idée. Base de données ? Je voudrais plus la réserver à l’appli, pour moi la BDD ne doit servir qu’au stockage des séquences. Reste une idée sympa, les intégrer dans une API, ce que je voulais construire depuis longtemps pour utiliser API-Platform, un outil performant qui permet de pouvoir créer facilement ses propres API Rest. Le plus : on peut créer une couche interface qui permettra de créer un adapter, et donc de changer d’API, au cas où, tout en implémentant le modèle requis. Même si le CRUD n’est pas à 100% respecté. Les données de l’API ne sont pas destinées à être modifiées, dans l’immédiat.
  4. Refacto des « Minitools » pour bien m’imprégner de la logique de ces outils, création de l’interface web en TWIG, des services correspondants : je repère les duplicatas, crée de nouveaux services qui pourront être utiles dans le core. Car à la base, ces tools devaient intégrer les fonctionnalités de BioPHP. De mon côté ils me permettent aussi de me replonger dans les fondamentaux de la biologie : qu’est-ce qu’une protéine ? un acide aminé ? un enzyme etc …
  5. Refacto en test manuel : depuis le temps, les fonctionnalités sont en friche, donc je les fais remarcher, petit à petit, en continuant le labeur de nettoyage et de refacto. Je repère ainsi les fonctionnalités qui seront intégrées dans les « Minitools ». Cette partie sera désolidarisée (renommée en BioTools, pour caler au nommage général) du package à terme, pour des raisons logiques : le multi-repo c’est le bien, je vous dis.
  6. Tests unitaires du core : maintenant que je sais que ça marche, je repasse en mode « semi-TDD » et intègre les tests unitaires. Car un gros travail de refacto m’attend : la définition des différents design patterns de AppBundle. -> je suis ici \o/ .
  7. Découpage du projet pour en créer un projet Packagist. Et certainement montée en version de Symfony, redéfinition des dépendances d’injection etc …
  8. Création des tests unitaires et fonctionnels (avec Behat) de BioTools, refacto et envoi à Packagist.

Au prochain épisode, je rentrerai plus en détails sur la refacto d’AppBundle et des design patterns choisis.

Ha oui, et sinon, toutes les infos du projet sont là … Amelaye’s BioPHP.

Le web a 30 ans

Avant-hier, le WEB a fêté en grandes pompes son anniversaire, et pas des moindres. Parce que 30 ans, c’est pas mal … trente ans, ce sont les premiers cheveux blancs, les premières rides, les premières émulsions de sagesse, aussi.

Puis je me suis rendue compte que ça faisait longtemps que je n’avais pas parlé de mon métier sur ce blog, un brin délaissé. Tous les blogs sont aujourd’hui plus ou moins délaissés, merci les GAFA.

Il y a dix ans, j’aimais bien me poser une heure ici pour discuter sociologie du web, comment il pouvait évoluer : j’avais vu éclore le web 2.0, celui qui dans son entière utopie, permettait le partage, le commentaire, la diffusion plus facile, voire automatisée. C’est une époque où les spécialistes du web essayaient d’imaginer le web 3.0 … pariant sur un web sémantique.

Cf : Analyse de la bulle Web 2.0

Aujourd’hui force est de constater que ce web libre, d’échange de partage et de contribution n’est pas si présent qu’on l’eut cru. Certes il est présent sur les plates-formes de réseaux sociaux, Facebook en tête, cf. Pourquoi Facebook va dominer le www …. et puis ça aussi : Avancée vers le micro-blogging

Le web : ce métier qui avance tel un TGV

En dix ans, nous avons vu bien entendu croitre le taux d’utilisateurs d’internet, qui ont changé d’habitudes d’utilisation : si avant l’ordinateur était indispensable, aujourd’hui c’est 50% de surfeurs qui utilisent leur smartphone ou leur tablette, obligeant ainsi les développeurs à innover … c’est ainsi que se sont démocratisés Twitter Bootstrap, la notion de Responsive Design, mais également des frameworks, rendant un code plus clair et maintenable, créant ainsi la notion de dette technique : fini le site « codé à la va-vite, mais qui marche ». Les langages se sont adaptés, comme PHP, qui est devenu un langage plus précis, optimisé. Les avancées sont telles que ces outils ne sont plus forcément utilisés pour des sites web, mais carrément pour des applications web. Ce qui nous permet à nous, développeurs web, d’étendre nos champs de compétences, et ce qui a divisé le métier : aujourd’hui nous pouvons parler de « développeur full-stack » (il gère les outils de gestion de contenus et leur affichage), « développeur back-end » (qui ne gère que les outils de gestion de contenu), « développeur front-end (qui ne gère que l’affichage) », et puis le touche-à-tout « devOps » (qui fait du développement mais aussi de la gestion de serveur, de l’intégration continue etc …). L’intégration continue est arrivée avec cette explosion d’utilisateurs : car il est question de nos jours de parler de forte charge, de tests unitaires et tests fonctionnels pour débarrasser tout bug qui puisse décourager un visiteur. Il faut maximiser les efforts, rendant le métier de plus en plus exigeant. Mais pour quelle finalité ?

Si les développeurs s’amusent en essayant un nouveau Framework en train de sortir, débattent pour savoir si PHP c’est mieux que GO, si NodeJS n’a pas été qu’un truc à la mode, derrière il y a des gens et des comportements.

Un web pas si décentralisé …

Le web2.0 était-il une utopie ? car si nous excluons ces fameux GAFA, que reste-il finalement à part des sites corporate ? Quid des blogs qui nous permettaient la création de cette ideosphère d’informations, ce regroupement de communautés, si cher dans nos esprits en 2007 ?Car le nouveau web repose sur ces géants, Google, Apple, Facebook, Amazon. Nous avons vu éclore lé métier de « Youtubeur » qui partage sa vie et ses opinions via rétribution de l’entreprise. Nous n’échappons pas au slogan « mets un petit pouce bleu ! ». Et derrière il y a tout un merchandizing : car quiconque est aspiré par une page Facebook, se promène sur le compte Youtube (ou inversement) pour atterrir sur une page Web qui contiendra un plug-in pour acheter des goodies sur … Amazon. Le web repose entièrement sur ces 4 firmes et laisse peu de chances à la concurrence. IL FAUT SE FAIRE CONNAITRE SUR FACEBOOK, YOUTUBE. Et les gens vont donner leur avis sur Facebook et Youtube, et un peu sur Twitter et Instagram (groupe Facebook, rappelons-le), et toute l’e-réputation vient de là. Car remarquez-bien : la plupart des sites web d’information ont supprimé le post de commentaires, l’information est redevenue bilatérale.

Sans compter le plus grave : ces organismes ont le malheur d’accéder à ces contenus, mais il se permettent aussi de juger et censurer !!! Cependant, le partage d’informations via ces plate-formes et beaucoup plus facile que toute une procédure de création de site … donc les gens y restent présents, et tout est fait pour simplifier le « travail » des gens qui publient : panneaux avec phrases toutes faites, boutons, like etc …

Si en 2010, le commentaire pertinent sur les blogs, en réponse à des billets argumentés, joutes oratoires entre blogueurs, était ce qu’il faisait la force potentielle de ce web 2.0 en 2007, on remarque hélas qu’en contrepartie, en 2017 il n’y avait plus beaucoup de sites d’informations qui proposaient cette fonctionnalité, alors que Google se sert des liens contenus dans nos propres sites pour propulser le référencements des sites mentionnés dans ces commentaires, et permettait justement une promotion de cette décentralisation.

L’envers du décor

Du coup, quid des partages de l’individu lambda ? Va-t-il soulever des gros soucis de société ? Partager son œuvre ? En fait l’individu lamba parle de lui. Il publie les photos de ses enfants (oubliant le DANGER qu’il y a derrière. Et puis son gosse, sera-t-il heureux de ses exploits sur le pot de chambre archivés, 20 ans après ?), de ses voyages. Mais c’est LUI en premier plan, transformant le concept de l’autoportrait (à la base artistique) en selfie … l’individu parle de lui, il est égoïste, il est selfish. Pour l’exemple la semaine dernière en me promenant dans l’Alcazar, j’ai pris l’ascenseur avec deux jeunes filles qui devaient avoir 13-14 ans, et qui passaient leur temps à se tirer le portrait. Mais au final quelle est l’utilité de savoir qu’Emma et Gwendoline étaient à l’Alcazar ce mercredi ? à la limite elles auraient pu faire leur selfie sur une table d’étude entre deux bouquins. Car c’est ça, faire parler de soi, quelque soit l’enjeu, même en sortant des cabinets avec une moue en cul-de-poule : il faut se monter, être beau et souriant, il faut des likes, comme dans cet épisode tellement vrai de « Black Mirror » où les gens sont jugés via leur note ! Et leur photo sera postée sur Instagram à tous les coups. Mais au final, est-ce le meilleur moyen de juger d’autres humains ? Ou est-ce plus simplement des cris d’alarmes de nos égos en souffrance ?

Le like : la nouvelle monnaie du futur ?

Le plus choquant est le concept d’ « ami ». Car l’ami Facebook est devenu une entité qui est soumise à validation, et peut du jour au lendemain être supprimé : un être humain est devenu un KLEENEX jetable, pour le moindre prétexte : rupture, dispute, absence de signe de vie, etc … On se supprime, on se bloque, on s’efface, des rituels devenus aujourd’hui quotidiens alors qu’ils n’existaient même pas il y a 20 ans de ça. Quand on était fâché, on ne se parlait plus, on ne se voyait plus. On se « jetait », mais l’acte n’était pas réellement pratiqué.

Et puis il y a le relayage des infos plates, mais ce sujet a déjà été abordé ici : phrases toutes faites, vidéos d’émissions de télé, photos mal cadrées de lieux mille fois vus : une info pauvre, pas toujours vraie. Les statuts Facebook sont constitués d’une phrase à minima, ou d’une image de phrase toute faite, et on en vient à crouler sous ce flot.

Les commentaires sont difficiles à suivre également, car on retrouve beaucoup de récits (trop) personnels ou des disputes de comptoir : car le Facebooker de base est virulent et il ne faut pas le contrarier. Ce n’est plus de l’échange simple d’avis, c’est du « moi j’ai raison, va te faire foutre », car rappelons-le, il est selfish. Regardez le nombre de matchs de boxe qu’on peut trouver, sur n’importe quelle page anodine comme par exemple celle de … « Plus belle la vie« . Juste parce qu’un épisode n’a pas plus, une COMMUNAUTÉ qui partage le même goût pour une même série s’étripe !!

Quand j’ai fait mes études d’InfoCom en 2003, on parlait déjà de pléthore d’informations … du coup là, quel serait le mot adapté ? Pourtant la bonne info existe, il suffit juste de la chercher.

Diaboliser le web ? Non !

Pourtant le web demeure, derrière ces propos sociétalement négatifs, une merveilleuse invention.

Le E-learning n’existant pas il y a 20 ans de cela. Pourtant il permet à beaucoup de gens, soucieux d’attiser leur faim de connaissances, de s’instruire. J’ai personnellement acquis mon niveau en allemand rien qu’avec des cours trouvés sur Internet ! N’oublions pas ces organismes de formation en ligne qui nous permettent également de pouvoir suivre un cursus tout en continuant d’exercer son métier. L’interactivité permet de multiplier les supports : vidéos qui vous mettent en situation, supports et exercices à télécharger et imprimer, possibilité de poser des questions et créer des communautés. Nous sommes sauvés !

J’achève ici ce constat de 10 ans de web 2.0. Au prochain épisode, je vous propose ma vision du web 3.0. qui commencé déjà à éclore. Je vous laisse sur ces mots de Tim Berners-Lee, qui évoque entre autres la charte du web. Je me rends compte également que j’ai beaucoup à dire sur ce sujet, que je viens d’en écrire beaucoup et que ceci fait office d’introduction à un projet éventuel …

Retour sur le Symfony Live Paris 2016 – Day 2

Voici le résumé des conférences données le deuxième jour de ce séminaire Symfoniste, qui évangélise de plus en plus d’adeptes (moi en particulier 🙂 ) …

  • PSR-6 & Symfony Cache : de la perf en standard (Nicolas Grekas) : Cette conf intéressante nous explique l’intérêt de PHP-FIG, où sont soumis et approuvés des standards de code PHP, préfixés PSR (Quand je code moi par exemple, je respecte au maximum la norme PSR-3, validée par mes outils d’intégration continue.). Pour PSR-6 (Caching Interface),  le premier draft a été soumis en septembre 2013, le final en décembre 2015. Il définit deux objectifs : ouvrir des besoins de base nécessaires à la mise en cache, et permettre de faire mieux. Il « succède » un peu à Doctrine Cache. On retrouve cette PSR dans : psr/cache-implementation sur Packagist (Composer), Statsh PHP, PHP Cache et Symfony Cache. Symfony Cache n’est pas l’implémentation la plus puissante, elle est strict PSR-6, et suite les processus et standards de qualité Symfony. Il y a juste le minimum pour faire ce qu’il faut et aller vite.
  • Aller plus loin avec Doctrine2 (André Tapia) : Dans Doctrine, on a des fonctions assez méconnues (IfNull comme en SQL IF NULL), il existe également des DoctrineExtensions pour méthodes personnalisées, et des LifeCycleCallbacks (prePersist/postPersist, preUpdate/postUpdate, loadClassMetadata etc …). On peut faire également appel à des requêtes « partial », qui permettent d’obtenir un objet, pas un tableau (Query::HYDRATE_OBJECT, Query::HYDRATE_ARRAY, Query::HYDRATE_SCALAR, Query::SINGLE_SCALAR).
  • Refondre un moteur de règles avec l’expression langage de symfony2 (Abbas Hussein) : Pour la refonte, imposer un moteur de règle pour pouvoir : analyser des centaines de dates, déclencher un traitement statique, ou scorer une transaction (livraison : Go ou NoGO ?). Le but est de permettre de coder plus vite. A celà s’imposent des problématiques techniques : la fameuse datte technique, il faut construire à chaque fois le même projet, ou utiliser des petits projets OpenSource. Parmi eux, des problèmes métiers : les régles demandées par le métier sont de plus en plus complexes et les métiers écrivaient du JSON dans la BDD ! La meilleure des solutions doit donc : répondre aux besoins, être validée par les métiers, et extensible.
  • Sécurité et HTTP (Romain Neutron) : Voici quelques HTTP-Headers plutôt utiles en matière de protection :
    • X-XSS-Protection : protéger contre les attaques de type « Boutin ». Activé = 1. mode=block.
    • X-Content-Type-Options : prévient le comportement d’un navigateur. Supporté par ie et chrome. « nosniff » seule valeur supportée (désactiver).
    • X-Frame-Options : gestion du framing du site web.
    • Strict-Transport-Security : RFC-7697 Force le HTTPS. Supporté par Crome, IE11, Safari et Firefox. Bloque l’accès si certificat invalide fourni. Valide à la première connection, mais peut être préloadé.
    • Content-Security-Policy : vient du web 2.0. Prévient les XSS. Déclare des directives sur ce qui peut être exécuté sur le site web.Directives : default-src, script-src, style-src, object-src, img-src, media-src, frame-src, font-src, connect-src. Attention : certains scripts jQuery ne vont plus marcher si derective unsafe-eval et unsafe-inline !

Ma conclusion sur l’évènementiel le Symfony Live regroupe des thématiques plutôt variées (Sécurité, Cloud, Doctrine) … L’investissement est rentable, les stands attractifs. Mon seul regret est de ne pas avoir participé au Symfony Con qui se déroulait à Paris en décembre dernier, pour les dix ans de Symfony. Je pense bien renouveller l’expérience l’année prochaine, surtout si je gagne des concours qui me ramèneront plein de goodies (Casquette, Tshirt, ElePHPant Symfony, bonbons, macarons, et livre sur Blackfire.io dédicacé par Fabien Potencier).

Du coup j’ai gagné un badge, hop :

Retour sur le Symfony Live Paris 2016 – Day 1

Et voilà, je commence à devenir Symfoniste.

J’avais déjà un peu touché Symfony il y a quelques années puis je me suis tournée et je me suis expertisée en Zend Framework. Cependant il faut voir, Symfony déjà est un produit français, très sollicité en entreprise, et derrière regroupe une communauté vivante et très contributive (il suffit de voir l’espace « Connect » de Sensio pour s’en rendre compte), ce qui est beaucoup plus sympa que le cas de ZF. Donc je me suis tournée naturellement vers ce framework je que ne connais que peu en fin de compte.

Pour commencer, j’ai fait une virée de deux jours dans les locaux de Sensiolabs pour faire une formation sur la gestion des composants et Drupal. Puis le grand évènementiel a lieu : deux jours à la Cité Internationale Universitaire de Paris. Les stands y sont très sympas et remplis de goodies (j’ai eu l’occasion de gagner un Lego Star Wars et de participer au concours de la bonbonnière – que j’ai remporté !).

Le contenu des conférences est alléchant :

  • Monoltith repositories with Git (Fabien Potencier) : faire du pluri-repo, c’est bien. Le code isolé peut être réutilisé, on a des repositories de petite taille, les frontières sont claires, le contrôle d’accès facile, ça simplifie l’intégration continue. Mais on peut utiliser efficacement un repo monolitique et plusieurs petits repo. Du coup, le subtree ça change la vie ! http://www.git-attitude.fr/2015/01/30/git-subtrees/
  • Guard dans la vraie vie (jeremyFreeAgent) : Guard est un nouveau composant « security » de Symfony. Il facilite l’authentification dans un code qui peut être complexe. La librairie continent une interface, GuardAuthenticatorInterface, qui permet d’utiliser les composant d’une authentification (gestion du Token, succès de l’authentication, traitement de la « response », cookie pour le « remember_me » etc …). Ensuite, un cas pratique avec trois sites qui utilisent trois systèmes d’authentification différents (mot de passe, numéro de téléphone) nous est proposé. Au final l’outil se révèle très puissant, et demande moins de dépendances vers d’autres bundles.
  • R2D2 to BB8 (Vincent Chalamont) : Un titre plus parlant serait « Refonte du site lafourchette.com ». A savoir que le site est au départ une grosse machine qui implique : plus de 12 pays, 32000 restaurants, 350000 réservations par mois, et plus de 70 développeurs derrière. Le « Fork Manager V2 » doit pouvoir gérer : les réservations, le contenu, le marketing & CRM, les stats et les plans de salle, tout en sachant en ce qui concerne la V1, que la « dette technique » (quand le site de départ est une usine à gaz avec du ode spaghetti derrière, en gros) est conséquente, les mises à jours sont difficiles, les fonctionnalités obsolètes et non ergonomiques, et qu’il y a des projets interdépendants. Les solutions envisagées ont donc été : création d’une API, la mise en place d’une migration continue,  un LegacyBundle, des loaders et des transformers.
  • PHP Meminfo ou la chasse aux memory leak (Benoit Jacquemont) : Jeune programmeur, attention aux effets dévastateurs d’une fuite de mémoire ! Moins de mémoire pour les autres programmes, perfs qui chutent, et processus qui n’arriveront jamais à terme ! Le système basique de cache de PHP permet toutefois un ménage : au bout de 10000 objets, le garbage_collector s’éxécute, et son activité peut être mesurée par une appli, « Visual VM », mais attention aux processus du garbage_collector, qui baissent les performances. Il faut donc pour cela fixer les fuites de mémoire. Good practices : monitorer les processus, éviter les services « stateful », utiliser une mémoire limite raisonnable, et garder un nombre raisonnable d’objets en mémoire.
  • Retour d’expérience Reactive Architecture et Microservices : Comment découpler mes applications ? (Fabien Meurillon) : Retour sur des migrations de back-office, cette fois chez Auchan. L’utilité d’utiliser des micros-services : un composant applicatif (package Composer), un domaine métier (Domaine Driven Design), et probablement moins de 5 agrégats exposés sur l’API. Les applications doivent être responsives, les services résilients, scalables. Il faut gérer les grosses charges. Restent à mettre en place : le mono-repository, exploiter la bulle d’échange, gérer la propagation de l’information, automatiser les déploiement, et surtout évangéliser les gens 🙂 …
  • Performance au quotidien dans un environnement SF (Xavier Lejeune) : La performance à un cout … dans notre cas on chiffre à : 100 euros si le bug est détecté pendant le dev, 1500 si il l’est pendant la recette, 1500 si il l’est en prod. La pattern Data Mapper a donc été choisi, Active Record a été rejeté, pas d’abstraction en programmation. TING a été choisi à la place de doctrine, le cache privé et public a été obtenu. Attention, Composer install génère un cache !

Crédit photo de une : Sensio Labs. Une Amelaye s’y trouve dedans, vous pouvez l’y chercher.

 

Diaporama sur le déploiement dans l’IC

Dans le cadre de l’AFUP Marseille dont je fais partie, j’ai organisé un topo sur le déploiement dans les processus d’intégration continue, Deployer et Jenkins en particulier 🙂

Bref résumé :

Aujourd’hui, le terme « déploiement » est un incontournable dans le métier des devOps. Comment en sommes-nous arrivés à intégrer au mieux les mises en prod ? Faisons un bref historique pour ensuite terminer sur les nouvelles techniques de déploiement de nos applications PHP et leur mise en place dans l’intégration continue.

Retour sur le PHP Forum 2015 – Jour 2

Ce deuxième jour a suivi son lot de conférences, et s’est terminé symboliquement par une table ronde, regroupant l’essentiel de la Core Team de PHP : Pascal MARTIN, Julien PAULI, Remi COLLET, Zeev SURASKI, et bien entendu le créateur de PHP himself : Rasmus LERDORF, pour discuter de la sortie de PHP7, et répondre aux différentes questions.

Mon avis général sur cet évènement est identique à celui de l’an passé, toujours une excellente ambiance, des prises de contacts. J’ai juste déploré les thèmes des ateliers de cette session, que je n’avais pas trouvés en adéquation avec ce qui m’intéressait.

Voici donc mes comptes-rendus des conférences auxquelles j’ai assisté ce deuxième jour, entre plusieurs visites de stands, de morceaux de gâteau, de pop-corn, de tests PHP, et de selfies (si je me trompe, ou si vous avez des remarques, n’hésitez pas à commenter) :

ZF3 le futur de PHP – Sophie BEAUPUIS

ZF3 est défini comme un ZF2 « nouvelle génération ». Il est centré sur PSR7 et les « middlewares ». Il se fait remarquer par ses performances, sa facilités d’utilisation. Le framework peut en plus, se séparer en composants réductibles.

Depuis la version 2.5, chaque composant de zend possède son propre repository, chaque élément est versionné de façon indépendante. Un package de framework est en fait un méta-package faisant références à différentes versions des composants. Ont changé le gestionnaire de services, le gestionnaire d’évènements, et les composants MVC en conséquence. Le gestionnaire de services est quatre fois plus rapide, compatible avec ZF2 pour la plus grande partie, et les noms canoniques ont été supprimés. L’apport majeur est le Container Interop : on peut utiliser la même factory pour différents services car le nom du service est passé en paramètre (en tant qu’utilisatrice de ZF2, je ne peux que dire : « YALLAAAAAA »). Adieu les factories pour chaque service !

Mon avis : une conférence qui m’était incontournable en tant que Zend-Addict. J’ai été on ne peut plus soulagée à l’idée de réduire le nombre de mes factories redondantes. Comme pour Symfony, on apprend ici que la version 3 est quasi-compatible avec la version 2.

L’architecture événementielle chez Meetic Robin Matthieu – Meetic / Pineau Benjamin

Meetic est devenu un incontournable des sites de rencontres. Cette application web est accessible en tant que site web desktop, mobile web, et applications natives.

Il y a eu un projet de refonte sous Angular JS.

Aujourd’hui l’application est composée de différents éléments comme une API publique, une API Microservices en Symfony 2, et des bases de données.

Des flux asynchrones doivent être gérés pour envoyer des emails, faire des notifications « Push », des manipulations sur des images, et de la modération. Ceci pose des limites en matière de traitements et de possibilité de rejouer des évènements. Les interactions entre les membres doivent être pris en compte : consultation de profils, « flashs », messages, etc …

Agnostic framework for the win – Jonathan Reinink

La meilleure façon d’utiliser un framework est de faire une application dont les éléments sont réutilisables, car un code réutilisable devient un code qu’on n’a plus besoin d’écrire.

Entre 1994 et 2004, Vanilla PHP était en vogue. On avait également recours aux fichiers Zip, puis est venu PEAR. A partir de 2005, l’ère des frameworks est arrivée, leur avantage est de pouvoir travailler rapidement, cependant, les développeurs ont continué à téléchager des Zips. Depuis 2013, c’est composer et ses packages qui est le must. En effet, composer permet d’updater des packages déjà téléchargés, de résoudre les dépendances, et les classes autoloadées.

Jonathan Reinink nous parle également du projet The PHP Framework Interop Group, accessible sur php-fig.org qui définit les PSR.

Mon avis : un bon bilan sur ces dix dernières années de la gestion des packages PHP. Composer est en effet l’outil plébiscité du moment, tant par son efficacité que par sa polyvalence (utilisé pour Symfony, ZF, et indépendamment).

Un éléphant dans le monde des licornes – Moquet Matthieu

Chez Blablacar, la mise en production se déroule ainsi :

Master → branch → CR+CI → staging → merge → mise en prod

Les tests sont 70% unitaires, 30% d’intégration et fonctionnels.

Les ORM, pour une grosse appli, ce n’est pas une bonne idée. En programmation évènementielle, on va privilégier les Bundles et les Events.

Matthieu nous explique l’utilisation de Monolitic, de Gateway et de Cassandra (utilisation indirecte d’une brique JAVA), et nous renvoit sur le site de BlaBlaTech.

MySQL 5.7 & JSON: New Opportunities for Developers – Ulin Thomas

Cette nouvelle version du fameux SGBD se caractérise par sa performance, sa scalabilité et sa maintenabilité.

Thomas Ulin nous fait alors une série de démonstrations pour nous montrer les features JSON : en effet, on peut maintenant extraire des données sous ce format : JSON_EXTRACT(colum_name, #type) ;

On peut également aller chercher des données JQuery pour les infiltrer dans des requêtes. D’après une variable $(‘#type’), par exemple, on peut créer ce genre de requête : SELECT DISTINCT feature->  »$.type » as json_extract FROM features.

Les utilisateurs peuvent également créer leurs propres plugins.

Mon avis : une conférence ultra-fournie qui est passée très vite. Le sujet est néanmoins ultra-interessant pour tout développeur web, et mérite une découverte par soi-même du potentiel de cette version, en pratique, plus en profondeur.

 

Photo une : Tirée du blog de Rémi Collet http://blog.remirepo.net

Retour sur le PHP Forum 2015 – Jour 1

Mieux vaux tard que jamais, j’ai récupéré et mis au propre mes petites notes que j’ai prises lors des différentes conférences. J’étais donc présente au PHPForum 2015 organisé par l’AFUP, et qui célébrait deux évènements, et pas des moindres :

  • les 15 ans de l’AFUP
  • et surtout, les 20 ans de PHP.

20 ans que PHP a pu faire son bonhomme de chemin, et persévérer avec ses forces et ses faiblesses.

Je profite d’un petit edit pour partager la vidéo spéciale « anniversaire PHP » qui a été diffusée pendant la keynote d’ouverture, si vous regardez bien j’y apparais 🙂

 

Parmi le panel de choix des différentes conférences, voici celles auxquelles j’ai assisté :

Symfony 3.0  est sorti ! – Nicolas Grekas

Cette saison est la saison du renouveau pour les Fraworks majeurs, tels que Symfony ou Zend Framework. Cette nouvelle version tient une promesse de rétrocompatibilité. Il suffit d’utiliser Composer pour autoriser l’update.
Pour rappel, un numéro de version se compose comme suit : Major.Minor.Patch. L’incrément du numéro majeur est susceptible de casser la compatibilité. Le mineur ne s’incrémente qu’à chaque nouvelle feature. Le Patch est fixe.
Symfony 3 n’est pas une version LTS. Elle est basée sur le code de Symfony 2.8, et PHP 5.5.9 minimum est requis. La backward-compatibility a été gardée, les lignes de code ont été réduites.

Mon avis : une bonne mise en bouche pour commencer le Forum, même si je suis plus adepte de ZF2, et moins férue de Symfony. Bien contente d’apprendre que le code de cette nouvelle version ne donnera que peu d’incompatibilités par rapport à la précédente. Il en est de même pour ZF2 d’ailleurs.

Les flux, méconnus et sous-utilisés – Pascal Martin

Ici, Pascal Martin nous rappelle l’immense utilité des fonctions PHP telles que file_get_contents, file_put_contents, fopen, fgets, fseek … mais également tempnam, tmpfile.

Un flux est tout simplement une ressource streamable, et ces ressources sont gérées depuis PHP 4.3.

Il existe une bibliothèque de fonctions stream_* qui permettent également de manipuler les flux.

Pour appeler un flux, il suffit juste de l’appeler via la syntaxe appropriée : schema://cible

Il est conseillé de créer un flux pour tester des accès à fichiers, au lieu de créer directement le fichier sur le disque. Cette manipulation permet, avec une bonne pratique, de passer outre CURL.

Pascal a également évoqué reactphp.org et icicle.io pour les scripts asynchrones.

Mon avis : Très intéressant. On a tendance à oublier l’existence des flux, au profit des manipulations avec CURL. Pascal Martin a fait d’ailleurs un dossier très intéressant à ce sujet sur son site.

PHP7 Story – Zeev Suraski

Ici, un des principaux « cores PHP développers » revient sur la conception de PHP7.

Il faut savoir qu’une version majeure de PHP sort tous les 5 ans, sauf pour PHP6, qui est mort-né officiellement le 11 mars 2010 à 11:09:37. Pour rappel, il devait gérer avec unicité l’encodage des caractères (PHP + unicode).

Depuis, il y a eu HHVM, un runtime PHP crée par Facebook. La réponse de Zend, PHPNG (PHP New Generation) a été crée en janvier 2014, avec comme promesse un PHP plus rapide, et plus performant.

PHP7 est donc sorti avec des nouveautés, hormis la rapidité qui est flagrante on a :

  • Plus de gestion d’erreur E_ERROR
  • Déclaration des types scalaires de paramètres ET de retour dans les fonctions
  • Fonction userialize : on peut mettre des filtres noms de fonctions
  • « Spaceship opérator »

Mon avis : quoi de mieux qu’un des principaux acteurs de PHP pour nous présenter cette nouvelle version ? La conférence était incontournable, aussi incontournable que la multitude de ElePHPants sur le diaporama.

Mets du ValueObject dans ton modèle – Alexandre Damien

Qu’est-ce que le Domain Driven Design ? Il s’agit en fait d’un ensemble de pratiques fondées sur la collaboration entre experts fonctionnels : dedans il y a une notion de ValueObject. C’est un objet qui continent des données. Il n’a pas d’identité, il n’est pasimmutable. Son identité est basée sur le contenu, l’objet a une vie, se manipule, se supprime, se consomme …

Il se base sur le principe de « Simple Responsibility ».

On compare les VO avec == et non pas === qui va se baser sur la référence mémoire de l’objet. Ou avec une méthode isEqual().

ON NE DOIT PAS CHANGER LE CONTENU. Pour changer de contenu, il faut créer une nouvelle instance d’objet.

Pour rendre immutable :
– Mettre les variables dans la classe en privé
– Mot-clé final dans la déclaration de la classe (= no extends)
– Constructeur vide et privé. Utiliser un constructeur nommé en statique.
– Empêcher les autres devs d’implémenter des setters

Avec Doctrine :
– Utiliser Embeddable (nouvelle fonctionnalité) et le type object

Mais malgré tout, le Value Object a des inconvénients :

  • On ne peut pas requêter sur les champs de VO
  • On ne peut pas non plus le sérialiser correctement

Mon avis : Conférence tournée avec beaucoup d’humour, un sujet qu’on n’a pas souvent l’habitude d’aborder dans son propre code. Ce pattern a pourtant bien des avantages.

Performance Testing for Modern Apps – Dustin Whittle

A partir d’une seconde de chargement d’une page web, l’attente se fait sentir. Il ne faut pas passer au-delà.

Pour pouvoir vérifier le temps de chargement d’une page, des outils sont à dispostion :

  • Apache Bench  – ab -c 10 -t 10 -k http://monsiteatester.com/
  • Siege – siege -c 10 -b -t etc …
  • Bees with machine guns – bees attack -n 1000 -c 50 -u http://monsiteatester.com/
  • locust.io
  • PageSpeed Tools de Google.
  • Google Developpers
  • webpagetest.org
  • sitespeed.io
  • Test for failures : simian army + chaos monkey

Halte à l’anarchitecture – Gauthier Delamarre

Ici Gauthier Delamarre revient sur les principales architectures logicielles, dont la réalisation peut être abstraite dans un premier temps.

Il faut distinguer la macro et la micro architecture.

La macro architecture va concerner :

  • Le schéma général : Couches applicatives, workflows, acteurs tiers.
  • Les responsabilités : validation de données, mécanismes ACL, gestion d’erreur.
  • Les structures diverses : modèles de données, organisation des sources, et des ressources
  • Et surtout, la DOCUMENTATION !

Quant à la micro architecture, elle va concerner :

  • Les données métiers : systèmes d’objets, entités, formats d’échanges
  • Les services : injections, événements, tests
  • Les composants : accès aux données, persistance, User Interface

Zoom sur les objets PHP – Julien Pauli

Toute variable en PHP, va créer une Zval.  Les Zvals sont des « conteneurs » écrits en C. PHP utilise ces conteneurs pour stocker des tableaux, etc … Dans ces Zvals, on y trouve un élément « refcount », qui  s’incrémente à chaque occurrence de la même instance.

En PHP, un Handler est un entier utilisé pour référencer l’objet d’une manière unique. On peut le faire apparaître quand on fait un var_dump. Les handlers sont utilisés lors de l’implémentation des interfaces ArrayAccess, Serializable, Countable.

Les objets, s’ils sont des variables, ne sont pas des références.

Le Garbage Collector, lui, ne sert que pour les références « circulaires » quand deux objets se référencent les uns les autres (zvals seulement). gc_collect_cycles() permet de vider ce cache.

Julien nous rappelle également qu’une classe c’est lourd, donc il est préférable utiliser l’autoloading.

SimpleXMLElement, PDOStatement, Datetime utilisent des Object handlers.

Le destructeur d’une classe ne libère pas la mémoire tout de suite. Il est recommandé de faire unset() si on veut supprimer l’objet et sa mémoire. Un destructeur qui « plante » va entrainer la désactivation de tous les autres destructeurs car le script va être considéré comme pas stable.

Mon avis : un petit voyage dans le comportement même de PHP. Un sujet qui commence à me titiller d’ailleurs. Il est souvent intéressant de s’initier à la grammaire d’un langage informatique.

Unglue all the things – Beau Simenson

Utilisés comme des services, les controleurs sont plus portables.

Beau Simenson fait également référence à Puli, qui est un nouvel outil de packages. Le système de séparation en sous-arborescences permet une manipulation plus facile, chaque répertoire contient de multiples packages.

Le modèle sera toujours influencé par l’ORM.

J’ai testé : le PHP Forum de Paris

elePHPant
Vous avez le bonjour de l’éléPHPant !

Le PHP Forum, c’est en fait LE pèlerinage pour tout développeur passionné par son métier et qui veut approfondir d’avantage ses connaissances. Si vous êtes développeur, et que ça ne vous ai jamais venu à l’idée, le mois d’octobre venu, de venir voir ce qu’il s’y passe, c’est que vous êtes un faux développeur, que vous avez choisi cette voie par dépit professionnel et que vous programmez toujours en PHP4 (rhô la vilaine que je suis).

Le PHP Forum est un évènement sur deux jours qui a lieu vers la fin d’octobre au Beffroi de Montrouge. Il a son petit prix (un peu plus de 200 euros), mais si vous souscrivez à l’AFUP, qui est l’Association Française des Utilisateurs de PHP (25 euros), vous aurez droit à une réduction de 100 euros … donc non seulement vous payez moins cher mais en plus, vous aurez droit à entrer dans la communauté et à participer via des mailings-lists au développement des évolutions du langage. Et ça, j’aime. L’inscription vous donné également le droit réserver votre place à un (seul, hélas) atelier qui prend une demi-journée, et qui vous permet de vous ouvrir à des outils que vous ne connaissiez pas. Personnellement, j’ai souscrit à l’atelier « Usage avancé de Jenkins comme outil d’amélioration/intégration continue ». Ce qui me permet d’avoir vu en diagonale le potentiel de ce dernier.

Bref, arrivés sur les lieux (je vous conseille de venir une demi-heure à l’avance sinon vous allez pleurer les premières minutes auxquelles vous n’assisterez pas), vous voyez une belle file d’attente, avec plein de geeks, majoritairement masculins à 98,5% , barbus à 70%, et avec un portable ou une tablette à 100%, Apple à 65%. On s’immisce donc d’entrée à l’ambiance de l’évènement.

Une fois que vous arrivez à l’accueil, on vous remet votre badge, qui ne vous quittera

Haouuu la classe avec les lunettes
Haouuu la classe avec les lunettes Jolicode

plus, ainsi qu’une pochette-surprise avec plein de jolies choses dedans :
– 1 t-shirt pour se la péter au bureau
– 1 bilboquet
– 1 chargeur de smartphone USB
– 1 paire de lunettes de soleil <Jolicode />
– 1 magazine
– des stylos
– des prospectus avec des bons de réductions (notamment un bon SensioLabs pour découvrir son nouveau débugger).
– des bonbons à la menthe « stay PHPresh » (I’m serious)

Pendant les premières minutes qui précèdent le discours de bienvenue, vous pouvez donc découvrir avec émerveillement ce package … puis vous pourrez choisir vos confs, auxquelles vous assisterez pendant deux jours entiers. En général, deux conférences ont lieu en simultané, donc vous avez l’embarras du choix. Si vous regrettez de ne pas être doté du miracle du dédoublement, rassurez-vous, toutes les conférences sont enregistrées et diffusées sur le chan Youtube de l’AFUP.

Pour ma part, j’ai pu : découvrir Drupal 8 et son croisement avec Symfony 2, approfondir Cake PHP, tout su sur le déploiement des tests unitaires, et découvert la vraie communauté WordPress, et j’ai également pu découvrir Docker.

Un exemple de conférence à laquelle j’ai assisté

Entre deux conférences, on peut aller se promener autour des stands en buvant un café, allez critiquer Zend auprès de SensioLabs, et critiquer SensioLabs chez Zend (personnellement je préfère de beaucoup Zend), et apprécier que Microsft puisse lâcher ASP, le vilain petit canard du monde web.

A la fin, en guise de clôture, vous assisterez à un débat qui aura pour sujet les évolutions du langage PHP. En espérant d’ailleurs que PHP7 puisse voir enfin le jour avant l’année 2016 …

En bref

Le Graal qui permet d'assister à THE event
Le Graal qui permet d’assister à THE event

  • J’ai aimé : l’ambiance geek, l’intérêt des sujets des conférences, les ateliers en petits groupes de 20, qu’on nous offre le repas de midi, le contenu de la pochette-suprise.
  • J’ai moins aimé : qu’on ne puisse assister qu’à un atelier (normal, pour avoir un nombre adéquat de personnes par atelier), y’a pas toujours du café quand on le souhaite, et y’avait pas de peluches élePHPant !!!
  • Y retournerais-je ? carrément.