Articles

Conception de microservices pour l'IA

La conception de microservices pour l’IA est une tâche complexe qui nécessite une compréhension approfondie des principes de l’intelligence artificielle et des technologies modernes.

2. Event-driven Architecture

The event-driven architecture pattern is based on the concept of an event-driven system, where events are generated by components and handled by other components. In AI microservices, events are triggered by changes in data or model parameters, and the corresponding services are notified to take appropriate actions. This pattern is useful for real-time applications such as autonomous vehicles, where the system must respond quickly to changing conditions.

3. Containerization

Containerization is a key component of AI microservices, allowing for the deployment of multiple services in a single environment. This pattern enables the efficient packaging and deployment of AI models, making it easier to scale and manage them. Additionally, containers provide an isolated environment for each service, ensuring that any changes made to one service do not affect the others.

Conclusion

The integration of AI into microservices architecture is becoming increasingly important in today’s software landscape. The 10 design patterns discussed in this article are essential for developing efficient, robust, and scalable AI solutions. By leveraging these patterns, developers can create powerful AI applications that are modular, scalable, and flexible.

1. Modèle en tant que service (MaaS)

MaaS considère chaque modèle d’intelligence artificielle (IA) comme un service autonome. En exposant les fonctionnalités d’IA via des API REST ou gRPC, MaaS permet un redimensionnement et une mise à jour indépendants des modèles. Ce modèle est particulièrement avantageux pour gérer plusieurs modèles d’IA, permettant une intégration et une déploiement continus sans perturber l’ensemble du système.

2. Architecture orientée événement

Le modèle d’architecture orientée événement est basé sur le concept d’un système orienté événement, où les événements sont générés par des composants et traités par d’autres composants. Dans les microservices d’IA, les événements sont déclenchés par des changements de données ou de paramètres de modèle, et les services correspondants sont notifiés pour prendre les actions appropriées. Ce modèle est utile pour les applications en temps réel telles que les véhicules autonomes, où le système doit réagir rapidement aux conditions changeantes.

3. Conteneurisation

La conteneurisation est un composant clé des microservices d’IA, permettant le déploiement de plusieurs services dans un seul environnement. Ce modèle permet l’empaquetage et le déploiement efficaces des modèles d’IA, facilitant leur mise à l’échelle et leur gestion. De plus, les conteneurs fournissent un environnement isolé pour chaque service, ce qui garantit que tout changement apporté à un service n’affecte pas les autres.

Conclusion

L’intégration de l’IA dans l’architecture des microservices devient de plus en plus importante dans le paysage logiciel actuel. Les 10 modèles de conception discutés dans cet article sont essentiels pour développer des solutions d’IA efficaces, robustes et évolutives. En exploitant ces modèles, les développeurs peuvent créer des applications d’IA puissantes qui sont modulaires, évolutives et flexibles.

Source de l’article sur DZONE

Démystifier le Compare-and-Swap (CAS) de Java

Le Compare-and-Swap (CAS) de Java est une fonctionnalité puissante et complexe. Dans cet article, nous allons démystifier ce concept et expliquer comment le CAS peut être utilisé efficacement.

Comprendre les bases du CAS

Dans le domaine de la programmation concurrente, la recherche d’une sécurité des threads sans recourir aux verrous traditionnels a entraîné l’adoption généralisée d’algorithmes non bloquants. Un élément essentiel pour permettre ces approches non bloquantes est l’opération Compare-and-Swap (CAS). Cet article approfondi vise à démystifier le fonctionnement interne du mécanisme CAS de Java, à éclairer ses subtilités d’implémentation et à l’évaluer à travers des exemples pratiques.

Comprendre les bases du CAS

Au cœur de la question, CAS est une opération atomique cruciale qui permet la modification d’une variable partagée d’une manière sûre pour les threads. L’opération implique trois paramètres : une emplacement mémoire (adresse), une valeur attendue et une nouvelle valeur. Le processus est le suivant :

  • Le système lit la valeur actuelle à l’adresse spécifiée.
  • Le système compare la valeur lue avec la valeur attendue.
  • Si les deux valeurs correspondent, le système écrit la nouvelle valeur à l’adresse spécifiée.
  • Si les deux valeurs ne correspondent pas, le système ne fait rien.

