Category: Développement

Un cas curieux d'importation lente de USD dans Blender

2024-12-22

Un développeur a rencontré des temps d'importation inattendument lents lors de l'importation de scènes USD dans Blender. Le profilage a révélé que le goulot d'étranglement était la fonction de tri d'ID interne de Blender, `id_sort_by_name`. Cette fonction, qui devait être de complexité O(N), s'est dégradée à O(N²) en raison du schéma de nommage dans les fichiers USD. En modifiant la convention de nommage et en optimisant l'algorithme de tri, le développeur a réduit les temps d'importation de 4 minutes 40 secondes à 8 secondes pour les fichiers plus petits. Cependant, le problème sous-jacent provient de l'exigence de Blender pour les ID triés, ce qui conduit à des suggestions pour remplacer la liste chaînée par un arbre Trie ou une table de hachage. Cette optimisation souligne un défi courant dans l'optimisation des performances : identifier et résoudre la complexité inattendue.

Développement

cqd : Un utilitaire Python coloré pour inspecter les attributs d'objet

2024-12-22

cqd est un utilitaire Python léger qui fournit une visualisation colorée des attributs d'objet, simplifiant l'inspection des objets pendant le développement et le débogage. Il code les attributs par couleur : méthodes dunder (bleu), attributs protégés (jaune) et attributs/méthodes publics (vert). Par exemple, il est utile pour visualiser facilement les attributs d'un tokeniseur Hugging Face. L'installation est facile via `pip install cqd`. L'utilisation implique d'importer la fonction `cqd` et d'appeler `cqd(your_object).

JEP 483 de Java : Le chargement et la liaison anticipés des classes améliorent le temps de démarrage

2024-12-22

Le JEP 483 améliore considérablement le temps de démarrage des applications Java en chargeant et en liant les classes d'application à l'avance lorsque la JVM HotSpot démarre. Cela est réalisé en surveillant une seule exécution de l'application, en stockant les formes chargées et liées de toutes les classes dans un cache pour une réutilisation lors des exécutions suivantes. Cette fonctionnalité ne nécessite aucune modification du code et offre des améliorations de vitesse substantielles pour les grandes applications serveur, Spring PetClinic affichant une réduction de 42 % du temps de démarrage. Bien qu'il s'agisse actuellement d'un processus en deux étapes, les versions futures simplifieront la création du cache en une seule étape et offriront une configuration d'exécution d'entraînement plus flexible.

Développement

Traduction massive de Java vers Kotlin chez Meta : surmonter des millions de lignes de code

2024-12-22

Meta a entrepris un effort de plusieurs années pour traduire son immense base de code Android de Java vers Kotlin. Cet article détaille comment Meta a construit Kotlinator, un outil d’automatisation, pour surmonter des défis tels que les vitesses de compilation lentes et les linters insuffisants, réussissant à convertir plus de la moitié de son code. Kotlinator comprend plusieurs phases : prétraitement, conversion J2K sans tête, postraitement et correction d’erreurs. Meta a également collaboré avec JetBrains pour améliorer J2K et a rendu certaines parties du processus open source pour favoriser la collaboration communautaire. L’article met en lumière la gestion de la sécurité Null et diverses questions de code rencontrées et résolues lors de la conversion.

Développement migration de code

Une conversation par-dessus un mur a changé ma carrière de programmeur

2024-12-21

En 1983, un programmeur travaillant pour un grand entrepreneur de défense envisageait de faire un doctorat en chimie. Une conversation fortuite par-dessus un mur avec le responsable du groupe voisin de "micro-ordinateurs" (un bricoleur) l'a conduit à une réunion concernant l'Apple II. Là, il a été chargé de créer un émulateur de terminal VT-100 en assembleur 6502 en une semaine pour permettre au président de la société de lire ses e-mails à domicile. Cette expérience a non seulement changé le cours de sa carrière, le menant à rejoindre le groupe de micro-ordinateurs et à devenir le seul programmeur PC de l'entreprise, mais l'a également conduit à créer sa propre entreprise. Des années plus tard, il a réfléchi à la façon dont les rencontres fortuites et les relations interpersonnelles avaient profondément façonné sa vie.

Développement carrière opportunité

Philosophie de la conception de logiciels : apprivoiser la complexité

2024-12-21

