Mensuel Shaarli

Tous les liens d'un mois sur une page.

February, 2023

Zellij, le multiplexeur de terminal moderne !

Un concurrent de Tmux et Screen

Je suis un développeur ennuyeux | Jérémy Buget

Un article très intéressant... et un twist final pas mal ^^

Keys To An Accessibility Mindset

L'auteur parle de la manière d'appréhender l'accessibilité : pourquoi utiliser les éléments HTML adaptés, les attributs ARIA qui vont bien, etc.

Vagrant et VMWare sur MacOS Apple M1/M2 - DigiCactus

Tout est dans le titre

Impossible d'accéder à votre boite mail en @free.fr ? - Liens en vrac de sebsauvage

Conclusion : ne pas utiliser de boite mail en @free.fr

Laravel Eloquent : comprendre les modèles et leurs relations

L'auteur explique clairement les différents types de relation dans Eloquent.

Git par la pratique (19) – Retour vers le commit – Le blog technique de Microlinux

L'auteur montre comment défaire un commit dans git (reset ou revert) avec les différents points à surveiller

Symfony et MongoDB, retour aux bases

Utiliser MongoDB dans un projet Symfony : l'auteur montre comment faire, avec ou sans Doctrine.

Deux ou trois trucs à savoir sur Openclipart (avec des morceaux d’Inkscape dedans) - LinuxFr.org

Tout est dans le titre

REX : Ansible & Windows

Un retour d'expérience intéressant sur l'utilisation d'Ansible dans un contexte Windows : des points à surveiller mais le bilan a l'air positif

Tout mesurer | EventuallyCoding

L'auteur explique l'intérêt de multiplier les mesures dans le logiciel - aide à la décision, alertes sur des problèmes en cours ou à venir, etc. La mesure est indispensable si on souhaite agir au plus juste.

L’infrastructure as code, c’est cool … quand ça marche – riduidel's wordpress

Tout est dans le titre

Les mises en production le vendredi (1/3) - Carl Chenet's Blog

L'auteur étudie plusieurs cas de figure, ici c'est l'entreprise qui n'a ni intégration continue, ni déploiement continu... Que se passe-t-il en cas de problème ?

Les citations en HTML avec blockquote, cite et q

Je me permets de citer l'auteur :p

On résume : cite pour les noms d'oeuvres, blockquote pour les blocs de citations (plus ou moins longs) et q pour les citations courtes en-ligne dans un paragraphe de texte.
Comment obtenir 10 ans de màj de sécurité sur Ubuntu ?

L'auteur parle du service UbuntuPro... mais donne aussi de bons conseils concernant l'utilisation de "unattended-upgrades"

What Are Abstractions in Software Engineering with Examples

