Monthly Shaarli

All links of one month in a single page.

July, 2022

HTML Over The Wire

Une alternative aux appli Web classiques qui sont entièrement en Javascript et reçoivent du JSON.

Ici le concept c'est plutôt d'envoyer du html pour remplacer à la volée certaines parties de la page.

Du coup le rendu se fait côté serveur et le frontend est beaucoup moins complexe.

C'est Basecamp qui pousse ça (la boîte à l'origine de Ruby on Rails)

Que possède les big Tech par secteur
thumbnail

Une infographie sur toutes les marques liées à Apple, Microsoft, Amazon et Alphabet (Google)

Teleport: Easiest, most secure way to access infrastructure
thumbnail

Une plateforme en SaaS pour uniformiser la connexion à tout ce qui peut exister: serveurs, bases de données, applications, bureaux, K8S, etc.

Ça permet de centraliser les accès à tous ses services via une plateforme unique.

Ça me fait toujours un peu peur ce genre de chose qui centralise tout ce qui est sensible car du coup ça devient le SPOF de l'infrastructure.

Après je comprends le besoin aussi car des centaines d'utilisateurs qui accèdent à des dizaines de services différents c'est très compliqué à sécuriser et monitorer.

Critique of React Pure Hooks

Un autre article qui analyse les faiblesses des Hooks de React.

Une source de bug très courante est l'oubli d'une propriété dans le tableau de dépendances avec useEffect.

Le respect de la Règle des Hooks qui force le nombre de Hooks d'un composant à toujours être le même impose des architectures de composants contre nature.

L'auteur continue son raisonnement en avançant notamment que depuis les Hooks, React peut être utilisé comme un framework alors que ce n'était pas vraiment prévu, ce qui cause pleins de problèmes d'architectures.

Top 10 Mistakes Organizations Make to Become Agile
thumbnail

Une liste des erreurs les plus courantes lors de la mise en place de processus Agiles.

Mon top:

  • Focus on output: ce qui compte c'est l'impact réalisé par les livrables et non les livrables eux-mêmes
  • Agile is IT only: l'ensemble des équipes (marketing, sales, product) doivent travailler en Agile
  • Implementing immutable processes and tools: la base de l'Agilité c'est justement la capacité à évoluer

Si on résume la pensée de l'article, être Agile c'est:

  • Focus sur la valeur ajoutée aux clients
  • Implication forte des équipes au plus prêt du produit
  • Être capable de constamment remettre en question le mode de fonctionnement
Why I Like Hexagonal Architecture
thumbnail

Un article sur l'architecture hexagonale qui explique notamment la distinction entre port et adapter.

L'auteur fait aussi un commentaire intéressant I’ve never applied these architectures to the letter, though.

Comme pour tout, il faut éviter de rentrer dans une application dogmatique de tel ou tel architecture, process, etc

L'architecture hexagonale offre un excellent moyen de structurer son code en modules indépendants mais elle doit être utilisée avec un regard critique et peut être contournée lorsque cela s'avère nécessaire.

Detect JavaScript Memory Leaks with queryObjects

Un autre article sur la recherche de memory leak en Javascript.

L'auteur utilise une fonctionnalité non documenté de Chrome qui permet d'afficher toutes les instances d'une classe.

class User {
  //... 
} 

const user = new User();

// find all instances of User
queryObjects(User);

Ça ne marchera pas pour les POJO du coup mais c'est un bon outil supplémentaire pour aider dans la recherche des fuites mémoires.

Renovabot, Universal dependency update tool that fits into your workflows
thumbnail

Un bot qui s'occupe d'ouvrir des PRs pour mettre à jour les dépendances des projets. (Directement disponible sur Github)

Lorsqu'elles ne sont pas mises à jour, les dépendances font croître la dette technique.

Cela pose de potentiels problèmes de sécurité avec des failles non patché mais ça rend aussi plus complexe les mises à jour ultérieurs.

Product Management : histoire, principes et fonctionnement
thumbnail

Les 3 métiers du Product Management

  • Product Manager
  • Product Designer
  • Product Owner

L'article parle des tâches et responsabilités de chaque rôle puis fait un focus sur les missions du Product Manager: concevoir, piloter et délivrer un produit.

Remove unwanted objects from photos by dragging boxes

Un outil super utile de retouche photo pour enlever des objets simplement en traçant des rectangles autour!