Cet article résume trois idées clés du livre « Une philosophie de la conception de logiciels » : tolérance zéro pour la complexité, l’idée fausse que des composants plus petits équivalent toujours à une meilleure modularité et les complexités inhérentes à la gestion des exceptions. L’auteur soutient que la complexité n’est pas causée par des erreurs isolées, mais qu’elle s’accumule au fil du temps. Des exemples d’un système de traitement des commandes et d’enregistrement des utilisateurs illustrent comment éviter le code dupliqué et trouver le bon équilibre entre la taille des composants et la modularité. De plus, l’article détaille trois techniques pour réduire la complexité de la gestion des exceptions : éliminer les erreurs, masquer les exceptions et agrégation des exceptions, le traitement des fichiers servant d’exemple. Le livre souligne en fin de compte l’importance de simplifier constamment la complexité dans la conception de logiciels.

Enum de tableaux : une nouvelle structure de données pour un traitement efficace des données

2024-12-21

Cet article présente une structure de données appelée « Enum de tableaux » (EoA), similaire à la structure populaire « Struct of Arrays » (SoA), mais avec des énumérations au cœur. L’EoA regroupe plusieurs valeurs d’énumération dans un tableau, en utilisant une seule balise pour identifier le type du tableau. Cela réduit l’utilisation de la mémoire et la surcharge de prédiction de branche, ce qui conduit à un traitement des données plus efficace, particulièrement avantageux pour l’optimisation SIMD. L’article utilise le système de base de données TigerBeetle comme exemple, illustrant comment l’EoA permet un traitement par lots efficace en séparant efficacement le plan de contrôle et le plan de données, ce qui se traduit par des performances considérablement améliorées.

Yakari : Un constructeur de commandes interactif pour simplifier les interfaces CLI complexes

2024-12-21

Yakari est un outil interactif de construction de commandes conçu pour simplifier les interfaces en ligne de commande complexes. Il guide les utilisateurs pas à pas dans la construction des commandes, éliminant ainsi le besoin de mémoriser des syntaxes complexes. Prenant en charge différents types d'arguments, Yakari offre une aide contextuelle et un historique des commandes, améliorant considérablement la convivialité de l'interface CLI. Les utilisateurs peuvent construire et exécuter des commandes avec des raccourcis simples, rendant même les commandes complexes accessibles.

Itérateurs Go : Gestion efficace des API paginées

2024-12-21

Cet article montre comment gérer efficacement les API paginées à l'aide de la fonctionnalité d'itérateurs introduite dans Go 1.23. En utilisant l'API GitHub comme exemple, l'auteur explique comment écrire un itérateur personnalisé pour abstraire la logique de pagination, rendant le code plus lisible et réutilisable. L'article se concentre sur l'implémentation et les tests de l'itérateur, y compris la simulation des appels d'API et l'utilisation d'itérateurs pull pour s'assurer que l'itérateur renvoie les résultats attendus. Les itérateurs permettent aux développeurs de séparer la logique de pagination de la logique métier, améliorant ainsi la maintenabilité et la lisibilité du code.

Développement Itérateurs API paginées

Manifeste du Pipeline de Livraison Continue : Construire une meilleure livraison de logiciels

2024-12-21

Les équipes de développement de logiciels modernes ont désespérément besoin de meilleurs outils pour gérer leurs pipelines de livraison continue. L’écosystème actuel des pipelines de CD est fragmenté, rigide et inefficace. Ce manifeste préconise des pipelines axés sur le code, conviviaux pour les développeurs et conçus pour gérer la complexité des workflows d’ingénierie modernes. Il met l’accent sur une seule source de vérité, des composants réutilisables et typecontrolable, des pipelines dynamiques et flexibles, un débogage transparent et visuel, et des mécanismes pour gérer les changements et les boucles de rétroaction rapides, dans le but ultime d’améliorer l’efficacité et d’accélérer la livraison.

Rivet : Exécutez et mettez à l'échelle des applications en temps réel avec les acteurs

2024-12-21

Rivet est une plateforme pour construire et mettre à l'échelle des applications en temps réel utilisant le modèle Actor. Elle intègre des fonctionnalités RPC, d'état et d'événements, simplifiant ainsi le développement d'applications modernes. Rivet offre un scaling automatique, un déploiement en réseau de périphérie et inclut une surveillance intégrée et des capacités de localisation des données. Propulsé par Rust, FoundationDB, des isolats V8 et l'environnement d'exécution Deno, il garantit les performances et l'efficacité. Rivet convient aux applications collaboratives, aux applications local-first, aux agents IA, aux serveurs de jeux et bien plus encore.

SingleFile : Enregistrez des pages web complètes en tant que fichiers HTML uniques

2024-12-21