Une abstraction a 3 caractéristiques :

  • Elle masque les informations inutiles.
  • Elle généralise un concept.
  • Elle est un point de vue de la réalité (ex: chaque type de carte traite d'un aspect de la géographie, carte routière, carte topographique, carte des monuments, etc.)

On n'oubliera pas qu'une abstraction n'est pas l'objet qu'elle représente !

Comme la programmation concerne les données et le contrôle de leur flux, il y a deux types d'abstractions : les abstractions de données, et les abstractions du contrôle de flux.

Les abstractions de données servent à :

  • simplifier en masquant la gestion de la mémoire et les mécanismes de comportement (ex: ne pas faire d'addition sur des chaînes de caractère)
  • fournir des comportements génériques réutilisables
  • donner aux développeurs le pouvoir de créer de nouvelles abstractions via les "ADT" (Abstract Data Type)

Les abstractions de contrôle sont essentiellement les fonctions car :

  • Le nom de la fonction simplifie et masque ses mécanismes internes.
  • Une fonction généralise un comportement, qui peut être réutilisé partout.
  • Vous devez être conscients que le nom de la fonction peut ne pas correspondre exactement à la réalité (problème du nommage)

En POO, une classe est une abstraction réunissant structure de données et comportement. Il existe aussi les classes abstraites qui permettent de généraliser certains comportements que l'on souhaite masquer. Enfin les interfaces sont aussi des abstractions, même si leur intérêt principal est plutôt la possibilité de changer d'implémentation concrète.

L'avantage principal des abstractions est la simplification en masquant les détails non pertinents. Il y a toutefois des inconvénients à ne pas négliger :

  • problème du nommage
  • sursimplification -> manque de contrôle par l'utilisateur (interface trop simple), perte de détails (tous les détails ne sont pas à masquer)

Pour pallier ces problèmes, il faut donc rester le plus proche possible du "métier" et ne pas utiliser d'abstraction de prime abord.

Les abstractions masquent les détails inutiles... mais ceux ci peuvent faire surface malgré tout ("fuite") L'endroit où se situe la fuite fera toute la différence dans la résolution du problème : votre code, le code d'un collègue, le code d'une librairie externe, le langage, le matériel !

Ensuite, l'auteur illustre par un exemple le danger de créer une abstraction trop tôt : il avait pensé à plusieurs cas possibles... mais pas suffisamment. Résultat : sa classe a fini par exploser les compteurs de complexité cyclomatique à coup de "if". Il vaut mieux dupliquer du code tant que l'on n'a pas une connaissance raisonnable des abstractions sous jacentes.

L'auteur parle aussi de la confusion entre abstraction et indirection. Une indirection permet de remplacer une partie de l'implémentation par autre chose (ex: les interfaces)

Certaines abstractions créent des indirections (classe abstraite, interfaces)
Créer une indirection ne signifie pas que vous créez une abstraction.
Les indirections facilitent le changement... mais au prix d'une lisibilité moindre.

Different Ways to Get CSS Gradient Shadows | CSS-Tricks - CSS-Tricks

L'auteur montre comment afficher des ombres avec un dégradé

Create encrypted backups of your workstation with an Ansible playbook | Enable Sysadmin

Tout est dans le titre

Vim Search and Replace With Examples

Un guide sur la recherche / remplacement avec vim (et quelques plugins pour améliorer cette fonctionnalité)

Physique Nucléaire et Électrochimie

Un bon résumé des cours de physique / chimie du lycée

Ansible - Utiliser wsl2 et podman pour développer vos roles et playbooks

Tout est dans le titre

Linux sur les vieux iMac (3) – La carte réseau – Le blog technique de Microlinux

Suite de https://blog.microlinux.fr/imac-02-installation/ - installation du pilote de la carte réseau... et où l'on peut découvrir que tout ne se passe pas forcément comme prévu. L'auteur montre la démarche pour rechercher les pilotes à partir du code constructeur.

Linux sur les vieux iMac (2) – Installation du système de base – Le blog technique de Microlinux

Suite de https://blog.microlinux.fr/imac-01-identification-ssd/ : installation du système (notamment une manipulation pour installer GRUB)

A Guide To Recursion With Examples

Une excellente présentation de la récursivité

Gérer un index Elasticsearch avec la librairie elasticsearch-php

Tout est dans le titre

A Fancy Hover Effect For Your Avatar | CSS-Tricks - CSS-Tricks

Une jolie démonstration des possibilités des CSS

Anemic Domain Model vs Rich Domain Model with Examples

L'auteur explique en quoi un modèle de données riche est bien plus intéressant qu'un modèle pauvre, notamment en ce qui concerne la cohérence métier des entités.

The Ultimate Guide to JavaScript Error Handling — SitePoint

Tout est dans le titre

Cryptographie expliquée aux Michus – Mon Jardin

Plus précisément, il s'agit d'expliquer plusieurs termes liés à la cryptographie (chiffrer, clef, signer, etc.)

I want to lose every debate.

Une façon de voir intéressante :)

Internationalisation (i18n) ou localisation (l10n) ? - Alsacreations

Tout est dans le titre

GitHub - you-dont-need/You-Dont-Need-Lodash-Underscore: List of JavaScript methods which you can use natively + ESLint Plugin

Tout est dans le titre

LaserRGBL: dur mais bon. - Warrior du Dimanche

Présentation de LaserRGBL, un logiciel de gravure gratuit... mais qui ne tourne nativement que sous Windows. Le Warrior du Dimanche montre comment le faire fonctionner sous Linux

OpenDNS by Cisco DDOS notre serveur… et on doit le laisser faire | Octopuce

L'auteur montre l'utilisation d'un cache Varnish pour répondre à son besoin : permettre à un service d'antispam de visiter en masse son site lors de l'envoi de sa newsletter, tout en mettant pas en cache pour les autres visiteurs

Les raisons d'être de Rust

Une présentation / introduction à Rust : le contexte dans lequel il a été créé, ses points forts et points faibles

A Leap of Decades – Eric’s Archived Thoughts

Eric Meyer change de Mac (machine obsolète) et nous livre ses impressions et astuces

L'auto-hébergement en 2023 · Cosme Charlier

La configuration utilisée est intéressante : Traefik, cloudflare, docker, etc. Le tout avec de vraies bonnes raisons

Reflections on 10,000 Hours of Programming

Plein de bons conseils pratiques pour s'améliorer en programmation

Utiliser Proxmox avec une adresse ip publique

Je cite l'auteur :

Le but de cet article est de mettre en place un Proxmox chez un hébergeur ne proposant qu'une unique IP (v4 et/ou v6) disponible sur un serveur dédié. Le but sera que les machines virtuelles disposent d'internet et qu'il soit possible de rediriger des ports en local vers des services derrière les machines virtuelles.

The Expert Blind Spot In Software Development

L'auteur explique un problème qui peut se poser quand on essaye d'enseigner quelque chose à quelqu'un : il peut arriver un moment où ce qui paraît évident à l'enseignant ne l'est pas pour l'apprenant. L'auteur donne quelques pistes pour pallier ce problème.

D’où vient la résistance du verre Pyrex® ? - Couleur-Science

L'explication est claire :)

The Differences Between Interpreter and Compiler Explained

En résumé :

  • Le code machine est un ensemble d'instructions bas niveau pour une famille spécifique de processeurs (CPU).
  • Le langage assembleur (ASM) est très proche du code machine, mais il est plus facile à comprendre par les humains. Vous avez besoin d'un assembleur pour le convertir en code machine.
  • Un compilateur est simplement un convertisseur d'un langage à un autre. Beaucoup de compilateurs convertiront du code source en code machine avant d'exécuteur le programme (compilation AOT, Ahead Of Time)
  • D'autres compilateurs convertiront le code source en bytecode, qui est similaire à de l'assembleur. Ce bytecode sera ensuite traduit par un interpréteur (ou machine virtuelle), ou même compilé en code machine tout en exécutant le programme (compilation JIT, Just In Time)
Git par la pratique (15) – Supprimer des fichiers

Une explication très claire sur la suppression de fichiers dans git

Quick Tip: How to Hash a Password in PHP — SitePoint

Tout est dans le titre

Richard Dern - Rant : Le son numérique, c'est de la merde

Un coup de gueule justifié

Global Variables and States: Why So Much Hate?

En résumé de l'article :

  • Les états globaux mutables doivent être évités à tout prix.
  • On peut réduire le scope d'un état mutable - c'est le but - en passant cet état en tant qu'argument d'une fonction, en utilisant l'injection de dépendances ou des objets de contexte (similaires aux Value Objects).
  • Les variables globales ne sont que le sommet de l'iceberg : le plus important est de respecter le principe d'encapsulation, et il y a plusieurs manières de ne pas le faire... Les états globaux mutables ne sont qu'un exemple extrême.
  • Les états globaux immutables sont moins pires, mais il est préférable malgré tout de les éviter.
Babel et la transpilation de code JavaScript - Alsacreations

Une courte introduction à Babel

Recherche de contenu de repository sur Debian/Ubuntu – Le blog de Seboss666

Tout est dans le titre

Should We Follow The Open-Closed Principle?

Une critique argumentée du principe ouvert/fermé...

8 Steps to Find the Best Web Developer Job

Tout est dans le titre

Une histoire de font – Blog Libre

Un petit souci lors de la mise à jour d'une Debian sid : un changement de font non désiré... L'auteur montre comment il l'a résolu

Migrating messenger queue from Doctrine to a different transport - Locastic

Doctrine est souvent le premier choix lorsqu'on commence à utiliser Symfony Messenger... mais ce n'est pas le meilleur choix lorsque les messages en attente sont très nombreux. L'auteur montre comment migrer ceux en attente vers le nouveau gestionnaire de queue (RabbitMQ ou autre)

Making a symfony third party bundle extensible - DEV Community 👩‍💻👨‍💻

Tout est dans le titre

How to Fix Memory Leak in Doctrine Migrations - JoliCode

L'astuce consiste à ne pas inclure le DebugMiddleware - l'auteur montre comment faire.

Linux sur un MacBook Pro 13″ de 2009 – Le blog technique de Microlinux

Tout est dans le titre

Comment j'ai (presque) foutu en l'air une demi-journée de boulot | Blog | Superflu Riteurnz | ptilouk.net studios

Ne jamais oublier de commiter son travail :) sinon la commande magique qui a sauvé la mise : grep -a -C 2000 "global_objects.add" /dev/sda2 | tee recovered_data Pour l'explication, voir l'article

