Weekly Shaarli

All links of one week in a single page.

Week 44 (October 31, 2022)

Write fewer tests by creating better TypeScript types
thumbnail

De bon conseils pour créer des types, notamment des union types pour être sur de manipuler des objets correctes.

Plutôt que de faire ça

type Event = {
  name: 'CREATE' | 'DELETE';
  id?: string;
  content?: string;
}

Faites plutôt:

type EventCreate = {
  name: 'CREATE';
  content: string;
}

type EventDelete = {
  name: 'DELETE';
  id: string;
}

type Event = EventCreate | EventDelete;
MongoDB vs. Elasticsearch: The Quest of the Holy Performances

Un très bonne comparaison entre les performances de recherches d'Elasticsearch et MongoDB et le résultat est sans appels.

Sur la recherche, Elasticsearch est jusqu'à 20x plus rapide que MongoDB.

Sur les aggrégations, Elasticsearch est jusqu'à 38x plus rapide que MongoDB.

Sur l'insertion, MongoDB est 1.20x plus rapide que Elasticsearch.

Sur le parcours des données, Elasticsearch offre des performances stables quand MongoDB passe de 5 à 60 sec pour récupérer les derniers documents d'une collection.

Sur l'espace disque, MongoDB occupait 2x plus d'espace avec les mêmes données. (sans index!)

Ces benchmarks ont été effectués sur de grosses collections (dizaines de millions) mais les différences performances se font aussi sentir sur de plus petites collections.

Les performances seules ne doivent pas guider le choix mais aussi les features, par exemple les limitations d'Elasticsearch sont les suivantes:

  • Near Realtime Search: les documents ne sont pas disponible immédiatement dans le search après écriture
  • Pas de modification possible du type d'un champs d'une collection (int vers string par exemple)
  • Pas de transactions
  • Pas de pseudo-relationnel comme en MongoDB
Array destructuring for multi-value returns (in light of React hooks)
thumbnail

Un document interne technique la manière d'optimiser la destructuration d'array qui est massivement utilisé dans les React Hook.

C'est intéressant de voir que la destructuration d'objets était plus légère et rapide que la destructuration d'array (64 bytes d'instructions vs 305).

La destructuration d'objet est même plus rapide que de faire:

const array = useState(),
 count = array[0],
 setCount = array[1];

Ces différences sont très légères et uniquement observées sur le bytecode non optimisé.

We Just Gave $260,028 to Open Source Maintainers
thumbnail

Whoa après Bubble c'est au tour de Sentry de communiquer sur son financement des projets Open Source.

260 000$ reversés à plus de 193 projets et fondations.

Excuses cyber sécurité

Un site parodique de fausse excuses pour ne pas faire de la sécurité correctement :D

(Via Marc)

TypeRunner, High-performance TypeScript compiler
thumbnail

Une alternative au compilateur officiel TSC pour Typescript.

C'est beaucoup plus rapide (~100x plus rapide) car:

  • écrit en C++
  • écrit uniquement pour les versions récentes de TS
  • cache des fichiers compilés

Il utilise un bytecode intermédiaire pour représenter le typescript et conserve un cache pour ne prendre en compte que les dernières modifications.

Par contre toutes les fonctionnalités ne sont pas supportées.

(Merci Sébastien pour le partage)

Le coup d'état légal qui propulsa Lula en prison

L'histoire incroyable d'un président accusé injustement de corruption et envoyé en prison.

Lula aurait bien pu finir ses jours en prison après ce coup d'état judiciaire mais c'est sans compter sur l'aide d'un hacker qui a prouvé la partialité de la justice dans cette affaire.

Vizzu, library for animated data visualizations and data stories.
thumbnail

Une librairie pour dessiner des graphiques qui reste assez méconnue malgré ses features et ses performances.

Contrairement à beaucoup de lib (ApexChart, Chart.js), Vizzu utilise des canvas pour dessiner les graphs.

Il y a aussi de très belles animations natives :-)