SingleFile est une extension web puissante et un outil CLI qui enregistre des pages web complètes en tant qu'un seul fichier HTML. Compatible avec Chrome, Firefox, Edge et plus encore, il offre un enregistrement de pages pratique, un traitement multi-onglets, des fonctionnalités d'annotation et permet même de télécharger des pages enregistrées sur Google Drive ou GitHub. Personnalisez les raccourcis clavier et les paramètres pour l'adapter à vos besoins.

Apprentissage efficace de l'allemand : Anki est-il la solution ?

2024-12-21

Un ingénieur vivant en Allemagne depuis près de huit ans avoue ne toujours pas maîtriser la langue. Pour y remédier, il essaie Anki, utilisant la répétition espacée pour apprendre 10 nouveaux mots allemands par jour, dans le but d'atteindre un niveau C1 en un an. Il a choisi un jeu de cartes Anki ordonné par fréquence, en ajoutant lui-même les prononciations audio. L'auteur invite les lecteurs à partager leurs expériences avec Anki et leurs conseils pour apprendre l'allemand.

Dire au revoir aux vulnérabilités des chaînes C : une approche plus sûre pour la gestion des chaînes

2024-12-21

Fatigué des vulnérabilités et de l’insécurité des chaînes C ? Cet article présente une alternative intelligente : une structure de chaîne personnalisée `struct str`, qui contient un pointeur de données et la longueur, évitant les risques liés à la terminaison nulle. L’expérience de six mois de l’auteur dans un environnement bare-metal montre que cette approche prévient efficacement les erreurs telles que le dépassement de tampon. Bien que l’utilisation de la macro `STR` soit un peu verbeuse, le gain en sécurité et en lisibilité dépasse largement cela. Les optimisations du compilateur rendent également la perte de performances négligeable, offrant une nouvelle approche aux développeurs qui privilégient la sécurité du code.

Comment un robot de révision de code IA a appris à se taire

2024-12-21

Le robot de révision de code IA de Greptile a initialement été critiqué pour générer trop de commentaires. Pour résoudre ce problème, ils ont expérimenté l'ingénierie des invites et ont fait évaluer ses propres commentaires par le LLM, mais ces méthodes se sont avérées inefficaces. Leur percée est venue de la vectorisation des commentaires précédents, de leur regroupement dans une base de données vectorielle et du filtrage des nouveaux commentaires similaires à ceux qui avaient été précédemment rejetés. Cette approche a augmenté le taux de prise en charge des développeurs de 19 % à plus de 55 %, réduisant considérablement le bruit du LLM.

Développement Révision de code

Implémentation de Raft : Plongez au cœur du consensus distribué

2024-12-21

Ceci est le premier article d'une série décrivant l'algorithme de consensus distribué Raft et son implémentation en Go. Raft résout le problème de la réplication d'une machine à états déterministes sur plusieurs serveurs, garantissant la disponibilité du service même en cas de panne de serveurs. L'article présente les composants principaux de Raft : la machine à états, le journal, le module de consensus, les rôles de leader/suiveur et l'interaction avec le client. Il aborde la tolérance aux pannes de Raft, le théorème CAP et le choix de Go comme langage d'implémentation. Les articles suivants approfondiront les détails de l'implémentation de l'algorithme.

Développement Consensus Distribué

Gazzetta : La Meilleure Façon de Lire les Actualités et les Liens sur Mastodon

2024-12-21

Gazzetta est un lecteur d'actualités conçu pour Mastodon, contrairement aux autres clients qui privilégient l'expérience de réseau social. Il fonctionne comme un lecteur RSS pour Mastodon, offrant une interface séparée pour une lecture concentrée des actualités et des liens. Il permet de suivre des serveurs et des comptes pour voir les liens populaires, la recherche en texte intégral, l'intégration avec Safari, la gestion des signets, l'exportation des liens et des options de personnalisation telles que les styles de police, le masquage des miniatures et le filtrage des liens par domaine, mot clé ou langue.

Développement Lecteur d'actualités

S2 : Révolutionner le stockage de données en streaming dans le cloud

2024-12-21

Bandar Systems présente S2, un nouveau service de stockage de données en streaming conçu pour révolutionner le traitement des données à l'ère du cloud. Contrairement au stockage basé sur les objets traditionnel, S2 se concentre sur les flux, offrant une ingestion et un traitement de données en temps réel efficaces, évolutifs et économiques. Il prend en charge les opérations de lecture et d'écriture à haut débit et à faible latence, et fournit plusieurs classes de stockage pour répondre aux différents besoins de performance et de coût. S2 vise à remplacer les systèmes tels que Kafka et Kinesis, en offrant aux utilisateurs une solution de gestion des données en streaming plus puissante et plus flexible.

