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 !
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.
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
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)
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.
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
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
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 👍
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
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)
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;
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.
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.
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.
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.
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.
Excellent guide dont je recommande la lecture à tout développeur Node.js ;-)
Mon top:
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.
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.
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 👌