Mettre à jour un serveur Linux déconnecté d'Internet

L'auteur présente 2 méthodes : utiliser un reverse Socks proxy ou la commande apt-offline

Learn web development

Apprendre le développement web : accessibilité, HTML, images, responsive web design, PWA, formulaires, et CSS avec les équipes de Google

Un cache middleware pour Symfony Messenger | Blog technique de Thomas Jarrand

Mise en place d'un système de cache dans un projet Symfony en s'appuyant sur les composants symfony/messenger et symfony/cache.

How To Build A Magazine Layout With CSS Grid Areas — Smashing Magazine

Un tuto intéressant sur l'utilisation des grilles CSS

Mon FOSDEM 2023 - Samedi

Le compte rendu de Zwindler à propos des conférences du FOSDEM auxquelles il a assisté le 1er jour - il s'agit de conférences sur des sujets DevOps (Kubernetes, Docker, cGroups, containers, etc.)

Enable organization-level CI/CD controls in Ansible automation controller using configuration as code | Enable Sysadmin
Optimizing The Image Element LCP — Smashing Magazine

L'autrice donne une recette à suivre pour optimiser la métrique LCP (Largest Contentful Paint) dans le cas d'une image.

Set up base configurations for Ansible automation controller using GitLab CI | Enable Sysadmin
La différence entre npm install --save-dev et --save

