Pular para o conteúdo principal

Evento da Rocketseat junto da minha experiência com Bun

· Leitura de 8 minutos
Anderson Marlon
Software Developer

Gil Ndjouwou

Bun para quem não conhece, é um runtime Javascript All-in-One, o que significa? É que ele faz tudo que o Node faz e um pouco mais, ele tem sistema de testes, ele também tem o próprio gerenciador de pacotes (package manager) e é muito mais rápido que npm e yarn, com a sua versão Bun 1.1, agora ele também está disponível para Windows, ele permite testes dentro de sua própria aplicação, algo que o Node demorou um tempo para incrementar, e todos eram reféns do Jest ou similares.

Claro que ele ainda utiliza algumas coisas do próprio Node, como o caso do node:fs para deletar arquivos ou fazer algumas necessidades, mas em comparação, ele já supera e muito o próprio Node pela absurda velocidade que ele vem apresentando. Node é escrito em JavaScript, Python, C, C++ e CoffeeScript, enquanto Bun é escrito em Zig que para muitos, além de ser uma experiência a um escopo bem pequeno, vem trazendo resultados absurdos em comparação e as imagens

  • segundo o Bun - não mentem.

Vale lembrar que tanto Node, quanto Deno, ambos são escritos em cima do V8 do Chrome, enquanto o Bun, é escrito em cima do Javascript Core, que é o motor do Safari, o mesmo motor que é utilizado até mesmo no React Native - biblioteca de desenvolvimento mobile.

Node.js x Bun

Estou aproveitando que está acontecendo, nesse exato momento, o evento da Rocketseat e usarei como base apenas a primeira aula do evento. No evento, criaremos uma aplicação de eventos presenciais usando Node, mas gostaria de aproveitar o espaço e fazer o comparativo, já que estamos usando aplicativos reais para fazer o teste, o que é bem interessante para ver a questão do peso dessa briga - ao invés de apenas ver tempo de execução de looping, como já fiz anteriormente em fight-nodexbun.

No repositório mencionado, apenas testei a velocidade de instalação, a velocidade em adicionar novos módulos e a execução dele usando NextJS - framework de frontend - para ver como ambos se comportariam nessa situação. Claro que, esses dados são bem relativos, já que estava usando o Bun v1.0 e o Node v20.12 para fazer o comparativo, além do meu sistema operacional ser um Windows rodando em WSL, já que rodando em uma máquina Linux poderia trazer bem mais resultados significativos. Além do mais, aproveitando que se tratava de NextJS, utilizei também do turbopack no cenário do Node para ver seu comportamento e executar os testes.

Você pode ver todos os detalhes de como foi a "briga" lá no README.md do repositório.

NLW Unite e comparativo de código

Inicialmente na primeira aula, Diego menciona os comparativos, do uso do Node, do uso do Deno, e do uso do Bun. Ele menciona que Node é o que grandes empresas estão acostumadas usar, a vantagem do Deno e do Bun é que ambos já possuem Typescript por padrão, o que significa mais segurança para o código e menciona uma desvantagem - da qual não concordo cem por cento - que Bun é mantido apenas por uma equipe pequena de desenvolvedores, enquanto o Node já está mais tempo no mercado. Tire suas conclusões, mas não vou mencionar meu comentário aqui, mas deixarei uma thread lá no Twitter/X em inglês, sobre o assunto.

Logo de começo, tivemos a necessidade de fazer toda a configuração do Typescript do lado do Node, enquanto do lado do Bun isso já é nativo, para quem não está acostumado fica até chatinho, mas não é um problema.

Assim que adicionamos o fastify na aplicação, já vemos a velocidade que cada um levou para instalar.

...
├─ string_decoder@1.3.0
├─ thread-stream@2.4.1
├─ toad-cache@3.7.0
├─ uri-js@4.4.1
└─ yallist@4.0.0
Done in 7.32s.
bun add v1.1.0 (5903a614)

 installed fastify@4.26.2

 63 packages installed [522.00ms]

