ChatGPT Consegue te Substituir? | Entendendo Jobs Assíncronos
Introdução
Overview da seção: Nesta seção, Fabio Akita introduz o episódio e faz uma recapitulação do episódio anterior sobre técnicas de otimização web.
Recapitulando o episódio anterior
- Explicou conceitos básicos de balanceador de carga
- Falou sobre como deferir a execução de operações demoradas para jobs assíncronos
O que é ChatGPT?
Overview da seção: Nesta seção, Fabio Akita explica o que é ChatGPT e sua capacidade de escrever código.
Capacidade do ChatGPT
- Pode fazer lições de casa
- Escrever matérias jornalísticas ou scripts para vídeos no YouTube
- Escrever código direitinho
Por que os programadores não serão substituídos pelo ChatGPT?
Overview da seção: Nesta seção, Fabio Akita explica por que os programadores não serão substituídos pelo ChatGPT.
Resposta à pergunta
- O ChatGPT pode escrever código, mas não tem a capacidade humana de entender as necessidades dos usuários.
- Programação envolve mais do que apenas escrever código. Envolve solucionar problemas complexos e criar soluções personalizadas para cada cliente.
Por que usar Bull em vez de Promises ou Async/Await?
Overview da seção: Nesta seção, Fabio Akita explica por que usar Bull em vez de Promises ou Async/Await.
Resposta à pergunta
- Promises e Async/Await são úteis para operações assíncronas simples, mas não são adequados para operações mais complexas.
- Bull é uma biblioteca que permite a execução de tarefas em segundo plano e gerenciamento de filas, o que é útil para operações mais demoradas.
Exemplo do uso do ChatGPT
Overview da seção: Nesta seção, Fabio Akita mostra um exemplo do uso do ChatGPT para escrever código.
Exemplo
- Pediu ao ChatGPT para escrever um formulário multipart para upload de imagem
- O código gerado pelo ChatGPT foi correto, mas não era adequado para uma aplicação real
- Explicou por que o código gerado pelo ChatGPT não era adequado
Problemas com uploads demorados
Overview da seção: Nesta seção, Fabio Akita explica os problemas com uploads demorados e como eles afetam a capacidade de resposta da aplicação.
Problemas com uploads demorados
- Um upload demorado pode fazer um processo do servidor ficar parado por vários minutos
- Isso afeta a capacidade de resposta da aplicação e pode levar à necessidade de adicionar mais servidores
- Threads não são infinitos e cada nova thread ocupa espaço em RAM e tempo de processamento
Lidando com problemas de uploads demorados
Overview da seção: Nesta seção, Fabio Akita explica como lidar com problemas de uploads demorados.
Soluções possíveis
- Usar NGINX na frente da aplicação Node ou outro framework similar
- NGINX é mais eficiente em lidar com uploads demorados do que o Node
- Não lidar com o problema de uploads demorados e armazenar os arquivos em um HD externo ou serviço de armazenamento na nuvem
Upload Files Directly to AWS S3
In this section, the speaker discusses how to upload files directly to AWS S3 without passing through a local server. The speaker explains that using a shared volume on the network via NFS is one solution, but it's better to send files directly to AWS S3.
Uploading Files Directly to AWS S3
- To upload files directly to AWS S3, you need a URL pre-signed by the service.
- To generate a pre-signed URL, you can use Node.js Express and import libraries like "aws-sdk" and "express".
- You can create a JSON file indicating the bucket, key name, and how long the upload URL will be available.
- Use the s3 object and call
getSignedUrlfunction with parameters configured in JSON file.
Adding Progress Bar for File Upload
In this section, the speaker talks about adding progress bars for file uploads. The speaker explains that it's important for users to know if their upload is working or not.
Adding Progress Bar
- Add a
divcalled "progress-bar-container" with anotherdivinside called "progress-bar".
- Create JavaScript that captures the form submit event and sends an XMLHttpRequest with an event indicating upload progress.
- Research similar code on StackOverflow but adjust it according to your team's standards.
O ChatGPT sabe como fazer tudo isso
Neste trecho, o palestrante explica como o ChatGPT funciona e como ele executa tarefas simples antes de executar as mais complexas. Ele também dá exemplos de ações que podem ser solicitadas ao ChatGPT.
Exemplos de ações do ChatGPT
- O ChatGPT executa tarefas simples antes das mais complexas .
- É necessário saber antecipadamente o que se quer enviar para o S3 via URL pré-assinada .
- Um exemplo de ação é escrever um código em Node.js Express para puxar uma imagem que foi enviada para o S3, usar ImageMagick para cortá-la em um quadrado perfeito, salvá-la como PNG e fazer upload dela para outro bucket do S3 .
Código para processamento de imagens
Nesta seção, o palestrante explica um código que pode ser usado para processar imagens usando Node.js Express e ImageMagick.
Processamento da imagem
- O código começa carregando as bibliotecas necessárias no
package.json.
- Em seguida, cria-se um endpoint POST chamado "/process-image" que pode ser chamado pelo Javascript do formulário ou pelo objeto XMLHTTPRequest quando detecta que o upload terminou .
- Para obter a URL completa do arquivo recém-carregado no bucket do S3, é preciso chamar o método
getObjectdo objeto S3 .
- O método
getObjectretorna uma Promise que é resolvida com o conteúdo binário do arquivo na variávelimageBuffer.
- Em seguida, o código usa a biblioteca ImageMagick para cortar a imagem em um quadrado perfeito de 200x200 pixels .
- É importante lembrar que se nenhum outro tamanho for especificado, a imagem será cortada em um quadrado de 200x200 pixels .
- O código envolve tudo em uma nova Promise e imediatamente chama await. Isso delega ao sistema operacional a operação de esperar pelo I/O (ler arquivo, gravar arquivo) e libera o event loop para fazer outras coisas enquanto espera pela operação cara de I/O. Quando a operação retorna, a thread continua depois do await como se nada tivesse acontecido .
Upload da imagem
- Depois que a imagem é processada, ela é enviada para outro bucket no S3 usando a biblioteca S3 .
Problemas com processamento de imagens
Nesta seção, o palestrante explica os problemas associados ao processamento de imagens quando muitos usuários estão fazendo upload simultaneamente.
Consumo excessivo de RAM
- Se muitos usuários estiverem fazendo upload simultaneamente, isso pode consumir rapidamente toda a RAM disponível no servidor web. Por exemplo, se 100 usuários estiverem fazendo upload simultaneamente e cada imagem tiver 60 MB, isso consumiria 6 GB de RAM no servidor web .
- Além disso, há duas operações de rede para o S3 - download e upload - que podem consumir muita largura de banda. Se muitos usuários estiverem fazendo upload simultaneamente, isso pode resultar em um tráfego significativo que não pode ser ignorado .
Alternativas
- Uma alternativa é usar um storage local em vez do S3. Isso reduziria a quantidade de largura de banda necessária para fazer upload e download das imagens .
- No entanto, se você é um serviço grande onde uma das partes principais do que oferece aos usuários é armazenamento de arquivos grandes, talvez queira ter essa infraestrutura sob seu controle. Nesse caso, seria necessário ter uma equipe dedicada com servidores adicionais para lidar com o processamento de imagens .
Armazenamento e processamento de imagens
Nesta seção, o palestrante discute a importância de gerenciar o armazenamento e processamento de imagens em uma aplicação web. Ele explica como isso pode afetar o desempenho do servidor e apresenta uma solução para lidar com esse problema.
Gerenciando armazenamento e processamento de imagens
- O gerenciamento do armazenamento e processamento de imagens depende do nível de serviço, orçamento, cobrança e receita da empresa.
- O processo de cálculo do cropping e conversão da imagem para outro formato é pesado.
- O processo ocupa muita memória RAM dos servidores, especialmente quando vários usuários estão fazendo upload de imagens semelhantes.
- O objetivo é responder rapidamente às solicitações dos usuários, mas fazer todo o processamento dentro da aplicação web é impossível.
Solução: Bull Library
- A biblioteca Bull pode ser usada para jogar o processamento pesado fora da aplicação web.
- É possível implementar um job assíncrono usando Bull para lidar com tarefas como download da imagem, cropping, salvar em PNG e fazer upload novamente para outro bucket.
- A nova tarefa na fila deve ser adicionada com a chave do objeto no bucket que é a imagem original que o usuário fez upload.
- É possível colocar uma imagem genérica com uma mensagem de "aguarde, estamos processando" e colocar um WebSocket ou algo assim para puxar a imagem processada quando ficar disponível depois.
- O worker de Bull pode ser instalado em um servidor separado só para workers. É possível controlar quantas tarefas são processadas simultaneamente e configurar regras de retry.
I understand the task. However, I need the transcript to be able to create a summary in markdown format using None language. Please provide me with the transcript.
Introdução
Nesta seção, o palestrante introduz o projeto e explica que não será um tutorial de Spring Boot.
Projeto e documentação
- O ChatGPT não forneceu todas as informações necessárias para o projeto.
- É necessário ler a documentação do Spring Boot para entender melhor o projeto.
Configuração do endpoint web
Nesta seção, o palestrante explica como criar um endpoint web no Spring Boot.
Criação do endpoint web
- O endpoint web é criado com uma annotation que configura a função abaixo.
- A função responde rapidamente porque envia apenas uma mensagem do job para a fila usando KafkaTemplate.
Classe Worker
Nesta seção, o palestrante apresenta a classe Worker e suas funções.
Configuração da classe Worker
- A classe Worker é configurada com outra annotation que indica que é responsável por mensagens enviadas ao tópico "image-processing".
- A função
processImageinstanciará bibliotecas de S3 e ImageMagick nas versões de Java, fará download da imagem num ByteArray em memória, cropará e converterá em PNG antes de fazer upload.
- Em termos de tempo de processamento, tanto faz ser em Javascript ou em Java.
Comparação entre códigos em Javascript e Java
Nesta seção, o palestrante compara os códigos em Javascript e Java.
Comparação entre códigos
- Nas duas versões (Javascript e Java), vão fazer fork e subir um processo separado da ferramenta
convertque vem no pacote do ImageMagick, que é feito em C.
- O grosso do trabalho não é feito nem em Javascript e nem em Java. O grosso é o ImageMagick e o S3.
- Mesmo se a imagem for pesada, só você está usando, mesmo se demorar alguns minutos e usar muita RAM e cair pro swap que é mais lento, não tem problema.
Uso de bibliotecas como ChatGPT ou GitHub Copilot
Nesta seção, o palestrante fala sobre o uso de bibliotecas como ChatGPT ou GitHub Copilot.
Opinião sobre as bibliotecas
- O palestrante acha essas bibliotecas excelentes.
- Ele sabe exatamente o que quer e pede ao ChatGPT para fazer o código levando isso em consideração.
- Ele sabe onde configurar e os detalhes que não lembra.
- Para iniciantes que ainda não trabalharam em projetos de verdade: já tinham ouvido falar dessas coisas?
Programação além dos cursos básicos
Nesta seção, o palestrante fala sobre programação além dos cursos básicos.
Falta de informação nos cursos básicos
- Os cursos mais básicos querem que você tenha a falsa ilusão de que programar é simples e qualquer um pode fazer.
- Faltam informações sobre as complexidades envolvidas na programação real.
Diferença entre programadores inexperientes e experientes
- Uma inteligência artificial consegue facilmente substituir um programador júnior inexperiente.
- Um programador experiente não sai codando à toa de qualquer jeito.
- O ChatGPT é um serviçal burrinho que dá respostas erradas ou incompletas com muita convicção.
Conclusão
- É necessário entender que em cima do básico há muitas complexidades envolvidas na programação real.
O ChatGPT e suas limitações
Nesta seção, o palestrante discute as limitações do ChatGPT e como ele pode ser usado por amadores e especialistas. Ele também fala sobre a escalabilidade da tecnologia e seu custo.
Limitações do ChatGPT
- O ChatGPT não garante respostas corretas o tempo todo.
- As respostas são assertivas, mesmo quando estão erradas.
- Pode levar anos para otimizar a tecnologia para que seja economicamente viável para uso diário.
- O ChatGPT é excelente para tarefas mundanas, mas não substitui um especialista de verdade.
Uso do ChatGPT
- Amadores podem usar o ChatGPT como uma ferramenta de estudo, mas nada deve ser usado no mundo real sem consultar um especialista.
- Especialistas podem usar o ChatGPT para fazer tarefas mundanas mais rapidamente, mas ainda precisam avaliar se a resposta está correta ou incompleta.
Escalabilidade e Custo
- A escala do ChatGPT é limitada em comparação com empresas gigantes como Facebook ou Google.
- Uma resposta do ChatGPT custa de 10 a 100 vezes o custo de pesquisa no Google.
- Para produzir modelos sérios do tamanho do ChatGPT, são necessários milhões de dólares em investimento e infraestrutura.
Programação de Inteligência Artificial
Nesta seção, o palestrante discute a programação de inteligência artificial (IA) e os desafios envolvidos na construção de modelos de IA.
Construção de Modelos de IA
- A construção de modelos sérios, como o ChatGPT, é extremamente cara e requer milhões de imagens diferentes por muito tempo.
- Para produzir modelos do tamanho do ChatGPT, são necessários petabytes de dados e milhares ou milhões de horas em servidores super caros.
- Modelos sérios do tamanho do ChatGPT custam milhões de dólares para produzir.
Programação de IA para Iniciantes
- A programação de IA não será uma habilidade necessária para todos os programadores no futuro próximo.
- Somente aqueles que trabalham em empresas gigantes como a OpenAI, Microsoft, Apple ou Google terão a oportunidade de trabalhar na construção dessas inteligências.
- A maioria dos programadores só poderá usar modelos prontos dos outros, como o ChatGPT da OpenAI.
O Futuro do ChatGPT e sua Substituição aos Programadores
Nesta seção, o palestrante discute o futuro do ChatGPT e sua possível substituição aos programadores.
Futuro do ChatGPT
- O ChatGPT pode ser usado para substituir tarefas mundanas realizadas por programadores ruins ou preguiçosos.
- Um bom sênior ainda não pode ser substituído pelo ChatGPT. Isso levará pelo menos 50 anos antes que algo assim possa acontecer.
Substituição aos Programadores
- O uso do ChatGPT pelos sêniores pode ajudar a fazer tarefas mais rapidamente com menos erros.
- Infelizmente alguns iniciantes podem ser substituídos pelo uso do ChatGPT.
- O ChatGPT não substituirá programadores de verdade tão cedo.
ChatGPT's Script Writing Capabilities
In this section, the speaker talks about his experience with using ChatGPT to write a script for his YouTube channel.
ChatGPT's Limitations
- The speaker mentions that many YouTubers have been using ChatGPT to write their video scripts.
- However, he tried using it himself and found that it was too much work to edit the generated script. He concludes that in its current version, ChatGPT is unable to write a script for his channel without significant intervention.
- The speaker believes that channels relying solely on ChatGPT-generated scripts are superficial and simplistic. He suggests that if a script generated by ChatGPT can deceive an audience, then the audience's level of knowledge must be low.
Conclusion
- The speaker believes that while ChatGPT is excellent at filling content convincingly, it struggles with getting straight to the point.
- Overall, the speaker concludes that one's level of excitement towards ChatGPT is inversely proportional to their level of knowledge. If someone has little knowledge on a topic, they may become overly excited about the capabilities of ChatGPT.