Articles

Migrer de JUnit 4 à JUnit 5 : Guide pas à pas

Migrer de JUnit 4 à JUnit 5 peut être intimidant. Dans ce guide, nous vous expliquerons pas à pas comment le faire facilement.

## JUnit, un des frameworks de test les plus populaires depuis longtemps

The good news is that migrating from JUnit 4 to JUnit 5 is not as difficult as it seems. With the right tools and data, teams can make the switch quickly and easily. To help teams make the transition, we’ve put together a guide that covers the basics of JUnit 5 migration.

JUnit est l’un des frameworks de test les plus populaires depuis longtemps, avec 85% des développeurs Java affirmant l’utiliser dans le sondage de 2021 de JetBrains. De plus, JUnit joue également un rôle crucial dans la pratique du TDD (développement piloté par les tests), une stratégie à la mode pour les équipes de développement du monde entier.

Les développeurs utilisent JUnit pour mettre en œuvre des tests unitaires, ce qui leur permet d’améliorer la qualité du code et d’accélérer la programmation. La popularité de JUnit n’est pas surprenante, car elle contribue beaucoup à une productivité accrue pour livrer un code de qualité. Cela étant dit, certaines équipes continuent d’utiliser JUnit 4 et sont inquiètes des perturbations que pourrait causer la migration vers JUnit 5.

La bonne nouvelle est que migrer de JUnit 4 à JUnit 5 n’est pas aussi difficile qu’il n’y paraît. Avec les bons outils et les bonnes données, les équipes peuvent effectuer le basculement rapidement et facilement. Pour aider les équipes à effectuer la transition, nous avons rédigé un guide qui couvre les bases de la migration vers JUnit 5.

Source de l’article sur DZONE

Apprentissage profond en reconnaissance d'images: Techniques et défis

L’apprentissage profond en reconnaissance d’images est une technologie puissante qui permet de résoudre des problèmes complexes. Découvrez les techniques et les défis associés à cette technologie.

Dans le vaste royaume de l’intelligence artificielle, l’apprentissage profond est devenu un jeu-changer, en particulier dans le domaine de la reconnaissance d’images. La capacité des machines à reconnaître et à catégoriser des images, à la manière du cerveau humain, a ouvert une multitude d’opportunités et de défis. Plongeons-nous dans les techniques que l’apprentissage profond offre pour la reconnaissance d’images et les obstacles qui y sont associés.

Data: For CNNs to work, large amounts of data are required. The more data that is available, the more accurate the results will be. This is because the network needs to be trained on a variety of images, so it can learn to recognize patterns and distinguish between different objects.

Hurdles: The main challenge with CNNs is that they require a lot of data and computing power. This can be expensive and time-consuming, and it can also lead to overfitting if not enough data is available. Additionally, CNNs are not able to generalize well, meaning they are not able to recognize objects that they have not been trained on.

Réseaux de neurones convolutionnels (CNN)

Technique : Les CNN sont le pilier des systèmes de reconnaissance d’images modernes. Ils se composent de plusieurs couches de petites collections de neurones qui traitent des parties de l’image d’entrée, appelées champs réceptifs. Les résultats de ces collections sont ensuite assemblés de manière à se chevaucher, afin d’obtenir une meilleure représentation de l’image d’origine ; c’est une caractéristique distinctive des CNN.

Données : Pour que les CNN fonctionnent, des quantités importantes de données sont nécessaires. Plus il y a de données disponibles, plus les résultats seront précis. C’est parce que le réseau doit être formé sur une variété d’images, afin qu’il puisse apprendre à reconnaître des modèles et à distinguer différents objets.

Hurdles : Le principal défi avec les CNN est qu’ils nécessitent beaucoup de données et de puissance de calcul. Cela peut être coûteux et prendre du temps, et cela peut également entraîner un surajustement si pas assez de données sont disponibles. De plus, les CNN ne sont pas en mesure de généraliser bien, ce qui signifie qu’ils ne sont pas en mesure de reconnaître des objets qu’ils n’ont pas été formés.

Réseaux neuronaux profonds (DNN)

Technique : Les DNN sont une variante des CNN qui peuvent être utilisés pour la reconnaissance d’images. Ils sont constitués de plusieurs couches de neurones qui traitent des parties de l’image d’entrée et produisent des résultats plus précis que les CNN. Les DNN peuvent également être utilisés pour la classification d’images et la segmentation d’images.