Novu - The open-source notification infrastructure
thumbnail

Un outil pour gérer et centraliser les notifications envoyées.

Ça supporte un paquet de providers SMS et Email et en bonus ça propose des features comme d'envoyer une push notif si l'utilisateur est en ligne et de regrouper les notifications dans un email le cas échéant.

Ce qui est top c'est qu'ils proposent un SaaS bien sur mais aussi d'auto-héberger la solution !

Grafana Mimir
thumbnail

Une solution de stockage des metrics aggrégées avec Prometheus:

  • scalable horizontablement
  • multi-tenants (super pour des metrics qui proviennent d'un SaaS)
Blog Stéphane Bortzmeyer: Le NIST a choisi ses algorithmes de cryptographie post-quantiques

Le NIST a choisi les algorithmes de cryptographie à clé publique que l'on pourra utiliser dans un monde post-quantique !

Ces algorithmes ont été selectionné suite à un concours organisé depuis 2016 par les USA.

C'est ce qui avait été fait pour le chiffrement symétrique AES (Advanced Encryption Standard), c'est l'algorithme Rijndael qui avait gagné le concours en 2001.

Ce sera donc:

C'est ensuite un chiffrement AES classique qui devrait être utilisé pour les données, comme c'est le cas aujourd'hui.

C'est une grande nouvelle car lorsque les calculateurs quantiques seront disponibles, ils mettront à mal la cryptographie à clé publique actuelle sur laquelle repose tous nos échanges.

Notamment via l'algorithme de Shor qui permet de factoriser en nombre en produit de facteurs premiers et donc de casser les crypto-systèmes basé sur RSA mais aussi les plus modernes utilisant ECDSA.

Maintenant que le NIST a choisi, il se passera très certainement plusieurs années avant que ces algorithmes ne soient mis en place pour nos échanges de clés.

Pour les plus curieux, une implémentation a déjà été faite par Cloudflare en Golang: Circl

Oh My Git! - Learning by playing
thumbnail

Un jeu pour apprendre à utiliser Git !

Ce qui est génial c'est de pouvoir visualiser l'évolution des structures internes à chaque commande 😄

Un autre excellent site pour apprendre Git visuellement: https://learngitbranching.js.org/

Et un autre site pédagogique visuel en mode bac à sable: https://git-school.github.io/visualizing-git/

Ce sont ceux que j'utilisais lorsque je donnais des cours mais aujourd'hui je conseillerais d'utiliser Oh My Git plutôt :-)

Built-in Bash Parameters That Every Developer Should Know

Liste de builtin Bash et comment les utiliser

Celle que je retiens à force d'en avoir besoin:

# Positional arguments
$0 $1 $2 ... 

# All arguments as an array
$@

# Return code of the last command
$? 

# Print each script line as it is executed (debug) 
set -x

# Exit the script immediately if a command return an error (CI/CD) 
set -e
Comment Strava permettait de remonter la piste d’agents des renseignements français et étrangers
thumbnail

Excellent article de NextInpact sur l'utilisation de Strada (le réseau social sportif) et des traces GPS des utilisateurs pour identifier le personnel des services de renseignements, et même de désanonymiser certains profils !

C'est un très bon exemple d'OSINT (Open Source Intelligence), une discipline qui consiste à collecter du renseignement depuis des sources publiques.

PS: si vous n'avez pas d'abonnement sur ce média indépendant alors il suffit d'attendre quelques jours pour que l'article soit disponible.

Pas de pub, pas de trackers, pas d'actionnaires, NextInpact est un des derniers média indépendants High Tech de qualité et ils ont besoin de soutien!

JavaScript object destructuring tips
thumbnail

Tous les patterns de destructuration d'objets en Javascript

Un de ceux que je trouve le plus utile c'est celui pour avoir une valeur par défaut si la propriété n'existe pas.
C'est très utile pour les options par défaut:

function checkout (name, { currency='€' } = {}) {
  console.log(currency);
}

checkout('aschen'); // print €
checkout('aschen', { currency: '$' }); // print $

On peut même mixer ça avec un type:

function checkout (name, { currency='€' }: { currency: string } = {}) {
  console.log(currency);
}

Sinon j'avais jamais utilisé celui pour conserver le reste:

const user = {
  name: 'Chris',
  age: 33,
  username: 'DailyDevTips',
};

const { name, ...rest } = user;
Les algorithmes génétiques démystifiés

Une excellente suite d'articles sur les algorithmes génétiques.

Les algorithmes génétiques sont une famille d'algorithmes d'intelligence artificielle qui s'inspire du fonctionnement du vivant pour trouver une solution à un problème.

Individus adaptés, reproduction, mutations, c'est une reproduction de la théorie de l'évolution en informatique.

Une implémentation C++ 👉 https://github.com/Aschen/genetics-algo

J'ai eu l'occasion d'utiliser concrètement ce genre d'algorithmes pour un bot de trading, même si cela n'avait pas marché (sur-apprentissage) c'était quand même très instructif.

Taking a Look at the New Pipe Operator in JavaScript
thumbnail

Proposition d'un operateur pipe (|>) en Javascript.

Plutôt que d'encapsuler ou de chainer des appels à des fonctions, on pourrait utiliser l'opérateur pipe.

// Nesting
divide(half(convert('6')))

// Chaining
'6'.convert().half().divide(2)

// Pipe
6 |> convert(%) |> half(%) |> divide(%, 2)

Perso je suis pas vraiment pour rajouter des couches de complexité supplémentaire à un langage qui ressemble déjà au monstre de Frankenstein.

Ça va compliqué le boulot de tout ceux qui travaillent avec l'AST et rendre le langage plus difficile à aborder pour des nouveaux venu.

Manticore: a faster alternative to Elasticsearch in C++ with a 21-year history

Une alternative à ES qui est un fork de Sphinx Search.

A priori ils proposent de meilleurs performances à la recherche et à l'indexation que Elasticsearch en plus de supporter une syntax SQL.

PRO:

  • meilleurs perfs de recherche et d'insertion
  • support SQL (syntax et clients existants)
  • 100% open source (GPLv2 + Apache 2)
  • recherche temps-réel (max 1sec avec ES)

CON:

  • obligé de définir le schéma à l'avance
  • moins de ressources dispo car moins populaire
  • robustesse du scaling à prouver
  • pas complètement intégré avec les autres outils de la suite Elastic

Si vous avez besoin d'ajouter un moteur de recherche et que vous n'avez ni besoin de fonctionnalités très avancé, ni de scale à plusieurs centaines de millions de documents alors c'est une alternative à creuser.

Tao of Node - Design, Architecture & Best Practices
thumbnail
Carbon language, the C++ successor
thumbnail

Un nouveau langage conçu pour être la relève du C++ avec une syntax proche, des performances équivalentes et surtout une compatibilité avec les libs C++ existante.

Le langage compile vers du bytecode LLVM et on profite donc de tous les outils de l'écosystème.

Encore une fois, c'est des ingénieurs de chez Google qui poussent pour un nouveau langage, c'est encore expérimental mais prometteur 👌

What I Wish Someone Would Have Told Me About Using Rabbitmq Before It Was Too Late

Un très bon retour d'expérience sur RabbitMQ pour un système de queuing robuste, scalable et surtout maintenable.

  • Réalisez une expertise de votre solution pour en comprendre les limites (2000~3000€ bien investis)
  • Configurez le cluster pour qu'il mette en pause les nœuds de la partition minoritaire en cas de désynchronisation réseau

RabbitMQ reste une très bonne alternative à la grosse usine à gaz Kafka qu'on sort à toutes les sauces.

Matrix, le protocole décentralisé made in France qui cartonne en Ukraine
thumbnail

Le protocol Matrix est à la messagerie ce que sont les protocol IMAP et SMTP au mail.

Ce protocol open source permet l'interoperabilité des échanges de messages instantanés entre plusieurs utilisateurs hébergeant leurs données sur plusieurs serveurs décentralisés !

Décentralisé, chiffré de bout en bout, souveraineté des données personnelles, texte, audio et vidéo, Matrix a tout pour plaire.

C'est pour ça qu'il a explosé en Ukraine à cause du risque de coupures d'internet ou qu'il est utilisé par l'État français après le scandale des Macron Leaks sur Telegram / WhatsApp.

Pour tester vous pouvez utiliser le client web Element et vous créer un compte sur l'instance principale matrix.org ou choisir un autre hébergeur. Envoyez moi un message à @aschen:matrix.domainepublic.net 😉

Style scoping versus shadow DOM: which is fastest?
thumbnail

Une comparaison entre Chrome, Firefox et Safari sur la rapidité de leurs moteurs de rendu CSS.

Firefox remporte haut la main avec son moteur Stylo avec des performances entre 25 et 100 ms

Chrome se situe plutôt entre 250 et 1000 ms ! (Sauf pour le Shadow DOM)

benchmark results

Qatar connection : les documents qui visent Carla Bruni-Sarkozy, BHL et Laurent Platini
thumbnail

Une enquête des journalistes de Blast sur des fonds qui auraient été distribués par le Quatar à des personnalités et des ONG:

  • Carla Bruni Sarkozy: 6 millions d'euros en 2009
  • Bernard-Henri Lévy: 9.1 millions d'euros en 2011
  • Laurent Platini (le fils du footballeur): 9.1 millions d'euros en 2010
  • Human Rights Watch: 3 millions d'euros en 2018

Ce qui est rigolo c'est si on replace ces dons dans un contexte historique.

Bernard-Henri Lévy pendant les révolutions arabes, avant l'offensive Française en Libye pour laquelle il a fait du lobbying et qui à priori arrangeait les qatari pour étendre leur zone d'influence

Laurent Platini avant que la FIFA se réunisse pour voter l'attribution de la coupe du monde 2022.

Human Rights Watch qui a par la suite publié des rapports faisant l'éloge des "progrès" du Qatar en termes de droits humains.

Tim Berners-Lee, l'inventeur du Web : « oubliez le Web3, mon Internet décentralisé n'a pas besoin de blockchain »
thumbnail

Tim Berners-Lee flingue le Web3 qui promeut la décentralisation à base de blockchain.

Selon lui "cette nouvelle itération du Web était inutile".

C'est un peu hypocrite de sa part après avoir vendu un soi disant NFT à plusieurs millions d'euro mais au moins ça donne un autre son de cloche que celui des ayatollah de la blockchain qui veulent "révolutionner" le monde.

Non, la blockchain ne va pas décentraliser internet et la blockchain ne va pas remplacer le système bancaire

Why the Windows Registry sucks … technically
thumbnail

Une analyse technique du Registry de Windows, c'est la ou Windows range la configuration.

A priori c'est bien de la merde 😁

The major difference is that this Registry filesystem format is half-arsed. The format is badly constructed, fragile, endian-specific, underspecified and slow.

Would you like architects with your architecture?
thumbnail

Les 4 différentes organisations possibles avec un architecte (la dernière c'est ne pas avoir d'architecte du tout)

De mon expérience, tant que les membres de l'équipes (AKA les développeurs) sont aussi capable de faire l'architecture alors on a la meilleure configuration possible car les mêmes personnes réfléchissent aux choix architecturaux et à la manière de coder.

Il vaut toujours mieux réduire la bureaucratie et se concentrer sur ce qui apporte vraiment de la valeur au produit, c-a-d les lignes de codes produites pour réaliser une fonctionnalité.

Deeper testing of Bun’s performance and compatibility against Node.js

On commence à voir des tests des performances de Bun par rapport à Node.js.

Pour l'instant il manque encore trop de compatibilité à Bun avec les lib Node.js pour pouvoir aller très loin (pas de child_process) par exemple.

Dans cet article, l'auteur note un gain sensible de performances avec Bun.

State of PostgreSQL 2022 - 13 Tools That Aren't psql
thumbnail

Un ensemble d'outils pour PostgreSQL.

When the window is not fully open, your TCP stack is doing more than you think

Un article très (trop?) technique sur le fonctionnement des buffer TCP dans le kernel Linux.

How to drive away your best engineers
thumbnail

L'article revient sur toutes les raisons qui font partir les employés d'une organisation.

Les plus importantes de mon point de vu:

  • employer des managers qui ne savent pas faire de logiciels ou trop de managers
  • mauvaise specification des tâches
  • trop de réunions (voir manager vs maker schedule)
Craquage d'archives chiffrées (PKZIP: Zip ZipCrypto, Winzip: Zip AES, 7 Zip, RAR) - ACCEIS
thumbnail

Plusieurs méthodes pour attaquer un fichier .zip ayant été chiffré.

Le format obsolète ZipCrypto, utilisé par Windows, est le plus vulnérable à cause d'une attaque fonctionnant même pour des mots de passes forts.

Pour un chiffrement AES classique on en revient à un crack avec John The Ripper ou Hashcat

Can We All Just Admit React Hooks Were a Bad Idea?
thumbnail

Un article qui va dans le sens inverse de la tendance actuelle autour de l'utilisation des Hooks dans React.

L'auteur disserte sur le non respect des principes SOLID par les Hooks et sur les problèmes de dettes technique que cela créé.

Les Hooks sont vraiment quelque chose d'étrange, ils ne respectent pas la programmation fonctionnelle, ni la programmation objet.

Ce sont juste des helpers pour écrire et lire de la donnée dans une sorte de gros objet global, l'avantage avec le système de props étant qu'on n'a pas besoin de les passer entre chaque composant.

Qui réchauffe le climat (et comment) ?
thumbnail

Très bon résumé sur les gaz à effets de serre et leur origine.

J'aime beaucoup ls changements de perspective sur les groupes de pays émetteurs en fonction de différents critères: émission de carbone vs empreinte carbone, total cumulé vs émission actuelle

How I Experience Web Today

C'est exactement ça malheureusement.

Même avec un l'excellent ublock origin le Web actuel est full of garbage.

Rust, SolidJS, and Tauri: Create a cross-platform desktop app
thumbnail

Le framework pour application Tauri prend de plus en plus de maturité pour remplacer notamment Electron.

Concrètement le backend de l'application est à écrire en Rust et le frontend peut être en Javascript (React, Vue, Angular, etc).

Les deux vont communiquer via une API RPC:

// (Rust) Tauri command

#[tauri::command]
fn return_string(word: String) -> String{
    return word
}

// (Javascript) Command invocation
const result = await invoke("return_string", {
  word: "This is the argument"
});

J'espère sincèrement que ça prendra car les application Electron sont vraiment trop lourdes avec des appli comme Slack qui sont régulièrement à ~15-20% du CPU même en idle (!!).

Accidentally Turing-Complete

Un système Turing-Complete signifie que l'on peut représenter n'importe quel programme avec le dit système.

Bien sur les langages de programmations sont Turing-Complete

Ici une liste de système qui sont Turing-Complete par "accident" !

J'aime beaucoup l'exemple de Typescript notamment

Bun is a fast all-in-one JavaScript runtime
thumbnail

Un autre runtime Javascript côté serveur concurrent à Node.js.

C'est assez intéressant car Bun est développé from scratch (en Zig), et il n'est pas basé sur le moteur Javascript v8 de Chrome mais sur JavascriptCore, celui de Safari.

Dans les promesses de Bun:

  • Plus rapide et moins de mémoire consommé que Node.js
  • Transpiler et bundler intégré
  • Compatible avec l'écosystème (node_modules et NPM)

Le projet est encore en cours de développement (voir ce qu'il manque) et donc pas encore recommandé pour de la production.

L'historique de navigation web et les SMS ont été utilisés pour poursuivre des femmes pour avortement
thumbnail

Le simple fait de chercher sur Google comment avorter peut être retenu à charge contre vous.

Dans le roman 1984 d'Orwell, le "crime de pensée" est un acte incriminant en soi, Big Brother en a rêvé, les États Unis et Google l'ont fait.

Encore un très bon exemple de l'importance du contrôle sur ses données personnelles, si vous n'avez rien à caché aujourd'hui ça ne sera peut-être pas le cas dans 10 ans lorsqu'un nouveau gouvernement sera en place.

Wasp, A programming language that understands what a web app is.
thumbnail

Une autre tentative de framework fullstack mais cette fois en utilisant un langage de haut niveau pour décrire une application.

Le "compilateur" Wasp (plutôt un générateur) va ensuite générer le code backend (Node.js), frontend (React) et le modèle de données (Prisma ORM).

C'est intéressant comme démarche mais à priori je vois deux limitations importantes:

  • introduction d'un nouveau langage dans la stack (qui plus est un langage peu mature)
  • manque de personnalisation du code généré (pour aller au delà du CRUD quoi)

Ça ressemble à ça le WASP:

// file: main.wasp

app TodoApp {
  title: "Todo App"
}

route RootRoute { path: "/", to: MainPage }
page MainPage {
  component: import Main from "@ext/pages/Main.js" // Importing React component.
}

query getTasks {
  fn: import { getTasks } from "@ext/queries.js", // Importing NodeJS code.
  entities: [Task]
}

entity Task {=psl
    id          Int     @id @default(autoincrement())
    description String
    isDone      Boolean @default(false)
psl=}