(s2.dev)

Un opérateur de SEO parasite évite les pénalités de Google

2024-12-21

Cet article explique comment l'opérateur de SEO parasite Finixio/Clickout Media a évité rapidement et efficacement les pénalités de Google. Suite à une mise à jour de l'algorithme de Google, plusieurs sites web de Finixio/Clickout Media ont subi de lourdes pénalités pour violation de la politique d'abus de réputation du site web de Google, entraînant une chute drastique du trafic et des classements. Cependant, grâce à l'utilisation intelligente de redirections et de techniques de masquage, ils ont restauré leurs opérations en quelques jours et ont continué à profiter de leur réseau de sites web parasites. Ils ont même étendu leurs opérations après avoir été pénalisés, en exploitant de nouveaux sites web et des sites existants à forte autorité (comme CoinTelegraph) pour continuer à promouvoir les jeux d'argent et les cryptomonnaies. L'article détaille leurs stratégies, notamment l'utilisation de la géolocalisation pour masquer le contenu et le placement de contenu sur plusieurs plateformes. Il souligne que la cause racine de ce phénomène est l'affaiblissement de l'autorité thématique dans les algorithmes de Google, faisant de l'autorité de domaine le principal facteur de classement.

Manuel de référence AP5 : une extension basée sur la logique pour Common Lisp

2024-12-21

AP5 est une extension de Common Lisp qui permet aux utilisateurs de « programmer » à un niveau plus « spécificatif », en se concentrant sur ce que la machine doit faire plutôt que sur la manière de le faire. Il combine des aspects de Lisp et du langage de spécification Gist, en intégrant les parties compilables de Gist et en offrant des mécanismes d’annotation pour l’optimisation des performances. AP5 utilise un modèle relationnel pour représenter les données et prend en charge un langage de logique du premier ordre pour l’accès et la manipulation des données. Les programmeurs définissent des relations, des règles et des contraintes, en optimisant les performances grâce à des annotations. Le manuel détaille la syntaxe d’AP5, les opérations de base de données, les règles, les types, l’équivalence et les spécifications d’implémentation, en fournissant de nombreux exemples et explications.

FindMy.py : Une bibliothèque Python complète pour interroger le réseau FindMy d'Apple

2024-12-21

FindMy.py est une bibliothèque Python qui fournit tout ce dont vous avez besoin pour interroger le réseau FindMy d'Apple. Elle unifie l'écosystème fragmenté de Find My, offrant une solution multiplateforme prenant en charge divers appareils (AirTags, iDevices, etc.) et méthodes d'authentification (y compris SMS et Trusted Device 2FA). Elle dispose d'API asynchrones et synchrones. Actuellement en phase Alpha, l'API est susceptible de changer, mais les fonctionnalités principales sont stables.

Développement

MarkItDown : Convertisseur Markdown en ligne gratuit

2024-12-21

MarkItDown est un outil en ligne gratuit qui convertit divers formats de fichiers (tels que Word, PDF, HTML, etc.) en Markdown standard. Alimenté par le projet open-source Markitdown de Microsoft, il offre des conversions rapides et fiables, parfaites pour les blogueurs, les preneurs de notes et les rédacteurs techniques. Aucun téléchargement ni installation requis ; il suffit de télécharger votre fichier et d'obtenir une sortie Markdown propre et organisée. C'est un moyen sûr et efficace de gérer votre contenu.

Développement outil en ligne

Dette technique vs. actifs techniques : comment investir intelligemment ?

2024-12-21

Cet article explore la différence entre la dette technique et les actifs techniques. La dette technique, similaire à la dette financière, représente des problèmes de code qui doivent être résolus, tels que des bogues et une faible lisibilité du code, nuisant à l'efficacité du développement. Les actifs techniques, quant à eux, sont des investissements proactifs dans des problèmes connus, comme la construction de SDK de haute qualité, réduisant les coûts de maintenance futurs et augmentant la liberté de développement. L'article conseille de prioriser le remboursement de la dette technique avant d'investir dans des actifs techniques, en tirant parti de processus et de technologies éprouvés pour éviter l'accumulation de dette technique et, finalement, atteindre une meilleure efficacité de développement et une meilleure qualité du produit.

Règles pour éviter les erreurs courantes dans l'assemblage inline étendu

2024-12-21

