Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierFlux principal

uv – L’installateur Python ultra-rapide

Par : Korben
26 août 2024 à 07:00

Vous en avez assez d’attendre des heures pour installer vos dépendances Python ? Et la nuit, dans vos draps humides, vous rêvez d’un outil qui rendrait ce processus ultra-rapide et indolore ?

Ne cherchez plus, uv est là pour vous !

Écrit en Rust par les mêmes qui ont fait Ruff, uv est un installateur Python et un résolveur de dépendances d’une rapidité époustouflante. Conçu comme une alternative à pip et pip-tools, il offre des performances jusqu’à 100 fois supérieures et il est aussi facile à utiliser que pip. Vous pouvez l’installer en un clin d’œil avec curl, pip, pipx ou même Homebrew. Une fois en place, créez votre environnement virtuel avec uv venv, activez-le, et vous voilà prêt à installer des packages en un temps record grâce à des commandes intuitives comme

uv pip install flask

uv gère également la génération de fichiers de dépendances verrouillés, pour garantir la reproductibilité de votre environnement sur n’importe quelle plateforme.

Avec

uv pip compile

vous pouvez générer un fichier requirements.txt à partir de diverses sources : requirements.in, pyproject.toml, setup.py ou même l’entrée standard. Et pour synchroniser votre environnement avec ce fichier, rien de plus simple :

uv pip sync requirements.txt

Mais ce n’est pas tout. uv regorge de fonctionnalités avancées pour répondre à tous vos besoins. Vous pouvez définir des overrides de versions de dépendances, choisir entre différentes stratégies de résolution, gérer les dépendances Git avec une authentification simplifiée, et même installer dans des environnements Python arbitraires grâce à l’option --python.

Côté performances, le secret d’uv réside dans son utilisation intelligente du cache. Les dépendances déjà téléchargées sont stockées de manière optimisée, et uv se base sur des informations comme les en-têtes de cache HTTP ou les hachages Git pour déterminer si une dépendance doit être retéléchargée. Vous pouvez contrôler finement le comportement du cache avec des options comme --refresh ou --no-cache.

Autre avantage indéniable d’uv : sa gestion avancée de l’authentification. Que ce soit pour les dépôts Git privés ou les registres de packages, uv vous permet de vous authentifier de multiples façons : SSH, HTTPS avec nom d’utilisateur et mot de passe ou token, fichier netrc, et même le keyring de votre système !

C’est également un outil multi-plateforme qui fonctionne de manière optimale sur macOS, Linux et Windows, avec un support de premier ordre pour les architectures x86_64. Et si vous utilisez une plateforme plus exotique, il y a de grandes chances qu’uv soit également disponible grâce à une compatibilité étendue.

C’est vraiment à tester si vous faites du python.

A découvrir ici : https://github.com/astral-sh/uv

Pylyzer – Une analyse statique Python 100 fois plus rapide !

Par : Korben
5 août 2024 à 07:00

Vous en aviez marre des analyseurs de code Python plus lents qu’un escargot sous Xanax ? Et bien dites bonjour à pylyzer, la nouvelle star de l’analyse statique ! 🚀

Ce p’tit truc est écrit en Rust, ce qui lui permet d’être en moyenne 100 fois plus rapide que ses concurrents comme pytype ou pyright. En plus de la vitesse, pylyzer se distingue par son analyse ultra détaillée. On parle pas juste de type checking basique là, pylyzer est capable de détecter les accès hors limites à des listes ou les accès à des clés inexistantes dans des dictionnaires.

D’ailleurs, contrairement à ce qu’on pourrait penser, pylyzer n’est pas qu’un simple type checker. C’est un véritable couteau suisse de l’analyse statique ! Il fait aussi office de linter pour vous aider à garder un code propre et consistant.

