Un broker de messages temps réel qui utilise des Server Side Events (SSE)
L'histoire incroyable de deux fondateurs qui se font évincer de leur société à la suite d'une fraude minutieusement organisée.
C'est dingue ce qu'il leur est arrivé, malgré un pacte d'actionnaires sensé les protéger, deux fonds d'investissements ont fait pression sur eux via des intimidations pour les virer.
Les fonds savaient que ça prendrait du temps de faire valoir leurs droits devant les tribunaux, ils ont du se battre pendant 2 ans.
Ce qui est dingue c'est que même après la décision de la cour d'appel, ils ont du batailler pour retrouver leur poste, notamment avec la surprise de découvrir 240000€ de chèques émis sans factures. Sans compter le "nouveau" PDG qui double son salaire et se facturait en plus comme freelance.
Breega a publié un droit de réponse et ce n'est pas tout blanc du côté des fondateurs non plus: https://breegavc.medium.com/solendro-ou-quand-linvestisseur-a-tout-les-torts-r%C3%A9tablissons-les-faits-832a5550adfa
Il ne faut pas forcément se focaliser sur la performance à tout prix ou sur la maintenabilité à tout prix.
C'est toujours une histoire de compromis entre les deux.
J'aime beaucoup cette citation qui me fait pensé au mécanisme de gestion mémoire de Rust:
Sharing state is fine, so long as we don’t mutate it.
Mutating state is fine, so long as we don’t share it.
Analyse d'une attaque qui vise les ressources gratuites de différents provider pour miner des Monero.
A ce jour les chercheurs ont détecté 30 comptes Github, 2000 comptes Heroku et 900 comptes Buddy impliqués.
Un serveur de distribution de messages en temps réel.
Il supporte de nombreux protocols pour la distribution:
- Server Side Event (HTTP)
- Polling (HTTP)
- WebSocket
- gRPC
Le processus de stringification de typescript-json est beaucoup plus rapide car la librairie se base sur une liste de types pour les serialiser.
En gros à l'étape de compilation, la librairie va générer le code Javascript pour sérialiser exactement toutes les propriétés d'un objet typé donc on s'épargne les étapes de parcourir de l'objet et de découverte des types des propriétés.
Par contre on ne peut traiter que des payloads ayant un type défini à l'avance.
Exemple de code généré pour un type ({ name: string, age: number
):
const $string = typescript_json_1.default.stringify.string;
const $number = typescript_json_1.default.stringify.number;
const $so = [
input => `{"name":${$string(input.name)},"age":${$number(input.age)}}`
];
return $so[0](http://input);
A force de voir les développeurs Junior galérer à trouver un premier job, je me suis dit que je pourrais donner quelques conseils:
- Apprenez des technos en faisant des projets perso
- Prenez soin de votre image sur LinkedIn
Mais surtout: Contribuez à des projets Open Source.
Ça fait monter en compétence avec les revues de code et les contributions sont publiques donc accessibles aux recruteurs.
Un bundler/builder Javascript pour remplacer Webpack, c'est écrit en Rust et ils affichent des performances de 5 à 10 fois supérieurs.
Pour l'instant c'est que pour les projets Next.js ou Vite.
De super conseils pour écrire de bons messages d'erreurs à destination des utilisateurs finaux.
Un bon message d'erreur doit:
- expliquer ce qu'il s'est passé (
Unable to connect your account
) - rassurer l'utilisateur (
Your changes were saved
) - aider à réparer le problème (
Please try connecting again
) - fournir une aide externe (
If the issue keep happening, contact support
)
10 challenges pour comprendre les promises en Javascript
Une très bonne explication des nombreux avantages de la programmation avec le langage Rust créé par Mozilla.
Rust offre de très bonnes performances, proches du C et du C++ tout en proposant un modèle de gestion de la mémoire innovant.
Jusqu'ici, la gestion de la mémoire était soit un facteur de dégradation des performances du à l'introduction d'un garbage collector (Java, Go, C#), soit un facteur de risque de sécurité important (buffer overflow, use-after-free, segmentation fault, etc.)
Rust introduit un mécanisme ou une référence peut être soit constante et partagée, soit mutable mais unique (Borrow Checker).
La gestion des erreurs est aussi plutôt pas mal en prenant le meilleur du système d'exceptions (implicite) et du système de retour d'erreur (explicite)
// the "?" operator mean that potential errors will be propagated
let result = foo()?.bar()?;
Un autre avantage est le potentiel de portabilité dans le navigateur avec WASM. Il est possible d'utiliser Rust comme langage fullstack à l'instar de Javascript.
Il y a aussi bien sur des choses plus compliqués avec Rust:
- la syntax inhabituelle
- temps de compilation assez long
- ecosystème naissant
Daniel Glazman (Mozilla) fait un long thread pour parler des NFT et du mauvais côté de la cryptosphère.
Quelques citations:
Sur les NFT
Le NFT ne donne aucun droit, aucune garantie, aucune licence, rien. C'est un pipeau total et les plus grands soutiens des NFT sont aussi les détenteurs qui ont intérêts à ce que leurs "investissements" ne se cassent pas la figure.
Sur la maturité à venir
J'ai entendu souvent, vous entendez souvent, que les cryptos sont dans leur enfance et que le Web a mis longtemps aussi à blabla. Foutaises. En 11 ans, l'âge du BTC, le Web avait révolutionné l'accès de l'Humanité à l'information et au commerce en 300 millions de sites majeurs.
Sur l'écosystème toxique
Et puis le monde des cryptos est totalement pourri. Pour un Vitalik, il y a 10 Enron, 5 Madoff, 3 Rudy Kurniawan et, côté sécurité, 50 log4j.
La meilleure explication que j'ai eu des CORS (Cross Origin Resource Sharing).
Les CORS sont un ensemble de règles envoyées par un serveur dans les header HTTP qui sont ensuite respectées par le navigateur afin d'empêcher un site d'envoyer des requêtes vers un autre site.
Par exemple, un script Javascript qui s'exécute sur https://links.aschen.ovh ne peut pas envoyer une requête sur le domaine gmail.com car les CORS de gmail.com ne l'autorise pas.
(Merci Florian pour le partage)
Un article qui résume bien les différents problèmes de la voiture électrique en terme d'émissions de CO2, de consommation de métaux et de dépendance géopolitique.
Une citation fait particulièrement réfléchir:
Au rythme actuel d'extraction, dans vingt ans, nous aurons consommé presque tout le stock de cuivre disponible sur Terre
Il ne faut pas espérer remplacer les voitures thermiques par des électriques mais bien change les usages, ce qui équivaut à vendre moins de voiture et ça l'industrie ça lui fait peur.
L'histoire d'une grosse migration backend chez LinkedIn et un retour d'expérience très intéressant.
Les sujets de migration sont toujours très sensibles car ils ont un impact fort et sont sujets à de nombreux risques.
L'équipe de LinkedIn donne quelques conseils:
- s'assurer que tout le monde comprenne l'intérêt de la migration et du nouveau système
- écrire des instructions étape par étape clair et précises
- faire des outils automatiques dès que c'est possible
- faciliter un accès au support pour répondre aux questions
- monitorer les progrès
Quand on est manager et/ou expérimenté , il est important de faire attention à ne pas prendre trop de place afin de laisser les autres s'exprimer.
Cet article parle justement de la dynamique des pouvoirs et donne 5 conseils:
- soyez le dernier à contribuer
- invitez explicitement les autres à contribuer
- soyez plus sûr de vous dans vos paroles et dans vos actions
- créez de la confiance avec chacun
- déléguez explicitement le pouvoir de décision
(Merci Ludi pour le partage)
L'auteur d'une lib de CSS in JS pour React explique les désavantages de ce fonctionnement.
Les deux principaux désavantages sont le poids supplémentaire des libs nécessaires et l'impact non négligeable sur les performances de rendu.
Après la lib offre quand même une DX très confortable donc à chacun de faire ses compromis.
(Merci Ludo pour le partage)
Un BD super sympa qui vulgariser le développement de la photosynthèse chez les plantes qui a commencé par la plus grande extinction de masse de l'histoire de la terre.
Excellent article sur le fonctionnement de la vérification de d'authenticité des emails pour lutter contre le phishing.
Concrètement cela se base sur des enregistrement DNS pour un domaine. (e.g. gmail.com)
Il y a 3 mécanismes:
- Sender Policy Framework (SPF): adresses IP autorisées à envoyer des emails pour le domaine
- DomainKeys Identifier Mail (DKIM): clé publique et une signature cryptographique est ajoutée aux emails
- Domain-based Message Authentication Reporting and Conformance (DMARC): instructions pour traiter les emails non conforme
Un agent de détection de comportements suspects pour protéger ses serveurs (Intrusion Prevention System ou IPS).
Le point cool c'est que les logs sont analysés en local uniquement :-)
C'est full open source, ça détecte les comportements suspects et se synchronise avec une base d'IPs suspectes.
Ils proposent de bloquer les attaques de plusieurs manières:
- Firewall (iptable)
- Nginx 403
- Web captcha