CAS est une opération atomique, ce qui signifie que lorsqu’elle est en cours d’exécution, aucun autre thread ne peut interagir avec la mémoire partagée. Cela garantit que les données sont toujours cohérentes et que les threads peuvent travailler en parallèle sans provoquer de conflits.

Implémentation de CAS dans Java

La mise en œuvre de CAS dans Java se fait à l’aide de l’instruction Unsafe.compareAndSwapInt(). Cette instruction prend en charge les types primitifs int, long et Object. Elle est implémentée en utilisant des instructions CPU natives qui sont spécifiques à chaque plate-forme et qui peuvent être plus rapides que les solutions logicielles. Cependant, cela limite également sa portabilité.

Pour tester l’efficacité de l’instruction Unsafe.compareAndSwapInt(), nous avons créé un programme de test qui effectue un grand nombre d’opérations CAS sur un tableau partagé par plusieurs threads. Nous avons constaté que le temps d’exécution était très court et que le programme se terminait sans erreur, ce qui indique que l’instruction Unsafe.compareAndSwapInt() fonctionne correctement.

Conclusion

L’opération Compare-and-Swap (CAS) est un outil puissant pour la programmation concurrente et son implémentation dans Java est très efficace. Cependant, il est important de noter que CAS n’est pas une solution miracle et qu’il peut être sujet à des erreurs si mal utilisé. Il est donc important de bien comprendre son fonctionnement et de le tester correctement avant de l’utiliser dans un projet.

Source de l’article sur DZONE

Qu'est-ce qu'une base de données vectorielle SQL ?

Une base de données vectorielle SQL est un système de gestion de données qui permet de stocker, gérer et extraire des informations.

## Les modèles de langue larges (LLMs) ont facilité de nombreuses tâches, comme la création de chatbots, la traduction de langues, la résumé de texte et bien d’autres. Autrefois, nous devions écrire des modèles pour différentes tâches et il y avait toujours le problème de leur performance. Maintenant, nous pouvons facilement effectuer la plupart des tâches grâce aux LLMs. Cependant, les LLMs ont quelques limites lorsqu’ils sont appliqués à des cas d’utilisation du monde réel. Ils manquent d’informations spécifiques ou à jour, ce qui entraîne un phénomène appelé hallucination où le modèle génère des résultats incorrects ou imprévisibles. Les bases de données vectorielles se sont avérées très utiles pour atténuer le problème d’hallucination dans les LLMs en fournissant une base de données de données spécifiques au domaine que les modèles peuvent référencer. Cela réduit les instances de réponses inexactes ou incohérentes.

Coding is an essential part of LLMs. It is used to create the algorithms that are used to train the model. It also helps in creating the architecture of the model, which is the way the model is structured. The code helps the model to understand the data and make predictions. It also helps in optimizing the performance of the model by making sure that it is using the right parameters and hyperparameters.

Les grandes modèles linguistiques (LLMs) ont rendu de nombreuses tâches plus faciles, comme la création de chatbots, la traduction de langue, le résumé de texte et bien d’autres. Dans le passé, nous devions écrire des modèles pour différentes tâches, et il y avait toujours le problème de leur performance. Maintenant, nous pouvons facilement faire la plupart des tâches avec l’aide des LLMs. Cependant, les LLMs ont quelques limitations lorsqu’elles sont appliquées à des cas d’utilisation du monde réel. Elles manquent d’informations spécifiques ou à jour, ce qui conduit à un phénomène appelé hallucination où le modèle génère des résultats incorrects ou imprévisibles.

Les bases de données vectorielles se sont avérées très utiles pour atténuer le problème de l’hallucination dans les LLMs en fournissant une base de données de données spécifiques au domaine que les modèles peuvent référencer. Cela réduit les cas de réponses inexactes ou incohérentes.

Le codage est une partie essentielle des LLMs. Il est utilisé pour créer les algorithmes qui sont utilisés pour entraîner le modèle. Il aide également à créer l’architecture du modèle, qui est la façon dont le modèle est structuré. Le code aide le modèle à comprendre les données et à faire des prédictions. Il aide également à optimiser les performances du modèle en s’assurant qu’il utilise les bons paramètres et hyperparamètres.

Source de l’article sur DZONE

Vues PostgreSQL avec paramètres d'exécution

Les vues PostgreSQL sont une fonctionnalité puissante qui permettent aux utilisateurs de créer des vues avec des paramètres d’exécution spécifiques. Découvrez comment les utiliser!

