Récapitulatif - dotJS 2019

J’ai eu la chance d’assister à dotJS cette année grâce à des places qui ont été offertes par les dotConferences à la communauté Ladies of Code.

@Jawache a pris la parole sur notre impact environnemental en tant que développeur. L’électricité est responsable à 30% des émissions de CO2. On ne peut se permettre d’en gaspiller. Google Cloud serait un cloud Carbone neutral (ça m’étonne un peu). Les servers produisent du carbone, on pollue moins avec le serverless.

Le serverless présente aussi des avantages économiques

  • Autoscaling
  • On paie selon la durée et la consommation mémoire des fonctions que l’on exécute.
Nitr.ooo fireship.io = gcp functions nest.js

Si le sujet vous intéresse, consulter climateaction.tech pour s’impliquer plus.


@devdevcharlie nous a montré les possibilités de recognition de sounds en exploitant la WebAudio API en javascript et le Machine Learning (avec TensorFlow). La WebAudio API récupère les données du microphone.

Sa démo présente un spectrogramme (la photo d’un son). Plus le son est fort, plus la couleur sur l’amplitude du spectrogramme est lumineuse.

Gather data from WEBAUDIOAPI and transforme it for tensorflow. Multidimensionnel array with labels for pattern recognition. La démo est accessible ici, et c’est plutôt impressionnant : acoustic-ml.netlify.com


BertBelder nous a présenté Deno, un runtime for JavaScript and Typesvript (webassembly) qui vise à résoudre les soucis que Node pose. Il utilise V8, Rust, Tokio (event.loop), TypeScript.

Node a un système de modules complexes, exposé aux failles et il existe un tas de tooling parallèle là où Deno a une API web et un tooling intégré.


Quelques talks qui m’ont été recommandés en discutant durant les breaks: Universe in a single arrow et Mother of all demos (la première démonstration d’une souris, d’un clavier pour les amateurs d’images d’archive).


@stefanjudis a donné un lightning talk super sur les expressions régulières. Les slides sont claires, je vous recommande de les checker, une bonne piqûre de rappel pour les humains nuls en regexp comme moi ^_^

?: Omit captions group
?<rest> capture group
\p{Emoji} capture emoji 

Vlad Filippov a donné un talk sur WebAssembly (wasm). C’est un nouveau language bas niveau, similaire à l’assembleur, conçu pour compléter des applications web javascript. On peut charger des modules WebAssembly dans des applications Javascript : certaines bibliothèques l’utilisent déjà comme pica.

L’objectif est d’améliorer les performances. Attention cependant aux cas d’application: il faut toujours benchmarker les gains et être vigilant sur la taille du module WASP.

WebAssembly.studio


Vladimir Agafonkin (créateur de Leaflet) a donné un talk sur l’optimisation d’algorithmes.

Il a présenté le cas d’une bibliothèque Delaunay qui a subi plusieurs optimisations sur des modules npm. ( delaunay-fast // faster-delaunay // delaunator étant le plus rapide)

Étapes pour optimiser un algorithme: - Trouver le bottleneck (parties les plus longues) grâce à des outils de profiling (on sous-utilise celui de Chrome). - Le code lent est du code pas nécessaire - Être vigilant sur les complexités, faire varier le code selon les tailles d’input.

O(n) loop 
O(n2) o(n3) boucles imbriquées

Attention aux fonctions natives Javascript (Array.indexOf, etc.) qui ont aussi leur propre complexité (assez grosse).

accidentallyquadratic.tumblr.com

Memory complexity _ allocate Much memory than we need Ces fonctions : slice concat Map filter split utilisent plus de mémoire que nécessaire.

O.log(n) best complexity. Binary search.

Astuce d’optimisation: Trier les données en entrer pour processer les données plus rapidement. En faire plus au début (tri) pour en faire moins après.

HashTable -> Array peut faire gagner en performance.

  1. Learn how things work under the wood ! Surtout dans les fonctions JS par défaut qu’on a l’habitude d’utiliser.
  2. Tout peut être amélioré !

James Long, créateur de Prettier, a donné un talk sur la synchronisation des données sur des applications distribuées.

Il y a parlé de la complexité de la synchronisation d’applications hors-ligne et notamment la garance de la consistance des données.

Un point critique est l’ordre de réception des données: utiliser un timestamp pour réordonner les datas (Vector clock, Hybrid logical clock). Un timestamp existe par device et est généré / assigné à un changement émis.

Il faut trouver des solutions les plus simples possible pour garantir la fiabilité dans un système distribué.

Les slides sont disponibles par ici.


@nodebotanist nous a joué un son de guitare connecté à une application Node qui changeait la couleur d’une LED branchée à sa guitare. Le tout réalisé avec des bibliothèques npm suivantes: midi tonal color ws (websocket).

@nodebotanist a aussi mis au défit les recruteurs présents de recruter quelqu’un de différent d’eux.


@maggiepint a présenté la nouvelle librairie Temporal qui vise à résoudre les soucis actuels de Date en Javascript. (Months index from 0, Mutability, Timezone gaps, No date only représentation).


Daniel Ehrenberg a ensuite présenté TC39, une communauté de développeurs qui améliorent Javascript et comment nous pouvons les aider.

tc39.es

# is the new _ for strong encapsulation.

J’ai passé deux jours très enrichissants et plein de découvertes / belles rencontres. J’espère pouvoir renouveler l’expérience l’an prochain ! :)