Category: Développement

Pièges de la comparaison en virgule flottante : ce que vous devez savoir

2025-05-15
Pièges de la comparaison en virgule flottante : ce que vous devez savoir

Cet article explore les complexités de la comparaison des nombres à virgule flottante. L’auteur souligne la fiabilité douteuse des vérifications d’égalité simples en raison des limitations inhérentes de précision et des erreurs d’arrondi cumulées. Deux méthodes de comparaison sont détaillées : l’erreur relative (epsilon) et l’ULP (Unités dans le dernier emplacement), ainsi que leurs forces et faiblesses. L’article met l’accent sur l’échec des comparaisons d’erreur relative près de zéro, proposant une solution combinant l’erreur absolue. Un exemple convaincant utilisant `sin(π)` illustre l’annulation catastrophique et comment les erreurs de représentation en virgule flottante peuvent améliorer la précision de π.

Développement précision

Piège d'initialisation en C++ : les subtilités de `=default`

2025-05-15

Cet article explore le monde déroutant de l'initialisation en C++. Un exemple simple révèle l'impact significatif de l'emplacement de `=default` sur l'initialisation des membres d'une structure : les membres de structure avec `=default` dans la déclaration sont initialisés à zéro (valeur 0), tandis que ceux avec `=default` dans la définition ont des valeurs indéterminées, conduisant à un comportement indéfini s'ils sont lus. L'article explique en détail les différences entre l'initialisation par défaut, l'initialisation par valeur et l'initialisation à zéro, et souligne l'importance d'initialiser explicitement les variables pour éviter les bogues potentiels et les risques de sécurité.

Google améliore la productivité des développeurs grâce à la complétion de code sémantique hybride ML

2025-05-15
Google améliore la productivité des développeurs grâce à la complétion de code sémantique hybride ML

Des chercheurs de Google ont développé un nouveau système de complétion de code sémantique hybride basé sur Transformer, combinant l'apprentissage automatique (ML) et des moteurs sémantiques basés sur des règles (SE) pour améliorer significativement la productivité des développeurs. Le système intègre ML et SE de trois manières : 1) reclasser les suggestions de jetons uniques de SE à l'aide de ML ; 2) appliquer des complétions de lignes uniques et multiples à l'aide de ML et vérifier l'exactitude avec SE ; et 3) utiliser la continuation de lignes uniques et multiples par ML de suggestions sémantiques de jetons uniques. Une étude de trois mois menée auprès de plus de 10 000 développeurs internes de Google a montré une réduction de 6 % du temps d'itération de codage avec la complétion ML d'une seule ligne. Actuellement, plus de 3 % du nouveau code est généré en acceptant les suggestions de complétion ML. Le système prend en charge huit langages de programmation et intègre des vérifications sémantiques pour garantir l'exactitude du code, augmentant ainsi considérablement la confiance et l'efficacité des développeurs.

Développement

Vérification d'année bissextile en trois instructions

2025-05-15

Cet article présente un algorithme étonnamment efficace pour déterminer si une année (0 ≤ y ≤ 102499) est bissextile en utilisant seulement environ trois instructions CPU. Il utilise la manipulation de bits et des nombres magiques soigneusement choisis pour transformer les règles complexes des années bissextiles en une simple opération arithmétique et une comparaison. L'auteur explique méticuleusement la dérivation de l'algorithme, en le comparant aux méthodes traditionnelles et en soulignant son avantage de vitesse significatif. Bien qu'il soit légèrement plus lent dans les cas extrêmes, son efficacité dans les applications pratiques est impressionnante.

Développement année bissextile

Les LLM sont-ils en train de tuer Stack Overflow ?

2025-05-15

Stack Overflow, le paradis des programmeurs, fait face à une crise sans précédent. L'article révèle un déclin constant du nombre de questions posées depuis 2014, dramatiquement accéléré par l'arrivée de ChatGPT. La plateforme, qui a autrefois été une bouée de sauvetage pour d'innombrables développeurs, voit désormais le volume de questions chuter à des niveaux jamais vus depuis 2009. Bien que des politiques de modération plus strictes et l'essor des LLM aient probablement contribué, l'avancement rapide de l'IA est indéniablement en train de remodeler la façon dont les développeurs cherchent de l'aide.

Développement