Bon après, faut pas se leurrer, pylyzer a ses limites. Déjà, il suppose que votre code est potentiellement statiquement typé, donc oubliez les exec, setattr et compagnie. Ah et le typage de l’API standard de Python n’est pas complet donc vous risquez de voir des erreurs du genre « cette API n’existe pas », soyez prévenus ! Enfin, vu que le type checking de pylyzer est conservatif dans son approche, vous risquez de voir pas mal de faux positifs. Si ça vous saoule, désactivez les diagnostics, on ne vous en voudra pas (mais je vous le déconseille quand même) ! 😅

En parlant d’accès, vous n’aurez aucun mal à accéder aux rapports d’erreur de pylyzer car contrairement à certains, ils sont clairs comme de l’eau de roche ! Fini le charabia illisible, on vous montre exactement où se situe l’erreur et on vous explique le problème sans prise de tête. Et côté fonctionnalités, pylyzer ne fait pas les choses à moitié. Le support LSP est hyper riche, de la complétion au renommage en passant par plein d’autres features bien cool. Tout ça grâce à l’adaptation du serveur de langage de Erg. Et si vous voulez en profiter directement dans VSCode, pas de souci ! L’extension est dispo sur le Marketplace et hop, c’est réglé ! 😎

Maintenant vous allez me dire « OK c’est bien beau tout ça, mais pylyzer il sert à quoi comparé à Ruff par exemple ?« . Alors oui, Ruff est aussi un outil d’analyse statique pour Python écrit en Rust, mais lui se concentre uniquement sur le linting tandis que pylyzer fait du type checking et sert de serveur de langage. En gros, on ne mélange pas les torchons et les serviettes !

Si vous voulez savoir comment ça marche dans le détail, sachez que pylyzer utilise le type checker de Erg en interne, en plus de ses propres capacités de vérification de type. Il convertit l’AST Python en AST Erg avant de le passer au type checker, puis il adapte les résultats pour Python. Malin ! 😏 Par contre, Erg n’est pas un langage transpilé en Python comme on pourrait le croire, il peut tourner directement sur la machine cible.

Malgré ces petits défauts, pylyzer gère quand même un paquet de trucs : type checking sur les variables, opérateurs, fonctions, méthodes et classes, inférence de type, résolution des modules et packages, les types des collections (list, dict, tuple), une bonne partie de typing, les types génériques et variance, les type guards, le type narrowing (qui peut se faire avec is et isinstance mais pas que), les assertions de type (via typing.cast par exemple)… Bref, ça en fait des belles jambes dis donc ! 🦿

Alors vous attendez quoi pour tester ce petit bijou ?

Les outils de crise indispensables pour Linux

Par : Korben
27 juin 2024 à 07:00

Aujourd’hui, on va causer d’un sujet qui nous tient tous à cœur (du moins je l’espère 😅) : les outils de crise sous Linux ! Parce que quand ça part en sucette et que les serveurs rament, pas question de perdre un temps précieux. C’est que souvent, quand la caca-strophe pointe le bout de son nez, vous vous rendez compte que vous n’avez pas les bons outils installés. Et là, c’est le drame… SSH qui rame, les serveurs qui répondent plus, les paquets qui veulent pas s’installer, le firewall qui fait des siennes… Un vrai calvaire !

Alors, quels sont ces fameux outils qu’il est impératif d’avoir sous la main quand le caca touche le ventilo ? Je dirais que y a déjà les classiques comme ps, vmstat, top et compagnie pour avoir un aperçu rapide de ce qui cloche. Rien que ça, ça peut déjà vous sauver les miches.

Mais si vous voulez jouer dans la cour des grands, va falloir sortir l’artillerie lourde. Je parle bien sûr des outils de tracing comme perf, bpftrace, opensnoop, execsnoop et toute la clique. Ça vous permettra de tracer en live ce qui se passe sur votre système, de débusquer les coupables et de mettre fin au carnage. Le top du top !

Voici comment procéder à grand coups d’apt install…

