AFUP AFUP Day 2024 Baromètre Planète PHP PUFA
planete-php.fr Articles Blogs Infos RSS Feed Atom Feed Twitter

Articles

Il faudra bien s'adapter, à la mer

Perrick Penet (onpk.net) 02/04/2024

Nous avons eu de la pluie ce week-end. Beaucoup de pluie... Avec des rigoles qui se creusent le long des chemins forestiers et des bottes qui se laissent désirer. Heureusement c'est la Haute-Marne et la mer est loin.


La mer est plus proche en Angleterre où Alnmouth est en train de perdre son golf historique.
‘Awful’: climate crisis threatens to sink historic north-east golf club, 2024


There are fears that the historic golfing attraction will disappear as a result of coastal erosion, the undefended area closest to the sea near the fifth hole is especially at risk.

“I don’t think in another 100 years we will be playing golf here, I think it’s changed that much in the last 30 years,” said the club secretary Ian Simpson, who has been a member for more than a decade.


Du côte de Oakland, c'est l'océan qui se rapproche, tout comme l'année 2100.
John King on San Francisco, Oakland, and the Challenge of Affordable Housing, 2018


You’ve also got political consensus around the idea that development along the bay needs to be keyed to sea level projections for 2100. Of course this stirs up tensions, because a lot of the land in San Francisco where you can still build large amounts of housing is directly on the bay. So the official city line is these projects would have to be done with an eye toward sea level rise projections of sixty six inches by 2100. This isn’t a number plucked out of thin air: In 2012, the state had the National Research Council conduct a sea level rise study geared specifically to California, and that was the upper range forecast. That was a pretty aggressive estimate for the time. Now, whenever I write about these waterfront projects, people say, “How on earth can the city be doing this? It should be banning all development along the water.”


Heureusement que Rotterdam continue d'innover, avec son parc sur l'estuaire de Keilehaven.
‘Water comes from all four sides’: how Rotterdam’s tidal park protects the city, 2024


The award-winning tidal park, a stone’s throw from his shared offices, is one answer to that question. Once it was a typically grim industrial harbour. Now a beach of sand leads to the water, surrounded by shelves of varying heights and barriers made with tiles Rotterdammers have removed from their gardens, where indigenous plants will be seeded and left to do their thing.


Tandis que les voisins belges plantent des moules du côté de La Panne, dans la mer du Nord.

Voir la suite

Changement de calendrier pour le baromètre des salaires en PHP

AFUP 02/04/2024

Nouvelle temporalité pour le baromètre des salaires en PHP


Depuis 2012, l'enquête de référence sur les conditions de travail et les rémunérations dans notre secteur était lancée entre septembre et décembre, publiant ses résultats en début d'année suivante.

Si cette organisation nous a permis de récupérer de nombreuses informations intéressantes sur l'état de notre secteur, le baromètre arrivait soit très tôt dans l'année, soit un peu trop tard pour une période charnière au sein des entreprises : celle des entretiens annuels, souvent organisés en décembre et janvier. Les résultats de l'enquête, publiés au printemps, ne permettaient donc pas aux managers de pouvoir se baser sur les dernières informations disponibles quant à l'évolution des salaires au moment des évaluations des membres de leur équipe.

C'est pourquoi, à partir de 2024, l'enquête sera désormais lancée au printemps, récupérant ainsi les informations sur les dernières augmentations salariales, et publiera ses résultats en fin d'année, juste à temps pour les évaluations annuelles.

Ainsi, la communauté profitera des informations les plus récentes et les plus précises pour ce rendez-vous important pour la carrière des devs, et le baromètre remplira encore mieux sa mission d'information et de valorisation des emplois dans notre secteur.


L'enquête 2024 sera lancée le 15 avril !


Bloquez la date dans votre agenda, la prochaine enquête du baromètre des salaires en PHP sortira le 15 avril ! Elle sera ouverte pour une durée de 3 mois, se terminant donc au 15 juillet.
Que la communauté ne se laisse pas distraire par le délai plus court entre les éditions 2023 et 2024 : nous espérons cette année encore récolter un maximum d'informations pour affiner nos connaissances sur les conditions de travail et l'évolution des salaires en PHP, et ainsi atteindre le record de participation établi en 2023 avec plus de 1000 répondant·e·s !


Le baromètre des salaires en PHP, une enquête destinée à toutes et tous


À part cette modification dans sa temporalité, le baromètre des salaires en PHP 2024 ne changera pas et reprendra les thématiques habituelles : état des lieux sur les salaires, sur l'usage de PHP, sur les conditions de travail, et la récupération d'informations toujours basée sur votre anonymat le plus strict. Rien ne change dans la recette qui a fait son succès depuis plus de 12 ans maintenant !