Données : Les DNN nécessitent également des grandes quantités de données pour fonctionner correctement. Cependant, ils peuvent être entraînés sur des jeux de données plus petits que les CNN et peuvent donc être plus efficaces lorsqu’il n’y a pas assez de données disponibles.

Hurdles : Le principal défi avec les DNN est qu’ils nécessitent beaucoup de temps et de puissance de calcul pour être entraînés correctement. De plus, ils sont sensibles aux bruit et aux variations dans les données d’entrée, ce qui peut entraîner des résultats imprécis.

Source de l’article sur DZONE

Analyse de log : Elasticsearch vs Apache Doris

L’analyse de log est un domaine très important pour comprendre le comportement des utilisateurs. Découvrons comment Elasticsearch et Apache Doris se comparent dans ce domaine.

Les journaux : une partie majeure des actifs de données d’une entreprise

1. Logs should be collected from all sources in a timely manner. This includes both system logs and application logs.

2. Logs should be normalized, so that they can be easily searched and analyzed.

3. Logs should be stored in a secure and reliable way.

4. Logs should be analyzed in real-time, so that any suspicious activities can be detected quickly.

5. Logs should be used for data analysis, so that trends and patterns can be identified.

Le testing est une partie importante de l’actif de données d’une entreprise et apporte des avantages à celle-ci sur trois aspects : l’observabilité du système, la sécurité informatique et l’analyse des données. Les logs sont le premier recours pour le dépannage, la référence pour améliorer la sécurité du système et le gisement de données à partir duquel vous pouvez extraire des informations qui mènent à la croissance de l’entreprise.

Les logs sont les enregistrements séquentiels des événements dans le système informatique. Si vous réfléchissez à la façon dont les logs sont générés et utilisés, vous saurez à quoi devrait ressembler un système d’analyse des logs idéal :

1. Les logs doivent être collectés de toutes les sources de manière opportune. Cela inclut à la fois les logs système et les logs applicatifs.

2. Les logs doivent être normalisés, de sorte qu’ils puissent être facilement recherchés et analysés.

3. Les logs doivent être stockés de manière sûre et fiable.

4. Les logs doivent être analysés en temps réel, afin que toute activité suspecte puisse être détectée rapidement.

5. Les logs doivent être utilisés pour l’analyse des données, afin que les tendances et les modèles puissent être identifiés.

Le testing est un outil essentiel pour garantir que les logs sont collectés, normalisés, stockés et analysés correctement. En effet, le testing peut vous aider à identifier les problèmes qui peuvent affecter la qualité des données et à vérifier que les processus sont correctement mis en œuvre. Le testing peut également vous aider à déterminer si votre système est capable de réagir rapidement aux événements critiques et de détecter les activités suspectes.

Le testing peut également être utilisé pour vérifier que les données collectées sont cohérentes et complètes, afin que les analyses puissent être effectuées de manière fiable et précise. Enfin, le testing peut être utilisé pour vérifier que les données sont stockées de manière sûre et fiable, ce qui est essentiel pour une analyse des données fiable.

En conclusion, le testing est un outil essentiel pour garantir que les logs sont collectés, normalisés, stockés et analysés correctement. Il permet également de vérifier que les données collectées sont cohérentes et complètes, afin que les analyses puissent être effectuées de manière fiable et précise. Enfin, le testing peut être utilisé pour vérifier que les donné

Source de l’article sur DZONE

Révolutionner l'IA: Dévoiler le pouvoir de WatsonX

Avec WatsonX, nous pouvons révolutionner l’IA et découvrir de nouvelles possibilités pour le futur.

L’origine de WatsonX

At its core, WatsonX is designed to be a powerful tool for data scientists and developers. It’s capable of ingesting massive amounts of data, analyzing it in real-time, and producing actionable insights that can be used to make better decisions. In addition, WatsonX is designed to be highly scalable, allowing it to handle large volumes of data with ease.

Les origines de WatsonX

Dans le paysage en constante évolution de l’intelligence artificielle, un nouveau joueur est apparu pour redéfinir les limites de ce qui est possible. Entrez WatsonX, une technologie révolutionnaire qui promet de révolutionner le paysage de l’IA. Dans ce blog, nous plongerons profondément dans les intrications de WatsonX, explorerons des exemples captivants et dévoilerons les cas d’utilisation potentiels qui peuvent vraiment le rendre viral.