Au-delà de REST : pourquoi la synchronisation d’état est l’avenir des applications web

2025-05-15

Lors de la construction d’applications web avec React, Typescript et un backend REST Rust/Axum, l’auteur a rencontré des difficultés importantes avec l’approche de transfert d’état de REST pour ce qui est essentiellement des problèmes de synchronisation d’état. À l’aide d’un exemple simple de champ de texte, l’article met en évidence des problèmes tels que les conditions de concurrence des requêtes concurrentes, des indicateurs de chargement imprécis et des incohérences entre plusieurs instances de l’application. L’auteur plaide en faveur d’un passage à des protocoles de synchronisation d’état, tels que ceux basés sur les CRDT, afin d’améliorer l’efficacité et d’éliminer les bogues courants liés à REST.

Développement Synchronisation d’état

Le désastre des points de Curl : deux CVE et une poursuite sans fin

2025-05-15
Le désastre des points de Curl : deux CVE et une poursuite sans fin

L’équipe Curl a eu une lutte persistante avec les points de suspension dans les noms d’hôtes des URL. Au début, ils les ignoraient, puis ils ont rétabli la prise en charge des sites Web nécessitant des points de suspension. Cependant, ce changement a introduit par inadvertance deux vulnérabilités de sécurité (CVE-2022-27779 et CVE-2022-30115) affectant respectivement la gestion des cookies et le mécanisme HSTS. Ces vulnérabilités provenaient d’une mauvaise gestion des points de suspension, entraînant des correspondances de domaine incorrectes. Curl 7.83.1 corrige ces problèmes, mais l’auteur soupçonne que ce n’est peut-être que le début d’une longue bataille.

Développement

Refactorisation de Clojure : création d’un générateur de texte Markov élégant

2025-05-15
Refactorisation de Clojure : création d’un générateur de texte Markov élégant

Cet article détaille la refactorisation d'un code Clojure qui génère un texte de Markov de premier ordre au niveau des mots. Au lieu de modifier directement le code original, l'auteur commence par caractériser son comportement à l'aide de tests complets. Le code refactorisé utilise des fonctions plus claires et une structure plus compréhensible, employant `reduce` et des appels de fonctions récursives pour une génération de texte efficace. Le résultat est une amélioration significative de la lisibilité et de la maintenabilité, tout en préservant les fonctionnalités d'origine.

Journal de développement du logiciel audio Tengri : Aperçu des progrès récents

2025-05-15
Journal de développement du logiciel audio Tengri : Aperçu des progrès récents

L'équipe de développement du logiciel audio open source Tengri a récemment mis à jour son journal de projet GitHub, détaillant les activités depuis mai. Cela inclut une refonte importante de l'arrangeur, la réactivation de la prise en charge LV2, des améliorations du processus de build (comme les builds conteneurisés Docker), des mises à jour de la documentation et des corrections de bogues. Le journal reflète un processus de développement itératif, traitant activement les problèmes et montrant l'état de développement actif du projet.

Développement logiciel audio

Au-delà de la sélection scalaire : traitement par lots des flux d’événements pour l’efficacité

2025-05-15

L'auteur décrit l'inefficacité de l'anti-pattern de sélection scalaire dans la conception de services avec état, illustré par un serveur LSP. Le traitement des événements un par un entraîne des retards et un gaspillage de ressources. La solution proposée consiste à traiter les flux d'événements par lots. Une fonction `batch_stream` fusionne les événements entrants en lots, améliorant ainsi considérablement l'efficacité. Sous faible charge, elle se comporte comme un traitement d'événements uniques, mais sous forte charge, elle réduit considérablement la surcharge, augmentant ainsi les performances.

Développement événements pilotés

L'efficacité étonnante d'une boucle d'agent LLM avec utilisation d'outils

2025-05-15

L'auteur et son équipe ont développé un assistant de programmation IA appelé Sketch, dont le cœur est une boucle étonnamment simple : le LLM reçoit l'entrée de l'utilisateur, effectue des actions (pouvant inclure des appels d'outils comme bash) et renvoie des résultats. Cette boucle simple, combinée à des LLMs puissants comme Claude 3.7 Sonnet, permet à Sketch de gérer efficacement de nombreuses tâches de programmation, telles que les opérations git, les modifications de code et la gestion des erreurs. L'auteur pense que cette approche de boucle d'agent LLM sera largement utilisée dans l'automatisation quotidienne, améliorant considérablement l'efficacité.