Tout est dans le titre

un court THREAD pour APPRENDRE À TRAVAILLER AVEC VOS INFORMATICIENS - Liens en vrac de sebsauvage

PTDR

How to create Custom DQL Function — Symfony

Comment étendre les capacités de Doctrine

Online File Generators for Laser Cutting - Maker Design Lab - Warrior du Dimanche

Je cite

Plein de générateurs de SVG de découpe au laser pour des modèles de boîtes de toutes sortes et formes, de roues dentées, de puzzles etc... et même des découpes de boîtes en papier...

Shoelace: A forward-thinking library of web components.

Une bibliothèque de composants, concurrente de Bootstrap - l'approche est intéressante car utilisant des Web Components

Refusons la surveillance biométrique | Grise Bouille

Tout est dans le titre

Sculpfun S9 - Gravure & Découpe laser pas trop cher [billet long] - Warrior du Dimanche

Le test par le Warrior du Dimanche d'une graveuse découpeuse laser

Le nullish coalescing operator en JavaScript

Tout est dans le titre

Build a Grafana dashboard to visualize data using Ansible and Podman | Enable Sysadmin

Tout est dans le titre

mjl-/mox: modern full-featured open source secure mail server for low-maintenance self-hosted email

Tout est dans le titre

Outils gratuits d'intelligence artificielle pour détecter le contenu généré via ChatGPT

Tout est dans le titre

Configure a container to start automatically as a systemd service

Comment configurer Podman pour qu'il démarre automatiquement un conteneur au boot de la machine, grâce à la création d'un service systemd

Putting Gears In Motion: Animating Cars With HTML And SVG — Smashing Magazine

L'auteur montre comment animer un SVG avec l'utilisation de animateMotion

Retour sur Blocky et les résolveurs DNS

Ça a l'air bien, Blocky

Git par la pratique (17) – Renommer des branches

En résumé : git branch --move

Git par la pratique (16) – Renommer des fichiers

Utiliser git mv de préférence ^^

Cohesion and Coupling in Software with Examples

