Pour cette édition du Forum PHP qui s’est déroulée à Disneyland Paris, Bedrock a vu les choses en grand : première fois sponsor Or sur un forum et pas moins de 32 Bedrockien(ne)s présent(e)s dont 4 en tant que conférencier(e)s ! Cette année encore, le forum a été un moment privilégié pour les échanges, le partage et vous avez été nombreux(ses) à venir nous rencontrer sur notre stand et nous avons été ravis de pouvoir échanger avec vous.

La richesse et la diversité des conférences ont fait de cette édition une grande réussite. Nous ne pouvons malheureusement pas aborder toutes les conférences dans cet article, mais voici une sélection de 10 d’entre elles.

Le stand Bedrock

Bedrock au Forum PHP

Grande première pour nous cette fois-ci : Bedrock avait un stand sur le forum PHP ! Notre équipe technique, ainsi que des membres de l’équipe RH a participé à la présentation de l’entreprise. Nous avons pu, tous ensemble, vous accueillir sur le stand pour répondre aux questions sur notre activité, notre organisation et la vie dans l’entreprise.

De leurs propres mots :

“Notre présence au forum fut une réussite collective, qui nous a permis de nous faire connaître et mettre en lumière BEDROCK en tant que structure à part entière, et non plus en tant que « M6 Web ». Nos équipes étaient ravies que Bedrock soit sponsor et ont pu se challenger sur de réels “casses-têtes” et non pas sur leur code. Durant ces deux journées, le stand Bedrock a été un point de rendez-vous agréable pour nos équipes et pour les autres participants curieux d’apprendre à nous connaître. Cette participation, au-delà d’être très formatrice pour la communauté Bedrock, a même parfois été assimilée à un « team building » pour reprendre les termes de nos collaborateurs, leur permettant de se retrouver dans un autre environnement et de participer à l’attractivité de leur entreprise. Les équipes Backend & RH étaient fières de représenter Bedrock en participant à la vie du stand et de répondre aux questions des passants.

Nos 2 Backend managers, Mikael et FX en train d’animer l’épreuve des casse-têtes

Les conférences qu’on retient

Jour 1

The PHP Foundation: The past, the present, and the future - Sebastian BERGMANN, Roman PRONSKIY

“PHP c’est simple, suffit de dégommer un mec, et ça n’existe plus…” - Chuck Norris -

Cette vision à peine exagérée de l’ami Chuck était assez proche de la réalité jusqu’à l’année dernière. En effet, jusque-là, l’écrasante majorité de la connaissance internet et des implémentations des features de PHP reposaient sur les épaules de Nikita Popov et Dmitry Stogov. Lesquels faisaient cela de manière non-professionnelle, comme un hobby, alors que PHP est aujourd’hui utilisé pour environ 70% des sites internets.

Tout ceci est résumé dans cet article (en anglais).

Ce qui nous amène à un principe bien connu et très problématique de bon nombre d’entreprises : le Bus Factor.

Bus Factor

Ce principe identifie le nombre de personnes qui doivent être renversées par un bus pour que la connaissance d’un projet disparaisse et que ce dernier soit réellement mis en péril. Appliqué à PHP, cela signifie que si deux personnes avaient été renversées par un bus ou avaient croisé le chemin de Chuck, l’ensemble de la communauté PHP aurait bien transpiré.

La PHP Foundation

En 2021, Nikita Popov annonce son souhait de réduire drastiquement sa contribution au langage, et c’est là que la PHP Fundation est fondée autour de personnalités comme Sebastian BERGMAN et Roman PRONSKIY qui ont animé cette conférence à laquelle nous avons eu la chance d’assister.

L’objectif est simple : récolter des fonds pour pouvoir rémunérer des personnes qui font évoluer le langage et répartir la connaissance dudit langage entre un maximum de personnes pour minimiser le Bus Factor

L’aspect juridique et financier de la chose est délégué à une structure nommée Open Collective, dont l’activité est 100% transparente. Les derniers chiffres font ainsi valoir qu’après déductions des charges, il reste cette année environ 580 000$ pour la fondation.