Revitaliser TLA⁺ : Appel à la contribution pour le développement d'outils

2025-05-15
Revitaliser TLA⁺ : Appel à la contribution pour le développement d'outils

L'événement communautaire TLA⁺ 2025 a mis en lumière l'état actuel et la direction future des outils TLA⁺. L'auteur soutient que la facilité de développement au sein de l'écosystème TLA⁺ est primordiale. Les analyseurs syntaxiques, interpréteurs et vérificateurs de modèles existants sont passés en revue, ainsi que les défis tels que le code hérité et les lacunes de documentation. Des stratégies pour surmonter ces obstacles incluent le développement piloté par les tests, l'intégration des développeurs et les subventions. Les orientations futures incluent les tests génératifs et la simplification de la syntaxe, aboutissant à un objectif ambitieux : porter le débit du TLC à 1 milliard d'états par minute.

Développement

NumPy : Une relation amour-haine avec la bibliothèque de tableaux de Python

2025-05-15
NumPy : Une relation amour-haine avec la bibliothèque de tableaux de Python

Cet article explore les points faibles de l'utilisation de NumPy, la bibliothèque de calcul de tableaux populaire de Python, lorsqu'il s'agit de tableaux multidimensionnels. Si NumPy excelle par sa simplicité et son efficacité pour les tableaux de faible dimension, son mécanisme de broadcasting et son indexation deviennent incroyablement complexes et difficiles à comprendre lorsqu'on s'attaque à des opérations multidimensionnelles plus complexes. L'auteur soutient que le problème principal de NumPy provient de son mécanisme de broadcasting qui remplace les index, ce qui entraîne une expressivité limitée. L'article utilise de multiples exemples pour mettre en évidence les difficultés de NumPy avec les calculs de tableaux complexes, en comparant les avantages et les inconvénients de l'utilisation de boucles et de np.einsum, exprimant finalement sa frustration envers NumPy et son souhait d'un langage de tableaux plus convivial.

Démythification de la concurrence en Ruby : processus, Ractors, threads et fibres

2025-05-15
Démythification de la concurrence en Ruby : processus, Ractors, threads et fibres

Ruby, connu pour son élégance et sa lisibilité, présente un modèle de concurrence qui peut être initialement déroutant. Cet article explore les quatre mécanismes de concurrence en Ruby : les processus, les Ractors, les threads et les fibres. Les processus offrent un isolement complet de la mémoire, idéal pour les tâches nécessitant une séparation absolue ; les Ractors, introduits en Ruby 3, permettent le parallélisme au sein d'un même processus, en utilisant le passage de messages pour éviter les conditions de concurrence ; les threads sont légers, mais limités par le GIL à la concurrence, et non au véritable parallélisme ; et les fibres, le mécanisme le plus léger, offrent un multitâche coopératif par la cession manuelle du contrôle. Des exemples de code et des explications claires éclaircissent les différences et les cas d'utilisation, offrant une compréhension complète du paysage complexe de la concurrence en Ruby.

Développement

Navigateur bloquant le port 6000 ? Vulnérabilité de script interprotocole !

2025-05-15
Navigateur bloquant le port 6000 ? Vulnérabilité de script interprotocole !

Lors du travail sur un projet Docker et Flask, l'auteur a rencontré un problème d'inaccessibilité du port 6000, alors que le port 8000 fonctionnait correctement. L'enquête a révélé que les navigateurs bloquent activement certains ports, dont le 6000, comme mesure de sécurité contre les vulnérabilités de script interprotocole (XSS). Chrome affiche une erreur ERR_UNSAFE_PORT, Safari une page blanche, et Firefox un message plus informatif : « Cette adresse est restreinte ». Le navigateur annule les requêtes vers ces ports avant même leur envoi. L'auteur a confirmé le bon fonctionnement du serveur à l'aide de curl, isolant ainsi le problème aux politiques de sécurité du navigateur. L'article liste les ports bloqués par Firefox et leurs services, expliquant le fonctionnement de cette protection.

Développement Sécurité du navigateur

Shaders d'assemblage ARB : Une plongée profonde avant GLSL

2025-05-15
Shaders d'assemblage ARB : Une plongée profonde avant GLSL