E esse tipo de comportamento já surpreende e muito logo de cara, mas como eu já fiz essa comparação anteriormente, na briga, como mencionado no repositório, não irei entrar nesses detalhes por ora.

Com um exemplo simples, só pegando o Fastify e o executando na porta 3333, adicionei o console.time() e console.timeEnd() para ver quanto tempo toda a execução levou em sua primeira vez, usando o mesmo código, tanto em Node, quanto em Bun e esse foi o resultado:

  • Node: Tempo de execução: 13.869ms
  • Bun: [12.91ms] Tempo de execução

No script de execução, estamos usando no Node tsx src/server.ts, enquanto no Bun, estamos usando bun run server.ts

Claro que é uma diferença bem pouca, mas vamos aprofundar mais. O que foi usado no código?

console.time("Tempo de execução");

import fastify from "fastify";

const app = fastify();

app.get("/", () => {
  return "Hello World!";
});

app.listen({ port: 3333 }).then(() => {
  console.log("HTTP server running on http://localhost:3333");
  console.timeEnd("Tempo de execução");
});

Apenas isso, a conclusão com base nisso varia muito a baixo nível do qual eu não tenho conhecimento para falar sobre, mas acredito que se tratando de uma biblioteca externa - caso do Fastify - isso pode levar a uma alteração na resposta definitiva, diferente de estarmos usando o Node "puro" e o Bun "puro" para fazer a comparação, mas como estamos usando comparação com projetos reais, não vem ao caso.

Mas e a nível de projeto, usando mais bibliotecas, mais rotas, mais funcionalidades. Como ficaria o tempo de execução?

Levando em consideração que adicionamos até agora: Prisma, Fastify Swagger UI e o Fastify Swagger, além de ter feito toda a configuração do banco de dados, então, ficou um tempo para ter cache, além de executar esses comandos com o servidor desligado, ele não está rodando junto com as instalações e migrations.

Primeira Migration

  • Node: ✔ Generated Prisma Client (v5.12.0) to ./node_modules/@prisma/client in 35ms
  • Bun: ✔ Generated Prisma Client (v5.12.0) to ./node_modules/@prisma/client in 33ms

Instalando Fastify Swagger

  • Node: ├─ openapi-types@12.1.3 └─ yaml@2.4.1 | Done in 4.07s.
  • Bun: installed @fastify/swagger@8.14.0 // 5 packages installed [414.00ms]

Fastify Swagger UI

  • Node: ├─ wrap-ansi-cjs@7.0.0 └─ wrap-ansi@8.1.0 | Done in 3.12s.
  • Bun: installed @fastify/swagger-ui@3.0.0 // 48 packages installed [679.00ms]

Fastify Cors

  • Node: ├─ mnemonist@0.39.6 └─ obliterator@2.0.4 | Done in 5.69s.
  • Bun: installed @fastify/cors@9.0.1 // 3 packages installed [2.09s]

Fora esses detalhes, apenas fizemos uma requisição usando HTTP Client para criar uma tabela no banco, mas como isso, não envolve o uso do Bun ou do Node, acredito que não fará diferença. Claro que, ainda adicionarei detalhes vistos nas outras aulas na parte de conclusão, mas por enquanto é isso.

Conclusão com base na Primeira Aula

Vejo que sim, se você for desenvolvedor Node, você terá praticamente ZERO problemas para migrar para o bun, exceto, em ficar decorando vicios de chamadas como o meu caso de yarn dev ou outros scripts, mas fora isso, acredito que a mudança é tão ligeira que é quase insignificante no meio do desenvolvimento e durante a criação, claro que instalação de grandes bibliotecas e modulos, isso pode fazer uma mudança significativa, mas para chegar a esse nível, o projeto tem que estar absurdamente grande para vermos a real diferença entre os dois.