Derivé de l’iconique Watson AI, qui a célèbrement battu des champions humains dans Jeopardy !, WatsonX représente le point culminant de plusieurs années de recherche, de développement et de progrès. Né de la fusion d’apprentissage machine avancé, de traitement du langage naturel et d’informatique quantique, WatsonX n’est pas seulement une évolution; c’est un bond quantique en avant dans la capacité de l’IA.

Au cœur de WatsonX se trouve un outil puissant conçu pour les scientifiques des données et les développeurs. Il est capable d’ingérer des masses de données, de les analyser en temps réel et de produire des informations exploitables qui peuvent être utilisées pour prendre de meilleures décisions. De plus, WatsonX est conçu pour être hautement extensible, ce qui lui permet de gérer facilement de grandes volumes de données.

Source de l’article sur DZONE

Améliorer les performances d'une application : 8 astuces.

Vous souhaitez améliorer les performances de votre application ? Découvrez ici 8 astuces pour y parvenir !

Performance d’application est critique pour fournir une expérience utilisateur rapide et réactive. Les performances lentes ou la latence élevée peuvent conduire à des utilisateurs frustrés et à des pertes de revenus pour l’organisation.

Database performance is a key factor in application performance. Databases are responsible for storing and retrieving data, and if they are not optimized, they can become a bottleneck. Database performance can be improved by optimizing queries, indexing data, and using caching. Additionally, databases should be monitored to ensure that they are running efficiently and that any potential problems are identified and addressed quickly. By monitoring database performance, organizations can ensure that their applications are running smoothly and that their users are getting the best possible experience.

La performance des applications est essentielle pour offrir une expérience utilisateur rapide et réactive. Une performance lente ou une latence élevée peut entraîner des utilisateurs frustrés et des pertes de revenus pour l’organisation.

À un niveau élevé, la latence de l’application fait référence au délai entre la demande de l’utilisateur et la réponse de l’application. La latence peut non seulement affecter l’expérience utilisateur globale et diminuer l’engagement, mais elle peut également être un problème coûteux et compliqué. La performance de l’application a également un impact sur l’efficacité globale. Les applications lentes peuvent ralentir les processus commerciaux, entraînant une productivité réduite et des coûts accrus. Tous ces facteurs peuvent réduire la capacité d’une entreprise à se mesurer sur le marché. Dans le monde d’aujourd’hui, les clients s’attendent à des applications rapides et réactives. Les entreprises qui ne sont pas en mesure de satisfaire à cette exigence risquent de perdre des clients à des concurrents qui offrent une meilleure expérience utilisateur.

La performance de la base de données est un facteur clé de la performance de l’application. Les bases de données sont responsables du stockage et de la récupération des données, et si elles ne sont pas optimisées, elles peuvent devenir un goulot d’étranglement. La performance de la base de données peut être améliorée en optimisant les requêtes, en indexant les données et en utilisant le cache. De plus, les bases de données doivent être surveillées pour s’assurer qu’elles fonctionnent efficacement et que tout problème potentiel est identifié et traité rapidement. En surveillant la performance des bases de données, les organisations peuvent s’assurer que leurs applications fonctionnent correctement et que leurs utilisateurs bénéficient de la meilleure expérience possible.

Source de l’article sur DZONE

Créer des définitions de ressources clients sur Kubernetes

Créer des définitions de ressources clients sur Kubernetes est une tâche importante pour garantir le bon fonctionnement de votre application. Découvrez comment le faire facilement!

## Kubernetes Custom Resource Definitions (CRDs) : Un tutoriel

First, you’ll need to define the custom resource. This is done using the Kubernetes API, which is a declarative way of defining objects. You’ll need to provide the name of the resource, its fields, and any validation rules you want to apply. Once you’ve defined the resource, you can create instances of it using the Kubernetes API.

Next, you’ll need to create a controller for the CRD. This is a piece of code that will watch for changes to the custom resource and take action accordingly. For example, if you create a new instance of the resource, the controller could create a new pod or service based on the data in the resource. The controller can also be used to update existing resources when their data changes.