Ainsi, tous les devs PHP, juniors ou seniors, en poste ou en freelance, autodidactes ou sorti·e·s de formation seront invités à partager avec nous leur parcours, leur vécu au travail, leur niveau de rémunération, pour qu’ensemble, nous comprenions l’évolution des salaires en PHP et repérions les tendances qui agitent notre milieu professionnel.
Ne manquez pas de répondre à la prochaine enquête du baromètre des salaires en PHP, qui vise encore et toujours à mieux vous servir pour la reconnaissance de vos compétences et l'évolution de votre carrière !

Choisir un algorithme pour générer un hash 32 bits à partir de données sur 24 bits

De geek à directeur technique 23/03/2024

Pour l’un de mes projets, j’ai des entrées en base de données dont la clé primaire est de type MEDIUMINT. En MySQL, c’est le type des entiers sur 24 bits, dont les valeurs peuvent donc aller de 1 à 16 777 215 en non signé.





Dans le cadre de ce projet, il est nécessaire de pouvoir accéder aux données depuis une interface web, donc en fournissant l’identifiant. Mais en même temps, des raisons de sécurité font qu’il n’est pas envisageable de rendre ces identifiants directement visibles par les utilisateurs. Il faut donc trouver un moyen de faire un hash unique de ces identifiants, qui soit injectif (on ne peut pas trouver l’identifiant initial à partir du hash).





Il existe un grand nombre d’algorithmes de hachage, certains qui sont cryptographiquement forts, d’autres qui se concentrent sur la rapidité d’exécution. Une répartition homogène des valeurs dans l’espace d’adressage est un objectif pour tous ces algorithmes.





Dans mon cas, il est important que l’algorithme utilisé ne génère pas de collisions avec des entiers sur 24 bits, pour s’assurer de l’unicité des hash générés. Pour le vérifier, j’ai fait un petit comparatif entre plusieurs méthodes de hachage. J’en ai choisies qui sont disponibles en PHP sur une distribution Ubuntu pas trop vieille : xxHash 32, xxHash 64, xxHash 128, CRC 32, CRC 32B, CRC 32C, Adler 32, FNV-1 32, FNV- 1a 32, FNV-1 64, FNV-1a 64, MD5, SHA-1, SHA-2 256, SHA-512, MurmurHash 3A, MurmurHash 3C, MurmurHash 3F.





Concernant la longueur des hash générés :





  • 32 bits : xxHash 32, CRC 32, CRC 32B, CRC 32C, Adler32, FNV-1 32, FNV-1a 32, Murmur 3A




  • 64 bits : xxHash 64, FNV-1 64, FNV-1a 64




  • 128 bits : xxHash 128, MD5, Murmur 3C, Murmur 3F




  • 160 bits : SHA-1




  • 256 bits : SHA-256




  • 512 bits : SHA-512

Je souhaite stocker des hash sur 32 bits, pour ne pas prendre trop d’espace supplémentaire en base de données. Pour les algorithmes qui dépassent 32 bits, il faut donc tronquer le résultat pour n’en garder que les 32 premiers bits.

Voir la suite

Optimiser vim et le terminal pour le développement

De geek à directeur technique 10/03/2024

Pour développer, vous utilisez sûrement un IDE, qui peut aller de l’éditeur de texte survitaminé comme Sublime Text jusqu’à un environnement complet comme Eclipse, en passant par des outils spécifiques à certaines plateformes, comme Android Studio ou Xcode.





Suivant les projets, les entreprises et les équipes, j’ai été amené à beaucoup utiliser Sublime Text et les outils de JetBrains (PhpStorm et PyCharm).
Durant mes études et ma première année professionnelle, je développais exclusivement avec Emacs, dont j’appréciais la puissance et l’extensibilité. Par la suite, j’ai eu besoin de travailler à distance sur des serveurs via des connexions SSH, et vim s’est alors imposé. Cet outil, qui peut sembler fruste au premier abord, est particulièrement efficace lorsqu’on sait précisément ce qu’on veut faire et qu’on a pris le temps d’en apprendre les nombreux raccourcis clavier. Il a aussi l’avantage d’être présent sur toutes les machines Unix, donc c’est toujours utile de savoir l’utiliser.





Avec vim et un terminal capable de gérer des onglets, on peut se faire un environnement de développement minimaliste mais très productif.





Par exemple, pour travailler sur un projet développé en C typique, on voudra avoir plusieurs onglets, avec dans chaque onglet un vim séparé (« splitté ») en deux parties verticales, l’une avec un fichier .c, et l’autre avec le fichier .h correspondant. On voudra que le titre de l’onglet soit le nom des fichiers ouverts, pour s’y retrouver dans les différents onglets ouverts.





