Archives de catégorie : Blog

Projet Win32Service

Pour ceux qui ne le connaissent pas encore, ce projet permet l’exécution de script PHP en tant que service Windows. C’est un équivalent à systemd sous Linux.

Fin 2018, le projet a connu quelques changements, comme le déplacement du dépôt vers une entité indépendante du sponsor, l’ajout d’un nouveau site web et la sortie d’une librairie facilitant l’utilisation de l’extension.

La version 0.4.0 de l’extension PHP est en cours de développement, de nouvelles fonctionnalités sont déjà développées, mais il est toujours possible d’en proposer de nouvelles. La date de sortie n’est pas encore définie.

The new Win32Service library

Today, I want to write a new blog post for a new library. This library is written in PHP and need the Win32Service extension for PHP.

Why this library ? The goal is eased to use the Win32Service extension of separate clearly the two most important part provided by this extension.

The first part is the service management. This can be split in two subparts (register and unregister a service for first and start, pause, continue and stop the service in the second). There’s scripts need an elevated right on the server. Automatically, the security approach allows this usage only in the command line (cli SAPI).

The second part is the service running. This part assumes only the PHP script executed when the service state is « running ».

When you read the official documentation available in the PHP.net website, this different usage is not clearly defined. Many other points are in favor of the library. The full-oriented object is available with the library. An abstract class is provided for the service running. The access denied or service not found errors are converted in special exception and other errors in generic exception provided by the library.

In the execution case, the abstract class provides many hooks to execute some code before the changing of service state. The typical use case is opening a database connexion in start or continue, close-it in pause or stop…

Now with this library, you can write a Windows service easily.
The library is available here with examples. How did you manage your PHP service on Windows Server ?

Retrospective de l’année 2018

L’année 2018 a été riche en évènements autant dans l’actualité que dans mes domaines préférés tels que la sécurité de l’information et mon langage de programmation préféré ; qui est PHP.

Ainsi la documentation française de PHP a connu une nette amélioration dont toute la communauté francophone profite !

Merci aux nombreux contributeurs traducteurs et relecteurs qui soumettent chaque semaine de nouvelles traductions et corrections.

Je vous invite à nous rejoindre pour mettre à jour la traduction, corriger les fautes pour améliorer en permanence la qualité de la documentation française.

Pour cela, un petit tutoriel vidéo avait été réalisé :

Pour ce qui est de la sécurité de l’information, la mise en application du Réglement Général pour la Protection des Données (RGPD) fût l’évènement majeur de cette année et pour certain une prise de conscience sur les traitements réalisés par les entreprises.

Je me rends compte tous les jours qu’en question de sécurité de l’information, personne n’est épargné. Même la petite association qui dispose d’un site internet peut être victime des pirates.

La rétrospective réalisée par Zataz doit servir à prendre conscience des dangers d’internet et à se poser les bonnes questions. Ai-je réellement besoin d’étaler ma vie sur les réseaux sociaux ? Et par conséquent la vie des personnes qui m’entoure ?

Je vous souhaite en cette nouvelle année une bonne protection de vos données personnelles et une prise de conscience sur le contrôle de vos données.

Tous mes meilleurs voeux pour 2019 !

La sécurité informatique n’est pas pour vous ?

« De toute façon, mes données n’intéressent personne »… FAUX ! Vos données intéressent toujours quelqu’un pour soutirer de l’argent !

D’autre part, le titre de cet article est faux, voici le titre corrigé :
« La sécurité informatique de vos informations personnelles n’est pas pour vous ? »

Voici deux vidéos qui pourraient bien vous faire changer d’avis :

Com’Infinie – Et si un voyant vous révélait les dangers d’Internet
Campagne Hack Academy – JENNY

Comment se prémunir ? En adoptant une hygiène informatique pour se prémunir des risques majeurs.

Pour tout le monde, ce guide est utile à la maison comme au travail :

https://www.ssi.gouv.fr/particulier/guide/guide-des-bonnes-pratiques-de-linformatique/

Pour ceux qui voyagent (même occasionnellement) :

https://www.ssi.gouv.fr/particulier/guide/partir-en-mission-avec-son-telephone-sa-tablette-ou-son-ordinateur-portable/

Vous souhaitez aller plus loin ? Formez-vous ! Je vous recommande cette formation en ligne gratuite ne nécessitant aucune connaissance technique (disponible jusqu’en avril 2019).

Et vous ? Faites-vous réellement attention à ce genre de chose pour vous, vos enfants, vos ainés ?

La documentation !

Lors de nombreuse conférence et très souvent au travail, un point important revient tout le temps :

Les tests et la documentation !