Il y a de nombreuses situations où les applications sont demandées pour être assez agiles et polyvalentes afin qu’elles puissent exécuter des rapports dynamiques dont les entrées sont fournies à l’exécution.

Cet article vise à présenter une façon d’atteindre cet objectif en utilisant les paramètres de configuration temporaires pris en charge par les bases de données PostgreSQL.

The idea is to create a database table that will contain the parameters that will be used by the application. The application will be responsible for populating this table with the required parameters before running the report. The report query can then use the parameters from this table to filter the data.

Il y a de nombreuses situations où des applications doivent être suffisamment agiles et polyvalentes pour pouvoir exécuter des rapports dynamiques dont les entrées sont fournies à l’exécution.

Cet article vise à présenter une façon d’atteindre cet objectif en utilisant les paramètres de configuration temporaires pris en charge par les bases de données PostgreSQL.

L’idée est de créer une table de base de données qui contiendra les paramètres qui seront utilisés par l’application. L’application sera responsable du remplissage de cette table avec les paramètres nécessaires avant de lancer le rapport. La requête du rapport peut alors utiliser les paramètres de cette table pour filtrer les données.

Les bases de données PostgreSQL offrent un moyen pratique de gérer ces paramètres temporaires. La fonctionnalité de configuration temporaire permet aux développeurs d’utiliser des variables pour stocker des valeurs qui peuvent être modifiées à la volée. Ces variables peuvent être utilisées dans les requêtes SQL pour filtrer les données et fournir des résultats dynamiques.

Les variables de configuration temporaire peuvent être définies à l’aide de la commande SET ou de la fonction spéciale SET_CONFIG. Les variables peuvent être récupérées à l’aide de la fonction GET_CONFIG et peuvent être supprimées à l’aide de la commande RESET ou de la fonction spéciale RESET_CONFIG.

Les développeurs peuvent créer une table de base de données qui contiendra les paramètres nécessaires à l’exécution du rapport. L’application peut alors remplir cette table avec les paramètres nécessaires avant l’exécution du rapport. La requête du rapport peut alors utiliser ces paramètres pour filtrer les données et fournir des résultats dynamiques.

La fonctionnalité de configuration temporaire est très utile pour les applications qui doivent générer des rapports dynamiques dont les entrées sont fournies à l’exécution. Elle permet aux développeurs de créer des rapports flexibles et dynamiques sans avoir à modifier le code source. En outre, elle offre une solution simple et efficace pour gérer les paramètres d’une application.

Source de l’article sur DZONE

With the advent of microservices in Kubernetes, individual developer teams now manage their own data, middleware, and databases. Automated tests and CI/CD pipelines must be revisited to include these new requirements.

This session demonstrates how to use Kustomize and Tekton to provide Kube-Native automated workflows taking into account new parameters such as database operators, StorageClass, and PVC.

Source de l’article sur DZONE

“Business agility, scalability, and flexibility are critical to succeeding in the contemporary digital environment. With cloud-native application development, companies can attain all these success parameters.”

Cloud-based solutions ensured connectivity, accessibility, availability, and business continuity when the COVID-19 crisis forced companies to build remote working models. Gradually, as companies started to realize the benefits of technological advancements, including Microservices, APIs (Application Programming Interfaces), Kubernetes containerization, and server-less architecture, the demand for cloud-native application development mounted simultaneously.

Source de l’article sur DZONE


Copilot, Codex, and AlphaCode: How Good are Computer Programs that Program Computers Now?

Enabled by the rise of transformers in Natural Language Processing (NLP), we’ve seen a flurry of astounding deep learning models for writing code in recent years. Computer programs that can write computer programs, generally known as the program synthesis problem, have been of research interest since at least the late 1960s (pdf) and early 1970s.

In the 2010s and 2020s, program synthesis research has been re-invigorated by the success of attention-based models in other sequence domains, namely the strategy of pre-training massive attention-based neural models (transformers) with millions or billions of parameters on hundreds of gigabytes of text.

Source de l’article sur DZONE

A breakdown of a simple app, from UI design to deployment, that shows off why coding is a magic tool for designers.

Figma, Adobe XD, Photoshop, Wacom Tablet, sketchbook… all tools for interfaces and web designers, yes? Take 2 minutes, and try to remember why you want to become a designer and why you enjoy designing stuff.