Les fonds proviennent majoritairement de donations répartis comme suit :

  • 77% provenant d’entreprises (JetBrains, Livesport, Symfony…)
  • 23% provenant d’individus

Parmi les actuels core contributeurs on retrouve :

Le futur de PHP ?

Avec cette stratégie de contractualisation des core-contributeurs et le souci de partager la connaissance, on est en droit d’espérer que le risque de mise en péril du langage soit fortement réduit. Qui plus est, l’arrivée prochaine de la version 8.2 de PHP semble montrer que la nouvelle équipe a su faire avancer le projet, pour notre plus grand plaisir.

Watch the clock - Andreas HEIGHL

Dans cette conférence, Andreas aborde la douloureuse problématique du temps en PHP et plus précisément le cauchemar que sont les tests sur la notion de temps réel.

Afin de répondre à cette problématique, il évoque et explique en détail tout le cheminement intellectuel pour la mise en place de la PSR-20. Elle donnera la possibilité, grâce à une “simple” interface, de gérer plus facilement le temps réel et les tests associés. Malheureusement, la PSR-20 est actuellement encore à l’état de brouillon et ne sera probablement pas mise à disposition avant longtemps.

Afin de nous faire patienter, Andreas a développé sa propre implémentation de l’interface Clock qui sera proposée dans la PSR-20 : https://packagist.org/packages/stella-maris/clock.

Comment être bien onboardé en tant que développeuse junior reconvertie ? - Amélie ABDALLAH

Amélie, alternante et en reconversion, a donné sa première conférence pour faire un retour d’expérience des onboardings qu’elle a vécu dans ses 2 premières entreprises.

Pour sa première expérience en tant que développeuse elle se retrouve à devoir coder dès le premier jour. Une fois passée l’euphorie, je rappelle qu’elle est en reconversion et sur-motivée, elle se rend vite compte de tout ce qui ne va pas :

  • personne pour la former que ce soit techniquement ou concernant le métier
  • aucune présentation des autres équipes
  • aucun accompagnement de la part des supérieurs hiérarchiques
  • seule sur un projet où les règles métiers semblent complexes

Elle se sent rapidement perdue et son moral et sa motivation tombent en flèche.

Concernant sa seconde entreprise, c’est tout l’inverse :

  • pas de code pour les alternants/reconverti(e)s avant 2 semaines
  • un système de marrainage/parrainage
  • un repo avec des exercices et bonnes pratiques pour progresser
  • une rencontre avec toutes les équipes pour se connaître mais surtout pour bien comprendre les différents métiers de ses collègues

Amélie conclut en incitant toutes les entreprises à envisager des candidat(e)s en reconversion qui, à la condition d’être bien accompagné(e)s, seront sur-motivé(e)s et plein(e)s d’énergie.

Cela nous permet de faire l’état des lieux de notre processus d’onboarding. Même si on peut trouver des pistes d’amélioration, comme par exemple avoir une présentation des autres équipes et différents métiers bien plus tôt, on constate que nous avons déjà mis en place beaucoup de bonnes pratiques :

  • calendrier d’onboarding clair avec installation de la machine, présentation de l’équipe rejoint par la nouvelle personne, des locaux, des projets, etc.
  • système de marrainage/parrainage,
  • des formations disponibles sur les différentes technologies utilisées
  • ce qu’on appelle la Bedrock Academy, qui donne une vision globale des métiers de l’entreprise
  • un rapport d’étonnement présenté par le nouvel arrivant qui nous permet d’améliorer notre onboarding en continu

FFI : De nouveaux horizons pour PHP - Pierre PELISSET

Chez Karafun, Pierre Pelisset nous présente un moyen de dépasser les frontières habituelles de PHP.

La mise en place de bar à karaoké nécessite en effet de manipuler du matériel spécifique. La transmission de données par USB reste le moyen le plus simple de faire communiquer des systèmes, mais nativement rien n’existe en PHP. Jusqu’à présent les équipes de Karafun utilisaient un script Python avec PySerial pour répondre à ce besoin.