Finally, you’ll need to deploy the controller. This is done using the Kubernetes API, and it will allow the controller to start watching for changes to the custom resource. Once deployed, the controller will be able to take action based on changes to the custom resource.

Kubernetes est une plateforme open-source populaire utilisée pour automatiser le déploiement, le dimensionnement et la gestion des applications conteneurisées. Il fournit une puissante API pour gérer les ressources, mais parfois ses ressources intégrées ne sont pas suffisantes pour votre cas d’utilisation. C’est là que les définitions de ressources personnalisées (CRD) de Kubernetes entrent en jeu. Les CRD vous permettent de définir vos propres ressources personnalisées, qui peuvent être gérées de la même manière que les ressources intégrées telles que les pods et les services.

Dans ce tutoriel, nous allons passer en revue les étapes pour mettre en œuvre une CRD Kubernetes.

Tout d’abord, vous devrez définir la ressource personnalisée. Cela se fait à l’aide de l’API Kubernetes, qui est une manière déclarative de définir des objets. Vous devrez fournir le nom de la ressource, ses champs et toutes les règles de validation que vous souhaitez appliquer. Une fois la ressource définie, vous pouvez créer des instances de celle-ci à l’aide de l’API Kubernetes.

Ensuite, vous devrez créer un contrôleur pour la CRD. Il s’agit d’un morceau de code qui surveillera les modifications apportées à la ressource personnalisée et agira en conséquence. Par exemple, si vous créez une nouvelle instance de la ressource, le contrôleur peut créer un nouveau pod ou un nouveau service en fonction des données de la ressource. Le contrôleur peut également être utilisé pour mettre à jour les ressources existantes lorsque leurs données changent.

Enfin, vous devrez déployer le contrôleur. Cela se fait à l’aide de l’API Kubernetes et permettra au contrôleur de commencer à surveiller les modifications apportées à la ressource personnalisée. Une fois déployé, le contrôleur sera en mesure d’agir en fonction des modifications apportées à la ressource personnalisée.

Les CRD Kubernetes offrent une grande flexibilité et permettent aux développeurs d’utiliser des données personnalisées pour gérer leurs applications sur Kubernetes. Les CRD peuvent être utilisés pour créer des objets personnalisés tels que des bases de données, des services réseau ou des services d’analyse. Les contrôleurs associés

Source de l’article sur DZONE

API en mouvement : maintenez vos APIs à jour

Les API sont en mouvement constant et il est essentiel de les maintenir à jour pour assurer le bon fonctionnement de votre application. Découvrez comment!

Dans le monde en constante évolution de la technologie, les applications logicielles sont devenues le pilier de la société moderne.

L’importance des APIs dans l’architecture logicielle moderne

Dans le monde en constante évolution de la technologie, les applications logicielles sont devenues le pilier de la société moderne. Des applications mobiles qui simplifient nos tâches quotidiennes aux plates-formes web qui nous connectent à l’échelle mondiale, ces applications dépendent d’une communication et d’un échange de données sans faille. C’est là que les interfaces de programmation d’application (API) entrent en jeu. Les APIs sont devenues le pilier du développement logiciel moderne, révolutionnant la façon dont les applications sont conçues, construites et intégrées. Leur importance provient de leur capacité à faciliter la communication et l’échange de données entre diverses applications et services. Au cœur de l’API, ou interface de programmation d’application, se trouve un ensemble de règles, de protocoles et d’outils qui permettent à différentes applications logicielles de communiquer et d’interagir entre elles. Les APIs agissent comme des ponts, permettant à une application d’accéder et d’utiliser les services et fonctionnalités fournis par une autre application ou plate-forme. Cette interopérabilité permet aux développeurs de combiner les forces de diverses applications et de créer des solutions intégrées puissantes.

Mise à jour et évolution des APIs au fil du temps

Les APIs sont essentielles pour maintenir l’architecture logicielle à jour et en bon état de fonctionnement. Les mises à jour et les modifications apportées aux APIs sont nécessaires pour s’assurer que les applications peuvent continuer à communiquer et à échanger des données sans problème. Les mises à jour peuvent être apportées pour corriger des bogues, ajouter des fonctionnalités supplémentaires ou améliorer la sécurité. De plus, les mises à jour peuvent être apportées pour s’adapter aux changements technologiques et aux nouvelles exigences des utilisateurs. Les mises à jour peuvent également être apportées pour s’adapter aux nouvelles normes et technologies, ce qui permet aux applications de rester compétitives. Les mises à jour des APIs sont donc essentielles pour maintenir l’architecture logicielle à jour et en bon état de fonctionnement.