Étape 1 : Installer les packages de base

  • procps : fournit ps, vmstat, uptime, top pour les stats de base
  • util-linux : dmesg, lsblk, lscpu pour les logs systèmes et infos matérielles
  • sysstat : iostat, mpstat, pidstat, sar pour les stats disques/CPU
  • iproute2 : ip, ss, nstat, tc, les outils réseau recommandés
  • numactl : numastat pour les stats NUMA

Commande : sudo apt install procps util-linux sysstat iproute2 numactl

Étape 2 : Ajouter les outils réseaux

  • tcpdump : sniffer réseau
  • nicstat : stats interfaces réseau
  • ethtool : infos interfaces

Commande : sudo apt install tcpdump nicstat ethtool

Étape 3 : Outils de profilage et de traçage

  • linux-tools-common et linux-tools-$(uname -r) : perf, turbostat
  • bpfcc-tools (ou bcc) : une suite d’outils eBPF puissants
  • bpftrace : un outil de scripting eBPF dynamique
  • trace-cmd : outil en ligne de commande pour ftrace

Commande : sudo apt install linux-tools-common linux-tools-$(uname -r) bpfcc-tools bpftrace trace-cmd

Étape 4 (optionnelle) : Outils spécifiques au matériel

Selon vos serveurs, installez les outils d’analyse pour :

  • GPU Intel : intel-gpu-tools
  • GPU NVIDIA : nvidia-smi
  • Autres accélérateurs éventuels

Par contre, méfiez-vous, c’est pas donné à tout le monde de dompter ces bêtes-là. Ça demande un peu de bouteille et de la jugeote. Mais une fois que vous les maîtrisez, vous serez parés pour affronter les pires galères. Les plantages intempestifs, les I/O de l’enfer, les fuites mémoire vicieuses… plus rien ne vous résistera !

Bref, croyez-moi, le mieux c’est d’avoir tout ce bazar installé d’office sur vos machines. Comme ça, pas de mauvaise surprise le jour J. Évidemment, ça a un petit coût en espace disque. Mais franchement, c’est que dalle comparé au temps que vous allez perdre à galérer pour installer tout ça en pleine crise.

Sur ce, je vous laisse méditer là-dessus. Et n’oubliez pas, dans le monde merveilleux de l’informatique, il vaut mieux prévenir que guérir ! Allez, à plus les linuxiens et un grand merci à Brendan Gregg pour son article éclairant à ce sujet.

Jampack – Boostez votre site statique en deux temps trois mouvements !

Par : Korben
21 juin 2024 à 07:00

Aujourd’hui, je vous parle d’un truc vraiment cool nommé Jampack. En gros, c’est un outil qui prend votre site statique généré par votre générateur préféré (Hugo, Jekyll, Eleventy… y’en a pour tous les goûts !) et qui le transforme en une bête de course optimisée pour une expérience utilisateur de folie et des scores Core Web Vitals à faire pâlir les GAFAM.

Comment ça marche ce truc ? Eh bien, Jampack va scanner votre site et appliquer tout un tas d’optimisations automatiquement. Par exemple, il va :

  • Rendre vos images responsive avec des dimensions et des formats modernes comme le WebP ou l’AVIF. Fini les images qui mettent trois plombes à charger !
  • Mettre la priorité sur les assets importants au-dessus de la ligne de flottaison et lazy-loader le reste. Comme ça, votre site s’affiche direct pendant que le reste charge tranquillou en arrière-plan.
  • Inliner le CSS critique et virer le Flash of Unstyled Content (FOUC). Votre site aura la classe dès les premières millisecondes.
  • Prefetcher les liens pour accélérer la navigation. Vos visiteurs surferont à la vitesse de la lumière sur votre site !
  • Minifier et compresser tout ce qui traîne : HTML, CSS, JS, SVG… Que du bonheur pour votre bande passante.

Et tout ça sans que vous ayez à lever le petit doigt ! Juste un petit

npm install -D @divriots/jampack

et hop, magie, votre site est optimisé de fou.