Depuis PHP 7.4, il est possible d’utiliser les Foreign Function Interface (FFI) pour appeler directement des libraires C compilées depuis le code PHP. En se basant sur les bonnes librairies, il a été ainsi possible pour les équipes de Karafun d’utiliser PHP dans la totalité de leur stack, et de remplacer leurs scripts Python.

Pierre nous présente ensuite la librairie php-termios qu’il a implémentée pour permettre d’utiliser Termios, une librairie de manipulation de terminal POSIX écrite en C, depuis PHP.

L’interfaçage reste facile tant qu’il s’agit de types de données simples (comme des entiers), mais devient beaucoup plus complexe lorsqu’il s’agit de manipuler des structures de données avancées (chaînes de caractères, objets, …).

Idéalement, il faut créer des classes PHP ressemblant à la librairie C (mêmes noms de fonction, de constante, …), afin de faciliter sa manipulation.

L’utilisation des FFI introduit de nouvelles difficultés liées généralement aux programmes compilés. Ainsi, dans le cas de Termios, les constantes utilisées varient selon la plateforme (Linux, MacOS, …). Il a donc fallu utiliser quelques astuces pour les copier dynamiquement dans le code PHP. De même, pour distribuer le binaire compilé, il faut prendre en compte l’architecture CPU de la machine exécutant le code.

OpenTelemetry : vers un standard pour surveiller vos applications - Benoit Viguier

Lors de sa conférence, Benoit Viguier (développeur chez Platform.sh au sein de l’équipe de Blackfire.io) est venu parler d’un standard de monitoring soutenu par la Cloud Native Computing Foundation : OpenTelemetry. Il a d’abord commencé par nous rappeler pourquoi nous faisons du monitoring.

Le monitoring nous permet de savoir si nos services fonctionnent correctement (conforme au SLA|SLO), et si cela n’est pas le cas, de savoir pourquoi cela ne fonctionne pas. Pour faire cela, il nous a présenté les différentes solutions de monitoring qui existent, de la plus simple à mettre en place (Analytics), au plus|trop détaillé (logs) mais aussi via des metrics qui eux demandent une plus grande intégration.

Ensuite vient la présentation des promesses de ce nouveau standard (OpenTelemetry) et sa volonté d’uniformiser les trois piliers du monitoring : logs, metrics et les traces, avec la volonté de rendre interopérable ces données collectées avec n’importe quel service et ce qu’importe le langage.

Schéma OpenTelemetry

Afin de permettre cette interopérabilité pour la collecte, le traitement et l’envoi des données entre nos applications et nos APMs, OpenTelemetry propose l’utilisation d’un collecteur. Ce collecteur possède trois composants par lesquels notre donnée va transiter :

  • Receiver - Gère la récupération des données dans le collecteur. Il fonctionne aussi bien avec une mécanique de push que de pull et supporte nativement les protocoles HTTP et gRPC.
  • Processor - Permet le traitement des données avant l’envoi aux différents outils de monitoring.
  • Exporter - Envoie les données (via push ou pull) aux outils de monitoring.

Concernant l’utilisation du standard OpenTelemetry en PHP, il existe aujourd’hui un SDK qui, cependant, ne possède pas beaucoup de fonctionnalités.

Malgré son jeune âge (release v1.0 en 2021), OpenTelemetry a encore de beaux jours devant lui si la contribution et le soutien de la communauté continuent. Il est important de rappeler que le standard n’est pas encore finalisé, par exemple la fonctionnalité “logging” est encore en cours de développement et n’est disponible qu’en “draft”.

Jour 2

Typage en PHP, comment ça fonctionne ? - George BANYARD