Regardez cette capture d’écran :





Voir la suite

Forcer le redémarrage d'un worker Symfony

Jolicode 05/03/2024

Il arrive de temps en temps que notre worker n’arrive pas à se relever. Aussi fort que vous vous battez, l’erreur a mis PHP ou votre application dans un état instable et il n’y a rien à faire à part l’achever !


Pour pallier ça, vous avez deux options !


Si vous avez la main sur l’exception qui est levée, vous pouvez implémenter StopWorkerExceptionInterface ou lever directement une instance de StopWorker. Symfony laissera alors le worker s'éteindre après le traitement du message.


Cependant, il y a des cas où vous n’avez pas la main sur l’exception. Prenons l’exemple de "RedisException". Si la connexion entre PHP et Redis est instable, les appels vers Redis échoueront. Et même si la connexion revient à la normale, un certain nombre d’appels seront toujours en échec. Il est possible de wrapper tous les appels à Redis. Mais… c’est long et fastidieux.


À la place, nous vous proposons ce listener, qui permettra d’éteindre le worker, si une exception d’un certain type est levée :


namespace App\Messenger\Listener;

use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
use Symfony\Component\Messenger\Event\WorkerRunningEvent;
use Symfony\Component\Messenger\Exception\HandlerFailedException;

final class RestartWorkerListener implements EventSubscriberInterface
{
private const array EXCEPTIONS_TO_RESTART_WORKER = [
// Redis cannot recover from a connection error.
\RedisException::class,
];

private bool $stop = false;

public function __construct(
private readonly LoggerInterface $logger = new NullLogger(),
) {
}

public function onMessageFailed(WorkerMessageFailedEvent $event): void
{
$e = $event->getThrowable();

if ($this->stopIfNeeded($e)) {
return;
}

if ($e instanceof HandlerFailedException) {
foreach ($e->getWrappedExceptions() as $e) {
if ($this->stopIfNeeded($e)) {
return;
}
}
}
}

public function onWorkerRunning(WorkerRunningEvent $event): void
{
if ($this->stop) {
$event->getWorker()->stop();
}
}

public static function getSubscribedEvents(): array
{
return [
WorkerMessageFailedEvent::class => 'onMessageFailed',
WorkerRunningEvent::class => 'onWorkerRunning',
];
}

private function stopIfNeeded(\Throwable $e): bool
{
if ($this->shouldRestartWorker($e)) {
$this->stop = true;

$this->logger->error('Worker will stop due to an error.

Voir la suite

Le baromètre des salaires en PHP 2023 publie ses résultats

AFUP 05/03/2024

Les résultats portent sur l'analyse des réponses de 1042 personnes, sur une période allant du 18 septembre au 18 décembre 2023.


Comment ont évolué les salaires en 2023 ?


Si les salaires ont toujours augmenté en 2023, ils ont surtout suivi le rythme de l'inflation : le salaire médian des devs en CDI a augmenté de 4,7%, suivant de près le taux d’inflation constaté par l’INSEE en 2023.

En étudiant le salaire moyen par genre, on peut constater que, pour les hommes, on passe d'un salaire annuel brut moyen de 43 653€ à 45 518€, soit une augmentation de 4%. Pour les femmes, cette année, nous ne relevons pas d'augmentation notable (0.5%). L'écart annuel entre hommes et femmes interrogées se creuse donc encore davantage, en passant de 3 747€ à 4 805€ en moyenne sur l'année.
Attention cependant, au vu du nombre de femmes ayant répondu, nous ne pouvons nous assurer de la pertinence de ces résultats.


Quotidien de la vie des dev


Si la question des salaires est évidemment essentielle, le baromètre permet aussi de s'intéresser au quotidien dans notre milieu professionnel, se penchant ainsi sur la qualité de vie au travail.


Versions de PHP, recours à Symfony ou Laravel


Comme il l'a déjà été constaté lors des analyses des années précédentes, la communauté suit de près les évolutions de PHP : ainsi, 44% des personnes ayant répondu ont indiqué utiliser la version 8.2 de PHP, sortie en décembre 2022.

Et qu'en est-il de l'évolution de l'utilisation des frameworks ? Si Symfony reste la spécialité des personnes répondantes à 67%, nous constatons cependant la croissance continue de Laravel, qui atteint maintenant 12% des répondants et répondantes.

Au contraire, l'utilisation de Zend Framework/Laminas se réduit drastiquement : seulement 1,7% des répondants et répondantes ont indiqué ce framework en tant que spécialité alors qu'elles étaient 21% à le faire 10 ans auparavant.


Dynamisme du secteur et turn-over


Cette année, une nouvelle question relative au changement de poste a été posée. Ainsi, 36% des personnes ont indiqué chercher à changer de poste en 2023. Quasiment la moitié d'entre elles (48,2%) ont réussi à en changer. Malgré la situation économique actuelle, le secteur semble rester dynamique.

Cette information vise à se confirmer via une autre nouvelle question, relative à l'ancienneté dans l'entreprise. En effet, notre secteur est souvent connu pour avoir un turn-over assez important.

Voir la suite

Comment écrire une règle Rector

Jolicode 21/02/2024

Afin de mettre à jour Symfony sur l’application d'un client, nous avons dû corriger quelques usages de Doctrine au préalable. Il y a quelques années de cela, il était commun d'écrire ce genre de code dans un contrôleur :


$order = $this->getDoctrine()->getRepository('App:Order')->find($id);

La syntaxe <Namespace>:<EntityName> étant dépréciée, il faut mettre à jour en utilisant la syntaxe FQCN.


use App\Entity\Order;

$order = $this->getDoctrine()->getRepository(Order::class)->find($id);

A travers cet article, nous verrons comment créer une règle custom Rector, qui répondra à ce besoin.


Mais quitte à écrire une règle, ne pouvons-nous pas corriger le code ci-dessus pour qu'il ne transgresse pas la loi de Demeter ?


use App\Repository\OrderRepository;

class OrderController
{
public function __construct(
private readonly OrderRepository $orderRepository,
) {
}

public function show(string $id)
{
$order = $this->orderRepository->find($id);
//...
}

}

Mise en place de rector


À JoliCode, nous n'aimons pas ajouter les outils directement aux applications Symfony :


  • Ils peuvent mettre en conflit certaines dépendances ;

  • Ils alourdissent le projet ;

  • Pour des projets avec plusieurs applications (micro ou macro services), il faut installer N fois les outils ;

  • "Ce n'est pas bien rangé".

Nous avons l'habitude de les mettre dans le dossier tools/<outils> :


tools
├─ rector
│ ├─ composer.json
│ └─ composer.lock
├─ phpstan
│ ├─ composer.json
│ └─ composer.lock
└─ php-cs-fixer
├─ composer.json
└─ composer.lock

Dans le dossier tools/rector, nous avons le fichier composer.json suivant :


{
"type": "project",
"license": "proprietary",
"require": {
"rector/rector": "^1.0.1"
},
"require-dev": {
"phpunit/phpunit": "^9.6.16",
"symfony/var-dumper": "^5.4.35"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
}
}
}

Vous noterez que nous avons pris un peu d'avance en ajoutant :



  • symfony/var-dumper pour pouvoir utiliser dump() dans les tests et lors du debug ;


  • phpunit/phpunit pour pouvoir tester nos règles ;

  • l'autoloading de notre "application".

Voir la suite

Bloquez votre 13 mars pour le Super Apéro PHP 2024

AFUP 21/02/2024

Depuis 2017, le Super Apéro PHP est le rendez-vous de mars où les antennes AFUP synchronisent leurs montres et proposent une soirée de talks, d'échanges et de rencontres autour de quelques boissons. L'occasion, où qu'on soit en France, de passer un moment avec la communauté et de lever nos verres à l'unison en l'honneur du langage !


Le Super Apéro PHP 2024 se tiendra le soir du mercredi 13 mars : dès 18h30, dans les antennes AFUP participantes, la communauté PHP est invitée à une soirée de talks, un hackathon ou à un gros apéro PHP : quel que soit le programme de la soirée, l'essentiel est de passer un moment avec les devs de la région, de se rencontrer, d'échanger, d'apprendre, et de célébrer le langage qui permet de nous fédérer.


Retrouvez ce que vous proposent les antennes AFUP participantes sur la page du Super Apéro PHP 2024.
Votre antenne AFUP n'affiche encore aucune info ? Pas de panique, un certain nombre est encore en train de travailler sur le programme de la soirée. Votre antenne AFUP ne semble plus donner signe de vie depuis un petit moment ? Et si c'était là le signal vous invitant à la relancer ? Tenez-nous au courant si l'idée vous intéresse !

Nous sponsorisons les événements AFUP en 2024

Stéphane Hulard (CH Studio) 19/02/2024

Cette année encore, nous accompagnons l'AFUP en sponsorisant les événements.


L’article Nous sponsorisons les événements AFUP en 2024 est apparu en premier sur CH Studio - Incubateur d'innovation, conseil et accompagnement.


Blogs

Infos

Ajouter une source ?

Envoyez un email avec l'URL du site et du flux à planetephpfr AT afup POINT org

Gestion

AFUP