Cet article explore en détail les shaders d'assemblage ARB, un langage de shading utilisé dans OpenGL avant l'arrivée de GLSL. Il décrit l'intégration des shaders ARB, les caractéristiques du langage, les jeux d'instructions et les comparaisons avec GLSL. Bien qu'obsolète aujourd'hui, la compréhension de l'assemblage ARB offre un aperçu précieux de l'évolution de la programmation graphique moderne et des mécanismes sous-jacents des technologies graphiques de bas niveau.

Développement

Percée dans la coloration de graphe : algorithme presque optimal atteint

2025-05-15
Percée dans la coloration de graphe : algorithme presque optimal atteint

Imaginez la complexité de la gestion du trafic aérien à l'aéroport de Newark. Pour éviter les collisions, les chercheurs modélisent le problème comme un problème de coloration de graphe : chaque trajectoire de vol est une ligne, chaque emplacement un point. Pendant des décennies, les progrès sur les algorithmes efficaces ont été lents. Mais récemment, une percée : un algorithme de temps quasi linéaire, presque aussi rapide que théoriquement possible, offrant de nouvelles possibilités pour le contrôle du trafic aérien et d'autres applications. Cela résout un problème vieux de plusieurs décennies, une véritable étape.

Développement coloration de graphe

Trophy remanie sa documentation pour développeurs pour une meilleure expérience

2025-05-15
Trophy remanie sa documentation pour développeurs pour une meilleure expérience

Trophy a revu sa documentation pour développeurs afin d'offrir une expérience plus riche et intuitive. Ils ont choisi Mintlify comme fournisseur de documentation en tant que service, appréciant son expérience d'écriture, la prise en charge des composants React personnalisés et l'hébergement de domaine personnalisé économique. La nouvelle documentation utilise une mise en page à onglets, segmentant clairement les documents de la plateforme, les références d'API, les tutoriels et les exemples. La lisibilité améliorée provient des diagrammes Mermaid et des extraits de code adaptés à divers langages de programmation. Un mécanisme de retour d'information et l'intégration de GitHub encouragent la participation de la communauté. Les projets futurs incluent des fonctionnalités de sensibilisation de l'utilisateur, la prise en charge multilingue et l'intégration de LLM pour une meilleure capacité de recherche.

Fresh 2.0 Retardé : Le Framework Web de Nouvelle Génération de Deno Reçoit une Mise à Jour Fondamentale

2025-05-15
Fresh 2.0 Retardé : Le Framework Web de Nouvelle Génération de Deno Reçoit une Mise à Jour Fondamentale

L'équipe Deno a annoncé un retard pour Fresh 2.0, son framework web basé sur les derniers standards web, repoussant la sortie à la fin du troisième trimestre 2025. Ce retard est dû à la focalisation sur l'amélioration du cœur de la plateforme Deno et du registre JavaScript (JSR), la résolution des problèmes de compatibilité avec Node.js et, finalement, la construction d'une base plus solide pour la vitesse, l'extensibilité et la facilité d'utilisation de Fresh 2.0. Fresh 2.0 proposera des API similaires à Express/Hono, de vrais composants asynchrones et un nouveau système de plugins. Il alimente déjà deno.com et Deno Deploy en production, avec une version alpha disponible pour les développeurs, ainsi qu'un guide de migration pour les projets existants.

Développement

Arbres à ondelettes : une approche élégante pour les requêtes de rang sur les séquences

2025-05-15
Arbres à ondelettes : une approche élégante pour les requêtes de rang sur les séquences

Cet article de blog présente l’arbre à ondelettes, une structure de données élégante pour répondre aux requêtes de rang sur les séquences sur de grands alphabets. Atteignant une complexité temporelle de O(log₂A) (où A est la taille de l’alphabet), il organise une chaîne de caractères en une hiérarchie de vecteurs de bits. L’article détaille la construction et la consultation de l’arbre à ondelettes, en soulignant les techniques d’optimisation utilisant les structures RRR ou d’autres index de rang binaire pour la compression et la vitesse. Une implémentation dans la bibliothèque de structures de données compressées de Francisco Claude (libcds) est recommandée pour une application pratique.

Rust s'inspire des capacités dynamiques de Python : Réflexion avec Serde