Lors de cette dissection du typage PHP, George Banyard, développeur salarié de la PHP Foundation, nous a expliqué (ou du moins tenté) comment fonctionne le typage PHP grâce à des formules mathématiques. Mais avant de nous faire peur avec les formules, il nous d’abord rappelé les différents types existants et futurs (PHP 8.1 et 8.2) et comment ils sont représentés en C (zend_type, _zval_struct, _zend_class_entry)

  • Types Primitifs
  • Types définis en espace utilisateur (classe, interfaces, enum)
  • Types Littéraux (false, true)
  • Type callable
  • Types Composés (A&B, A B, Forme Normale Disjonctive)
  • Alias de Type (PHP 8.2)

Ensuite, il nous a expliqué le principe de substitution de Liskov de différente manière.

Si φ(x) est une propriété démontrable pour tout objet x de type T, alors φ(y) est vraie pour tout objet y de type S tel que S est un sous-type de T

Mathématique, en C mais aussi en image :

Schéma mathématique

En version très simplifiée, la substitution de Liskov permet de substituer un type par un autre type s’il est mieux-disant. C’est par exemple sur ce principe que sont fondées la co-variance et la contra-variance en PHP.

Après toutes ces informations, George nous a fait rêver avec les nouveautés qui pourraient arriver dans notre langage préféré :

  • La possibilité de définir nos alias de type (numeric qui serait int ou float)
  • Pouvoir définir un typage pour les paramètres et le retour des callable directement dans la fonction : foo(fn<int,string>:bool $callable) {}
  • Le paramètre in-out qui permet de vérifier que le type ne change pas entre l’entrée et la sortie d’une fonction, utile notamment dans le cas de passage par référence
  • Pouvoir créer des types génériques (par exemple class Collection<string>)

Vous pouvez retrouver les slides de la conférence ici

Protéger votre application avec l’en-tête HTTP de sécurité “Content Security Policy” - Laurent BRUNET

Durant ce talk, Laurent BRUNET nous a rappelé l’importance de sécuriser les sites internet en nous parlant des attaques les plus utilisées et dont on pourrait se défendre en exploitant correctement le header de réponse Content-Security-Policy (aka. CSP).

Concrètement, le header CSP est délivré par le serveur en même temps que le HTML d’une page web et contraint les navigateurs à s’assurer que le contenu de la page respecte les règles de sécurité définies grâce à de nombreuses directives.

Il existe 2 variantes de ce header qui peuvent être utilisées conjointement :

  • une forme bloquante qui empêchera tous contenus illicites d’être chargés par le navigateur Content-Security-Policy: <directive1> ; <directive2> ; <directiveN>
  • une forme non-bloquante qui permet uniquement aux développeurs d’être avertis si du contenu illicite est présent sur la page Content-Security-Policy-Report-Only: <directive1> ; <directive2> ; <directiveN>

Et voici quelques unes des failles de sécurité évoquées durant ce talk, chacune accompagnée d’une des directives permettant de s’en protéger :

  • on peut se protéger des attaques XSS (e.g. injection de scripts dans une page web permettant d’exploiter les accès d’un utilisateur) en whitelistant les scripts autorisés à s’exécuter dans votre application avec script-src 'nonce-MonIDDeScript' 'sha256-MonHashDeScript' 'strict-dynamic' https: 'unsafe-inline' *.example.com ;
  • le Clickjacking (e.g. injection d’iframe invisible dans laquelle l’utilisateur va cliquer sans le savoir) peut être facilement contré en whitelistant vos iframes et celles de vos partenaires avec frame-ancestors 'self' https://example.com ;
  • la faille Magecart (e.g. récupération des données bancaires en les envoyant vers un nom de domaine pirate difficile à détecter) disparaîtra en whitelistant les noms de domaines utilisés dans des appels AJAX avec connect-src 'self' https://example.com ;

Si le sujet vous intéresse, n’hésitez pas à consulter le talk de Laurent dès qu’il sera disponible en replay. En attendant, profitez de la documentation du MDN et sachez que Google fournit un service en ligne pour inspecter et valider les CSP de vos pages web.

Tester à travers OpenAPI, ou comment valider votre documentation ! - Stéphane Hulard

