Cette année nous avons pu assister au Forum PHP organisé par l’AFUP (Association Française des Utilisateurs de PHP), et qui avait lieu à Paris les 26 et 27 octobre derniers. Au programme : des conférences passionnantes, des stands, des stickers à gogo et plein de connaissances (sur un de nos langages de programmation de prédilection) à partager. Retour sur cette première journée !
Serverless et PHP – Matthieu NAPOLI
Actuellement, la plupart des applicatifs tournent autour des services : storage, database, cache, auth, search as a service, par exemple.
L’avantage, c’est qu’il y a moins de choses à faire pour que le service tourne en production, et il y a plus de scalabilité. A travers l’exemple d’Amazon Lamba, mais il y en a bien d’autres, Matthieu nous explique qu’il n’y a aucun besoin de serveur web : c’est le job d’Amazon et des différents conteneurs qui vont pouvoir gérer du Symfony, du Doctrine et bien d’autres, bien qu’il y ait des choses à gérer de notre côté en plus. Attention toutefois aux « cold starts » qui peuvent générer 200 ms de temps de réponse sur le premier chargement !
Notre avis : l’idée semble intéressante mais les possibilités sont limitées, si on tient compte que le système de fichiers est en read-only, qu’il n’y a pas de système de loggin, et que pour APCu … on oublie.
Sylius et quelques chocolats plus tard – Jacques BODIN-HULLIN, Maxime HURAN
Sylius est une jeune entreprise crée en 2013. Leur produit-phare est une solution e-commerce qui intègre Symfony et ses versions les plus mises à jour (ils en sont actuellement à la V4), et qui comblerait les failles de Magento : leur BDD est « super-clean ». Pour éviter une surcharge au niveau du MCD par exemple, les paniers et les commandes sont les mêmes entités, mais un statut différent. Sémantic UI gère le design de l’administration, Crowdin les traductions.
Pour les tests, Sylius va très loin : Test Driven Design et Behat pour tout ce qui est comportemental.
Pour se faire la main, ils ont repris le site du grand chocolatier Vincent Guerlais, dont la structure était auparavant un Magento 1.
Notre avis : l’initiative de faire une solution e-commerce avec Symfony, sans les soucis de l’aspect « usine à gaz » de Magento semble vraiment prometteuse, et les deux conférenciers ont bien vanté les mérites de leur outil, peut-être même plus simple à maintenir qu’un Prestashop. A tester.
Maintenir et faire évoluer GraphQL – Aurélien DAVID
GraphQL est par définition un serveur qui exprime des possibilités sous forme de schéma. On y retrouve des champs, des relations, des arguments sur les champs. Mais que se passe-t-il pour nos utilisateurs lors d’un changement bloquant de ce modèle ?
C’est là que la communication avec l’utilisateur est un enjeu vital : chez Github, on déprécie puis on supprime au bout de 3 à 6 mois, ce qui laisse le temps de faire les évolutions des API – ce qui est un bon compromis. Les fonctionnalités dépréciées se retrouvent donc avec une balise @deprecated.
L’idéal n’est pas de communiquer un maximum sur ces changements bloquants, et inciter les utilisateurs à utiliser les nouvelles fonctionnalités. Mais l’idéal est d’éviter les changements bloquants, en désignant bien entre autres son modèle de données, et diviser les API en schémas.
Notre avis : l’idée de la conférence était intéressante mais on ne sait pas vraiment où le conférencier veut en venir. Déjà à qui s’adresse la conférence, à celui qui développe l’API ou celui qui l’utilise ? Dans le premier cas, l’idéal est de faire une API qui évitera les cas bloquants. Mais au final, on sort du range du sujet, on parle ici de GraphQL, et ça peut s’appliquer à toute API au final. On manque de parti pris et de centrage sur le sujet, dommage.
Voyage au centre du cerveau humain ou comment manipuler des données binaires en JS – Thomas JARRAND
Le projet SPINE est un projet médical développé en partenariat avec l’Université de Bordeaux et la Harward Medical School, qui veut impacter le public en leur apprenant à lire des vues en coupe du cerveau et repérer les lésions.
Le défi est donc le suivant : comment lire des IRM du cerveau dans le navigateur, quand on part d’un fichier .nii qui, quand on l’ouvre, ne contient que du binaire ?
Pour répondre à cette question, il faut revenir sur les bases :
Une image = 1 grille de pixels, 1 pixel = 1 couleur, 1 couleur = 3 valeurs RVB
1 valeur = 1 entier de 0 à 255 = entier sur 8 bits. 11111111 = 255
Dès lors, il suffit de jongler avec les versions de base de JS : Décryptage avec ArrayBuffer et les tableaux typés, puis Uint16Array ou Uint8Array pour séparer les bits. Ensuite, décrypter la spec NIFTI-1, qui décrit que le fichier comprend un header sur 352 octets, le body se situant à l’octet suivant.
Nous nous retrouvons donc avec un fichier JSON qui peut alors être exploitable, et supporté partout, sur un navigateur.
Notre avis : même si ce sujet sort des sentiers battus et aborde vite fait l’équivalence en PHP, il fait partie de nos préférés, car il aborde un sujet qui peut être impressionnant, mais qui au final, ne l’est pas tant que ça.
Comment fonctionne la cryptographie ? – Julien PAULI
Un peu d’histoire avec le chiffrement de Vernam (« masque jetable ») utilisé lors de la Seconde Guerre mondiale : c’est la seule manière de chiffrer et de rendre indéchiffrable. Tous les algos de toute la crypto fonctionnent sur ce modèle.
Mais ce principe ne fonctionne QUE :
– si la clé est aléatoire
– si la clé est restée secrète
– si sa taille est au moins égale à ce qu’on veut chiffrer
– si la clé n’est jamais réutilisée
Le principe est basé sur l’addition modulo2 XOR.
Sa démo repose sur ce projet GITHUB : https://github.com/jpauli/PHP-Crypto
Notre avis : dommage que le sujet ne concerne que la crypto des flux, et non la crypto des blocks (une idée pour un futur Forum, peut-être ?). C’est une conférence où il faut bien s’accrocher, car même si le conférencier proposait des maths à petite échelle, il y en avait quand même une certaine dose, ainsi que des concepts qui ne sont pas forcément abordés lors d’une carrière de développeur. Beaucoup d’informations, mais instructives en demeurant.