Conclusion

Les APIs sont essentielles pour faciliter la communication et l’échange de données entre diverses applications et services. Elles sont également essentielles pour maintenir l’architecture logicielle à jour et en bon état de fonctionnement. Les mises à jour et les modifications apportées aux APIs sont nécessaires pour s’assurer que les applications peuvent continuer à communiquer et à échanger des données sans problème. Les mises à jour peuvent être apportées pour corriger des bogues, ajouter des fonctionnalités supplémentaires ou améliorer la sécurité. De plus, les mises à jour peuvent être apportées pour s’adapter aux changements technologiques et aux nouvelles exigences des utilisateurs. Les mises à jour des APIs sont donc essentielles pour maintenir l’architecture logicielle à jour et en bon état de fonctionnement.

L’importance des APIs dans l’architecture

Source de l’article sur DZONE

Expliquer l'IIoT : exemples, technologies, avantages et défis.

L’IIoT (Internet des Objets Industriel) est un domaine en pleine expansion qui combine les technologies de l’information et de la communication pour améliorer l’efficacité et la productivité des processus industriels. Découvrez les exemples, technologies, avantages et défis de l’IIoT.

Qu’est-ce que l’Internet industriel des objets (IIoT) ?

IIoT technology is being used in a variety of industrial settings, from manufacturing to energy production. It’s enabling the development of smart factories, where machines are connected to the internet and can communicate with each other. This allows for greater automation, improved efficiency, and increased productivity. Additionally, IIoT technology is being used in predictive maintenance, where sensors monitor machinery and alert operators when maintenance is needed. This reduces downtime and improves safety.

Qu’est-ce que l’Internet Industriel des Objets (IIoT) ?

L’Internet Industriel des Objets (IIoT), ou IIoT, est un terme utilisé pour décrire l’application de la technologie de l’Internet des Objets (IoT) dans des environnements industriels. Il englobe l’intégration de capteurs avancés, de logiciels et de machines avec une connectivité Internet pour collecter, analyser et agir sur d’immenses quantités de données. Cette approche basée sur les données permet de prendre des décisions en temps réel et d’utiliser l’analyse prédictive, ce qui conduit à une efficacité opérationnelle améliorée, des coûts réduits et une qualité de produit améliorée.

L’IIoT est un composant clé de l’Industrie 4.0, la quatrième révolution industrielle, caractérisée par la fusion des technologies numériques, physiques et biologiques. Il révolutionne les industries traditionnelles, facilitant la transformation des processus manuels et intensifs en main-d’œuvre en opérations automatisées et basées sur les données.

La technologie IIoT est utilisée dans une variété de contextes industriels, allant de la fabrication à la production d’énergie. Elle permet le développement de usines intelligentes, où les machines sont connectées à Internet et peuvent communiquer entre elles. Cela permet une plus grande automatisation, une efficacité accrue et une productivité accrue. De plus, la technologie IIoT est utilisée dans la maintenance prédictive, où des capteurs surveillent les machines et alertent les opérateurs lorsqu’une maintenance est nécessaire. Cela réduit les temps d’arrêt et améliore la sécurité.

Source de l’article sur DZONE

Guide simple à l'ingénierie inverse de l'algorithme Twitter avec LangChain, Activeloop et DeepInfra

Découvrez comment utiliser LangChain, Activeloop et DeepInfra pour effectuer une ingénierie inverse de l’algorithme Twitter facilement et rapidement !

## Imaginez écrire un logiciel qui puisse comprendre, assister et même générer du code, comme le ferait un développeur expérimenté.

LangChain is a data-driven platform that enables developers to create, modify, and debug code faster and more efficiently. It works by analyzing code and extracting meaningful information from it. This data is then used to build models that can understand and generate code. The models are then used to generate code that is tailored to the user’s needs.

LangChain est une plateforme basée sur les données qui permet aux développeurs de créer, modifier et déboguer le code plus rapidement et plus efficacement. Il fonctionne en analysant le code et en extrayant des informations significatives de celui-ci. Ces données sont ensuite utilisées pour créer des modèles qui peuvent comprendre et générer du code. Les modèles sont ensuite utilisés pour générer du code adapté aux besoins de l’utilisateur.