Se ainda tiver em dúvidas como foi feito o projeto, e queira clonar para testar na sua própria máquina Linux/Windows/Mac, você pode acessar o repositório da aplicação que desenvolvi com a Rocketseat na própria página do repositório e testar por você mesmo.

Como ando dizendo, as tecnologias estão evoluindo muito rápido, então, não sou o dono da verdade, estou apenas usando com base no que eu vejo, e no que eu aplico no dia a dia, fique à vontade para me questionar.

Conclusão Finais

Bun é sim, muito veloz em comparação ao Node em vários aspectos, o que faz eu desejar, claro, trocar o runtime do Javascript que uso nos meus projetos. Ainda mais se tratando de Typescript, ele e muito mais performável que o Node, por vir de forma nativa e claro, ele infnorma até mesmo quando as importações são de tipagens e elas precisam ser definidas como type, na hora da importação.

Outro fator que eu vi, é que durante o building do desenvolvimento na Vercel, a velocidade dele na hora de instalar, fazer as configurações e tudo mais, que é na hora que a gente faz o commit do projeto, ele é absurdamente mais veloz, superando até o mesmo o turbopack da própria Vercel.

Então minha recomendação é, vale a pena utilizar o Bun para aplicações em pequena e médias escalas, para evitar problemas futuros de manutenção. Incluindo algumas abordagens que ele faz no Typescript que são mais restritas do que o próprio Node em si, mas são detalhes e nada que o costume não supere esses pequenos detalhes que fazem diferença em uma aplicação de grande escala.

Como criar um blog usando Github Pages + Obsidian + Quartz

· Leitura de 8 minutos
Anderson Marlon
Software Developer

Glenn Carstens-Peters

A grande dificuldade de muitos desenvolvedores que estão iniciando é, aonde compartilhar meu conhecimento? Eu crio um blog? Eu uso o Medium? Eu uso o Dev.to? O que fazer? Bom, vamos para a solução mais bonita que é ter seu próprio blog. Claro que eu não vou diminuir quem cria conteúdo em outros lugares, mas centralizar seu conhecimento é a melhor opção.

Vamos lá, o que vamos precisar?

Github Pages

O Github Pages é um serviço do Github que nos possibilita hospedar sites estáticos, normalmente utilizado para hospedar documentação dos projetos nos repositórios git, ele nos possibilita renderizar tanto páginas HTML quanto em Markdown.

Site oficial: https://pages.github.com/

Obsidian

O Obsidian é um aplicativo de anotação, o segredo é que ele gera os arquivo em Markdown uma peça chave para novo propósito. Claro que podemos utilizar, os próprios arquivos .md/.mdx ou usar o Notion, mas isso é outro tutorial.1

Site oficial: https://obsidian.md/

Quartz

O Quartz é um gerador de site estáticos, o pulo do gato é que ele será encarregado de pegar nosso arquivos de anotações gerado em Markdown pelo nosso Obsidian e converterá em HTML, só que ele não faz apenas isso. Ele é customizável e adiciona algumas funcionalidade ao nosso blog como grade de laytout, menus, barra de busca, tema escuro e claro, além de outras customizações que você pode estar fazendo. Se preferir de uma olhada na documentação para mais detalhes e não se esqueça de dar uma estrelinha no repositório do projeto.

Documentação: https://quartz.jzhao.xyz/ - Github: https://github.com/jackyzha0/quartz

Fluxo de Postagem

O fluxo funcionará da seguinte forma: Obsidian > Commit Push > Deploy Github Actions

  1. Criar/editar seu arquivos no obsidian
  2. Fazer o commit e fazer o push para seu repositório online
  3. Rodar pipeline no Github Actions para fazer o deploy das alterações

Notificação automática da Twitch para o Discord

· Leitura de 4 minutos
Anderson Marlon
Software Developer

Caspar Camille Rubin

Neste artigo, irei te ensinar a enviar notificação no seu canal do Discord para todo o momento em que sua live estiver online, claro que recomendo que seja a sua live ou de alguém muito conhecido - não para meios comerciais - por conta da quantidade de uma applet/receita dentro da plataforma - no máximo dois na free tier.

