C'est toujours bien de voir émerger d'autres runtime car cela amène de nouvelles idées et concepts.
Par contre il ne faut pas se voiler la face, il y a très peu de chances que Deno ou Bun puissent remplacer Node.js.
L'industrie a mis des années avant de faire confiance à Node.js et aujourd'hui je vois difficilement les entreprises se tourner vers un nouveau runtime simplement pour des histoires de design ou quelques % de perfs en plus sachant que le coût d'adoption à l'échelle industriel est très élevé.
Une étude de plusieurs librairies pour gérer le state en Flutter.
(Via Pierre)
Article didactique sur la meilleure manière de créer un package NPM.
Notamment la partie pour le double support CommonJS et Module est top!
Sinon comme toujours réfléchissez-y à deux fois avant d'ajouter de la complexité à l'écosystème Javascript qui est déjà affreusement complexe.
J'en ai eu besoin récemment, une astuce pour avoir un spread operator conditionnel en JS
const isActive = true;
const user = {
name: "Amit",
age: 30
};
const activeUsers = {
...isActive && user
};
Très bon article explicatif pas à pas pour tout comprendre de l'asynchronicité en Javascript !
Un nouveau (LOL encore) framework Javascript frontend.
Ils se focalisent sur la vitesse lors du premier affichage de l'application en supprimant la phase d'hydratation.
Lorsque l'on télécharge une page web en React par exemple, le navigateur doit interpréter le HTML et le JS, puis:
- re-créer tous les listeners sur les noeuds du DOM
- re-créer l'arbre de composant représentant l'application
- restorer l'état (state) de l'application
Qwik permet de sauter ces étapes avec plusieurs astuces, par exemple pour les listeners, ils sont directement dans le HTML:
<button on:click="./chunk.js#handler_symbol">click me</button>
Sinon la syntax est très similaire à celle de React avec du JSX.
L'article parle des inconvénients de React. (c'est l'auteur de React Admin)
Pour l'auteur, les formulaires sont compliqués à écrire correctement à cause d'un trop haut niveau d'abstraction.
De son point de vue, les hooks ont amené un niveau supplémentaire de complexité sur des parties métiers qui était déjà gérées correctement par Redux.
Il continue sur d'autres points en donnant toujours des exemples voir des comparaisons avec d'autres framework.
Rust deviendra officiellement le deuxième langage autorisé dans le Kernel Linux!
Dans les raisons annoncées on retrouve bien sur les avantages de Rust (rapidité, modèle de gestion mémoire) mais aussi le fait qu'il va devenir de plus en plus compliqué de trouver des programmeur C à l'avenir.
Un framework qui permet de créer des applications graphiques en Python pour faire de la dataviz.
Je savais pas qu'il existe des fonts dont on peut faire varier les couleurs en CSS!
Le Design System de Datadog est accessible publiquement (mais pas d'accès au code associé)
J'ai rarement vu un Design System aussi complet et aussi bien documenté!
(Via Maurice de FranceJS)
Whoa Taichi est un langage compilé avec une syntax proche de Python qui permet de booster les performances d'un code python quasiment sans le modifier !
Simplement en important la librairie et en rajoutant des annotations, on peut avoir jusqu'à x100 en performances:
import taichi as ti
ti.init()
@ti.func
// python func here
Taichi exploite automatiquement le parallélisme des CPU de la machine et même du GPU.
Pino est vraiment un super logger, en plus de ses excellentes performances, il permet de
- cacher automatiquement des valeurs dans les objets (comme les jeton d'authentification par exemple)
- créer des sous logger par module
- écrire les logs dans des destinations différentes en fonction des niveaux
Les log sont très souvent une partie critique de l'application car écrire des une sortie est assez consommateur (chez Kuzzle, on s'est rendu compte que nos access log ralentissaient le backend outre mesure.
Il faut aussi faire attention à ce que l'on veut loguer et trouver un équilibre sur la quantité car on peut facilement remplir des tera octets de logs.
Dans l'idéal, il faut construire un système permettant de changer dynamiquement le niveau de log pour activer le mode debug lorsqu'on en a besoin, et l'arrêter ensuite.
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
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 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
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 :-)
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
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.
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.