LangChain nous permet d’atteindre un nouveau niveau de compréhension et de génération de code grâce à des modèles avancés tels que VectorStores, Conversational RetrieverChain et LLMs. Avec LangChain, il est possible d’imaginer un logiciel capable de comprendre, d’assister et même de générer du code, comme un développeur expérimenté le ferait. Grâce à cette technologie, les développeurs peuvent gagner du temps et de l’argent en réduisant le temps nécessaire pour créer, modifier et déboguer le code.

LangChain est un outil très puissant qui peut être utilisé par les développeurs pour améliorer leurs compétences et leur productivité. Il permet aux développeurs de comprendre le code plus rapidement et de le modifier plus facilement. En outre, il peut être utilisé pour générer du code à partir de données existantes ou pour créer des modèles qui peuvent être utilisés pour générer du code à partir de données nouvelles ou existantes. Enfin, LangChain peut être utilisé pour trouver des erreurs dans le code et les corriger rapidement.

Source de l’article sur DZONE

Évolution de Kubernetes: transition vers SQL distribué depuis etcd

Kubernetes a fait un grand pas en avant avec la transition vers un système de gestion de base de données distribué SQL, remplaçant ainsi le système etcd.

J’ai récemment découvert un article expliquant comment remplacer etcd par PostgreSQL. Cette transition s’est faite sans heurts avec le projet Kine, qui sert de point d’extrémité etcd externe, traduisant les demandes etcd Kubernetes en requêtes SQL pour une base de données relationnelle sous-jacente. 

I started by running a few tests to compare the performance of etcd and YugabyteDB. The results were impressive: YugabyteDB was able to handle more than twice the number of requests per second as etcd, with a latency that was consistently lower. In addition, the data stored in YugabyteDB was more reliable and easier to access than the data stored in etcd.

Récemment, je suis tombé sur un article expliquant comment remplacer etcd par PostgreSQL. Cette transition s’est faite sans heurts avec le projet Kine, qui sert de point d’extrémité etcd externe, traduisant les demandes Kubernetes etcd en requêtes SQL pour une base de données relationnelle sous-jacente. 

Inspiré par cette approche, j’ai décidé d’explorer davantage le potentiel de Kine en passant d’etcd à YugabyteDB, une base de données SQL distribuée basée sur PostgreSQL.

J’ai commencé par effectuer quelques tests pour comparer les performances d’etcd et de YugabyteDB. Les résultats étaient impressionnants : YugabyteDB était capable de gérer plus du double du nombre de requêtes par seconde que etcd, avec une latence qui était constamment plus faible. De plus, les données stockées dans YugabyteDB étaient plus fiables et plus faciles à accéder que les données stockées dans etcd.

Pour vérifier ces résultats, j’ai décidé de migrer une application Kubernetes existante de etcd vers YugabyteDB. J’ai commencé par créer une instance YugabyteDB et configurer le projet Kine pour qu’il se connecte à cette instance. Ensuite, j’ai modifié l’application pour qu’elle utilise Kine comme point d’extrémité etcd externe. Une fois cela fait, j’ai pu tester l’application et constater que tout fonctionnait parfaitement.

Ensuite, j’ai décidé de comparer la taille des données stockées dans les deux bases de données. Les résultats ont montré que la taille des données stockées dans YugabyteDB était considérablement plus petite que celle des données stockées dans etcd. Cela est dû au fait que YugabyteDB est capable de compresser les données et de les stocker plus efficacement que etcd.

Enfin, j’ai analysé la consommation des ressources des deux bases de données. Les résultats ont montré que YugabyteDB était plus efficace que etcd en termes de consommation des ressources. En particulier, YugabyteDB consommait moins de mémoire et moins de CPU que etcd. Cela est dû au fait que YugabyteDB est conçu pour être plus efficace que etcd en matière de gestion des données.

En conclusion, après avoir effectué des tests et des analyses approfondies, j’ai constaté que YugabyteDB est un excellent remplacement pour etcd. Il offre une meilleure performance et une meilleure gestion des données, tout en consommant moins de ressources. En outre, il est plus fiable et plus facile à utiliser que etcd. Enfin,

Source de l’article sur DZONE