Dans cet article, l'auteur explique la relation entre cohésion et couplage. Pour paraphraser son résumé final :

  • De par les limitations de notre cerveau pour appréhender des systèmes complexes, nous cherchons à modulariser notre base de code en parties indépendantes.
  • Un module est un ensemble d'éléments qui devraient être autant liés entre eux (cohésion) que possible, avec une frontière nette entre "l'intérieur" et "l'extérieur".
  • Les connexions entre les différentes frontières des modules devraient être réalisées via leurs interfaces, une manière contrôlée de communiquer à travers les frontières.
  • La force du couplage de ces connexions dépend du nombre et de la complexité des interfaces des modules, la quantité et la nature des données échangées, et si les composants des modules changent souvent en même temps.
  • Il y a plusieurs types de couplage, et de nouveaux sont toujours "découverts".
  • Créer des modules cohérents est la meilleure manière d'éviter un couplage fort. Autrement dit, des modules faiblement couplés ont souvent une grande cohésion.
  • Une cohésion imprécise ou de haut niveau devrait être évitée - il s'agit d'une cohésion artificielle (des bouts de code rassemblés en un même endroit bien qu'ils n'aient rien à voir). À la place, nous devrions tendre vers des modules dédiés à la résolution de problèmes métiers bien définis.
  • Il est plus facile d'arriver à une grande cohésion fonctionnelle avec des modules mécaniques, tels que des modules dédiés à la résolution de problèmes mathématiques (ceux ci ont peu de chance de changer)
Git par la pratique (14) – Rectifier le tir

Les 2 commandes à connaître :

  • git restore --staged monfichier -> si vous avez ajouté monfichier au stage, cela permet de l'enlever de cette étape
  • git restore monfichier -> si monfichier n'était pas encore suivi ("stage"), cela annule les modifications
Understanding Authentication In Websites: A Banking Analogy — Smashing Magazine

Un article très complet sur l'authentification - l'analogie avec la banque est amusante 😀

Defining Legacy System

L'auteur présente différents points de vue pour définir ce qu'est un système "legacy".

React dans Symfony avec Vite - DEV Community 👩‍💻👨‍💻

Tout est dans le titre

Le pattern Stratégie avec Symfony

Présentation de ce design pattern, et surtout des cas d'utilisation pertinents

Optimizing OneToMany Doctrine collections | by Yan Ivanov | Feb, 2023 | Medium

Tout est dans le titre

Serializing api outputs with Symfony serializer - DEV Community 👩‍💻👨‍💻

Tout est dans le titre

Fix Symfony tests with PHPUnit 10 - DEV Community 👩‍💻👨‍💻

Bon à savoir

The Proxy Bay - Unblock The Pirate Bay

Au cas où ^^

Le scroll maîtrisé avec scrollIntoView - Alsacreations

Je cite l'auteur La méthode scrollIntoView() permet de faire défiler un élément de la page web de manière à ce qu'il soit visible à l'écran en utilisant des options de défilement personnalisées si nécessaire

Judging Quickly Features as Easy to Implement: a Wrong Habit

Conclusion de l'article : éviter le plus possible d'employer des mots comme facile, simple, rapide, ... quand on décrit une fonctionnalité à implémenter

A Guide to Python Exception Handling — SitePoint

Tout est dans le titre

Linux sur les vieux iMac (4) – La carte graphique – Le blog technique de Microlinux

Sutie de https://blog.microlinux.fr/imac-03-carte-reseau/ - installation de la carte graphique, avec quelques astuces en cas d'écran noir

L'API Vibration - Alsacreations

Tout est dans le titre

Devbox et les environnements isolés · 50 Nuances d'Octets

Présentation de devbox, un outil basé sur les paquets Nix et qui permet de se construire des environnement isolés - un complément à Docker ?

Mon FOSDEM 2023 - Dimanche

La suite de https://blog.zwindler.fr/2023/02/04/mon-fosdem-2023-samedi/ : les conférences du FOSDEM (plutôt orientées DevOps, OpenTelemetry et Grafana) du second jour

How TaggedLocator Can Help You Design Better Symfony Application

L'auteur montre l'utilisation du TaggedLocator via un exemple simple et explique en quoi c'est plus approprié que la ServiceSubscriberInterface.

Linux sur les vieux iMac (1) – Identification & Installation d’un SSD – Le blog technique de Microlinux

Tout est dans le titre

Comment fonctionnent les spray anti-buée pour lunettes ? - Couleur-Science

Toujours aussi intéressant

Set up GitLab CI and GitLab Runner to configure Ansible automation controller

Tout est dans le titre

Mon premier code sur un ordinateur quantique

Une bonne introduction à ce que sont les ordinateurs quantiques

Modèles de CV pour Writer de LibreOffice saison ultime (?) - LinuxFr.org

Tout est dans le titre