Cet article n'est pas un tutoriel sur l'assemblage inline, mais plutôt un résumé de six règles pour éviter les erreurs courantes. L'auteur souligne que l'assemblage inline est perfide et doit être évité autant que possible, car les compilateurs modernes offrent des intrinsèques et des fonctions intégrées pour la plupart des cas d'utilisation. Si inévitable, les règles sont : utiliser le qualificateur `volatile` ; utiliser un `memory` clobber si la mémoire est accédée ; ne jamais modifier les contraintes d'entrée ; ne jamais appeler de fonctions depuis l'assemblage inline ; ne pas définir d'étiquettes d'assemblage absolues ; et utiliser la fonctionnalité d'étiquettes locales de l'assembleur pour éviter les conflits d'étiquettes. L'article conclut en encourageant les lecteurs à pratiquer l'application de ces règles en examinant des tutoriels en ligne et même du code généré par LLM.

NoDB : Traitement des paiements sans base de données

2024-12-21

Dans "Le Manuel de l'Ingénieur des Paiements", Alvaro Duran présente une approche révolutionnaire de la conception des systèmes de paiement : traiter les paiements sans base de données. Il soutient que la prévalence de la programmation asynchrone découle de l'hypothèse de la nécessité des bases de données. En utilisant le sourcing d'événements, chaque étape du processus de paiement est enregistrée comme un événement, et non comme un état persistant. Ces événements sont stockés temporairement en mémoire, et le système reconstruit l'état du paiement à partir du flux d'événements, éliminant ainsi le besoin de stockage persistant. Cette approche hautes performances et haute fiabilité, inspirée du trading haute fréquence, permet une récupération rapide des pannes grâce à des sauvegardes à chaud. L'article détaille ce concept à l'aide d'un exemple de flux de paiement et examine les applications futures dans les systèmes de paiement.

@celine/bibhtml v3.0.3 : Un système de références basé sur les Web Components

2024-12-21

Le système de références basé sur les Web Components pour les documents HTML, @celine/bibhtml, a publié la version 3.0.3. Il vise à fournir une expérience utilisateur similaire à celle des références dans LaTeX/BibTeX, en utilisant Citation.js en interne et en se dégradant élégamment lorsque les citations et les références sont mal formées ou que JavaScript est désactivé. Il prend en charge quatre formats de référence : BibTeX, texte non structuré, DOI et Wikidata, et propose trois éléments personnalisés : ``, `` et ``, simplifiant ainsi la gestion des références en HTML.

Développement Gestion des références

Progrès révolutionnaire : compilation sécurisée de C vers Rust

2024-12-21

Des chercheurs ont mis au point une nouvelle méthode permettant de compiler du code C en Rust de manière sécurisée. Cette technique utilise l'analyse statique et la traduction dirigée par les types pour éviter de dépendre des blocs `unsafe` de Rust, garantissant ainsi la sécurité mémoire. La méthode a été appliquée avec succès à des codes de la bibliothèque cryptographique HACL* et des bibliothèques EverParse, donnant naissance à une bibliothèque cryptographique moderne vérifiée de 80 000 lignes en Rust pur, une première du genre.

Un programmeur crée un jeu pseudo-3D en Bash

2024-12-20

Un programmeur nommé izabera a développé un jeu pseudo-3D impressionnant en utilisant le langage de script Bash. Ce projet, un hommage au jeu classique Wolfenstein 3D, est open-source sur GitHub. Le code est concis mais le résultat est étonnant, montrant la puissance de Bash et l'ingéniosité du programmeur. Le dépôt inclut le code source du jeu et des vidéos de démonstration. Les développeurs intéressés peuvent le consulter sur GitHub.

Développement Développement de jeux

Outils de build Monorepo : Scalabilité de votre base de code

2024-12-20

Les outils de build traditionnels peinent à gérer les grandes bases de code (100 à 10 000 développeurs actifs). Les outils de build Monorepo comme Bazel et Mill offrent des solutions en prenant en charge plusieurs langages, des tâches de build personnalisées, la mise en cache et la parallélisation automatiques, la mise en cache et l'exécution à distance, améliorant ainsi considérablement la vitesse et l'efficacité du build. Ils incluent également la sélection des tests basée sur les dépendances et le sandboxing des tâches de build, réduisant ainsi le temps de test et le non-déterminisme. Bien que ces fonctionnalités puissent sembler inutiles pour les petits projets, elles sont cruciales pour la collaboration à grande échelle et l'intégration continue dans les grands projets, empêchant les temps de build de devenir un goulot d'étranglement.

Développement outils de build scalabilité
← Previous 1 3 4 5 6 7 8