Erick Wendel Profile picture
Mar 8 13 tweets 4 min read
Resolvi um novo bug crítico no @nodejs core com apenas UMA LINHA de código🤯 (e 30 linhas de testes 🥳)

🧵/1

#javascript #opensource #nodejs #js #streams #nodejsstreams #javascriptstreams Image
Ontem saiu o Node.js v18.15 com uma pancada de coisas legais e esse bug eu havia corrigido no 19 e finalmente ele veio para a versão LTS

Pra mim, essa é a prova de que quantidade de código não tem nada a ver com produção ou impacto

/2
Qual era o problema?

As Node.js Streams são parte do Node.js desde o início e muita coisa interna do Node.js as usa para controlar eventos e processar dados sob demanda

/3
Você pode usar as classes Readable, Writable e etc, para processar pentabytes de dados em JavaScript se precisar

O problema, é que elas trabalham com callbacks, então para ir para a forma mais moderna, há algum tempo é possível usar async generators.

/4
Algo como

async function *(stream) {

for await (const chunk of stream) {
// manipular pedaço de dados
}

}

E isso funcionava nas versões anteriores, mas por alguma razão no Node.js 19 (experimental) isso parou de funcionar 😬

/5
Consequentemente, isso quebrou todos os meus projetos 🥵

E se eu não tivesse resolvido, enquanto experimental, poderia ter quebrado centenas de milhares de pacotes que usam Node.js streams 😰😱

/6
Gastei alguns bons dias discutindo e depurando o projeto Node.js para entender o que poderia fazer até que finalmente entendi

/7
O negócio era que para fazer com que essas async generators funcionem, o modulo stream precisa ser carregado na inicialização da aplicação

Se você tentasse importar o método async pipeline, usado para controlar o fluxo de dados, como 'node:stream/promises'

/8
Ele na verdade, importava tudo que tinha dentro de "promises" e não carregava o módulo "stream"

Então, a linha única de código que fiz para solucionar o problema, foi no momento que carregasse "promises", também trouxesse o "stream"

/9
Uma linha de código que me tomou semanas para encontrar a solução e que sem ela poderia ter causado o CAOS 😂

/10
Só que não acaba ai, você precisa implementar testes para validar que o bug não existe mais, e aí gastei mais horas ainda para descobrir como faria esse teste

/11
Isso porque, a suite de testes do Node.js já carrega o modulo stream na inicialização, então precisei burlar o linter e dar uma "hackeada" na parada para funcionar

Dá uma olhada no PR: bit.ly/bug-nodejs-str…

/12
Ah e vem estudar JavaScript avançado comigo!

Liberamos hoje a possibilidade de parcelamento no BOLETO.

O treinamento conta com quase 40 horas de aulas gravadas, mais de 30 projetos, desafios e suporte exclusivo

Bora? bit.ly/jsexpert-erick…

/13

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Erick Wendel

Erick Wendel Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @erickwendel_

Mar 9
Melhorar a performance de aplicações não deveria ser algo incrível 👀🥵

🧵/1

#developer #softwaredeveloper #developertips #developerstories Image
Sim, eu acredito que deveria ser o básico!

Em 99% das empresas que trabalhei, a preocupação sempre era "faz funcionar agora e depois melhoramos"

/2
E a real é que isso NUNCA aconteceu e todos os problemas que o time previa que ia acontecer, aconteciam e os projetos se tornavam um caos

/3
Read 12 tweets
Mar 7
E olha que demaaaaaais! Vou trazer o Head de Machine learning para a Web do @Google falar lá no canal 🤯🥳

➳ já marca na agenda ai: bit.ly/live-ml-for-we…

🧵/1

#machinelearning #criatividade #ai #javascript #tensorflowjs #tensorflow #chromedevelopers #google Image
Quem participou da #SemanaJSExpert, viu mágicas para rodar reconhecimento de gestos, objetos e mais direto do navegador

Mas, eu sou só alguem curioso tentando exercitar a minha criatividade

Já o @jason_mayes é do time responsável pelo @TensorFlow js no Google

/2
Ele fez um super treinamento no canal da @googledevs sobre Machine Learning para Web e eu pessoalmente aprendi muita coisa por lá!

O nosso encontro vai acontecer no dia 10/03 às 15:30 (horário de Brasília), vem que a parada vai ser inédita!

/3
Read 5 tweets
Jan 26
Será que implementar testes automatizados é tão demorado e custoso como falam? 😬

🧵/1

#javascript #testautomation #testing #qa #qualityassurance #developerstories #carreira #desenvolvimentodesoftware
Já comenta aqui abaixo, você cria testes automatizados para todas as tarefas que entrega?

/2
Uma aluna recentemente começou um trabalho e se deparou com o ambiente de desenvolvimento bem caótico

Má gestão dos projetos, tarefas que ja nascem atrasadas e muito retrabalho 😥

/3
Read 10 tweets
Jan 25
Wowwwwww today is a day to celebrate! My blog is finally live and the first post is CRAZY nice 😱🔥

👉🏻 bit.ly/blog-ew-websoc…

🧵/1

#javascript #nodejs #learning #blogpost #tutorial #websockets #socketio #diy #100daysofcode Image
I've been creating videos on my youtube channel that you rarely will see in another place on the internet 🤩

You'll find there subjects like Recreating @nodejs from scratch, Web APIs and recreating web protocols such as the Web Socket using JS with no frameworks, etc

/2
And others, which are amazing experiments, such as recreating a code coverage tool from scratch and how to process terabytes of data using JavaScript

If you search about those subjects you'd reach out to my videos but why not have them as blog posts as well?

/3
Read 5 tweets
Jan 24
Sabia que é possível usar JavaScript para interpretar variáveis do bash direto do terminal? 🤯🔥

🧵/1

#javascript #nodejs #js #bash #devtips #100daysofcode #node #childprocess #tutorial Image
Estava produzindo uma super aula do meu curso de Node.js Streams (em inglês), ensinando sobre como paralelizar o processamento de arquivos usando Node.js

A ideia é subir um processo para cada arquivo, e cada processo filtra os usuários que possuem o email em dominio gmail

/2
Só que eu automatizei a validação para verificar que todos os itens foram processados e enviados para um arquivo de saida

Então primeiro fui lá e usei o `grep` para filtrar o texto do arquivo e o `wc -l`, para obter a quantidade de linhas.

/3
Read 8 tweets
Dec 2, 2022
How to consume any Database as a Stream for heavy data processing using JavaScript 🤯🔥

🧵/1

#javascript #nodejs #streams #sql #nosql #tutorial #dataprocessing #database #business #data #strategy #pipeline @nodejs
The secret for processing anything using JavaScript is to handle data on demand.

Imagine data you wanna migrate data from a SQL database to a NoSQL DB. You would need to apply some business rules, clean up fields, filter data and then output them to the final output.

/2
You might know that you can block the Node.js (and the data source you're consuming) if you handle too much data at once in memory

The best practice then is to limit results, send individual data to a stream pipeline, and then ask for more data until you've consumed it all.

/3
Read 7 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(