Stéphane Hulard a commencé sa conférence par nous rappeler ce qu’est OpenAPI : il s’agit d’une initiative qui vise à normaliser et standardiser la description d’APIs. Cela sert à l’interopérabilité, l’automatisation et la fiabilité.

Il faut voir la documentation comme une spécification de notre API. “Une documentation n’a de sens que si elle reflète l’état actuel de l’application.” Rien de mieux donc que d’intégrer la validation de notre documentation par rapport à notre code, et inversement : que notre documentation valide notre code !

schéma de validation

thephpleague nous propose une solution pour faire ça : openapi-psr7-validator. Ce paquet peut valider les messages PSR-7 par rapport aux spécifications OpenAPI (3.0.x) exprimées en YAML ou JSON.

Ce paquet se base sur les PHP Standards Recommendations (PSR) qui sont des textes décrivant une manière commune de résoudre un problème spécifique. De cette façon, les projets qui suivent ces recommandations auront une excellente interopérabilité en suivant les mêmes recommandations et contrats.

Stéphane nous parle ensuite de la librairie Raven qu’il vient de publier. Raven a pour but de faciliter la validation au travers de la documentation, de s’appuyer sur de vraies données pour valider les requêtes et réponses ainsi que valider le comportement de l’API testée. La librairie n’en est qu’à ses débuts, quelques issues sont remontées sur le repository, n’hésitez pas à contribuer !

Stéphane a mis à disposition les slides de sa conférence ici

FrankenPHP, dans les entrailles de l’interpréteur PHP, de machines virtuelles et des threads - Kévin DUNGLAS

Chez Bedrock, nous utilisons majoritairement nginx et php-fpm pour servir nos applications. Nous avons aussi fait des essais avec Road Runner comme alternative.

Durant cette conférence, Kévin DUNGLAS nous a présenté une nouvelle alternative écrite en Go et nommée frankenphp. Chouette effet d’annonce au passage, FrankenPHP a été ouvert au public en direct durant la conférence.

En plus d’avoir un logo très mignon, ce nouveau serveur d’application PHP promet un gain de performance en gardant en mémoire l’application chargée. Autre argument intéressant, la facilité d’installation et d’utilisation.

Bien qu’il a plusieurs fois précisé que ce n’était pas prêt pour la production, cette nouvelle approche semble prometteuse. Il est probable que nous ne tardions pas à l’essayer pour voir s’il est possible de gagner en performance.

Les conférenciers Bedrock

Anne-Laure durant sa présentation

Cette année, ce ne sont pas moins de 4 présentations qui étaient données par des personnes de chez Bedrock.

Vous pourrez les trouver très bientôt en replay. Les liens seront partagés sur ce blog et les vidéos disponibles sur la chaîne youtube de l’afup.

En attendant, et pour rappel, il s’agissait des conférences suivantes :

Comprenez comment PHP fonctionne, vos applications marcheront mieux - Pascal MARTIN

À l’échelle à laquelle nous travaillons, avec des millions de personnes sur nos plateformes tous les jours, nous découvrons, atteignons, voire dépassons régulièrement des limites de l’approche traditionnelle de PHP et de php-fpm. Au cours de ce talk, Pascal souhaitait partager notre expérience de travail avec PHP, sur des sujets souvent peu connus par les développeurs et développeuses, pour aider le public à créer des applications qui répondent mieux aux attentes de leur public.

Pour exécuter du code, PHP consomme du processeur et de la mémoire. Quand une requête HTTP arrive, un processus php-fpm lui est dédié. Mais ces ressources sont limitées. Et, même dans le Cloud ou en serverless, scaler prend du temps et les coûts s’envolent !

Savez-vous combien de CPU et de RAM votre application réclame ? Et pendant quelle durée ? Si non ou sans comprendre « pourquoi », difficile de développer efficacement et de dimensionner un hébergement pérenne ! Peut-être que ça marche… Sur votre poste. Ou pendant un moment, en gaspillant de l’argent et des ressources. Mais l’expérience prouve que, tôt ou tard, ces questions vous rattraperont.

