Nous étions chez Mickey pour le Forum PHP 2023, notre rapport complet !
Comme chaque année l’équipe de JoliCode était présente au Forum PHP de l’Afup, le plus gros événement PHP de l’Hexagone, pour deux jours de conférence sur l’éco-système !
Dans cet article nous allons vous partager les clés de ce que nous avons entendu au centre de conférence The Art Of Marvel de Disneyland Paris, et de ce que nous en retenons.
Section intitulée why-php-is-still-awesome-in-2023-a-rel-nofollow-noopener-noreferrer-href-https-karlitschek-de-frank-karlitschek-aWhy PHP is still awesome in 2023 – Frank KARLITSCHEK
Frank KARLITSCHEK est le fondateur de NextCloud, une solution PHP open source et auto-hébergée qui permet de créer sa propre suite applicative, sans dépendre des grandes entreprises du numérique comme Microsoft ou Google.
Le point le plus intéressant de la conférence était sans doute la défense du choix du PHP comme langage de développement :
- facile à déployer : il suffit d’un serveur web et d’un interpréteur PHP pour faire tourner une application PHP. Pas besoin de compiler, de configurer ou de gérer des dépendances complexes ;
- indépendant de toute big tech : contrairement à d’autres langages qui sont soutenus ou influencés par des géants du numérique, PHP est un langage libre et communautaire ;
- scalable : grâce à l’isolation des processus, PHP permet de gérer facilement la montée en charge et la répartition de la charge sur plusieurs serveurs ;
- bonne courbe d’apprentissage / évolution du langage : PHP est un langage simple à apprendre, mais qui offre aussi des fonctionnalités avancées comme la programmation orientée objet, les espaces de noms ou les générateurs ;
- grande communauté : l’écosystème est riche et diversifié, avec des milliers de bibliothèques, de frameworks et d’outils disponibles. La communauté PHP est active et dynamique, et organise régulièrement des événements, des conférences et des formations ;
- robuste : PHP est un langage mature et éprouvé, qui offre une bonne stabilité et une bonne performance.
Il a aussi reconnu que PHP n’est pas parfait, et qu’il présente quelques défauts :
- Il y a toujours une marge de progression : PHP peut encore s’améliorer sur certains aspects, comme la gestion de la mémoire, la concurrence ou le typage ;
- Il n’y a pas de possibilité de faire du Websocket : PHP ne permet pas d’utiliser nativement, une technologie qui permet d’établir une communication bidirectionnelle entre le client et le serveur. Cela a été un problème pour NextCloud, qui utilise beaucoup le temps réel pour ses fonctionnalités de chat, de visioconférence ou de collaboration ;
- Il est toujours facile d’écrire du code peu sécurisé ;
- Il y a des incohérences : PHP souffre parfois d’un manque d’homogénéité dans sa syntaxe.
Frank a conclu sa conférence en affirmant que le succès de NextCloud est en grande partie dû au PHP, et qu’il ne regrette pas son choix. Il a comparé son projet à un autre projet similaire, qui a disparu après avoir décidé de réécrire son code en Go, un langage plus récent et plus tendance.
💛 Note des JoliCodeurs : Nous ne sommes pas d’accord avec tous les points exposés. Par exemple, dans tous les langages il est très facile d’introduire une faille de sécurité : 'SELECT * FROM customer where id = '+ id
. Ou sur le fait que PHP ne peut pas faire de Websocket (voir ReactPHP ou AMPHP). Cependant, à part quelques petits points de détails, nous avons beaucoup apprécié cette conférence.
Section intitulée symfony-se-met-au-front-a-votre-tour-maintenant-a-rel-nofollow-noopener-noreferrer-href-https-github-com-webmamba-matheo-daninos-aSymfony se met au front, à votre tour maintenant! – Matheo DANINOS
Depuis quelques années, nous suivons avec assiduité Symfony UX, un ensemble de composants permettant d’accélérer le développement front de certaines parties de nos applications, presque sans JavaScript !
Et cette conférence avait précisément pour but de faire découvrir Symfony UX à celles ou ceux qui n’ont pas encore eu l’occasion ou l’envie de se familiariser avec, en nous présentant ses différents éléments :
- Les TwigComponent, des composants qui permettent de décomposer et rendre indépendantes certaines parties de templates ;
- Les LiveComponent, qui permettent d’ajouter de la logique au composant en empruntant les concepts de Props et State, que l’on retrouve souvent dans les frameworks Javascript modernes comme React ;
- Stimulus, le framework Javascript utilisé dans Symfony UX et qui est désormais le standard pour écrire du Javascript dans une application Symfony ;
- Les différents packages mis à notre disposition avec Symfony UX, comme Chart ou Dropzone ;
- Asset Mapper, qui nous permet de se passer de Webpack et qui nous permet d’utiliser des librairies Javascript tierces via une
import-map
.
Cette conférence fait un bon état des lieux de Symfony UX et permet de se faire une idée de ce qu’il est désormais possible de faire avec. Une conférence intéressante pour qui souhaite s’y essayer, que nous avions déjà vue en avant-première lors du Meetup AFSY d’août à JoliCode !
Section intitulée augmentez-votre-couverture-supprimez-des-tests-a-rel-nofollow-noopener-noreferrer-href-https-twitter-com-baptouuuu-baptiste-langlade-aAugmentez votre couverture : supprimez des tests ! – Baptiste LANGLADE
Baptiste a commencé par nous présenter la manière dont était testé un projet sur lequel il travaillait, afin de souligner la lourdeur dont une suite de tests peut être victime.
Il n’est effectivement pas rare de devoir écrire une grande quantité de tests pour tester une nouvelle fonctionnalité d’un projet, ce qui est rarement agréable et peut rendre conséquente la suite de tests d’un projet. Dans le cas de son projet par exemple, il existait plus de 700 tests, ce qui prenait 1h15 à la CI.
Pour adresser ce problème, il a écrit une librairie basée sur une autre méthode de tests, le Property Based Testing. Cette méthode, existant depuis plus de 20 ans, génère aléatoirement des données et cherche à permuter le plus possible les données de l’application.
C’est ainsi qu’est né innmind/black-box, un framework de tests. Ce framework, basé sur PHPUnit, propose de générer pour nous des données aléatoires en utilisant un grand nombre de Sets mis à notre disposition.
Pour utiliser ces Sets dans nos tests PHPUnit, un trait BlackBox
est mis à notre disposition, qui nous permet :
- D’itérer sur les données retournées par un Set via la méthode
forAll
; - D’appliquer une callback à ces données, qui recevra en arguments les données retournées par le Set.
Baptiste nous a ensuite montré comment il était possible d’utiliser son framework pour écrire des tests de manière plus agréable et plus fiable. En effet, l’utilisation de données aléatoires permet de couvrir des cas imprévus et extrêmement difficiles à imaginer soi-même. Pour l’illustrer, il a pris l’exemple d’un bug découvert grâce à cette approche qui a pris plus d’un an à être découvert !
Merci à Baptiste pour la présentation de ce framework qui nous a semblé prometteur et qui nous a donné envie de l’essayer !
Section intitulée j-ai-cree-un-service-saas-voyons-ce-qu-il-ne-faut-pas-faire-a-rel-nofollow-noopener-noreferrer-href-https-kiboko-fr-gregory-planchat-aJ’ai créé un service SaaS, voyons ce qu’il ne faut pas faire – Grégory PLANCHAT
Grégory PLANCHAT nous a expliqué les choix qu’il a faits en début de projet, en prenant en compte la taille de son équipe, son budget et ses connaissances.
Il nous a conseillé de préférer la technologie la plus simple et la moins coûteuse en temps, quitte à créer ses propres outils sans réinventer la roue (petits scripts shell, Makefile, tâches Castor). Il nous a mis en garde contre les technologies à la mode, qui peuvent être abandonnées ou changer rapidement. Par exemple, il a dû abandonner Kubeless, qui n’était plus maintenu trois semaines après avoir commencé à l’utiliser !
Il nous a aussi parlé de son choix d’adopter l’architecture event sourcing / CQRS, qui s’est avéré être une grosse erreur pour son équipe, qui n’était pas formée à ce paradigme.
Il nous a souligné l’importance de documenter les choix techniques, en utilisant un Architecture Decision Record (ADR), qui permet de les expliciter et de les faire valider par tout le monde.
Section intitulée la-positive-alt-itude-un-outil-d-inclusion-pour-votre-accessibilite-a-rel-nofollow-noopener-noreferrer-href-https-twitter-com-angig29-angi-deborah-guyard-aLa positive alt-itude ! Un outil d’inclusion pour votre accessibilité – Angi Déborah GUYARD
Angi nous a présenté le bien connu attribut alt
et la description qu’il doit faire de nos images.
Cette description doit être pertinente, concise et objective. Elle doit se concentrer sur le sujet et le contexte de l’image, sans entrer dans des détails superflus comme la couleur des murs ou la météo. Elle doit aussi éviter de contenir du contenu SEO, qui n’a pas de sens pour le lecteur d’écran. Enfin, elle doit être adaptée au public visé et au ton du site web.
Sur les réseaux sociaux, l’ajout de la description de l’image est toujours disponible (Twitter, LinkedIn…), il faut donc veiller à la saisir.
💛 Note des JoliCodeurs : par exemple le alt
de notre image en introduction de l’article est erroné car il reprend (à l’heure où nous écrivons) le titre de cet article. Nous allons corriger cela !
Section intitulée utilisez-la-bibliotheque-standard-php-spl-au-quotidien-a-rel-nofollow-noopener-noreferrer-href-https-github-com-florian-merle-florian-merle-aUtilisez la bibliothèque standard PHP (SPL) au quotidien – Florian MERLE
Le sujet revient de temps en temps. Depuis la version 5.1 (18 ans déjà !), PHP met à notre disposition une belle boîte à outils que nous n’utilisons pas toujours. Elle présente l’avantage de ne nécessiter aucune configuration additionnelle.
Nous utilisons déjà régulièrement la SPL via les Exceptions LogicException
et RuntimeException
par exemple. spl_autoload_register()
fait aussi, comme son nom l’indique, partie de la SPL.
Par contre, les structures de données exposées par la SPL sont plus rares dans notre code. En PHP, les tableaux sont optimisés pour toutes les situations, donc… pour rien. L’objectif des structures de données est de remplacer les array
dans certaines situations.
Florian nous a présenté des exemples concrets avec la liste double chaînées : SplDoublyLinkedList
et SplQueue
pour implémenter une liste de lecture.
Pour faire un hit-parade, c’est SplHeap
et SplPriorityQueue
qui ont été présentés.
Sans reprendre les exemples de code, ce qu’il faut retenir ici est que :
- la DX n’est pas incroyable, par exemple l’ordre d’insertion n’est pas conservé ;
-
SplQueue
étend lesSplDoublyLinkedList
et c’est un peu bizarre les méthodes qui traînent, commesetIteratorMode()
par exemple ; - les performances ne sont pas au rendez-vous ! Les benchmarks présentés montrent toujours les
array
gagnants. Une extension PHP corrige ces problèmes : PHP DS ! Elle donne des structures de données en plus, des Vector, des Deque, des Set… Les Vector y sont plus rapides que lesarray
et moins gourmands queSplDoublyList
.
En conclusion, nous retenons que dans la SPL, nous pouvons utiliser les exceptions, les itérateurs, mais qu’il vaut mieux éviter les structures de données.
💛 Note des JoliCodeurs : Nous ajoutons que SplObjectStorage
est probablement la seule structures de données très utile et de bonne qualité dans la SPL !
Section intitulée reactphp-amp-revoltphp-comparatif-des-frameworks-asynchrones-a-rel-nofollow-noopener-noreferrer-href-https-b-viguier-github-io-benoit-viguier-aReactPhp, Amp, RevoltPhp : comparatif des frameworks asynchrones – Benoît VIGUIER
Expert et speaker reconnu sur le sujet, Benoît nous parle des frameworks asynchrones.
La conférence commence avec un historique des différents frameworks asynchrones :
- (Open)Swoole : créé en 2012, c’est une extension PHP à installer. Il y a eu un Swole Gate il y a une paire d’années qui a scindé la communauté en deux : la Chine d’un côté et les utilisateurs Anglophone de l’autre. Pour toutes ces raisons, Benoit a fait l’impasse sur cette librairie ;
- ReactPHP : créé en 2012, initialement avec le pattern à base de promesses Thenable ;
- AMPHP : créé en 2013, initialement avec le pattern Generator / coroutine ;
-
RevoltPHP : créée en 2021, elle utilise les Fibers (natives depuis PHP 8.0). C’est une coopération des équipes de ReactPHP et AMPHP pour mutualiser et standardiser une partie du code (
EventLoop
).
Ensuite Benoît est revenu très rapidement sur les concepts d’asynchrone, de concurrence, et d’EventLoop
.
Puis à travers une série d’exemples, il a comparé les trois frameworks. Nous retenons surtout que Revolt semble beaucoup plus complexe à utiliser, le code est lourd à lire, il faut écrire pas mal de fonctionnalités nous même. Mais c’est normal, c’est une couche bas niveau. ReactPHP et AMPHP sont souvent au même niveau, avec quelques petites différences de syntaxe.
Au final, comment choisir ?
- Revolt : uniquement pour faire de l’interopérabilité entre ReactPHP et AMPHP, ou pour de la migration de projet legacy ;
- AMPHP : dans tous les autres cas.
Nous vous invitons a lire les slides (PDF) pour en découvrir plus.
💛 Note des JoliCodeurs : dans Asynit, nous utilisons AMPHP, nous étions donc ravis de cette conclusion !
Section intitulée burn-out-dans-l-it-le-commencement-a-rel-nofollow-noopener-noreferrer-href-https-github-com-tboileau-thomas-boileau-aBurn-out dans l’IT, le commencement – Thomas BOILEAU
Le burn out est un trouble qui peut toucher tout le monde, que ce soit dans le cadre professionnel, scolaire ou personnel. Il se manifeste par une fatigue intense, un sentiment d’épuisement, une perte de motivation et de sens, et des difficultés à gérer ses émotions et ses relations. Bien qu’il ne soit pas reconnu comme une maladie, il peut conduire à la dépression, qui est une maladie.
Thomas nous a présenté le retour d’expérience de Virginie, une étudiante en reconversion professionnelle. Elle a suivi une formation intensive de 6 mois, qui lui a demandé beaucoup d’efforts et de sacrifices. Elle a dû faire face à la pression des examens, à la concurrence des autres candidats, et à la peur de ne pas trouver d’emploi. Elle a fini par craquer et sombrer dans le burn out.
Ce récit nous a permis de comprendre les causes et les conséquences du burn out, mais aussi les moyens de le prévenir et de le traiter :
- Développer son empathie : se mettre à la place des autres pour comprendre leur réactions et ressentis, et savoir ne pas les bousculer ;
- Être observateur : remarquer quand ça ne va pas pour pouvoir réagir et accompagner ;
- Ne pas imposer son aide : même avec de la bonne volonté, s’imposer à quelqu’un pour l’aider peut avoir l’effet inverse.
Section intitulée equilibre-pro-perso-experimentations-autour-du-temps-de-travail-et-de-la-remuneration-a-rel-nofollow-noopener-noreferrer-href-https-twitter-com-xgorse-xavier-gorse-aÉquilibre pro/perso : expérimentations autour du temps de travail et de la rémunération – Xavier GORSE
Nous n’avons pas tous les mêmes besoins de temps de travail et de rémunération. Xavier GORSE a souhaité mener une réflexion sur ce sujet dans son entreprise Elao, avec comme fils conducteurs la flexibilité (chaque collaborateur doit pouvoir choisir), la visibilité, et la transparence (équité entre collaborateurs).
L’entreprise a commencé par mettre en place une grille de salaire, basée sur différents aspects. Il y a bien sûr le temps de travail, mais aussi :
- une grille d’impact (interne, externe comme visibilité sur les conférences en tant que speaker, productivité, implication) ;
- un aspect « performance » de l’entreprise.
Du côté des obstacles, Xavier nous indique les difficultés administratives (nombreux avenants aux contrats de travail par exemple), les salaires qui dépassent de la grille, et le coût supplémentaire pour la masse salariale.
Section intitulée les-journalistes-se-moquent-des-logiciels-libres-je-vous-explique-pourquoi-a-rel-nofollow-noopener-noreferrer-href-https-twitter-com-lorisguemart-loris-guemart-aLes journalistes se moquent des logiciels libres, je vous explique pourquoi – Loris GUÉMART
Loris GUÉMART est journaliste pour Arrêt sur Images, un média indépendant sur les coulisses des médias. Il nous présente les relations entre journalisme et tech en commençant par nous montrer à quel point les logiciels open-source sont absents dans la presse.
- Le Forum PHP dans la presse ? Aucune mention ;
- Libreoffice ? Aucun résultat chez BFM, mais Microsoft Office oui ;
- Framasoft ? Aucun résultat, mais Google Doc oui…
Les logiciels libres sont tous sous-représentés dans l’actualité. À fonctionnalités similaires, les logiciels privés font toujours plus de papiers. Même des outils comme Firefox ne sont pas mentionnés dans les médias généralistes.
Voici ce que nous dit Loris :
Les journalistes sont des êtres sociaux comme les autres, Ils sont allés à l’école, ils ont été formés sur des logiciels propriétaires, ils sont pris dedans.
De plus, mettre du temps humain sur un article Linux sera malheureusement moins intéressant en termes de public (et donc de finance) qu’un article sur Windows. Sans audience, il n’y a pas de revenu pour la presse – tout le monde ne peut pas être Mediapart.
Très rapidement aussi, un journaliste qui écrit sur un logiciel open source pourrait avoir un discours politique, militant – alors que suivre les sorties des GAFAM est consensuel et donne du travail toute l’année !
Loris conclut qu’inviter des journalistes à nos événements serait déjà un bon début pour faire parler des logiciels libres 😋 !
Section intitulée index-wars-le-pouvoir-des-jedi-des-index-dans-l-univers-de-postgres-laetitia-avrotIndex Wars : Le pouvoir des Jedi des Index dans l’univers de Postgres – Lætitia AVROT
A travers cette conférence, Lætitia nous a donné plein de bons conseils et fait découvrir comment fonctionnaient les index dans Postgres. Il est difficile de tout résumer mais nous retenons entre autre ceci :
- un index sur plusieurs colonnes (a, b) sera utilisé lorsque que l’on filtre sur a et b, ou lorsque l’on filtre que sur a, mais pas si l’on filtre que sur b. L’ordre des colonnes dans l’index est donc important ;
-
les index partiels : l’index créé par
CREATE INDEX ON mytable (a) WHERE a IS NULL
sera utilisé quand nous requêtons :WHERE a IS NULL
; -
les index couvrant : l’index créé par
CREATE INDEX ON mytable (a) INCLUDE (b)
sera utilisé lorsque que nous requêtonsSELECT a, b FROM mytable WHERE a = 5
sans avoir à chercher dans la table. Cependant, si le filtre se fait sur a et b, alors l’index ne sera pas utilisé ; -
les index sur des expressions :
CREATE INDEX ON mytable (lower(a))
sera utilisé lorsque que nous filtrons avec la même expression, ici un `WHERE lower(a) = 'foo’. Il ne sera en revanche pas utilisé si une autre expression, ou aucune, est employée.
Lætitia a ensuite présenté différents opérateurs de comparaisons (certains plutôt peu standards), plusieurs types d’index (celui par défaut B-tree, gist, brin, etc) et leurs avantages et inconvénients. On gardera en tête également que le tri des valeurs se fait en fonction de la collation, et que celle-ci est fournie par l’OS. Une mise à jour de l’OS peut parfois apporter un changement de collation et ainsi provoquer une corruption de nos index.
Cette conférence nous a montré que ce n’était pas forcément évident de bien gérer nos index (on a hâte qu’ils soient générés automatiquement à l’avenir 🤖) et qu’il était facile de dégrader les performances d’une application en voulant bien faire. Mais le but premier annoncé par l’oratrice a été atteint : nous donner plein de mots-clés et d’outils pour nous permettre d’approfondir les différents sujets par nous-mêmes, et savoir qu’ils existent. Et comme l’a très bien dit Lætitia :
Personne n’est jamais mort en lisant la documentation de Postgres.
Section intitulée changements-de-comportements-en-php-8-a-rel-nofollow-noopener-noreferrer-href-https-twitter-com-faguo-damien-seguy-aChangements de comportements en PHP 8 – Damien SEGUY
Damien nous a présenté le fonctionnement des Breaking Change dans PHP avec de nombreux exemples.
Un comportement qui change, c’est un code valide dans deux versions avec un résultat différent – il y en aurait 114 au total (comptés par le speaker). Parfois PHP change de comportement entre deux versions, que ce soit pour des raisons historiques (dette technique, comportement non spécifié…), des bugs ou des corrections de bugs…
Par exemple, les changements de PHP 8.0, comme dans implode
où il n’est plus possible de passer le séparateur en second argument. Ou bien le fonctionnement étrange de strpos
quand nous passions un integer
en second argument, heureusement impossible depuis PHP 8.0. Ou encore les constantes indéfinies qui étaient interprétées comme des string.
De nouveaux mots clés peuvent aussi devenir réservés, comme « match ». Nous citons ici Damien avec notre phrase préférée de la présentation :
On ne peut pas nommer une classe « Class » mais on peut nommer un Enum « Enum » !
💛 Note des JoliCodeurs : un bon rappel sur les dangers de ces changements ! Attention aussi aux changements à venir dans PHP 8.3 que nous aurions aimé voir dans cette présentation, les clés de tableau négative par exemple.
Section intitulée php-en-serverless-comment-ca-marche-sous-le-capot-a-rel-nofollow-noopener-noreferrer-href-https-mnapoli-fr-matthieu-napoli-aPHP en serverless, comment ça marche sous le capot ? – Matthieu NAPOLI
5 ans après avoir parlé de serverless à l’occasion du Forum PHP 2018, Matthieu revient nous faire un état des lieux du serverless en PHP, et particulièrement des lambdas sur AWS.
Créateur de Bref, Matthieu a beaucoup œuvré pour la démocratisation de cette technologie dans le monde PHP. BrefPHP, c’est aujourd’hui 149 contributeurs, 21 000 lambda, 100 000 déploiements par mois et 13 milliards d’invocations par mois. Cet écosystème n’est donc plus si hype.
Il nous a rappelé les raisons de passer – ou pas – sur ce type d’infrastructure : la scalabilité et la simplicité (on délègue beaucoup au resource provider). Cependant, si notre projet tourne déjà très bien actuellement et que les équipes sont à l’aise avec l’infrastructure utilisée, inutile de changer. Le serverless n’est pas adapté pour tout le monde.
Ensuite, Matthieu nous a expliqué un peu plus en détail le fonctionnement d’une lambda, et comment elles sont déployées, démarrées et également mises en pause lorsqu’il n’y a rien à traiter. Il a également parlé des différents runtimes fournis par Bref qui permet d’optimiser la lambda suivant si l’on veut traiter un appel HTTP classique ou juste répondre à un événement.
Autre sujet souvent abordé lorsque l’on parle de serverless, celui du coût. Là encore, pas de solution miracle, ça peut coûter moins cher comme ça peut coûter plus cher. Des outils peuvent aider, comme la limitation du scaling ou le Budget d’AWS. Il ne faut pas oublier que la facturation se fait uniquement lorsque l’instance de la lambda est utilisée. Quand elle est démarrée mais ne fait rien, son processus est freezé et ne coûte donc rien. En tout cas, la question du budget est plus de l’ordre du financier que du domaine technique : en cas de pic de trafic, est-ce qu’il vaut mieux couper le service ou alors accepter de payer plus ?
Section intitulée phpstorm-a-rel-nofollow-noopener-noreferrer-href-https-www-charlesdesneuf-com-charles-desneuf-aPhpStorm = ♥️ – Charles DESNEUF
Charles nous a présenté comment il interagit avec PHPStorm, l’IDE spécialisé PHP de JetBrains.
Outre les fonctionnalités de base comme « introduire une constante », « renommer une variable »… qui sont très puissantes car elles sont capables de comprendre et modifier tout le code nécessaire, Charles a mis l’accent sur les LiveTemplate.
Cette fonctionnalité permet de précomposer de grande parties de code et de pré-saisir des noms de variables logiques, de placer le curseur aux bons endroits, etc.
Il a compilé toute une série de LiveTemplate disponibles sur cette page Web.
Le futur de ces LiveTemplate réside cependant dans les IA Actions, où un prompt permet de demander à l’IA de nous générer du code de façon plus intéressante et dynamique.
Section intitulée open-closed-principle-on-a-dit-etendre-pas-extends-a-rel-nofollow-noopener-noreferrer-href-https-github-com-tdutrion-thomas-dutrion-aOpen / Closed principle : on a dit étendre pas extends ! – Thomas DUTRION
Thomas est revenu sur l’un des principes de SOLID (le O : « Software entities … should be open for extension, but closed for modification. »). Étendre une classe pour lui ajouter du comportement, un logger, un cache etc. c’est très courant, et la façon naïve de le faire est d’utiliser extends
:
- DataProvider ;
- LoggedDataProvider ;
- CachedLoggedDataProvider…
Mais cela pose de nombreux problèmes : l’encapsulation cassée, il faut faire le passe plat des dépendances…
L’utilisation de decorator est bien plus propre et surtout très bien supporté dans les conteneurs d’injection de dépendance modernes (Symfony par exemple).
Depuis Symfony 6.1, nous pouvons utiliser #[AsDecorator]
pour décorer un service :
#[AsDecorator(decorates: Mailer::class)]
class DecoratingMailer
{
public function __construct(
#[AutowireDecorated]
private object $inner,
) {
}
// ...
}
Il nous a aussi parlé des Tagged Service Locator – sujet que nous avions déjà couvert ici et qui aident beaucoup à mieux architecturer vos applications.
En conclusion, l’idée est de moins utiliser extends, mais plutôt les décorateurs, les events et les callback : l’héritage n’est pas une obligation.
Section intitulée streams-nous-sous-estimons-tous-predis-a-rel-nofollow-noopener-noreferrer-href-https-alex-daubois-medium-com-alexandre-daubois-aStreams : nous sous-estimons tous Predis ! – Alexandre DAUBOIS
L’entreprise pour qui Alexandre travaille doit régulièrement construire un JSON de plusieurs Gb via PHP. Au début, l’implémentation était naïve et s’est terminée par le fameux :
Allowed memory size of [beaucoup] bytes exhausted.
Une autre approche est de construire le fichier par petits bouts et de les assembler par la suite. Mais cela impose d’avoir un système de fichier ou une mémoire partagée entre tous les serveurs ce qui n’est pas le cas chez eux.
Cependant, leur architecture contient déjà Redis, et c’est rapide, partagé, et permet un gros stockage. Il était uniquement utilisé pour les sessions PHP (comme souvent lorsqu’on a une architecture scalable).
Plutôt que de construire le JSON complet en mémoire, la solution employée est de passer par de l’écriture par chunks via un Generator, ainsi que les streams de Redis !
- Le code envoi dans une queue tous les objets à builder ;
- Chaque Consumer build un objet, le serialize, et l’ajoute au stream Redis ;
- Quand tous les objets sont buildés, un autre worker va consolider les données :
- Récupérer un élément depuis le stream ;
- L’écrire sur un espace de stockage (S3 like) ;
- Mettre à disposition le fichier pour les fronts.
Alexandre a ensuite créé une librairie « Lazy Stream » pour abstraire la logique du Generator.
💛 Note des JoliCodeurs : Nous recommandons plutôt l’utilisation de PHP Redis à Predis, souvent plus performante. Nous aimons beaucoup Redis ici !
Section intitulée you-build-it-you-run-it-l-observabilite-pour-les-devs-a-rel-nofollow-noopener-noreferrer-href-https-www-smaine-me-smaine-milianni-aYou Build It, You Run it, l’observabilité pour les devs – Smaïne MILIANNI
Une application web, dès son premier déploiement en production n’en est qu’au début de son cycle de vie : un aspect important de sa gestion est l’observabilité, c’est-à-dire comprendre, surveiller et diagnostiquer son état.
Dans un environnement où l’adage « everything fails all the time » et la loi de Murphy sont de mise, il est impératif de garantir l’intégrité de nos applicatifs, détecter rapidement les problèmes, identifier les éventuels soucis de performance et minimiser les périodes d’interruption de service.
Nous pouvons définir trois grands piliers :
- Les logs : qui doivent être exploités pour obtenir des informations pertinentes sur le fonctionnement de votre application et non pas s’accumuler dans un fichier ;
- Les metrics : qui sont des capteurs de la santé de votre application ;
- Les traces : qui sont un moyen fiable de suivre le comportement de votre application et d’identifier les goulots d’étranglement (requêtes SQL longues par exemple).
Nous pouvons également distinguer comme pilier de l’observabilité les alertes, c’est-à- dire être informé rapidement lorsqu’une anomalie est présente dans nos applications.
L’observabilité au sein de l’entreprise c’est aussi s’interroger sur la responsabilité de cette tâche, et réfléchir à comment optimiser ce processus. Dans l’entreprise du speaker, YouSign, plusieurs équipes ayant un périmètre propre ont été constituées et chacune de ses équipes est responsable de l’observabilité de son périmètre. Un « runner » d’astreinte a pour rôle au sein de chaque équipe d’être une sorte de pompier de service en rotation, qui surveille en permanence le système, corrige les bugs dès qu’ils se manifestent, communique sur les incidents en cours, et rédige des post mortem, des récapitulatifs qui expliquent l’incident, sa durée, les actions entreprises, etc.
Être capable de réagir efficacement est une bonne chose mais on devrait anticiper les anomalies, en écrivant de la documentation, des logs dans le code etc.
Section intitulée et-si-on-apprenait-a-apprendre-et-partager-autrement-a-rel-nofollow-noopener-noreferrer-href-https-scraly-com-aurelie-vache-a(Et si on apprenait à) Apprendre et partager autrement – Aurélie VACHE
Nous sommes tous différents, nous apprenons tous différemment, mais tous les livres et le système éducatif sont uniformes. Dans cette conférence Aurélie nous raconte son histoire et comment elle en est arrivée à publier des livres complets de sketchnotes sur des sujets très techniques comme Docker ou Kubernetes ; pour rendre accessibles l’information et le savoir à un plus grand nombre :
- pour les personnes neuro-atypiques (15 % de la population) ;
- pour les juniors ;
- et pour tous les autres ! Qui peut le plus peut le moins.
Vos passions vous démarquent.
C’était un sujet plein de bienveillance et d’inspiration positive. Les communautés de développeurs sont capables de belles choses, de donner la motivation et le courage d’aller au bout des choses et nous ne pouvons qu’acquiescer.
Section intitulée femmes-et-numerique-enjeux-et-solutions-a-rel-nofollow-noopener-noreferrer-href-https-fr-wikipedia-org-wiki-isabelle-collet-isabelle-collet-aFemmes et numérique : enjeux et solutions – Isabelle COLLET
Pour le dernier sujet de l’événement, une spécialiste des questions de genre dans le numérique est intervenue : Isabelle COLLET.
Elle a commencé par nous rappeler que même de façon inconsciente, le genre a un impact sur nous. Nous sommes des experts dans la détection du genre, et quand nous n’arrivons pas à le détecter rapidement, nous sommes perturbé involontairement. Depuis tout petit, on apprends que l’humanité se compose d’hommes et de femmes. Ça ne nous sert à rien de connaître le genre d’une personne, mais ça nous perturbe de ne pas le connaître.
Puis un retour sur l’histoire de l’informatique s’est dressé ; le fait que les premiers développeurs étaient des femmes, que le métier s’est progressivement masculinisé à mesure que… les salaires augmentaient.
Ce qui avait de la valeur au début, c’était le matériel, les ordinateurs étaient immenses et coûtaient très cher, mais les opérer était peu considéré. Puis, petit à petit, le logiciel prend ses lettres de noblesse et est enseigné dans les universités de science, principalement fréquentées par des hommes. Et le micro-ordinateur va chercher un public masculin. Ces deux facteurs vont complètement retourner la situation.
Et pourtant, pour citer Isabelle :
L’informatique c’est du tertiaire, ce n’est pas dangereux, ce n’est pas salissant, ça ne nécessite pas de force physique, ça se pratique depuis la maison : c’est un métier de femme donc !
Nous finirons avec cette autre perle :
82 % des personnes n’ont jamais eu de problème de sexisme dans le numérique, 18 % sont des femmes
Section intitulée the-endThe end
Bravo d’être arrivé à la fin de ce rapport ! 👏 Nous espérons que ces retours de conférence vous seront utiles, que vous ayez pu être présent ou non.
Nous étions encore une fois ravis de retrouver la communauté dans laquelle nous évoluons pour deux jours riches en échanges et en partage ! Un grand bravo à l’AFUP pour l’organisation, année après année, de cette rencontre annuelle absolument nécessaire.
Si nous devions partager un bémol, ça serait la trop grande part laissée à des sujets non techniques ou non PHP ! À l’année prochaine 😘
Cet article porte sur la conférence Forum PHP 2023.
Commentaires et discussions
Ces clients ont profité de notre expertise
Dans le cadre du renouveau de sa stratégie digitale, Orpi France a fait appel à JoliCode afin de diriger la refonte du site Web orpi.com et l’intégration de nombreux nouveaux services. Pour effectuer cette migration, nous nous sommes appuyés sur une architecture en microservices à l’aide de PHP, Symfony, RabbitMQ, Elasticsearch et Docker.
Afin de poursuivre son déploiement sur le Web, Arte a souhaité être accompagné dans le développement de son API REST “OPA” (API destinée à exposer les programmes et le catalogue vidéo de la chaine). En collaboration avec l’équipe technique Arte, JoliCode a mené un travail spécifique à l’amélioration des performances et de la fiabilité de l’API. Ces…
JoliCode accompagne l’équipe technique Dayuse dans l’optimisation des performances de sa plateforme. Nous sommes intervenus sur différents sujets : La fonctionnalité de recherche d’hôtels, en remplaçant MongoDB et Algolia par Redis et Elasticsearch. La mise en place d’un workflow de réservation, la migration d’un site en Twig vers une SPA à base de…