Parte 1 - Registrar no IFTTT

Acesse https://ifttt.com/ e crie uma conta (se ainda não tiver uma)

Cultivar a Semente ou usar um Kit de Ferramentas?

· Leitura de 5 minutos
Anderson Marlon
Software Developer

Dell

Neste artigo, exploraremos duas abordagens distintas para lidar com desafios e projetos complexos, utilizando a analogia do processo de desenvolvimento com dois modelos diferentes: o Modelo "Cultivar a Semente" e o Modelo "Kit de Ferramentas".

Cultivar a Semente x Kit de Ferramentas

O modelo "Cultivar a Semente" a gente pode assimilar com o processo de cultivar uma planta a partir de uma semente. Ele envolve tentativas, erros, aprendizado, experimentos e constante melhoria. Assim como uma planta cresce e se desenvolve ao longo do tempo, este modelo exige paciência, persistência e dedicação para alcançar o resultado desejado, mas relaxe, nem sempre conseguimos conquistar isso e entra o modelo "Lixo x Tesouro", mas vamos voltar a comparação dos dois modelos anteriores. A forma de cultivar a semente, é como se estivéssemos construindo algo do zero, enfrentando desafios e aprendendo com cada desafio no caminho. Essa metodologia proporciona uma profunda imersão no projeto, permitindo a construção de uma base sólida de conhecimento e experiência.

Por outro lado, o Modelo "Kit de Ferramentas" representa uma abordagem mais simplificada e eficiente. Imagine que você já tenha criado uma série de modelos prontos para uso. Quando um novo projeto surge, você pode simplesmente selecionar e adaptar esses modelos conforme necessário, seria mais fácil tentar furar uma parede do seu jeito ou usar uma ferramenta de pronta para isso? Claro, vamos economizar tempo e esforço, no entanto, essa praticidade tem suas limitações. Se surgir um problema inesperado ou uma necessidade específica, pode ser difícil lidar com isso sem a base de conhecimento e experiência adquirida por meio do Cultivar a Semente.

Evento do NodeBR em Campinas - Frontend Universe

· Leitura de 5 minutos
Anderson Marlon
Software Developer

Anderson Marlon

No dia primeiro de março ocorreu o Front-end Universe pela NodeBR com o apoio do iFood, mas o que isso significa para as pessoas que nunca estiveram em um evento desses ou que são juniors, mas tem vergonha de comparecer ou até mesmo acha que vai ficar perdido em um evento de tecnologia desse nível?

Bom, você não vai ficar perdido e é um evento para todos os níveis. Uma das notícias boas é que o NodeBR, pretende trazer mais eventos como esse para Campinas, o que é um presente, já que na maioria das vezes, os eventos são em São Paulo e até mesmo eu, não tenho disponibilidade ou o financeiro para estar presente.

Vamos lá.

Curso de Introdução e Contribuição ao Código Aberto

· Leitura de 52 minutos
Anderson Marlon
Software Developer

Praveen Thirumurugan

Esse curso foi desenvolvido pela Kalify Inc e publicado em 12 de Maio de 2023.

1. Introdução

Bem-vindo ao curso "Introdução ao Código Aberto"! Este curso abrangente irá guiá-lo pelo fascinante mundo do código aberto e ajudá-lo a se tornar um contribuidor ativo. Ao final deste curso, você deve ter uma compreensão sólida de como encontrar, participar e contribuir para projetos de código aberto, bem como de como desenvolver seu currículo de código aberto. Mas antes, vamos preparar o terreno discutindo os pré-requisitos, objetivos e expectativas deste curso.

Desvendando o NestJS, uma jornada para iniciantes

· Leitura de 11 minutos
Anderson Marlon
Software Developer

Nestjs.com