2025-05-15
Rust s'inspire des capacités dynamiques de Python : Réflexion avec Serde

Cet article détaille comment l'auteur a utilisé Rust et la bibliothèque Serde pour imiter le mécanisme d'accès aux attributs dynamiques de Python (__getattr__), créant une API propre et conviviale pour accéder aux informations système. L'article explique minutieusement le processus d'implémentation, y compris les implémentations personnalisées de trait, Deserializer et Visitor, et comment tirer parti de la fonctionnalité derive(Deserialize) de Serde pour simplifier le code. En fin de compte, l'auteur a réussi à créer une bibliothèque Rust efficace et conviviale qui obtient une API concise similaire à celle de Python, et discute des approches alternatives et des compromis.

Développement

Contributions open source vs. emplois bien rémunérés : LeetCode l'emporte-t-il ?

2025-05-15

Cinq ans après l'obtention de son diplôme, un programmeur disposant d'un grand nombre de projets open source à son actif a constaté que ses années de dévouement ne s'étaient pas traduites par un emploi bien rémunéré. Il a travaillé pour deux startups, consacrant de nombreuses heures à une rémunération dérisoire. Finalement, il a dû abandonner ses projets open source préférés et se consacrer à LeetCode, ce qui lui a valu une augmentation de salaire de 5 fois, mais aussi la perte de la joie et de la satisfaction qu'il avait auparavant. Cet article révèle une dure réalité : le marché du travail accorde plus de valeur à LeetCode et à l'expérience dans les grandes entreprises qu'aux contributions de projets réels.

Développement

llm-min.txt : Compression style Min.js pour les contextes LLM

2025-05-15
llm-min.txt : Compression style Min.js pour les contextes LLM