Cycle de vie de PHP, communication entre nginx et php-fpm, approche shared-nothing, compilation et cache d’opcodes, gestion interne de la mémoire ou même architecture logicielle et debugging… Pour qu’une application réponde aux attentes de son public, nous devons comprendre comment PHP fonctionne !

Sauve un-e dév, écris une doc ! - Sarah HAÏM-LUBCZANSKI

Vous êtes développeur ou développeuse PHP : vous aimez programmer, réfléchir. Vous aimez créer des applications ou des bibliothèques de qualité. Mais pourquoi personne ne les utilise ? Parce que votre documentation n’est pas à la hauteur !

Justement : je suis Technical Writer et mon métier est de vous aider à valoriser votre logiciel auprès de ses utilisateurs et utilisatrices, à travers une bonne doc. Comprenons comment architecturer, concevoir et rédiger votre contenu. Découvrons les outils qui vous procureront une aide précieuse. Enfin, facilitons sa mise à jour pour qu’elle soit pérenne.

Dorénavant, vous saurez identifier les passages obligés et ceux où vous pouvez gagner du temps.

Revue de code : on n’est pas venu pour souffrir ! - Anne-Laure DE BOISSIEU

J’ai rejoint ma nouvelle équipe il y a 6 mois, avec une appréhension. Comment allais-je vivre les revues de code par des collègues que je ne connais pas encore ? Incompréhensions, malentendus : la communication écrite rend cet exercice très délicat. Vous avez été blessé-e par un commentaire ? Etait-il vraiment mal intentionné ? Vous avez blessé quelqu’un sans le vouloir, à cause d’une tournure maladroite ?

Dans mon équipe, j’ai découvert un cadre qui m’a permis de me sentir bien accueillie dès mon arrivée. En adoptant une posture et une convention bien adaptée, on peut largement diminuer le risque de mal se comprendre. Non seulement on communique mieux, mais on améliore la qualité globale du projet.

Vous n’aurez plus aucune raison de souffrir !

BFF, notre best friend forever pour faire plein d’applications frontend ? - Valentin CLARAS

Chez Bedrock nous fournissons des applications de streaming (ASVOD, AVOD) pour plusieurs clients en France et en Europe, chaque application étant déployée sur de nombreux appareils (ordinateur, mobile, set top box, tv connectée, consoles de jeux, tv stick etc …). Il était devenu très difficile de gérer la création et l’évolution de ces nombreuses applications qui requêtaient et formataient chacune elles-mêmes les données dont elles avaient besoin.

Pour cela, en 2018, nous avons décidé de nous lancer dans la création d’un Back For Front afin d’unifier et faciliter les interactions backend et frontend. Cette conférence fut l’occasion de passer en revue :

  • les concepts du Back For Front
  • l’architecture api-gateway et micro service mise en place
  • les gains fonctionnels et la vélocité gagnée
  • les différents mécanismes développés pour absorber les importants pics de charge (résilience, circuit breaker, fallbacks etc.)
  • les impacts techniques et organisationnels d’une telle architecture

Aujourd’hui notre API Gateway BFF opère 92 frontends délivrant 1.5 milliards de vidéos par an pour 45 millions d’utilisateurs actifs (MaU). Vous pourrez trouver un complément d’informations au sujet de notre BFF dans la suite d’articles dédié.

Pour conclure

Nous sommes revenus la tête pleine de nouvelles idées. Ces deux jours de conférences nous ont permis de montrer le savoir faire présent chez Bedrock et nous avons aussi pu nous inspirer des connaissances d’autres personnes. Les formats variés répondaient aux goûts de chacun(e) et ont rendu ce forum unique.

Les nombreuses activités proposées entre chaque conférence permettaient d’échanger entre pairs et comme toujours la communauté a été mise à l’honneur avec la construction d’une fresque LEGO représentant tous les logos des antennes de l’AFUP.

Merci à tou(te)s les conférencier(e)s pour leur travail incroyable et merci l’AFUP pour l’organisation de ce superbe évènement !

La fresque Lego communautaire

Vivement l’année prochaine !