Bon, vous vous dites peut-être : « Ouais, ok, mais mon site il est déjà pas mal optimisé, hein« . Eh bah, sachez que même les experts de Keycloak.ch, BayJS.org ou CloudCannon.com utilisent Jampack pour squeeze encore plus de perf. Vous pensez vraiment faire mieux ? ^^

Et bien sûr, tout le code est open-source sur GitHub, sous licence MIT. Allez, sur ce, je vous laisse, j’ai un site à optimiser moi. See ya !

A découvrir ici.

FrankenPHP – Le serveur PHP surpuissant écrit en Go

Par : Korben
30 mai 2024 à 13:04

Concocté par le français Kévin Dunglas, contributeur de longue date à l’écosystème PHP et membre de la Core Team Symfony, FrankenPHP va peut-être dépoussiérer un peu votre bon vieux serveur LAMP tout fatigué.

Il s’agit d’un serveur d’applications PHP moderne développé en Go qui s’appuie sur le serveur web de pointe Caddy. D’après son auteur, tous vos projets PHP, y compris Laravel, Symfony, Drupal, WordPress, Sulu et API Platform, seront optimisés comme jamais grâce à l’intégration native du mode worker.

Moins de lenteurs, plus de perf, et surtout pas mal de fonctionnalités avancées telles que les Early Hints pour un affichage éclair, la prise en charge d’HTTP/2 et HTTP/3 pour une navigation optimale, la compression Brotli, Zstandard et Gzip, les logs structurés, le support de Prometheus pour les métriques, et même du temps réel avec Mercure. Que vous soyez accro à Symfony, fan d’API Platform ou un inconditionnel de Laravel, FrankenPHP s’occupera de tout et d’après les benchmarks visibles sur le site officiel, il booste même les performances jusqu’à 3,5 fois plus vite que FPM sur les applications de type API Platform.

Conçu dans un souci de simplicité, ce serveur PHP n’a besoin que d’un seul service et d’un seul binaire. Pas besoin de PHP-FPM, il utilise son propre SAPI (Server API) spécialement conçu pour les serveurs web Go. Il peut être déployé facilement comme une application Cloud Native via une image Docker, et est compatible avec Kubernetes et toutes les plateformes Cloud modernes. Vous pouvez même packager votre application PHP comme un binaire statique autonome et auto-exécutable.

Si vous voulez le tester, vous pouvez soit lancer le binaire, soit utiliser Docker comme ceci :

docker run -v $PWD:/app/public -p 80:80 -p 443:443 -p 443:443/udp dunglas/frankenphp

En deux temps trois mouvements, vous voilà avec un serveur web + PHP 8.2 aux petits oignons ! Y’a plus qu’à mettre votre PHP dans le répertoire de Franken et tadaaa…

Si c’est le binaire que vous récupérez, vous pouvez servir le contenu du répertoire courant avec la commande suivante :

./frankenphp php-server

Ou lancer vos scripts en ligne de commande comme ceci :

./frankenphp php-cli /chemin/vers/votre/script.php

Bref, vous démarrez votre app une fois, et hop, elle reste en mémoire, prête à faire tourner votre site. Caddy gère l’HTTPS automatiquement avec génération, renouvellement et révocation des certificats. Il sert aussi les assets, pendant que PHP fait ce qu’il fait de mieux : exécuter votre code sans faillir. Vous pouvez même intégrer PHP dans n’importe quelle application Go en mode bibliothèque.

Et pour démarrer un serveur Caddy en prod avec FrankenPHP sans utiliser Docker, il suffit de cette configuration ultra simple:

{
    # Activer FrankenPHP 
    frankenphp
    order php_server before file_server
}

localhost {
    # Activer la compression (optionnel)
    encode zstd br gzip  
    # Exécuter les fichiers PHP dans le répertoire courant et servir les ressources
    php_server
}

Ça change un peu !

En tout cas, c’est à tester ! Bravo Kévin, j’ai hâte de voir comment ça va évoluer pour la suite !

❌
❌