Monthly Shaarli
August, 2022
Un article explicatif sur le versionning d'API chez LinkedIn.
Conceptuellement, ils vont dupliquer les ressources en interne en incluant la version de l'API Foo => FooResource_v20220201
Ils ont ensuite un service de conversion qui va convertir les ressources dans le dernier format possible pour éviter d'avoir à dupliquer le code.
Un super retour d'expérience sur l'utilisation de Flutter Web pour créer une PWA !
Les équipes ont décidé de faire une PWA pour éviter le problème de gestion d'anciennes versions d'une app mobile dans leur parc.
A part quelques difficultés autour de l'utilisation de l'appareil photo, ils n'ont pas rencontré de problème.
C'est vraiment encourageant pour Flutter Web car la techno est en production depuis seulement 1 an et semble déjà à la hauteur des promesses.
Ce genre de choix permet de tester rapidement un concept avec une PWA et de publier plus tard des applications natives sur les stores.
Un outil qui permet d'améliorer la résolution des images grâce à un réseau de neurone
Un exemple d'utilisation des Protocol Buffers en Node.js.
L'exemple utilise l'excellente lib Protobuf.js qu'on utilise aussi dans le coeur de Kuzzle pour la communication entre les noeuds du cluster ;-)
J'en parlait ici aussi https://links.aschen.tech/shaare/R6dzhw
Deno annoncent quelques changements avec notamment le support des packages JS en provenance de NPM!
Ils annoncent aussi qu'ils souhaitent être le moteur JS le plus rapide.
Je ne serais pas surpris que cela soit poussé par la sortie de Bun.js qui a de très bonnes performances, supporte le typescript et les packages NPM
VScode est un produit "gratuit" de Microsoft, donc nous sommes les produits.
Plus de 1600 données différentes sont collectées par VSCode avec notamment:
- toutes les informations de sessions (temps passé, dernière session, etc)
- toutes les informations sur votre ordinateur
- tout ce que vous faite dans l'IDE (ouverture de fichier, search & replace, etc)
Il est impossible de désactiver totalement la télémétrie.
Si possible, il faut se tourner vers l'alternative libre VSCodium
Un article présentant un framework pour micro-frontend avec tout le tooling pour se simplifier la vie.
Attention car même avec Piral, gérer un ensemble de micro-frontend est beaucoup plus compliqué.
Une telle décision d'architecture doit se reposer uniquement sur un besoin d'organisation d'une grande équipe en plus petites équipes focalisée sur un domaine de l'application.
Plus d'info sur les micro-frontend https://links.aschen.tech/shaare/AuKMeA
Un autre article qui parle d'Equity, orienté sur les mécanismes qui existent au US (le dernier parlait des mécanismes Français, les BSPCE)
Ils donnent une liste de "red flags" de certaines entreprises qui font miroiter monts et merveilles:
- termes abusifs si on quitte l'entreprise, comme rendre les actions si on part avant 4 ans
- période d'activation (exercer ses BSPCE pour acheter des actions) supérieur à 4 ans
- courte période pour exercer ses BSPCE si on quitte l'entreprise
- BSPCE donnés en euro plutôt qu'en nombre
Un revendeur de skin CS:GO s'est fait hacké ses comptes contenant les skins et les voleurs ont donc mis la main sur plus de 6 millions de dollars de skins.
Cette industrie du skin est vraiment dingue, ça rappelle beaucoup celle des NFT sauf qu'il n'y a pas besoin de blockchain pour ça au final 🙄
Un chercheur en sécurité a réussi à obtenir un accès route sur le matériel de son récepteur Starlink.
Il a réalisé l'exploit en rajoutant un module physique branché directement dans les circuits imprimés!
Les prix du métavers s'effondrent, pas étonnant :-)
Depuis février:
- prix moyen par parcelle de 15K à 4K
- volume des échanges de 225 millions à 20 millions
Comme le dit l'article, il n'y a que très peu de cas d'usages intéressants pour une blockchain.
Il note 3 critères à respecter pour qu'un cas d'usage soit intéressant:
- besoin d'une base de données partagée
- impossible de faire confiance aux pairs
- besoin de rien d'autre
Une monnaie virtuelle respecte est un bon exemple.
Tous les autres ne le sont pas car ne respectent pas un des critères:
- transferts d'argent internationaux
- levée de fonds dans la blockchains
- smart contrats
Un autre exemple de projet réussi à base de blockchain est le stockage décentralisé comme ce que fait Sia.
Une collection d'affiches qui traitent de différents sujets sous forme graphique :-)
(Merci à Gaël pour le partage)
Une super présentation sur le fonctionnement et l'utilisation de Rust + WebAssembly pour faire une application frontend avec le framework Yew.
L'auteur utilise le framework frontend Yew en Rust.
Comme il le dit à la fin, pour l'instant c'est encore très expérimental et les performances ne sont pas au rendez-vous.
D'ailleurs c'est assez peu probable de pouvoir battre les performances du JS natif en terme de manipulation de DOM.
Aussi, ce genre d'application hybride (2 langages) aura quasiment toujours des performances inférieurs à cause de l'overhead du boxing / unboxing
Un outil pour renvoyer le traffic puis votre cluster Kubernetes vers votre environnement local, parfait pour Debug ou tester son code avec de vraies données 👌
Concrètement il faut choisir le pod depuis lequel on veut rédiriger le traffic et s'assurer qu'on a le service local tournant sur le même port sur sa machine.
Un article très complet sur les bonnes pratiques lors du développement d'une app Flutter.
Points abordés:
- linters
- utilisation de l'IDE pour refacto
- différents types de tests (et les Golden Tests propres à Flutter)
- code coverage
- CI/CD
- mesurer la qualité du code
Un gestionnaire de mot de passes Open Source avec support multi-plateforme (et extensions navigateur)
La version gratuite est suffisante pour un usage quotidien et la version enterprise avec partage commence à 3.5 $ / mois
En Open Source pour enterprise en 100% gratuit il y a aussi Passbolt qui propose une application en SaaS.
Un excellent document qui parle de tests unitaires et tests fonctionnels.
En règle général, il vaut mieux se concentrer sur les tests fonctionnels plutôt que les tests unitaires car ces derniers sont très couteux à maintenir, notamment leur de remaniement de l'architecture du code.
Quelques extraits:
Few developers admit that they do only random or partial testing and many will tell you that they do
complete testing for some assumed vision of complete. Such visions include notions such as: “Every line of code has been reached,” which, from the perspective of theory of computation, is pure nonsense in terms of knowing whether the code does what it should.Tests should be designed with great care. Business
people, rather than programmers, should design most functional tests. Unit tests should be limited to those that can be held up against some “third-party” success criteriaThe purpose of testing is to create information about your program. (Testing does not increase
quality; programming and design do. Testing just provides the insights that the team lacked to do a correct design and implementation.)Don’t underestimate the intelligence of your people, but don’t underestimate the collective stupidity of many people working together in a complex domain.
Article très intéressant sur une sorte de classification des développeurs.
Cela se base sur le ratio entre savoir et expériences.
Junior: Un peu de savoir et aucune expérience.
Middle: Moyennement de savoir et un peu d'expérience
Senior: Beaucoup de savoir et d'expérience, légèrement plus d'expérience
Article explicatif de l'implémentation du Write-Ahead Logging (WAL) dans SQLite.
Le WAL est le mécanisme permettant de garantir que l'on ne perd pas de données lors de la persistence de la base de données sur le disque.
Un REX du gouvernement Britannique qui a enlevé JQuery de ses pages (32Kb compressé).
Ils ont observé une amélioration de 17% des performances en moyenne!
Par contre, ils n'ont pas utilisé d'autre lib JS à la place non plus :-)
Je partage totalement cet opinion sur Typescript du point de vue du développeur de framework.
Quand on est simplement utilisateur, on est content d'utiliser les types et on veut en voir partout.
Quand on doit écrire ces types, c'est rapidement un casse-tête assez important si on veut le faire correctement!
Regardez cette définition dans redux-toolkit par exemple 🙄
Les créateurs de Deno ont même décidé de ne PLUS utiliser Typescript dans leur codebase interne car cela devenait trop complexe de maintenir les types.
Un moyen d'eméttre un bip sur linux à chaque fois qu'une info est envoyée à Google.
Ça fonctionne avec tcpdump et une liste d'IP appartenant à Google.
Chez moi j'ai du spécifier toutes les interfaces avec -i any
Voir le résultat en vidéo
Des ordinateurs qui crashent lorsqu'on joue une musique dessus, et qui font même crash les ordinateurs voisins!
Une musique contenait des fréquences qui correspondaient à la fréquence de résonnance des disques dur de certains modèles de laptop.
Une centrale qui crée du Kérosène à partir de l'énergie solaire, de l'eau et du dioxyde de carbone.
Le rendement énergétique est de 4%, ce qui est énorme comparé à la photosynthèse des plantes (0.1 à 2.5%)
(Via https://lehollandaisvolant.net/?mode=links&id=20220816141619)
C'est vrai que Redux n'est pas forcément nécessaire pour démarrer une app React, tout comme Vuex ne l'est pas pour une app Vue.
Comme pour chaque outil, il faut se demander si l'on en a vraiment besoin et surtout si ça répond à un problème.
Chaque outil rajoute une couche de complexité cognitive supplémentaire qui ralentit et complique le développement.
Article explicatif sur le fonctionnement du streaming vidéo HLS.
Enfaite c'est simplement des petits bouts de vidéo (quelques secondes) qui sont envoyés via HTTP tout simplement.
Ensuite le lecteur s'occupe de les jouer dans le bon ordre.
On peut donc:
- change de résolution en cours de route
- aller à n'importe quel endroit
- encoder en avance et juste "poser" les fichiers sur un serveur HTTP
- profiter des capacités de cache standard de HTTP
Super infographie qui explique le fonctionnement et les différents usages de Redis.
Chaque partie de l'infographie est ensuite détaillée et expliquée avec du texte.
Redis est vraiment un outil incroyable, que ce soit pour ses performances ou pour la richesses de ses fonctionnalités.
(Kuzzle expose Redis aux clients à travers le contrôleur MemoryStorage)
Très bonne vidéo qui résume le coût monétaire et écologique des différents modes de transports.
Super résumé du fonctionnement des BSPCE, de comment les évaluer, les mettre en place, les pièges à éviter, etc
En gros, les BSPCE sont des bons qui donnent le droits d'acheter des actions à un prix définit.
Si on vous donne un BSPCE en 2022 avec un prix d'achat à 10€, alors vous aurez le droit d'acheter une action à 10€ à partir d'une date fixée par le contrat.
L'article termine avec d'autres modes de fidélisation des employés, par exemple des augmentations décidées à l'avance chaque année.
Un article historique sur la naissance de Linux.
Très bonne explication du fonctionnement et des usages de Protocol Buffer, le standard pour encoder et partager des données binaires.
C'est un pseudo langage pour représenter de la données, des nombres, des strings, etc
message Event {
fixed32 count = 42;
string user = 'aschen' ;
}
Des librairies sont disponibles dans tous les langages pour encoder / décoder des messages protobuf.
On peut s'en servir pour envoyer des messages sur le réseau de manière performante (par rapport au traditionnel JSON) mais aussi pour stocker des objets dans des fichiers.
Dans Kuzzle on s'en sert pour une communication efficace entre les nœuds du cluster par exemple
Une histoire intéressante de fréquence 3G mis à mal dans un quartier par un simple tag RFID !
Elastic propose des outils qui indexent les contenus des outils comme Slack, Gmail, Drive et autres pour pouvoir faire de la recherche dedans ensuite.
Ça me fait penser à SteamPipe mais plutôt pour des humains que des API (Steampipe permet des requêtes SQL quand Elastic supporte le langage naturel)
Une compilation de fausse couvertures O'Reilly pour les dev 😁
Une tentative de fishing avec un faux courrier qui ressemble à un avis de recommandé La Poste!
Le népal a été touché par un séisme cet été et un de mes ami qui vit la bas a été durement touché.
Même si ce n'est pas beaucoup, chaque don fait une énorme différence pour lui et sa famille.
J'ai déjà effectué le premier versement des 300 premiers euros que j'ai doublé de ma poche pour palier au plus urgent.
Excellente explication du fonctionnement des GPUs et particulièrement des 4 niveaux de mémoire de travail disponibles.
Une analogie est faite entre un GPU et une entreprise de bureau avec des équipes de personnes qui doivent s'échanger de l'information.
Un exemple de code CUDA, le framework pour bosser sur les GPU Nvidia, est expliqué pas à pas
Je ne connaissais pas Radash mais ça tombe bien parce que je trouvais également que Lodash était vieillissant (et tellement lent..)
La librairie standard de Javascript est tellement inexistante que ce genre de lib est quasiment obligatoire malheureusement.
Mes fonctions préférées:
Remplacement de Bluebird.map:
import { parallel } from 'radash'
const userIds = [1, 2, 3, 4, 5, 6, 7, 8, 9]
// Will run the find user async function 3 at a time
// starting another request when one of the 3 is freed
const users = await parallel(3, userIds, async (userId) => {
return await api.users.find(userId)
})
Terminé les for (let i = 0; i < 5; i++):
import { range } from 'radash'
for (const i of range(0, 5)) {
console.log(i) // => 0, 1, 2, 3, 4, 5
}
Nombre aléatoire dans un interval:
import { random } from 'radash'
random(0, 100) // => a random number between 0 and 100
Et toutes les fonctions de manipulation de string comme en Ruby: capitalize, snake, camal, etc
Un excellent exercice de refactor pour appliquer l'injection de dépendance !
L'injection de dépendance est un des principaux design pattern pour réduire le couplage entre les classes et pour créer du code plus facilement testable.
Bun, le runtime Javascript qui se présente comme une alternative à Node.js, a levé 7 millions de dollars.
Ils recrutent maintenant pour sortir une version stable de leur produit.
A suivre de très près !
Un article intéressant de Spotify qui avait besoin d'une manière de visualiser correctement les interactions entre leurs centaines de services.
Ils n'ont pas utilisé UML (thanks god!) mais plutôt le C4 Model qui est un diagramme à 4 niveaux:
- Contexte: comment s'intègre notre système avec d'autres systèmes (service mail externe, autre système métier, etc)
- Containers: quels sont les principaux composants de notre système (app mobile, base de données, frontend admin, etc)
- Components: principales briques métiers de chaque container (CartController, EmailService, etc)
- Code: classes composants les briques métiers
Je connaissais pas mais ça à l'air d'être un outil approprié pour définir visuellement des systèmes très complexes tout en offrant la possibilité de "zoomer" dans des niveaux plus détaillés
Un site qu'il faut ouvrir depuis une application pour savoir si le navigateur intégré à l'application injecte du javascript pour espionner le comportement de l'utilisateur pendant qu'il navigue.
TikTok sont vraiment les pires car ils enregistrent toutes les touches clavier et empêchent d'utiliser le navigateur natif du téléphone.
Les applications de Meta (Facebook, Instagram, Messenger) analysent votre comportement sur le site web via les cliques.
Une bonne introduction aux micro-frontends.
Finalement ça répond au même besoin que les micro-services, pouvoir scale son produit en plusieurs équipes qui peuvent travailler de manière indépendante sur des parties du produit.
Les micro-frontends sont au frontend ce que les micro-services sont au backend.
A utiliser avec parcimonie donc
Un excellent article à propos de la recherche de vos "vrai" concurrents.
Plutôt que de chercher les produits qui ressemblent au votre, il faut chercher les produits qui répondent aux même besoin que le votre.
Par exemple, pour Netflix, son plus gros concurrent ce n'est pas Amazon ou Hulu mais bien Fortnite!
Un site qui regroupe les anti-patterns de nommage des variables.
Par exemple, une fonction qui s'appelle getXXX mais qui ne retourne rien dans certains cas et mute directement un argument.
C'est plein de bon sens et à lire en complément de la recherche sur le naming des variables
Une autre lib qui propose de faire du frontend avec un virtual DOM.
Ils annoncent des performances bien plus élevées que React tout en supportant une partie de l'API comme useState, useEffect etc
Je suis toujours sceptique lorsque je vois les couches d'abstractions s'empilées côté frontend.
Retour d'expérience de Cloudflare qui a été ciblé par un fishing très sophistiqué.
La page de fishing demandait également les codes TOTP reçu par SMS et les transmettaient en temps réel à l'attaquant pour lui permettre de se loguer.
L'attaque n'a pas fonctionné car les employés de Cloudflare ont une clé d'authentification Yubikey physique.
C'est aussi ce qu'utilise Google pour ses employés, ils n'ont plus de fishing réussi depuis.
J'en ait personnellement une pour accéder à mes comptes Kraken.
Une CLI pour manipuler Jira.
Son auteur l'a créé pour éviter d'utiliser l'UI (tellement elle est mauvaise..)
JiraCLI is an interactive command line tool for Atlassian Jira that will help you avoid Jira UI to some extent.
Un excellent tutoriel sur les Workers Thread en Node.js pour faire du multi-threading.
Digital Ocean font toujours du très bon contenu je trouve 👍
Des images Docker preconfigurés pour utiliser Jupyter Notebook.
Un super outil de capture d'écran sur Linux, il permet notamment d'annoter les screenshots à la volée
Après avoir autorisé à ses employés de travailler depuis ou ils voulaient, Spotify observe une baisse du turnover.
Moralité, donner le choix et faire confiance à ses employés ça paye !
Une critique de Windows par un mec pro-Windows.
C'est vrai que ces dernières années, Microsoft ont quand même fait des choses assez chouettes:
- Visual Studio Code
- Windows Subsystem for Linux
- Terminal
L'auteur passe ensuite en revue les chose qui ne vont pas (et il y en a pleins):
- Problèmes de consistence d'UX (bon on n'en parle même pas sur Linux..)
- Les widgets et "l'utilisation forcée" de MSN.com
- Les pubs un peu partout, notamment dans l'explorateur alors que Windows est un produit PAYANT
- La télémétrie et le compte Microsoft
Windows has a lot of well-earned potential that, right now, is being exchanged for short-term revenue.