Minha maior dificuldade com NestJS era realmente entender Módulos, Controladores e Serviços, mas talvez o motivo disso seja não ter tido contato anterior com linguagens "mais pesadas" como Java ou frameworks como Angular que constantemente lidam com esse tipo de cenário.

Então, vou fazer uma espécie de Zettelkasten ou até mesmo - de leigo para leigo - e anotar tudo que eu tenho de dificuldade, cenários, analogias e tudo que é necessário para aprendermos juntos como o que é o NestJS e como ele funciona, já aviso que isso pode ficar grande esse tipo de conteúdo, então recomendo você utilizar o menu da direita para se orientar em tópicos e assuntos que sejam pertinentes a você ou ao assunto que esteja procurando. Bom, vamos lá!

Kombat Taekwondo Referee Siminar Brazil, Seminário de Desenvolvimento de Árbitros

· Leitura de 23 minutos
Anderson Marlon
Software Developer

Sam Moghadam Khamseh

Isso não é um artigo sobre desenvolvimento ou tecnologia.

--

Liga Maior e Menor - 20 de Janeiro de 2024 / World's Premier Professional Taekwondo League

A metodologia do Kombat Taekwondo é criar alguém de referência no Taekwondo. Quando se menciona um atleta de competição em UFC, em Boxe ou qualquer outro esporte sempre irão mencionar algumas pessoas, mas no Taekwondo isso não existe e a meta do Kombat é fazer, é transformar essas pessoas de referencia em referencia mundial.

A filosofia do Kombat Taekwondo é a divulgação do esporte e suas academias, os diretores não tem função alguma em interferir na administração do projeto.

Dimensionando equipes de engenharia por meio de RFCs: anotando as coisas

· Leitura de 11 minutos
Anderson Marlon
Software Developer

Daria Nepriakhina 🇺🇦

De antemão, já informo que esse é um artigo original do Gergely Orozz, e foi traduzido por mim. Como o conteúdo é muito completo, não vi necessidade de fazer adaptação ou alterar qualquer coisa nele, se estiver interessado, é só ler o artigo original em inglês

--

Recentemente, tenho conversado com pequenas e médias empresas, compartilhando as melhores práticas de engenharia que vejo usarmos na Uber, que eu recomendaria que qualquer empresa de tecnologia adotasse à medida que cresce. O único tópico que mais levanta as sobrancelhas e também solta uns momentos "aha!" é sobre como funciona o processo de planejamento da engenharia desde os primeiros anos do Uber.

Ao trabalhar em grandes empresas como a Microsoft ou em empresas menores como o Skyscanner, houve duas coisas relacionadas ao planejamento que sempre me incomodaram. Primeiro, a falta de visibilidade de outros que estão construindo ou tendo construído a mesma coisa que minha equipe. Em segundo lugar, a dívida tecnológica e arquitetónica acumulada devido a diferentes equipas construírem coisas de forma muito diferente, tanto em termos de abordagem como de qualidade.

RestAPI vs GraphQL - Prós, Contras e Qual Usar?

· Leitura de 7 minutos
Anderson Marlon
Software Developer

Louis Hansel

Antes de tudo, isso não é realmente uma disputa, analisando o vídeo do Augusto Galego no Twitter sobre o mesmo assunto, estou separando as ideias que de fato, fazem sentido pra mim referente a uma análise de prós e contras.

Ultimamente ando sim, usando muito RestAPI, mais do que já usei GraphQL na vida. Acredito que a única vez em que usei, foi durante minha experiência na Stone para fazer comunicação com bot e tudo mais, então, é um assunto que de fato, eu preciso me aprofundar, ainda mais que quero atingir a plenitude como desenvolvedor fullstack, porém, não é algo que eu sinta firmeza ainda.

Você desenvolvedor, tem todo o direito de questionar meus prós e contras, e tirar dúvidas, se assim for, até por quê eu não sou nenhum especialista em GraphQL e utilizo bem mais o método de RestAPI no dia a dia. Então, vamos lá.