Chances are it’s because you like to create; you’re a creative person. Maybe you started with artistic experiences as a child, then turned that creative energy into problem-solving while continuing to express it visually: You became a designer, a creative problem solver.

Today, I’ll try to show you how coding is an underrated tool to express your creative problem-solving mindset by building a real SVG generator from scratch. So let’s get into it!

Step 1: Don’t get an idea; solve a problem

We didn’t go into deep business considerations here, but seeing problems you face and deciding to solve them yourself is a great way to start.

During client work, I needed some SVG waves for illustrations. So I looked for a wave generator: There were a ton of wavy colorful wave generators with parametric inputs but no simple, perfect sine waves generator. I decided to draw it on my math tool GeoGebra and then export it to SVG.

Okay, but not fast. And we like to get our jobs done quickly. But wait… Why don’t we create a perfect sine waves generator? Without equations & boring math software to open, just a curve and an export button. You got it, now let’s design it.

Quick tips: If you are looking for a problem, look for memes in your field. They always show a deep, painful, well-known problem.

Step 2: Design the solution simple as possible

Two main rules: First rule, think about who will use it; the second rule, predict what they expect from how it works. So who? Front-end developers. What are they waiting for? A curve that can be edited with direct feedback and an export button.

Wireframe design

High-Fi design

A quick tip: You can grab the Figma design of the app for more technical tips on the design.

Step 3: Build it for real

As a designer, stopping at step two is perfectly fine. But imagine if you could build what you design! You already know you can create everything you want.

You can see coding as a way to translate your UI that will surely end with a .com application that is usable by everyone. This is why “best languages” don’t matter; coding is just a tool to express your creativity and build stuff for others. And as a designer, a creative person, this might sound…interesting.

UI to functionnal app

UI to functional app

Every web app interface can be translated from UI design to code with HTML/CSS/JS. There is how we can see the role of each of those 3 “languages”:

HTML: I want a button.

CSS: I want my button to look rounded.

JS: I want something to happen when I click on my button.

To build our app, I’ll use Svelte. Svelte is a JavaScript compiler that allows us to use all those three “languages” in one place. So, let’s see how code can translate our UI to functional things.

HTML button code

“Hey web browser, I want a button named “exportButton” and everything in a function named “downloadSVGpath” to be carried out when someone clicks on the button :) Thanks”

CSS style button code

“Hey web browser, I want you to apply these style rules to my basic HTML button: I want a beautiful rounded corner at 16px, a mouse pointer when we hover it, I don’t want any borders, but I want a cool color gradient as a background color. Then, I want the font inside the button to have its color set to #fcfcfc and use the Inter typeface (bold, please). Like my Figma design, I also want to center stuff in the button and add padding. Oh, and add a subtle shadow :) Thanks.”

Drawing SVG curve function

“Hey, web browser, each time our slider moves, I want to run this function: I want you to draw a curve inside a frame that I have defined inside my HTML code. I also want my curve stroke to look rounded at each cap and have a color and width I’ve defined inside variables. You will take the sine function parameters from the stored values of the sliders. Finally, while your x variable hasn’t reached the total width in the x-axis of our frame, you will solve the y-axis point position of the sine equation and draw the curve :) Thanks.”

Quick tips: You can grab the source code files of the app to explore them.

Summary

  • Coding is just a tool that allows us to translate our very visual metaphors into something that everybody can use. How cool is that?!
  • Coding helps us to envision our design goals and forces us to see beyond the visual range: how is my button will be supposed to work? How does it look when hovering? How my popup modal can be designed for mobile devices?
  • Coding allows us to create the weird idea we designed “just for fun” instead of pushing the design case study into our portfolio under the “personal project” tag.
  • Coding shows us how much work is required to achieve what we designed. So we can better understand our design clients’ needs, challenges, and resource management.
  • Coding is flexible. You can replicate the Netflix website pixel perfect with pure HTML/CSS, the Vue Framework, or any other Web framework.

Source

The post Designers Should Code: Build an App From Scratch first appeared on Webdesigner Depot.

Source de l’article sur Webdesignerdepot

Mulesoft DataWeave is a simple powerful tool to transform data inside a flow. Numerous core operators and functions are already present to perform various operations such as capitalize, camelize, upper, and lower.

For string operations, there are no core functions present to resolve a wildcard. I hope the DataWeave(DWL 1.0) function below helps you to perform a requirement where you want to resolve a wildcard using a set of parameters.

Source de l’article sur DZONE