llm-min.txt s'attaque au problème de la coupure de connaissances dans les LLM, où les assistants de codage IA n'ont pas accès aux mises à jour récentes des bibliothèques de programmation. Il utilise une approche similaire à min.js, en utilisant une autre IA pour distiller une documentation technique verbeuse en un résumé super concis et structuré. En utilisant le format de connaissance structurée (SKF), il organise les informations en trois sections principales (Définitions, Interactions, Modèles d'utilisation), réalisant une réduction de jetons allant jusqu'à 97 % tout en conservant les informations essentielles pour les assistants IA. llm-min.txt utilise le modèle d'IA Google Gemini et offre une utilisation en ligne de commande et une API Python.

Développement

Sortie de la bibliothèque Elixir Lua v0.1.0 : exécuter Lua sur la machine virtuelle BEAM

2025-05-15
Sortie de la bibliothèque Elixir Lua v0.1.0 : exécuter Lua sur la machine virtuelle BEAM

La première version stable de la bibliothèque Elixir Lua, la v0.1.0, est désormais disponible sur hex.pm ! Cette bibliothèque vous permet d’exécuter des programmes Lua en bac à sable directement sur la machine virtuelle BEAM, non pas en intégrant le runtime et le compilateur C Lua, mais grâce à une implémentation complète de Lua 5.3 en Erlang (alimentée par la bibliothèque Luerl). Les améliorations incluent de meilleurs messages d’erreur, une documentation complète, une macro `deflua` pour exposer facilement les API Elixir à Lua et un sigle `~LUA` pour la vérification de la syntaxe au moment de la compilation. Née des besoins de TV Labs pour créer des tests d’intégration de dispositifs physiques, elle est utilisée comme cible de compilation pour son générateur d’automatisation par glisser-déposer. Les projets futurs incluent la fusion de la bibliothèque Elixir Lua avec Luerl pour améliorer les messages d’erreur, la documentation et les fonctionnalités de bac à sable.

Développement Machine virtuelle BEAM

Facturation Automne : Évolution des clés publiables vers les actions de serveur chiffrées

2025-05-15
Facturation Automne : Évolution des clés publiables vers les actions de serveur chiffrées

Une entreprise développant un système de facturation a exploré différentes approches pour simplifier le développement, en s'attaquant au défi des opérations de paiement sécurisées en front-end. Elle a d'abord essayé les clés publiables, mais a rencontré des limites en termes de sécurité et de fonctionnalités. Ensuite, elle a adopté les actions de serveur Next.js, mais cela a exposé les ID clients, créant une faille de sécurité. Enfin, elle a sécurisé le système en chiffrant les ID clients dans les actions de serveur, mais cette approche dépend des actions de serveur et manque d'agnosticisme de framework. Les projets futurs incluent une solution plus générale, agnostique du framework, qui simplifie la configuration du back-end.

Collection d'articles et de projets du programmeur Bradford J. Rodriguez

2025-05-15

Le site web personnel de Bradford J. Rodriguez héberge une collection d'articles, de présentations de séminaires et de programmes informatiques qu'il a publiés au fil des ans. Le contenu couvre des sujets tels que l'écriture de noyaux Forth, les systèmes multiprocesseurs, le contrôle en temps réel, le Forth orienté objet et les assembleurs. Cela inclut le texte intégral de ses thèses de doctorat et de maîtrise, ainsi que le code source et la documentation de plusieurs projets plus petits. Ces ressources fournissent des supports d'apprentissage précieux pour ceux qui s'intéressent aux systèmes embarqués, au langage Forth et à l'architecture des ordinateurs.

1700 films sous-estimés découverts grâce à l'exploration de données de Wikipédia

2025-05-15
1700 films sous-estimés découverts grâce à l'exploration de données de Wikipédia

Fatigué des algorithmes de recommandation de films qui ne fonctionnent pas ? Un programmeur a passé 12 heures à utiliser Python pour extraire 150 Go de données en anglais de Wikipédia, découvrant plus de 1700 films salués par la critique, provenant de 83 pays, couvrant 19 genres et datant des années 1910. La plupart de ces films ne sont pas présents sur les plateformes de recommandation classiques, offrant aux cinéphiles une occasion unique de découvrir des pépites cachées. Le projet n'est pas un service de streaming, mais un site web listant ces films ; les achats incluent des mises à jour gratuites à vie.

LiveSplat : Algorithme de splatting gaussien en temps réel (version alpha)

2025-05-15
LiveSplat : Algorithme de splatting gaussien en temps réel (version alpha)

LiveSplat, un algorithme de splatting gaussien en temps réel utilisant des flux de caméra RGBD, a été publié. Développé dans le cadre d'un système de télérrobotique VR plus vaste, sa publication publique fait suite à un intérêt important de la communauté. Actuellement en version alpha, il nécessite Python 3.12+, Windows ou Ubuntu, une carte graphique Nvidia et un à quatre capteurs RGBD. Bien que le code soit fermé, des instructions d'installation et un script d'intégration pour les appareils Intel Realsense sont fournis. L'auteur est ouvert aux opportunités de licence.

Développement splatting gaussien

Flux d'inscription de Schrödinger de Bitwarden : une défaillance UX de sécurité

2025-05-15
Flux d'inscription de Schrödinger de Bitwarden : une défaillance UX de sécurité

Une architecte de sécurité, « Юленька », a découvert une faille logique dans le processus d'inscription de Bitwarden. Les utilisateurs pouvaient commencer l'inscription sur l'appareil A, mais la terminer (y compris la définition du mot de passe principal) sur l'appareil B, ce qui entraînait une défaillance de la création de compte et des applications inutilisables. Après une réponse évasive de Bitwarden, « Юленька » a signalé le problème de manière créative à l'aide d'une routine humoristique de stand-up. Le problème semble résolu, mais Bitwarden n'a fourni aucun accusé de réception ni aucun journal des modifications. Cela souligne la nécessité d'une meilleure conception UX dans les produits de sécurité et met l'accent sur l'importance d'une communication claire pour résoudre les problèmes de sécurité.

Développement

ALTCHA : Solution anti-spam légère et respectueuse de la vie privée

2025-05-15
ALTCHA : Solution anti-spam légère et respectueuse de la vie privée

ALTCHA est un service anti-spam auto-hébergé pour les sites web et les API. Il utilise un mécanisme de preuve de travail au lieu de CAPTCHA, protégeant ainsi la vie privée des utilisateurs et respectant les normes GDPR et WCAG 2.2 AA. ALTCHA est léger, sans cookies et entièrement accessible, offrant une API SaaS et de nombreuses options de configuration, notamment des requêtes personnalisées, un filtre anti-spam et l'obfuscation des données. Sa taille n'est que de 6 % de celle de reCAPTCHA.

Développement preuve de travail
1 2 87 88 89 91 93 94 95 214 215