Je m’attarde ici sur la seconde partie. En effet, nous passons beaucoup de temps à coder… Mais sans une bonne documentation, notre code n’est pas facilement compréhensible par les autres. Pour une bibliothèque, son utilisation sera faible si la documentation est faible. Pour une application, le code devient legacy très rapidement et personne ne voudra plus le modifier.

Mais que dire de la documentation du langage de programmation utilisé ? Je mets le langage dans la catégorie des bibliothèques. Ceux qui me connaissent un peu sauront que je parle de PHP et plus particulièrement de la traduction de la documentation en français.

Il y a quelque temps, j’ai posté un twit pour inviter les bonnes volontés à venir traduire la documentation.

Après 31 Re-Twit (merci à eux) et 12 j’aime, il y a eu 2 contributions. Le résultat n’est pas si mal !

Au fil de la pérégrination de mon twit, Antoile Bellion a posé une question à laquelle je m’attendais.

La réponse fut pertinente de la part de l’un des traducteurs de la documentation PHP :

Pour ma part, je me suis attaché à réaliser un peu de ménage dans les fichiers à mettre à jour. En effet, certains fichiers à mettre à jour ne comportaient aucune (ou très peux de) modification. Il en reste encore beaucoup, mais le compteur est aujourd’hui à 913.

Pour les nouveaux fichiers à traduire, il reste 1258 fichiers en attente d’une première traduction.

Et vous, pourrez-vous nous aider à rattraper la documentation française de PHP ?

Le guide du traducteur (Anglais) et l’éditeur en ligne.

Bonne année 2016

En ce premier jour de l’année, je viens vous souhaiter une bonne et heureuse année 2016 remplie de joie en famille, entre amis, mais également professionnelle.

L’année 2015 fût chargée d’évènements dans le monde PHP ! Espérons que ces nouvelles versions améliorent notre quotidien et qu’elles nous permettent de progresser vers un code toujours meilleur !

Des bases de DDD, CQRS et EventSourcing en Français

Voici une vidéo d’une réunion du MUG de Lyon (octobre 2015) qui vous présente en 1h25.

DDD : « Domain Driven Design » soit en français « Conception Guidé par le Domaine ».

CQRS : « Command Query Responsibility Segregation » en français « Ségrégation des Responsabilité entre Commande et Requête ».

Event Sourcing : Principe qui place l’évènement qui vient de se produire au coeur du système.

Quelques liens :

Bonne vidéo et n’hésitez pas à réagir dans les commentaires.

PhpCache: NullDriver why ?

If you want to avoid this code in your class using the cache, the NullDriver and a possible answer.

Step 1 : In constructor, check if you have a real cache système

If cache objet is null, instantiate the null driver in a new PhpCache.

Step 2 : remove all if ($this->cache) in your class method and use cache normally.

 

[Updated] DDD with Broadway and the Design Pattern State

Note : This article is the translate of this article. I use Google Translate for help me to write in english. Please, if you read wrong phrase send me the correct by one comment.

In a refactoring sprint, I found that my main aggregate class took much overweight.

I had exceeded 750 lines of code with, in many actions, a « switch » or a dozen « IF ». This did not please me very much because, if a change was required with this level, the amendment would be difficult.

Continuer la lecture de [Updated] DDD with Broadway and the Design Pattern State

[Updated] Symfony, Broadway and the replay event

Note : This article is the translate of this article. I use Google Translate for help me to write in english. Please, if you read wrong phrase send me the correct by one comment.

On of the main advantages of EventSourcing is the replay event for build a new view database or sync the an old view.

Do have you ever wondered how to go about not send emails on events issued by the aggregates ?

In my case, the dilemma is rather important because many things are based on events. If they are replayed, all treatments are rerun.

In my project, I use Broadway (by QandidateLabs) for implementing the CQRS/ES.

For use the default event bus, you must tag any services with broadway.domain.event_listener and extend this class Broadway\Processor\Processor.
All services will be injected into the event bus by a compiler pass. The latter takes 3 arguments: the event bus service identifier, the tag used for get all services to inject her, and the interface name that services must implement to be injected.

You can reuse the code to add a new event bus without write more code.

3 steps for separate into new bus all services necessary for refresh view.

1) Add a new event bus

2) Add new tag for all services to update the view. By exemple mon_bundle.domain.event_listener.
3) Run new compiler pass with new parameters

This is a SOLID code.

Your event listener must also be. One listener one responsibility.

Finally, during the retransmission of events, simply send them on the bus dedicated to replay events to perform the update only the view.
That’s done! You can retransmit all the events to update the view without having to change the configuration of the production application to prevent the resend of the emails.

Get the source code on github.

Now you can share your experiences in the comments.