Em destaque agora
Ver todas as dicas
Guia de Compra de Ferramentas Elétricas
Guia completo para você escolher ferramentas de acordo com sua necessidade.
Ler dica
Cartões SD Sandisk Piratas
Dicas que podem auxiliar a escolher o melhor dispositivo e evitar os piratas!
Ler dica
Organizando os desenhos
Organizar esses desenhos tem sido um desafio em tempos de confinamento...
Ler dica
Template html básico para Arduino, ESP82
O básico pra quem esta com pressa!
Ler dica
Como embalar malas para viagem
Embale malas para viagem como os serviços de aeroportos fazem
Ler dica
Como deixar o libreoffice em pt-br
O LibreOffice é uma alternativa gratuita
Ler dica
Como economizar detergente
Aproveitar melhor o uso do sabão na hora de lavar louça
Ler dica
Como limpar sua grelha da churrasqueira
Faça uma limpeza rápida e prática da sua grelha
Ler dica
Remova riscos da lataria do carro
Remova riscos da lataria do seu carro facilmente com óleo lubrificante
Ler dica
Reaproveitando o rolinho de papel
Algumas dicas de como reutilizar o rolinho do papel higiênico
Ler dica
Tire o cheiro de alho das mãos
Uma dica super fácil e funcional
Ler dica
Pré-amplificador de áudio
Pré-amplificador de áudio para microfones de eletreto
Ler dicaMais recentes
ESP32: Como Enviar E-mails via Servidor SMTP (HTML, Texto e Anexos) com Arduino IDE
ESP32: Como Enviar E-mails via Servidor SMTP (HTML, Texto e Anexos) com Arduino IDE figure { margin: 1.5em 0; text-align: center; } figure img { max-width: 100%; border-radius: 6px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); } figcaption { font-size: 0.85rem; color: #777; margin-top: 0.5em; } ul, ol { padding-left: 1.3em; } li { margin-bottom: 0.4em; } a { color: #0a6cff; text-decoration: none; } a:hover { text-decoration: underline; } strong { color: #111; } table { border-collapse: collapse; width: 100%; margin: 1.2em 0; font-size: 0.95rem; } th, td { border: 1px solid #ddd; padding: 8px 12px; text-align: left; } th { background: #f2f2f2; } pre { background: #1e1e2e; color: #dcdcdc; padding: 16px; border-radius: 6px; overflow-x: auto; font-size: 0.85rem; line-height: 1.5; } code { font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; } p code, li code { background: #eee; padding: 2px 5px; border-radius: 3px; font-size: 0.9em; } Guia prático para enviar notificações por e-mail a partir do ESP32 Neste tutorial você vai aprender a enviar e-mails com o ESP32 usando um servidor SMTP. Vamos mostrar como enviar uma mensagem simples em HTML ou texto puro, e também como enviar anexos, como imagens e arquivos .txt. A programação será feita na Arduino IDE, usando a biblioteca ReadyMail. Neste guia, você vai encontrar: Envio de e-mail (HTML e texto puro) Envio de e-mails com anexos (imagem e arquivo .txt) O que é um servidor SMTP? SMTP significa Simple Mail Transfer Protocol (Protocolo Simples de Transferência de Correio), um padrão da internet usado para o envio de e-mails. Para enviar mensagens a partir do ESP32, é necessário conectá-lo a um servidor SMTP. Biblioteca ReadyMail Para enviar e-mails com o ESP32, usaremos a biblioteca ReadyMail. Ela permite que o ESP32 envie e receba e-mails, com ou sem anexos, via servidores SMTP e IMAP. Neste tutorial, vamos usar apenas o SMTP para enviar e-mails com e sem anexos. Como exemplo, enviaremos uma imagem (.png) e um arquivo de texto (.txt). Os arquivos enviados podem estar salvos no sistema de arquivos do ESP32 (SPIFFS ou LittleFS) ou em um cartão microSD (este último não é abordado aqui). Instalando a biblioteca ReadyMail Antes de continuar, você precisa instalar a biblioteca ReadyMail. Vá em Sketch > Include Library > Manage Libraries e pesquise por ReadyMail. Instale a biblioteca ReadyMail by Mobizt. E-mail remetente (crie uma conta nova) Recomendamos criar uma nova conta de e-mail exclusivamente para enviar mensagens ao seu e-mail pessoal principal. Não use seu e-mail pessoal principal para enviar mensagens pelo ESP32. Se algo der errado no seu código, ou se por engano ele fizer muitas requisições, sua conta pode ser bloqueada ou suspensa temporariamente. Usaremos uma conta Gmail recém-criada como remetente, mas você pode usar qualquer outro provedor de e-mail. O destinatário pode ser tranquilamente seu e-mail pessoal. Criar uma conta de e-mail remetente Crie uma nova conta de e-mail para enviar mensagens com o ESP32. Se quiser usar uma conta Gmail, acesse este link para criar uma nova. Criar uma senha de app Você precisa criar uma senha de aplicativo para que o ESP32 possa enviar e-mails usando sua conta Gmail. Uma senha de app é um código de 16 dígitos que concede a um dispositivo ou aplicativo menos seguro permissão para acessar sua conta Google. Uma senha de app só pode ser usada em contas que tenham a verificação em duas etapas ativada. Abra sua Conta do Google. No painel de pesquisa, selecione Segurança. Em "Como fazer login no Google", selecione Verificação em duas etapas > Começar. Siga as instruções na tela. Depois de ativar a verificação em duas etapas, você pode criar uma senha de app: Abra sua Conta do Google. No painel de pesquisa, procure por Senhas de app. Abra o menu Senhas de app. Dê um nome para a senha de app, por exemplo ESP. Depois, clique em Criar. Vai abrir uma janela com uma senha que você usará no ESP32 para enviar e-mails. Salve essa senha (mesmo que a tela diga que você não precisará memorizá-la), pois vai precisar dela mais adiante. Agora você já tem uma senha de app pronta para usar no código do ESP32. Se você estiver usando outro provedor de e-mail, verifique como criar uma senha de app específica dele. Normalmente é fácil encontrar as instruções pesquisando "seu_provedor_de_email + criar senha de app". Configurações do servidor SMTP do Gmail Para enviar e-mails com o ESP32, você também precisa saber as configurações do servidor SMTP do seu provedor de e-mail. Se estiver usando uma conta Gmail, estas são as configurações: ParâmetroValor Servidor SMTPsmtp.gmail.com Usuário SMTPEndereço Gmail completo Senha SMTPSua senha de app do Gmail Porta SMTP (TLS)587 Porta SMTP (SSL)465 TLS/SSL obrigatórioSim Configurações do servidor SMTP do Outlook ParâmetroValor Servidor SMTPsmtp.office365.com Usuário SMTPEndereço Outlook completo Senha SMTPSua senha do Outlook Porta SMTP587 TLS/SSL obrigatórioSim Configurações do servidor SMTP do Live/Hotmail ParâmetroValor Servidor SMTPsmtp.live.com Usuário SMTPEndereço Live/Hotmail completo Senha SMTPSua senha do Windows Live Hotmail Porta SMTP587 TLS/SSL obrigatórioSim Se estiver usando outro provedor de e-mail, será necessário pesquisar as configurações específicas do servidor SMTP dele. Agora você já tem tudo pronto para começar a enviar e-mails com o seu ESP32. Enviar um e-mail em HTML ou texto puro com o ESP32 (Arduino IDE) O código a seguir envia um e-mail via servidor SMTP em HTML ou texto puro. Para fins de demonstração, o ESP32 envia um e-mail assim que é ligado. Depois, você pode adaptar o código para integrá-lo aos seus próprios projetos. Antes de enviar o código para a placa, insira suas credenciais de rede, além de configurar o e-mail remetente, os dados do servidor SMTP, o destinatário e a mensagem. /* Baseado no exemplo fornecido pela biblioteca ReadyMail: https://github.com/mobizt/ReadyMail/ */ #include #include #include #define ENABLE_SMTP #define ENABLE_DEBUG #include // SUBSTITUA PELAS SUAS CREDENCIAIS DE REDE const char* ssid = "SUBSTITUA_PELO_SEU_SSID"; const char* password = "SUBSTITUA_PELA_SUA_SENHA"; // Configurações do SMTP do remetente (GMAIL) // Altere se estiver usando outro provedor #define SMTP_HOST "smtp.gmail.com" #define SMTP_PORT 465 // E-mail do remetente, senha de app e nome #define AUTHOR_EMAIL "seu_email@gmail.com" #define AUTHOR_APP_PASS "SENHA_DE_APP_DO_EMAIL" #define AUTHOR_NAME "ESP32" // E-mail do destinatário #define RECIPIENT_EMAIL "email_destinatario@gmail.com" #define RECIPIENT_NAME "NOME_DESTINATARIO" WiFiClientSecure ssl_client; SMTPClient smtp(ssl_client); void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) delay(500); ssl_client.setInsecure(); auto statusCallback = [](SMTPStatus status) { Serial.println(status.text); }; smtp.connect(SMTP_HOST, SMTP_PORT, statusCallback); if (smtp.isConnected()) { smtp.authenticate(AUTHOR_EMAIL, AUTHOR_APP_PASS, readymail_auth_password); SMTPMessage msg; msg.headers.add(rfc822_from, String(AUTHOR_NAME) + " <" + AUTHOR_EMAIL + ">"); msg.headers.add(rfc822_to, String(RECIPIENT_NAME) + " <" + RECIPIENT_EMAIL + ">"); msg.headers.add(rfc822_subject, "Ola do ESP32"); //msg.text.body("Esta e uma mensagem em texto puro."); msg.html.body("Ola!"); // Configuracao do horario via NTP const int gmtOffset_sec = 0; // deslocamento em segundos const int daylightOffset_sec = 0; // horario de verao configTime(gmtOffset_sec, daylightOffset_sec, "pool.ntp.org"); while (time(nullptr) < 100000) delay(100); msg.timestamp = time(nullptr); smtp.send(msg); } } void loop() { } Você também pode baixar o código bruto original diretamente do repositório da Random Nerd Tutorials. Como o código funciona Esse código é adaptado de um exemplo fornecido pela própria biblioteca. Vamos analisar os pontos mais relevantes, que você precisa ou pode querer alterar. Primeiro, incluímos as bibliotecas necessárias: #include #include #include #define ENABLE_SMTP #define ENABLE_DEBUG #include Da biblioteca ReadyMail, usaremos o SMTP para enviar os e-mails, e ativaremos as funções de debug para acompanhar o status do envio. Em seguida, insira suas credenciais de rede: const char* ssid = "SUBSTITUA_PELO_SEU_SSID"; const char* password = "SUBSTITUA_PELA_SUA_SENHA"; Insira as configurações do servidor SMTP. Se estiver usando o Gmail, estes são os parâmetros: #define SMTP_HOST "smtp.gmail.com" #define SMTP_PORT 465 Insira as credenciais de login do e-mail remetente (endereço completo e a senha de app criada anteriormente — não a senha normal da conta, e sim a SENHA DE APP) e o nome do remetente: #define AUTHOR_EMAIL "seu_email@gmail.com" #define AUTHOR_APP_PASS "SENHA_DE_APP_DO_EMAIL" #define AUTHOR_NAME "ESP32" Insira o e-mail e o nome do destinatário: #define RECIPIENT_EMAIL "email_destinatario@gmail.com" #define RECIPIENT_NAME "NOME_DESTINATARIO" Crie um cliente WiFi para se comunicar com o servidor SMTP: WiFiClientSecure ssl_client; SMTPClient smtp(ssl_client); No setup(), inicialize o Monitor Serial e conecte o ESP32 ao Wi-Fi: void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) delay(500); Crie uma função chamada statusCallback, que recebe o status SMTP e o imprime no Monitor Serial. Basicamente, isso mostra o andamento das diversas etapas do envio. auto statusCallback = [](SMTPStatus status) { Serial.println(status.text); }; Conecte-se ao servidor SMTP e faça a autenticação: smtp.connect(SMTP_HOST, SMTP_PORT, statusCallback); if (smtp.isConnected()) { smtp.authenticate(AUTHOR_EMAIL, AUTHOR_APP_PASS, readymail_auth_password); Crie um objeto de mensagem SMTP, chamado msg: SMTPMessage msg; Adicione os cabeçalhos do e-mail: nome e endereço do remetente, nome e endereço do destinatário, e o assunto da mensagem: msg.headers.add(rfc822_from, String(AUTHOR_NAME) + " <" + AUTHOR_EMAIL + ">"); msg.headers.add(rfc822_to, String(RECIPIENT_NAME) + " <" + RECIPIENT_EMAIL + ">"); msg.headers.add(rfc822_subject, "Ola do ReadyMail"); Em seguida, defina o corpo do e-mail. Você pode enviar texto puro com msg.text.body(), ou enviar HTML com msg.html.body(). Use apenas um dos dois métodos por vez. msg.text.body("Esta e uma mensagem em texto puro."); //msg.html.body("Ola!"); Configure o timestamp do e-mail usando um servidor NTP. Ajuste o deslocamento de fuso horário e de horário de verão conforme necessário (gmtOffset_sec e daylightOffset_sec): const int gmtOffset_sec = 0; // deslocamento em segundos const int daylightOffset_sec = 0; // horario de verao configTime(gmtOffset_sec, daylightOffset_sec, "pool.ntp.org"); while (time(nullptr) < 100000) delay(100); msg.timestamp = time(nullptr); Por fim, envie o e-mail. É simples assim: smtp.send(msg); Para fins de demonstração e teste, o envio acontece uma única vez, dentro do setup(), deixando o loop() vazio: void loop() {} Demonstração Envie o código para o seu ESP32. Depois de enviar, abra o Monitor Serial com baud rate de 115200. Pressione o botão de Reset da placa. Se tudo correr bem, você verá uma mensagem parecida com esta no Monitor Serial: Verifique a caixa de entrada do e-mail configurado como destinatário. Você deve ter recebido uma mensagem enviada pelo seu ESP32. Se você optou por enviar a mensagem em HTML, é assim que ela deve aparecer: E se você habilitou o envio em texto puro, esta é a aparência esperada da mensagem: Enviar e-mails com anexos usando o ESP32 (Arduino IDE) Nesta seção, vamos mostrar como enviar anexos em e-mails a partir do ESP32 — arquivos .txt ou imagens. Isso pode ser útil, por exemplo, para enviar um arquivo .txt com leituras de sensores das últimas horas, ou para enviar uma foto capturada por um ESP32-CAM. Para este tutorial, os arquivos a serem enviados devem estar salvos no sistema de arquivos do ESP32 (LittleFS). Enviar arquivos para o LittleFS Para enviar arquivos por e-mail, eles precisam estar salvos no sistema de arquivos do ESP32 ou em um cartão microSD. Vamos enviar uma imagem e um arquivo .txt para o sistema de arquivos LittleFS do ESP32, usando o plugin ESP32 Filesystem Uploader para a Arduino IDE. Crie um novo sketch no Arduino e salve-o. Vá em Sketch > Show Sketch Folder. Dentro da pasta do sketch, crie uma pasta chamada data. Mova um arquivo .jpg e um arquivo .txt para essa pasta. Nota: com o código padrão, seus arquivos precisam se chamar image.png e text_file.txt. Você também pode modificar o código para importar arquivos com outros nomes. A estrutura de pastas deve ficar assim: Depois de mover os arquivos para a pasta data, você precisa enviá-los para a placa. Na Arduino IDE, pressione Ctrl+Shift+P (Windows) ou ⌘+Shift+P (macOS) para abrir a paleta de comandos. Procure pelo comando Upload LittleFS to Pico/ESP8266/ESP32 e clique nele. Você deve ver uma mensagem de sucesso na janela de debug. Se os arquivos foram enviados corretamente, siga para a próxima seção. Nota: se você começar a ver muitos pontos sendo impressos na janela de debug (….____…..____), segure o botão BOOT da placa para que o envio dos arquivos seja concluído. Código O código a seguir envia um e-mail com um arquivo .txt e uma imagem anexados. Antes de enviar o código para a placa, configure o e-mail remetente e o destinatário. #include #include #include #include #include #define ENABLE_SMTP // Habilita a classe SMTP #define ENABLE_DEBUG // Habilita o debug #define ENABLE_FS // Habilita integracao com sistema de arquivos #define MY_FS LittleFS #include const char* ssid = "SUBSTITUA_PELO_SEU_SSID"; const char* password = "SUBSTITUA_PELA_SUA_SENHA"; #define SMTP_HOST "smtp.gmail.com" #define SMTP_PORT 465 #define AUTHOR_EMAIL "seu_email@gmail.com" #define AUTHOR_APP_PASS "SENHA_DE_APP_DO_EMAIL" #define AUTHOR_NAME "ESP32" #define RECIPIENT_EMAIL "email_destinatario@gmail.com" #define RECIPIENT_NAME "NOME_DESTINATARIO" WiFiClientSecure ssl_client; SMTPClient smtp(ssl_client); File myFile; void fileCb(File &file, const char *filename, readymail_file_operating_mode mode) { switch (mode) { case readymail_file_mode_open_read: myFile = MY_FS.open(filename, FILE_OPEN_MODE_READ); break; case readymail_file_mode_open_write: myFile = MY_FS.open(filename, FILE_OPEN_MODE_WRITE); break; case readymail_file_mode_open_append: myFile = MY_FS.open(filename, FILE_OPEN_MODE_APPEND); break; case readymail_file_mode_remove: MY_FS.remove(filename); break; default: break; } file = myFile; } void initLittleFS() { if (!MY_FS.begin(true)){ Serial.println("Falha ao montar o LittleFS"); return; } } void smtpCb(SMTPStatus status){ if (status.progress.available) ReadyMail.printf("ReadyMail[smtp][%d] Enviando arquivo %s, %d %% concluido\n", status.state, status.progress.filename.c_str(), status.progress.value); else ReadyMail.printf("ReadyMail[smtp][%d]%s\n", status.state, status.text.c_str()); } void addFileAttachment(SMTPMessage &msg, const String &filename, const String &mime, const String &name, FileCallback cb, const String &filepath, const String &encoding = "", const String &cid = "") { Attachment attachment; attachment.filename = filename; attachment.mime = mime; attachment.name = name; attachment.content_id = cid; attachment.attach_file.callback = cb; attachment.attach_file.path = filepath; attachment.content_encoding = encoding; msg.attachments.add(attachment, cid.length() > 0 ? attach_type_inline : attach_type_attachment); } void setup() { Serial.begin(115200); Serial.println(); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) delay(500); initLittleFS(); ssl_client.setInsecure(); smtp.connect(SMTP_HOST, SMTP_PORT, smtpCb); if (!smtp.isConnected()) return; smtp.authenticate(AUTHOR_EMAIL, AUTHOR_APP_PASS, readymail_auth_password); if (!smtp.isAuthenticated()) return; SMTPMessage msg; msg.headers.add(rfc822_from, String(AUTHOR_NAME) + " <" + AUTHOR_EMAIL + ">"); msg.headers.add(rfc822_to, String(RECIPIENT_NAME) + " <" + RECIPIENT_EMAIL + ">"); msg.headers.add(rfc822_subject, "Anexos do ESP32"); String bodyText = "Ola! Veja os anexos"; msg.text.body(bodyText); msg.html.body("" + bodyText + ""); const int gmtOffset_sec = 0; const int daylightOffset_sec = 0; configTime(gmtOffset_sec, daylightOffset_sec, "pool.ntp.org"); while (time(nullptr) < 100000) delay(100); msg.timestamp = time(nullptr); addFileAttachment(msg, "image.png", "image/png", "image.png", fileCb, "/image.png"); addFileAttachment(msg, "text_file.txt", "text/plain", "text_file.txt", fileCb, "/text_file.txt"); Serial.print("Enviando email"); smtp.send(msg); } void loop(){ } O pacote completo do projeto também está disponível para download no repositório original. Como o código funciona Esse código é bem parecido com o anterior, então vamos focar apenas nos trechos específicos necessários para enviar anexos salvos no sistema de arquivos do ESP32. Primeiro, precisamos incluir as bibliotecas FS e LittleFS, para lidar com arquivos no ESP32: #include #include Habilitamos a integração com o sistema de arquivos e definimos qual tipo será usado (pode ser SPIFFS, LittleFS ou SD): #define ENABLE_FS // Habilita integracao com sistema de arquivos #define MY_FS LittleFS É necessário criar um objeto File e uma função de callback que será chamada ao criar o anexo. Estamos usando a função fileCb(), adaptada de um dos exemplos da própria biblioteca. Também é preciso inicializar o sistema de arquivos, o que fazemos na função initLittleFS(). É necessário criar uma função de callback que será executada durante o envio do e-mail — usamos a função smtpCb(), que reporta o progresso do processo. A função addFileAttachment() reúne todos os passos necessários para criar e adicionar um anexo à mensagem. Confira o significado de cada parâmetro: SMTPMessage &msg: o objeto da mensagem de e-mail ao qual o anexo será adicionado. const String &filename: o nome do arquivo que o destinatário vai ver. const String &mime: o tipo MIME do arquivo (por exemplo: image/png, text/plain, etc). const String &name: o nome de exibição do anexo. FileCallback cb: a função de callback chamada ao adicionar o anexo. const String &filepath: o caminho do arquivo no sistema de arquivos. const String &encoding = "": deixe em branco, a menos que o conteúdo já esteja codificado. const String &cid = "": ID de conteúdo usado para anexos inline, embutidos no corpo de mensagens HTML. No setup(), inicializamos o Monitor Serial, conectamos ao Wi-Fi e inicializamos o sistema de arquivos LittleFS. Em seguida, chamamos a função addFileAttachment() com os parâmetros corretos, para anexar uma imagem chamada image.png (salva no LittleFS) e também um arquivo de texto, text_file.txt. Por fim, enviamos a mensagem com o método send(), assim como no exemplo anterior. Demonstração Depois de enviar o código, abra o Monitor Serial com baud rate de 115200 e pressione o botão EN/RESET da placa. Se tudo correr bem, você verá uma mensagem parecida com esta: Verifique o e-mail configurado como destinatário. Você deve ter recebido uma nova mensagem com dois anexos. Conclusão Neste tutorial, você aprendeu a enviar e-mails com o ESP32 usando um servidor SMTP. Para que esse método funcione, o ESP32 precisa ter acesso à internet. Se você não quiser usar um servidor SMTP, também é possível usar um script PHP para enviar notificações por e-mail a partir do ESP32 ou ESP8266. Você aprendeu a enviar um e-mail simples com texto e também com anexos. Ao usar anexos, os arquivos precisam estar salvos no sistema de arquivos do ESP32 (LittleFS) ou em um cartão microSD. Os exemplos mostrados enviam um único e-mail quando o ESP32 é ligado. A ideia é que você adapte o código para os seus próprios projetos — por exemplo, enviar um arquivo .txt com leituras de sensores, enviar uma foto capturada por um ESP32-CAM, ou usar deep sleep para acordar a placa periodicamente e enviar dados por e-mail. Esperamos que este tutorial tenha sido útil para os seus projetos com ESP32.
Ler dica
Guia de MCUs RISC-V
Este artigo apresenta um panorama do universo das MCUs baseadas em RISC-V, com foco em quatro placas de grande destaque no mercado atual: ESP32-C3, SiFive FE310, GD32VF103 e Kendryte K210. Essas placas ilustram bem o potencial da arquitetura RISC-V e como ela vem atendendo à crescente demanda por soluções de IoT.Ao comparar as especificações técnicas de cada uma dessas MCUs, o objetivo é ajudar makers e engenheiros a tomar decisões mais embasadas na hora de escolher o processador ideal para seus projetos.O que é RISC-V?Antes de entrar nos detalhes de cada MCU, vale entender os fundamentos da arquitetura RISC-V e por que ela vem ganhando tanto espaço no mundo dos microprocessadores. RISC-V é uma arquitetura de conjunto de instruções (ISA) aberta, o que a diferencia radicalmente de padrões comerciais consolidados como ARM e x86. Por ser open-source, RISC-V não é apenas uma especificação técnica: é também um movimento que estimula inovação e colaboração em toda a indústria.Origem e DesenvolvimentoA história do RISC-V começou nos laboratórios de ciência da computação da Universidade da Califórnia em Berkeley. Em 2010, um grupo de pesquisadores e engenheiros propôs essa ISA aberta com o objetivo de superar as limitações e os altos custos das arquiteturas proprietárias. O que nasceu como um projeto acadêmico se transformou em uma colaboração open-source global, inaugurando uma nova era na computação. A filosofia de design do RISC-V é baseada em simplicidade, modularidade e extensibilidade — características que o tornam ideal tanto para pesquisa e educação quanto para projetos comerciais.Características da Arquitetura RISC-VO RISC-V segue os princípios do Reduced Instruction Set Computing (RISC), ou seja, utiliza um conjunto reduzido de instruções simples. Esse design traz algumas vantagens importantes:Escalabilidade: permite que desenvolvedores adicionem instruções customizadas conforme a necessidade, oferecendo flexibilidade incomparável para aplicações específicas.Modularidade: o design modular possibilita integrar apenas os recursos necessários, reduzindo o consumo de recursos de hardware.Baixo consumo de energia: um conjunto de instruções enxuto significa maior eficiência energética — algo essencial para dispositivos IoT alimentados por bateria.Aberto e livre de royalties: por ser um padrão aberto, o RISC-V reduz barreiras de entrada e estimula a criatividade de inovadores no mundo todo.RISC-V comparado a outras arquiteturasA maior diferença entre RISC-V e arquiteturas populares como ARM e x86 está justamente em seu caráter open-source e livre de royalties, o que representa uma vantagem clara em custo e liberdade de inovação. Em comparação ao modelo fechado de licenciamento da ARM, o RISC-V oferece mais espaço para customização e controle. Já em relação ao x86, o RISC-V se destaca pela flexibilidade e escalabilidade no universo embarcado e de IoT, ainda que o x86 continue dominando o mercado de desktops e servidores.À medida que a tecnologia avança, o RISC-V vem atraindo não só startups, mas também grandes empresas e gigantes de semicondutores, o que evidencia sua crescente influência no cenário global da computação.Quatro MCUs RISC-V em destaqueA seguir, uma análise detalhada de quatro MCUs representativas amplamente utilizadas em eletrônica de consumo, automação industrial e computação de borda com inteligência artificial: ESP32-C3, SiFive FE310, GD32VF103 e Kendryte K210. Serão abordadas filosofia de design, principais recursos, parâmetros de desempenho e cenários de aplicação de cada uma.1. ESP32-C3O ESP32-C3 é um microcontrolador da Espressif Systems que integra Wi-Fi e Bluetooth com base em um núcleo RISC-V eficiente. Como parte da família ESP32, ele oferece uma solução de conectividade sem fio segura e de bom custo-benefício para aplicações de IoT, combinando alto desempenho wireless, um conjunto rico de periféricos e baixo consumo de energia.Figura: ESP32-C3Parâmetros de desempenhoA capacidade computacional e de E/S do ESP32-C3 o torna adequado para aplicações de IoT de alto desempenho, e sua forte integração wireless favorece a transmissão de dados em dispositivos inteligentes.Figura: Diagrama de blocos funcionais do ESP32-C3Principais recursos:Processador e memória: núcleo RISC-V single-core de 32 bits com clock de até 160 MHz e 400 KB de SRAM interna.Conectividade sem fio: Wi-Fi 2,4 GHz e Bluetooth 5.0 LE integrados, garantindo opções estáveis e diversas de conexão.Segurança: recursos como boot seguro, criptografia de Flash, assinatura digital e timestamp garantem a proteção do dispositivo e dos dados transmitidos.Baixo consumo: suporta múltiplos modos de economia de energia, incluindo deep sleep e light sleep, ideal para aplicações alimentadas por bateria.Interfaces de E/S variadas: SPI, I2C, UART, PWM e ADC, permitindo fácil expansão com sensores e atuadores diversos.Cenários de aplicação comunsCasa inteligente: tomadas inteligentes, iluminação e controladores de temperatura conectados via Wi-Fi.Automação industrial: monitoramento de parâmetros ambientais ou status de máquinas com transmissão de dados em tempo real.Dispositivos vestíveis: dispositivos Bluetooth de baixo consumo para monitoramento de saúde e atividades físicas.Agricultura inteligente: sistemas de monitoramento de umidade do solo ou coleta de dados meteorológicos em áreas remotas.No segmento de casa inteligente, o ESP32-C3 é amplamente utilizado em fechaduras inteligentes e sistemas de controle de temperatura, já que seu baixo consumo e conectividade robusta garantem longa autonomia e controle remoto confiável.2. SiFive FE310O SiFive FE310 é um microcontrolador RISC-V de alto desempenho lançado pela SiFive. Como o primeiro produto da série Freedom E310 (FE310) SoC, foi um dos primeiros chips RISC-V comercialmente disponíveis no mundo. O FE310 nasceu com o objetivo de impulsionar o hardware open-source, oferecendo aos desenvolvedores uma plataforma customizável e de bom custo-benefício.Figura: Freedom E310 (FE310) MCUParâmetros de desempenhoPrincipais recursosProcessador e memória: núcleo RISC-V RV32IMAC proprietário da SiFive, com clock de até 320 MHz.Armazenamento e periféricos: suporte a flash externa QSPI rápida e configurações flexíveis de periféricos, com múltiplos protocolos de comunicação.Customização: a SiFive oferece serviços de personalização, permitindo adaptar núcleos e SoCs às necessidades do cliente.Ecossistema aberto: o FE310 contribuiu para a maturação do ecossistema RISC-V, oferecendo mais ferramentas e suporte aos desenvolvedores.Design de baixo consumo: projetado para aplicações sensíveis à energia, com múltiplos modos de economia.Cenários de aplicação comunsEducação e pesquisa: ideal para estudo e experimentação da arquitetura RISC-V no meio acadêmico.Nós de IoT: como processador de nós IoT, coletando dados de sensores e realizando pré-processamento.Dispositivos vestíveis: dispositivos de monitoramento de saúde, como smartwatches e rastreadores de atividade física.Prototipagem: hardware makers e startups podem usar o FE310 para prototipagem rápida e testes.Na área de IoT, o FE310 é usado em sensores agrícolas inteligentes, graças ao baixo consumo e alto desempenho, permitindo operação prolongada ao ar livre. Também é aplicado no desenvolvimento de dispositivos vestíveis de saúde que precisam processar grandes volumes de dados fisiológicos mantendo boa autonomia de bateria.3. GD32VF103O GD32VF103 é um microcontrolador de propósito geral de 32 bits baseado em RISC-V, lançado pela GigaDevice. Ele integra um núcleo RISC-V de alto desempenho a um conjunto rico de periféricos, oferecendo uma solução de excelente custo-benefício. É projetado para aplicações que demandam alta capacidade computacional e configurações flexíveis de periféricos, sendo bastante adequado para controle industrial, eletrônica de consumo e IoT.Figura: GD32VF103 Series RISC-V MCUParâmetros de desempenhoPrincipais recursosProcessador e memória: núcleo RISC-V de 32 bits de alto desempenho, com até 32 KB de SRAM e 128 KB de Flash.Periféricos ricos: USB OTG, barramento CAN e SDIO, entre outros, para protocolos de comunicação complexos.Segurança e confiabilidade: verificação CRC de hardware e criptografia AES embutidas garantem integridade dos dados transmitidos.Design de baixo consumo: suporte a modos sleep e standby, ideal para aplicações alimentadas por bateria ou eficientes em energia.Opções flexíveis de encapsulamento: diversas opções para atender diferentes necessidades de design de produto.Cenários de aplicação comunsSistemas de controle industrial: controle de motores, sensores e atuadores em automação.Dispositivos de casa inteligente: núcleo de controle para lâmpadas, cortinas e purificadores de ar inteligentes.Eletrônica de consumo: dispositivos portáteis, controles de jogos e tocadores de música portáteis.Nós de IoT: coleta e processamento de dados em cidades e agricultura inteligentes.O GD32VF103 é amplamente aplicado em medidores inteligentes, como no processamento e armazenamento de leituras em medidores de energia elétrica, com transmissão remota de dados via módulos wireless. Também é usado em automação industrial, monitorando dados de sensores e controlando o movimento de braços robóticos em linhas de produção automatizadas.4. Kendryte K210O Kendryte K210 é um microprocessador RISC-V dual-core voltado para aplicações de inteligência artificial e visão computacional, lançado pela empresa chinesa Kendryte. Ele integra diversos recursos de processamento de IA, sendo especialmente indicado para computação de borda em tarefas como reconhecimento de imagem, processamento de voz e detecção de objetos. O K210 se destaca no mercado por seu alto desempenho computacional aliado a baixo consumo de energia.Figura: Kendryte K210 Development BoardParâmetros de desempenhoPrincipais recursosProcessador e acelerador de IA: processador RISC-V dual-core de 64 bits com um processador de rede neural KPU embutido, oferecendo alto poder computacional para IA.Memória e processamento de visão: 8 MB de SRAM e suporte à interface de câmera DVP para captura de vídeo em tempo real, ideal para dados complexos de imagem e vídeo.Segurança e eficiência: aceleradores de hardware AES e SHA256 embutidos aumentam a segurança e a eficiência do processamento de dados.Baixo consumo e alta integração: diversos modos de economia de energia e alta integração, simplificando o design do sistema.Interfaces de comunicação diversas: I2C, SPI, UART, entre outras, facilitando a comunicação com outros dispositivos.Cenários de aplicação comunsVigilância inteligente: câmeras de segurança com reconhecimento facial e rastreamento de objetos em tempo real.Robótica: processador central para visão computacional e tomada de decisão em robôs.Dispositivos de reconhecimento de voz: caixas de som inteligentes e sistemas de controle por voz.Educação e projetos DIY: compatível com diversos ambientes e ferramentas de programação, ideal para estudantes e entusiastas em projetos de IA.O Kendryte K210 se destaca no segmento de casa inteligente, sendo integrado, por exemplo, a campainhas inteligentes que usam reconhecimento facial eficiente para identificar visitantes e detectar comportamentos anômalos. No campo educacional, também é amplamente utilizado em projetos STEM, ajudando estudantes a compreender e praticar conceitos básicos de inteligência artificial.Como escolher a MCU RISC-V idealEscolher a MCU RISC-V mais adequada para o seu projeto é fundamental para garantir desempenho e custo-benefício. O framework de decisão a seguir ajuda a orientar essa escolha entre as diversas opções disponíveis:1. Analise os requisitos de desempenho do projetoPoder de processamento: para aplicações que exigem algoritmos complexos ou fluxos de dados de alta velocidade, opte por MCUs com clock mais alto e múltiplos núcleos.Especificações de memória: determine os requisitos mínimos de RAM e memória flash para código e dados de execução, deixando margem para futuras expansões.2. Avalie os requisitos de consumo de energiaModos de baixo consumo: para dispositivos alimentados por bateria, escolha MCUs com múltiplos estados de economia, como sleep e deep sleep.Eficiência energética: priorize MCUs eficientes que mantenham o desempenho reduzindo o consumo durante a execução das tarefas.3. Verifique periféricos e interfaces necessáriosProtocolos de comunicação: garanta suporte aos protocolos necessários, como UART, SPI, I2C, CAN, etc.Interfaces analógicas e digitais: se houver processamento de sinais analógicos, verifique se a MCU possui ADC/DAC com a resolução e taxa de amostragem adequadas.4. Considere o suporte de desenvolvimento e ecossistemaToolchain e bibliotecas: escolha MCUs com toolchains ricas e bibliotecas open-source para simplificar o desenvolvimento e reduzir o time-to-market.Comunidade e documentação: uma comunidade ativa e boa documentação são essenciais para suporte durante o desenvolvimento.5. Sugestões práticasTestes de desempenho: teste a MCU com amostras antes da compra para garantir que atende às especificações técnicas.Kits de desenvolvimento: use placas de avaliação ou kits de desenvolvimento para prototipar e avaliar desempenho e facilidade de uso.Vale destacar que, como o ecossistema de hardware e software do RISC-V ainda está em desenvolvimento em comparação a ARM e x86, é importante prestar atenção especial ao suporte da comunidade e à qualidade da documentação na hora de escolher uma MCU RISC-V, já que esses fatores são essenciais para o suporte técnico durante o desenvolvimento.ResumoAo comparar essas MCUs RISC-V, fica claro que todas compartilham características de alto desempenho, baixo consumo de energia e alta escalabilidade — mas cada uma tem seus próprios diferenciais. O SiFive FE310 oferece um núcleo eficiente de 32 bits e um conjunto rico de interfaces, adequado a diversas aplicações embarcadas. O GD32VF103 se destaca pela forte capacidade de processamento e abundância de interfaces, atendendo aplicações mais complexas. Já o Kendryte K210, com seu processador dual-core de 64 bits e processador dedicado de IA, é especialmente indicado para aplicações de inteligência artificial e IoT.De modo geral, esses produtos RISC-V vêm recebendo grande atenção globalmente e mudando gradualmente a forma como enxergamos os microprocessadores. À medida que o ecossistema RISC-V continua a evoluir, é natural esperar produtos e aplicações ainda mais inovadores no futuro.
Ler dica
Como listar programas instalados no Windows com PowerShell
Como listar programas instalados no Windows usando PowerShellSaber quais programas estão instalados em um computador pode ser muito útil em várias situações: auditoria de máquinas, inventário de software, suporte técnico, preparação para formatação, identificação de programas antigos ou até busca pelo comando de desinstalação de um aplicativo.No Windows, é possível fazer isso sem instalar programas extras. Usando o PowerShell, podemos consultar o Registro do sistema e listar os softwares instalados de forma rápida e organizada.Por que usar PowerShell para listar programas instalados?Normalmente, o usuário acessa a lista de programas pelo menu Configurações > Aplicativos ou pelo antigo painel Programas e Recursos. Essa forma é simples, mas não é muito prática quando você precisa copiar a lista, filtrar resultados ou automatizar uma verificação.Com PowerShell, é possível:Listar programas instalados no computador.Filtrar por nome do programa.Ver o comando de desinstalação.Exportar a lista para CSV.Usar o mesmo comando em scripts de suporte técnico.Fazer inventário de software com mais agilidade.Essa abordagem é especialmente útil para técnicos, administradores de rede, analistas de suporte e usuários avançados.Onde o Windows armazena a lista de programas?Muitos programas instalados no Windows registram suas informações em chaves específicas do Registro. Essas chaves normalmente ficam em locais como:HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* HKCU:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* De forma simplificada:HKLM traz programas instalados para todos os usuários do computador.HKCU traz programas instalados apenas para o usuário atual.Wow6432Node costuma armazenar informações de programas 32 bits em sistemas Windows 64 bits.Por isso, consultar apenas uma chave pode trazer uma lista incompleta. O ideal é verificar todas essas possibilidades.Comando simples para listar programas instaladosPara começar, abra o PowerShell e execute:Get-ItemProperty 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*' | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Sort-Object DisplayName Esse comando consulta uma das áreas do Registro onde ficam informações sobre programas instalados.O resultado pode mostrar dados como:Nome do programa.Versão instalada.Fabricante.Data de instalação, quando disponível.Porém, esse comando ainda não mostra tudo, pois alguns programas podem estar em outras chaves do Registro.Função PowerShell para listar programas de forma mais completaUma forma melhor é criar uma função para consultar várias chaves ao mesmo tempo.Copie o código abaixo e cole no PowerShell:function Get-ProgramasInstalados { param ( [string]$Nome = "*" ) $caminhos = @( "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKCU:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" ) Get-ItemProperty -Path $caminhos -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -like $Nome } | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate, UninstallString, ModifyPath | Sort-Object DisplayName } Depois de carregar a função, execute:Get-ProgramasInstalados Esse comando irá listar os programas encontrados nas principais áreas do Registro.Como filtrar por um programa específicoSe você quiser localizar apenas programas com determinado nome, use:Get-ProgramasInstalados "*firefox*" Ou, por exemplo:Get-ProgramasInstalados "*chrome*" Esse tipo de filtro é muito útil quando você quer descobrir se um programa específico está instalado na máquina.Como visualizar melhor os detalhesPara exibir os dados em formato de lista, use:Get-ProgramasInstalados "*firefox*" | Format-List Esse formato facilita a leitura quando o resultado tem muitas colunas, principalmente os campos UninstallString e ModifyPath.Para que servem UninstallString e ModifyPath?Na lista retornada, dois campos podem chamar atenção:UninstallStringO campo UninstallString normalmente indica o comando usado para remover o programa.Exemplo:"C:\Program Files\Programa\uninstall.exe" Em alguns casos, esse comando pode ser usado para automatizar a desinstalação. Porém, é importante ter cuidado, pois alguns desinstaladores exigem parâmetros específicos, confirmação do usuário ou execução como administrador.ModifyPathO campo ModifyPath pode apontar para o caminho usado para modificar, reparar ou alterar a instalação do programa.Nem todos os programas possuem esse campo preenchido.Como exportar a lista para CSVUma das grandes vantagens de usar PowerShell é poder exportar o resultado para uma planilha.Para gerar um arquivo CSV na área de trabalho, use:Get-ProgramasInstalados | Export-Csv "$env:USERPROFILE\Desktop\programas-instalados.csv" -NoTypeInformation -Encoding UTF8 Depois disso, basta abrir o arquivo no Excel, LibreOffice Calc ou outro editor de planilhas.Essa opção é excelente para quem precisa documentar os softwares instalados antes de formatar uma máquina ou gerar um relatório de inventário.Como listar apenas nome e versãoSe você quiser uma saída mais limpa, execute:Get-ProgramasInstalados | Select-Object DisplayName, DisplayVersion | Sort-Object DisplayName Isso mostra apenas o nome do programa e sua versão.Cuidados importantesApesar de ser uma solução prática, alguns cuidados são necessários:Nem todo programa aparece no Registro da mesma forma.Programas portáteis podem não aparecer na lista.Aplicativos da Microsoft Store podem ser tratados de maneira diferente.O campo InstallDate nem sempre estará preenchido.O comando de desinstalação deve ser testado antes de ser usado em automações.Evite alterar ou apagar chaves do Registro sem saber exatamente o que está fazendo.O objetivo desse procedimento é consultar informações, não modificar o Registro.Quando esse método é útil?Esse tipo de comando pode ajudar em várias situações práticas, como:Criar inventário de programas instalados.Conferir se determinado software está presente em uma máquina.Preparar uma lista antes de formatar o computador.Identificar versões antigas de programas.Encontrar comandos de desinstalação.Apoiar rotinas de suporte técnico.Gerar relatórios para pequenas empresas.Para quem trabalha com manutenção de computadores, suporte ou administração de ambientes Windows, esse tipo de script economiza bastante tempo.ConclusãoListar programas instalados no Windows usando PowerShell é uma forma simples, rápida e eficiente de obter informações sobre os softwares presentes no computador.Ao consultar as chaves corretas do Registro, é possível obter uma lista parecida com a exibida em “Aplicativos instalados” ou “Programas e Recursos”, mas com a vantagem de permitir filtros, exportação e automação.Esse recurso pode ser muito útil tanto para usuários avançados quanto para profissionais de TI que precisam organizar, auditar ou documentar computadores Windows.
Ler dica
Como criar pendrive bootável do Windows 10/11 sem programas extras
Criar um pendrive bootável do Windows é uma tarefa comum para quem precisa formatar um computador, reinstalar o sistema operacional ou preparar uma máquina nova. Normalmente, muitos usuários recorrem a ferramentas como Rufus, Ventoy ou Media Creation Tool. Porém, existe uma forma de criar a mídia de instalação usando apenas recursos nativos do próprio Windows.Esse método é especialmente útil quando você já tem o arquivo ISO oficial do Windows 10 ou Windows 11 e quer montar um pendrive de instalação compatível com computadores modernos que usam UEFI.O problema: FAT32 ou NTFS?Ao preparar um pendrive de instalação do Windows, surge uma dificuldade técnica bastante comum.O arquivo install.wim, que fica dentro da pasta sources da ISO do Windows, pode ter mais de 4 GB. O problema é que o sistema de arquivos FAT32 não aceita arquivos individuais maiores que 4 GB.Por outro lado, muitos computadores com UEFI inicializam com mais facilidade a partir de pendrives formatados em FAT32. Se você formatar o pendrive em NTFS, pode funcionar em alguns computadores, mas em outros a mídia pode simplesmente não aparecer como opção de boot.Ou seja:O arquivo install.wim pode ser grande demais para FAT32.Alguns computadores não inicializam corretamente por USB em NTFS.A solução é manter o pendrive em FAT32 e dividir o arquivo install.wim.A boa notícia é que o Windows já possui uma ferramenta nativa chamada DISM, capaz de dividir esse arquivo grande em partes menores.O que você vai precisarAntes de começar, separe os seguintes itens:Um computador com Windows.Um pendrive de pelo menos 8 GB.A imagem ISO oficial do Windows 10 ou Windows 11.Acesso de administrador no Windows.Um backup dos arquivos importantes do pendrive.Atenção: o pendrive será formatado. Tudo que estiver nele será apagado.Passo 1: baixe a ISO oficial do WindowsO primeiro passo é baixar a imagem ISO do Windows diretamente do site oficial da Microsoft.Evite baixar ISOs de sites desconhecidos, fóruns ou links compartilhados em redes sociais. Usar uma imagem não oficial pode expor seu computador a arquivos modificados, falhas de instalação ou riscos de segurança.Depois de baixar a ISO, salve o arquivo em uma pasta de fácil acesso, como Downloads.Passo 2: monte a ISO no WindowsNo Windows 10 ou Windows 11, você pode montar a ISO sem instalar nenhum programa.Clique com o botão direito no arquivo .iso e escolha a opção Montar.O Windows criará uma unidade virtual, como se fosse um DVD. Neste exemplo, vamos considerar que a ISO foi montada como unidade D:.O seu computador pode usar outra letra, como E:, F: ou G:. Verifique a letra correta no Explorador de Arquivos antes de continuar.Passo 3: prepare o pendrive em FAT32Conecte o pendrive ao computador.Você pode formatá-lo pelo próprio Explorador de Arquivos:Abra “Este Computador”.Clique com o botão direito no pendrive.Selecione “Formatar”.Escolha o sistema de arquivos FAT32.Confirme a formatação.Neste exemplo, vamos considerar que o pendrive recebeu a letra E:.Atenção: confirme com cuidado a letra do pendrive para não apagar o disco errado.Passo 4: copie os arquivos da ISO, exceto o install.wimAgora será necessário copiar todos os arquivos da ISO para o pendrive, com exceção do arquivo install.wim.Abra o PowerShell como administrador e execute o comando abaixo, ajustando as letras das unidades se necessário:Copy-Item -Path 'D:\*' -Destination 'E:\' -Recurse -Force -Exclude 'install.wim' Neste exemplo:D:\ é a unidade onde a ISO está montada.E:\ é o pendrive.O parâmetro -Exclude 'install.wim' impede a cópia do arquivo grande que não cabe no FAT32.Passo 5: divida o arquivo install.wim em partes menoresAgora vem a parte principal do processo. Em vez de copiar o arquivo install.wim inteiro, vamos dividi-lo em arquivos menores com extensão .swm.Execute o comando abaixo no PowerShell como administrador:Dism.exe /Split-Image /ImageFile:"D:\sources\install.wim" /SWMFile:"E:\sources\install.swm" /FileSize:2048 Esse comando faz o seguinte:Lê o arquivo original install.wim dentro da ISO.Cria arquivos divididos no pendrive.Salva os arquivos como install.swm, install2.swm, install3.swm e assim por diante.Usa partes de até 2048 MB, ou seja, aproximadamente 2 GB cada.Dessa forma, todos os arquivos continuam compatíveis com FAT32.Passo 6: remova a ISO e use o pendriveDepois que o comando terminar, confira se o pendrive possui os arquivos do Windows e, dentro da pasta sources, os arquivos .swm.Em seguida, você pode desmontar a ISO:Abra “Este Computador”.Clique com o botão direito na unidade virtual da ISO.Selecione “Ejetar”.Agora o pendrive já deve estar pronto para ser usado como mídia de instalação do Windows.Como iniciar o computador pelo pendrivePara instalar o Windows usando esse pendrive, conecte-o ao computador de destino e acesse o menu de boot.As teclas mais comuns para abrir o menu de inicialização são:F12F11F9EscDelA tecla varia conforme o fabricante do notebook ou placa-mãe.Ao abrir o menu de boot, escolha o pendrive na opção UEFI. Depois disso, o instalador do Windows deverá iniciar normalmente.Vantagens desse métodoEsse processo tem algumas vantagens interessantes:Não precisa instalar programas extras.Usa ferramentas nativas do Windows.Mantém o pendrive em FAT32.Melhora a compatibilidade com computadores UEFI.Resolve o problema do arquivo install.wim maior que 4 GB.Pode ser útil para técnicos, analistas de suporte e usuários avançados.Cuidados importantesAntes de usar esse procedimento, lembre-se de alguns pontos:Sempre baixe a ISO do site oficial da Microsoft.Faça backup dos arquivos importantes antes de formatar o computador.Verifique se o computador atende aos requisitos do Windows 11.Confirme corretamente as letras das unidades antes de executar os comandos.Use um pendrive confiável, de preferência sem arquivos importantes.ConclusãoCriar um pendrive de instalação do Windows sem programas extras é totalmente possível. O segredo está em formatar o pendrive como FAT32 e dividir o arquivo install.wim em partes menores usando o DISM.Esse método é uma boa alternativa para quem quer uma mídia de instalação limpa, compatível com UEFI e criada apenas com ferramentas já disponíveis no Windows.Para quem trabalha com manutenção de computadores, suporte técnico ou simplesmente gosta de ter uma mídia de recuperação sempre pronta, essa é uma solução prática e eficiente.
Ler dica
Melhores VPNs para assistir Netflix e outros streamings: o que considerar antes de escolher
Assistir filmes e séries por streaming já faz parte da rotina de muita gente. Netflix, Prime Vídeo, Disney+, Max, Hulu e outros serviços oferecem catálogos variados, mas nem sempre o mesmo conteúdo está disponível em todos os países. É nesse ponto que muita gente começa a pesquisar sobre VPN.Uma VPN, sigla para Rede Privada Virtual, é uma ferramenta que cria uma conexão protegida entre o seu dispositivo e a internet. Além de ajudar na privacidade online, ela também pode alterar a localização aparente da conexão, fazendo com que o serviço acessado enxergue o usuário como se estivesse em outro país.Por esse motivo, as VPNs ficaram populares entre usuários que viajam, querem proteger sua conexão em redes Wi-Fi públicas ou desejam acessar seus próprios serviços de streaming quando estão fora do país. Mas nem toda VPN funciona bem para esse tipo de uso.Por que nem toda VPN serve para streaming?Usar VPN para navegar na internet é uma coisa. Usar VPN para assistir streaming em alta qualidade é outra.Para assistir vídeos em HD ou 4K, a VPN precisa oferecer boa velocidade, servidores estáveis e baixa latência. Caso contrário, podem aparecer travamentos, queda de qualidade de imagem ou demora para carregar o conteúdo.Além disso, plataformas como a Netflix costumam identificar e bloquear conexões associadas a VPNs. Isso significa que uma VPN pode funcionar hoje e apresentar instabilidade amanhã. Por isso, os melhores serviços são aqueles que mantêm uma rede grande de servidores, atualizam sua infraestrutura com frequência e conseguem oferecer conexão estável em diferentes regiões.O que observar ao escolher uma VPN para Netflix?Antes de contratar uma VPN pensando em streaming, vale analisar alguns pontos importantes.O primeiro é a quantidade de servidores e países disponíveis. Quanto maior a rede, maior a chance de encontrar uma conexão rápida e funcional.O segundo ponto é a velocidade. Uma VPN lenta pode até abrir o catálogo, mas não entregar uma boa experiência para assistir filmes e séries.Também é importante observar a política de privacidade. Serviços confiáveis costumam ter política de não registro de atividades, conhecida como “no-logs”, além de auditorias independentes.Outro fator é a compatibilidade. Uma boa VPN deve funcionar em Windows, Android, iPhone, Smart TVs, navegadores e outros dispositivos usados no dia a dia.Por fim, avalie o preço. Alguns serviços são mais baratos em planos longos, mas é importante lembrar que o mercado de VPN muda bastante. Por isso, antes de contratar por vários anos, veja avaliações recentes e teste o serviço quando houver garantia de reembolso.VPNs que se destacam para streamingCom base em testes e análises recentes do mercado, algumas VPNs aparecem com frequência entre as melhores opções para Netflix e outros serviços de streaming.NordVPN: melhor opção geralA NordVPN costuma aparecer entre as principais recomendações para streaming por combinar velocidade, estabilidade e muitos recursos de segurança. Ela possui uma grande rede de servidores espalhados por vários países e costuma entregar boa performance para assistir vídeos em alta qualidade.Outro ponto positivo é que o serviço oferece recursos extras além da VPN, como bloqueio de ameaças, proteção contra sites maliciosos e opções avançadas de conexão. Para quem busca uma solução completa, pode ser uma das escolhas mais equilibradas.O ponto negativo é o preço. Dependendo do plano escolhido, ela pode ser mais cara que algumas concorrentes. Por isso, vale acompanhar promoções e comparar os valores antes de contratar.ExpressVPN: alternativa forte e fácil de usarA ExpressVPN também é bastante lembrada quando o assunto é streaming. Seu principal diferencial é a facilidade de uso. A interface costuma ser simples, direta e indicada para quem não quer perder tempo configurando muitos detalhes técnicos.Ela também tem boa velocidade, ampla compatibilidade com dispositivos e servidores em vários países. Para quem quer uma VPN prática, estável e com boa reputação, é uma alternativa interessante.O lado negativo é que o custo pode ser mais alto em comparação com outras opções. Além disso, alguns planos podem oferecer menos recursos extras do que concorrentes como NordVPN ou Surfshark.CyberGhost: boa escolha para quem viajaA CyberGhost se destaca pela grande quantidade de servidores e pela variedade de localizações disponíveis. Isso pode ser útil principalmente para quem viaja bastante e precisa de opções em diferentes países.Outro ponto interessante é que a CyberGhost oferece servidores otimizados para atividades específicas, incluindo streaming. Isso facilita para usuários menos experientes, pois ajuda a escolher o servidor mais adequado para assistir a determinado serviço.A desvantagem é que a velocidade pode variar dependendo da região e do servidor escolhido. Em alguns casos, pode ser necessário testar mais de uma opção até encontrar a melhor conexão.Surfshark: melhor custo-benefícioA Surfshark é uma das opções mais interessantes para quem busca preço competitivo. Ela costuma oferecer planos de longo prazo com valores mais acessíveis e ainda permite conexões simultâneas ilimitadas em vários dispositivos.Isso é útil para famílias ou usuários que querem usar a VPN no celular, notebook, tablet e Smart TV sem se preocupar com limite de aparelhos.Além do preço, a Surfshark também oferece recursos extras, como bloqueio de anúncios, proteção contra rastreadores e ferramentas de segurança. O ponto de atenção é que o valor mais baixo geralmente depende de contratação por períodos maiores.Proton VPN: opção gratuita mais confiávelPara quem procura uma VPN gratuita, a Proton VPN costuma ser uma das alternativas mais respeitadas. Diferente de muitas VPNs grátis, ela tem boa reputação em privacidade e não se baseia em anúncios invasivos como principal atrativo.A versão gratuita pode servir para uso ocasional, navegação segura e testes iniciais. No entanto, ela possui limitações, como menor variedade de servidores e restrições de uso em comparação aos planos pagos.Para streaming frequente, principalmente com catálogos de outros países, uma VPN gratuita pode não entregar a mesma estabilidade de uma opção paga. Ainda assim, é uma alternativa interessante para quem quer começar sem gastar.Usar VPN na Netflix é permitido?Esse é um ponto importante. VPNs são ferramentas legais em muitos países e são usadas para privacidade, segurança e proteção em redes públicas. Porém, serviços de streaming podem aplicar restrições ao uso de VPN, principalmente por questões de licenciamento de conteúdo.A própria Netflix informa que, ao usar VPN, o usuário pode ver apenas títulos com licença global ou até receber mensagens de erro relacionadas à localização. Em alguns planos, especialmente aqueles com anúncios, o uso de VPN pode não ser suportado.Por isso, antes de contratar uma VPN apenas para acessar catálogos internacionais, é importante entender que o funcionamento pode variar e não há garantia permanente.Vale a pena usar VPN para streaming?Depende do seu objetivo.Se você viaja com frequência, usa redes Wi-Fi públicas ou quer proteger melhor sua conexão, uma VPN pode ser muito útil. Ela adiciona uma camada de privacidade e pode facilitar o acesso aos seus serviços quando você está fora do país.Se o objetivo for exclusivamente assistir catálogos de outras regiões, é preciso ter cautela. Plataformas de streaming mudam suas regras, bloqueios e políticas com frequência. Uma VPN que funciona muito bem hoje pode enfrentar dificuldades no futuro.Por isso, a melhor escolha é procurar serviços conhecidos, com boa reputação, política clara de privacidade, suporte eficiente e garantia de reembolso. Assim, você pode testar antes de manter a assinatura.ConclusãoAs melhores VPNs para streaming são aquelas que equilibram velocidade, estabilidade, privacidade e facilidade de uso. NordVPN aparece como uma das opções mais completas, ExpressVPN se destaca pela simplicidade, CyberGhost é forte para quem precisa de muitos servidores, Surfshark chama atenção pelo custo-benefício e Proton VPN é uma alternativa gratuita confiável para usos mais básicos.Antes de escolher, analise seu perfil de uso. Quem assiste streaming todos os dias pode preferir uma VPN paga e mais robusta. Quem usa ocasionalmente talvez consiga começar por uma versão gratuita ou plano mensal.O mais importante é lembrar que VPN não serve apenas para desbloquear conteúdo. Ela também é uma ferramenta de segurança digital, especialmente útil para proteger dados em redes públicas, reduzir rastreamento e aumentar a privacidade durante a navegação.
Ler dica
Como trabalhar com LLMs de forma eficiente e profissional
1. Introdução e Contexto Esta apostila é baseada na palestra e workshop ministrados por Matt Pocock, professor e especialista em TypeScript, no evento de conferência documentado no vídeo de referência. O tema central é que, apesar de a IA representar um novo paradigma tecnológico, os fundamentos da engenharia de software que sempre funcionaram para humanos também funcionam de forma excelente ao trabalhar com IA. 1.1 A Tese Central A ideia chave da palestra é: • Todos acreditam que a IA é um paradigma completamente novo • Esquecemos que os fundamentos da engenharia de software continuam essenciais • Essas práticas clássicas funcionam muito bem quando aplicadas a LLMs Citação do autor "Quando falamos sobre IA como um novo paradigma, esquecemos que os fundamentos da engenharia de software - as coisas que são cruciais para trabalhar com humanos - também funcionam muito bem com IA." 1.2 Público e Contexto A palestra foi apresentada para um grupo de desenvolvedores com diferentes níveis de experiência com IA, com perguntas e demonstrações ao vivo. O workshop tem duração de aproximadamente 2 horas e inclui exercícios práticos. 2. Restrições Fundamentais dos LLMs Antes de entrar nas técnicas práticas, é essencial compreender as limitações técnicas dos modelos de linguagem grandes (LLMs). O autor identifica duas restrições principais que moldam toda a abordagem de desenvolvimento com IA. 2.1 As Duas Restrições Principais Restrição Descrição Zona Inteligente / Zona Burra LLMs degradam em qualidade conforme a janela de contexto cresce O Efeito Memento LLMs não possuem memória entre sessões; resetam ao estado inicial Compreender essas duas restrições é o ponto de partida para toda a metodologia apresentada neste workshop. 3. O Problema do Contexto: Zona Inteligente e Zona Burra Este conceito, atribuído a Dex Hardy da empresa Human Layer, é fundamental para trabalhar com LLMs de forma eficiente. 3.1 Como Funciona a Atenção nos LLMs Cada vez que você adiciona um token a um LLM, o número de relações de atenção cresce de forma quadrática - semelhante ao número de jogos em uma liga de futebol conforme novas equipes são adicionadas. Isso ocorre porque há relações de atenção de cada token para todos os outros, envolvendo posição e significado individual de cada token. 3.2 Definição das Zonas Zona Característica Zona Inteligente Início da conversa, contexto limpo, LLM trabalha com máxima eficiência Zona Burra Contexto sobrecarregado (~100K tokens), LLM começa a tomar decisões ruins Marcador prático O autor usa ~100K tokens como referência para o início da zona burra, independentemente do tamanho total da janela de contexto (1 milhão ou 200K). Sempre monitore o contador de tokens. 3.3 Estratégias para Trabalhar na Zona Inteligente • Dimensione as tarefas para caber dentro da zona inteligente • Não deixe a IA 'morder mais do que pode mastigar' • Mantenha o prompt de sistema (system prompt) pequeno e enxuto • Evite acumular sedimentos desnecessários no contexto Referência clássica O autor cita Martin Fowler (Refactoring) e The Pragmatic Programmer - livros que já ensinavam: 'Não assuma mais do que você pode executar. Mantenha suas tarefas pequenas para que você, como desenvolvedor humano, não entre em pânico e caia na zona burra.' 3.4 Fases de uma Sessão LLM Toda sessão com um LLM passa pelas mesmas fases: • Prompt de sistema (system prompt) - sempre presente no contexto • Fase exploratória - o agente explora o código-base • Implementação - escrita efetiva do código • Testes - loops de feedback e validação 3.5 Compactação vs. Limpar o Contexto Quando você se aproxima do limite, existem duas opções: • Compactação (Compacting): resume toda a conversa em um histórico menor e continua • Limpar (Clear): apaga tudo e volta apenas ao prompt de sistema O autor prefere claramente a segunda opção (limpar), pois: ◦ O estado inicial é sempre o mesmo - previsível e consistente ◦ Compactações acumulam 'sedimentos' que degradam a qualidade ◦ Reiniciar permite trabalhar sempre na zona inteligente 4. Os LLMs como o Personagem de Memento A segunda restrição fundamental é que os LLMs são como o protagonista do filme Memento: eles esquecem tudo e voltam ao estado base a cada nova sessão. Não há persistência de memória entre conversas. Isso significa que toda estratégia de desenvolvimento com IA precisa considerar: • Não confiar na memória do LLM entre sessões • Criar documentos e artefatos externos que persistam o contexto • Projetar fluxos que funcionem bem com contexto recém-inicializado • Enxergar o reinício como uma vantagem (sempre começa no melhor estado) Insight-chave Em vez de tentar compensar o esquecimento do LLM, o autor abraça essa característica e projeta seu fluxo de trabalho para tirar vantagem dela: trabalhar sempre com contexto limpo significa trabalhar sempre na zona inteligente. 5. O Fluxo de Desenvolvimento com IA Com base nas restrições entendidas, o autor apresenta um fluxo de desenvolvimento estruturado que maximiza a eficiência do LLM enquanto mantém o controle humano nos pontos críticos. 5.1 Visão Geral do Fluxo Fase Atividade 1. Alinhamento Sessão de interrogatório (Grill Me) - HUMANO no loop 2. Documentação Criação do PRD (Product Requirements Document) - HUMANO revisa 3. Planejamento Criação do Kanban Board com issues paralelas - HUMANO valida 4. Implementação Loop AFK com agentes (Ralph Loop) - IA trabalha sem supervisão 5. QA e Review Testes, code review, iterações - HUMANO impõe padrões e gosto 5.2 Tarefas Humanas vs. Tarefas AFK O autor distingue claramente dois tipos de tarefas: Tipo Descrição Human-in-the-loop Requerem presença humana: planejamento, alinhamento, QA AFK (Away From Keyboard) Podem ser delegadas totalmente à IA: implementação Analogia: turno do dia e da noite O planejamento é o turno do dia - o humano organiza tudo. A implementação é o turno da noite - a IA trabalha AFK enquanto o humano descansa ou faz outras coisas. 5.3 Crítica ao Movimento 'Specs to Code' O autor critica fortemente a abordagem de 'especificações para código' que é popular atualmente: • Consiste em escrever especificações detalhadas e simplesmente transformá-las em código via IA • Se algo der errado, você edita a especificação, não o código • É essencialmente 'vibe coding' com outro nome • O autor testou e afirma que simplesmente não funciona O motivo pelo qual falha: ◦ Você precisa manter controle sobre o código ◦ Você precisa entender o que está dentro do código ◦ Você precisa moldar o código porque ele é o seu campo de batalha 6. Fase 1 - O Interrogatório (Grill Me Skill) A primeira fase do fluxo é o que o autor chama de 'Grill Me' (me interrogue). Esta é a etapa de alinhamento entre o desenvolvedor e o LLM antes de qualquer escrita de código. 6.1 O Problema de Alinhamento O principal problema ao trabalhar com IA no desenvolvimento de software é o misalignment - quando o desenvolvedor e o LLM têm entendimentos diferentes sobre o que está sendo construído. O 'Grill Me' resolve isso. 6.2 Como Funciona O skill 'Grill Me' é uma instrução pequena e concisa que instrui o LLM a: • Fazer perguntas agressivas e diretas sobre a ideia sendo desenvolvida • Continuar questionando até ter um entendimento completo do problema • Explorar edge cases, decisões técnicas e escopo • Criar um 'conceito de design compartilhado' entre humano e IA Resultado do Grill Me Após uma sessão de interrogatório, o autor usa ~25K tokens. Todo esse conteúdo é 'ouro' - um alinhamento profundo sobre o que será construído. Esse contexto é então destilado em documentos permanentes. 6.3 Por Que Não Usar Ferramentas como Taskmaster ou Spec Kit? O autor foi questionado sobre frameworks alternativos. Sua posição: • Com tantas ferramentas surgindo e mudando, você precisa ser dono do seu planejamento • Estudantes que adotam stacks de terceiros sem entendê-las ficam presos quando algo dá errado • Controle total da sua stack = capacidade de corrigir problemas 6.4 Aplicação em Equipes Para equipes maiores, o Grill Me pode ser usado em par ou em grupo: • Pair programming com IA: um terceiro personagem que questiona incansavelmente • Mob programming com IA: múltiplos humanos e a IA na mesma sessão • As decisões cruciais precisam de humanos; a IA facilita o processo 7. Fase 2 - O Documento de Requisitos (PRD) Após o interrogatório, o próximo passo é transformar o alinhamento alcançado em um documento permanente: o Product Requirements Document (PRD). 7.1 A Função do PRD O PRD serve como o 'documento de destino' - descreve para onde estamos indo. Diferente dos planos de implementação, o PRD define o estado final desejado. 7.2 Estrutura Recomendada do PRD Seção do PRD Conteúdo Declaração do Problema Qual problema o usuário enfrenta Solução Proposta Como resolver o problema User Stories Lista de histórias de usuário (~15-20 itens) Decisões de Implementação Escolhas técnicas feitas Decisões de Testes Estratégia de testes Módulos Propostos Quais partes do código serão modificadas Fora do Escopo O que NÃO será feito nesta iteração 7.3 Módulos no PRD - O Código Sempre em Mente Um diferencial importante da abordagem: ao criar o PRD, já se pensa nos módulos de código que serão afetados. Isso garante que o processo nunca ignore o código-base real. • Identifica os módulos que serão criados ou modificados • Define as interfaces que cada módulo vai expor • Classifica dependências: locais, substituíveis, banco de dados de teste 7.4 Deve-se Revisar o PRD? Surpreendentemente, o autor afirma que geralmente NÃO lê o PRD gerado: • LLMs são excelentes em sumarização - isso já está garantido • Após a sessão de interrogatório, o alinhamento já existe • Revisar seria apenas verificar a capacidade de sumarização do LLM 7.5 Doc Rot - Cuidado com Documentação Antiga O autor alerta sobre um perigo chamado 'doc rot': documentação antiga que permanece no repositório e contamina o contexto do agente com informações desatualizadas. Boa prática Após a implementação ser concluída, feche ou arquive o PRD. Se usar GitHub Issues, marque como fechado. Não deixe documentação de especificação desatualizada flutuando no repositório, pois o LLM pode encontrá-la e usá-la como verdade. 8. Fase 3 - O Kanban Board e Paralelismo Com o PRD definido, o próximo passo é transformar os requisitos em issues (tickets) independentes que podem ser trabalhados em paralelo por múltiplos agentes. 8.1 De Plano Sequencial para Grafo Acíclico Dirigido A maioria dos desenvolvedores usa planos sequenciais em fases (fase 1, fase 2, fase 3). O autor argumenta que isso limita o paralelismo: • Plano sequencial: apenas um agente pode trabalhar por vez • Kanban com dependências: múltiplos agentes podem trabalhar em paralelo nas tarefas sem bloqueio A estrutura ideal é um Directed Acyclic Graph (DAG) - um grafo acíclico dirigido onde as dependências entre tarefas são explícitas e apenas o necessário é sequencial. 8.2 Vertical Slices vs. Horizontal Slices Um conceito central na criação dos issues é preferir fatias verticais: Tipo de Slice Descrição Horizontal (BAD) Implementa uma camada por vez (ex: só o serviço, só o banco) Vertical (GOOD) Implementa uma funcionalidade completa de ponta a ponta Exemplo de vertical slice Em vez de 'criar o serviço de gamificação' (horizontal), prefira 'mostrar pontos ganhos por conclusão de aula no dashboard' - isso toca no schema, no serviço e no frontend simultaneamente, resultando em algo visualmente testável. 8.3 Características dos Issues Ideais • Independentes - podem ser pegos por qualquer agente • Com dependências explícitas mapeadas • Com critérios claros de conclusão • Em fatias verticais (mostram resultado visível ao final) • Organizados como um grafo, não uma lista linear 8.4 Ferramentas para o Kanban O autor usa GitHub Issues como ferramenta principal, mas menciona que arquivos locais em Markdown também funcionam para fins didáticos. Issues fechadas no GitHub ficam acessíveis mas com indicador visual de 'feito'. 9. Fase 4 - Implementação AFK (Loop Ralph) Com o Kanban preparado, chega a fase onde o humano sai do loop e os agentes trabalham autonomamente. O autor chama isso de 'Ralph Loop'. 9.1 O Conceito Ralph Baseado na ideia de 'Ralph Wiggum' como prática de software, o Ralph Loop funciona assim: • Define-se um destino (PRD + issues) • O agente faz uma pequena mudança de cada vez que o aproxima do destino • O loop continua até que todas as tarefas estejam completas Analogia com o loop O autor compara ao raciocínio: se você tem fase 1, fase 2, fase 3, fase N... por que não ter apenas fase N? Um loop que continua até a conclusão. 9.2 Estrutura Técnica do Loop O script (once.sh) que executa o loop faz o seguinte: • Coleta todas as issues do backlog em arquivos Markdown • Captura os últimos 5 commits do repositório • Passa tudo para o Claude Code com modo de permissão automática • O agente escolhe a próxima tarefa, implementa, e registra o resultado 9.3 Prioridades do Agente no Loop O prompt do loop AFK define prioridades: • 1. Correções de bugs críticos • 2. Infraestrutura de desenvolvimento • 3. Tracer bullets (funcionalidades de ponta a ponta mínimas) • 4. Quick wins e refatorações 9.4 Modo Sequencial vs. Paralelo O autor recomenda começar com o modo sequencial (um agente de cada vez) para ganhar familiaridade antes de partir para a paralelização. Paralelização avançada Com múltiplos agentes em paralelo, cada um trabalha em uma branch separada dentro de um sandbox Docker. Um agente 'planner' escolhe as tarefas sem bloqueio mútuo, agentes 'implementers' executam em paralelo, e um agente 'merger' consolida os resultados, resolvendo conflitos de tipos e testes. 10. Test-Driven Development (TDD) com IA O TDD é apresentado como absolutamente essencial para obter o máximo dos agentes de IA. O autor afirma ter moldado toda a sua técnica em torno de fazer o TDD funcionar bem. 10.1 Red-Green-Refactor com IA O ciclo clássico do TDD funciona assim: • Red: Escreva um teste que falha (a funcionalidade ainda não existe) • Green: Escreva o código mínimo para fazer o teste passar • Refactor: Melhore o código mantendo os testes passando 10.2 Por Que a IA Escreve Testes Ruins Sem TDD Sem TDD, a IA tende a 'trapacear': • Escreve toda a implementação primeiro • Depois escreve os testes para a implementação que já existe • Os testes ficam acoplados à implementação, não à especificação Com TDD, esse problema é muito mais difícil de ocorrer porque: ◦ O teste é escrito ANTES da implementação ◦ O código é instrumentado antes de ser escrito ◦ A ordem natural força testes baseados em comportamento 10.3 Loops de Feedback - O Teto da Qualidade Os loops de feedback (rodar testes, verificar tipos) são essenciais para qualquer output razoável da IA: Loop de Feedback Propósito npm run test Verificar que a lógica de negócio funciona npm run type-check Garantir correção de tipos (TypeScript) Feedback visual (QA) Verificar que o resultado é visível e correto Insight fundamental Se você está recebendo outputs ruins do agente, frequentemente a solução é melhorar a qualidade dos seus loops de feedback. O teto da qualidade do output é determinado pela qualidade dos seus mecanismos de verificação. 11. Arquitetura de Código: Módulos Profundos vs. Rasos Baseado no livro 'The Philosophy of Software Design' de John Ousterhout, o autor apresenta um conceito crucial para código que funciona bem com IA. 11.1 Módulos Rasos (Shallow Modules) - Evitar Módulos rasos são caracterizados por: • Muitos arquivos pequenos com poucas responsabilidades • Interfaces complexas expondo muitas funções • Dependências cruzadas difíceis de rastrear Problemas com módulos rasos para IA: ◦ A IA precisa navegar manualmente por todo o grafo de dependências ◦ Difícil definir fronteiras de teste ◦ Mocks excessivos tornam os testes frágeis e sem sentido 11.2 Módulos Profundos (Deep Modules) - Ideal Módulos profundos têm: • Interface pequena e simples (poucos pontos de entrada) • Muita funcionalidade encapsulada internamente • Fronteiras de teste claras e naturais Vantagens para IA: ◦ A IA entende facilmente o que o módulo faz pela sua interface ◦ Fácil envolver com um único teste abrangente ◦ Comportamento testável do exterior sem necessidade de mocks complexos Comportamento natural da IA Sem orientação, a IA naturalmente produz código com módulos rasos. É preciso orientá-la ativamente para criar módulos profundos, tanto no PRD (definindo as interfaces) quanto durante a implementação. 11.3 A Estratégia dos 'Gray Boxes' O autor propõe uma abordagem mental para manter domínio sobre o código: • Projete as interfaces dos módulos você mesmo • Delegue a implementação interna para a IA • Você não precisa saber todos os detalhes internos • Você precisa saber o que cada módulo faz e como ele se comporta Resultado: você mantém o senso do código-base enquanto preserva sua sanidade mental diante do volume de código gerado por IA. 11.4 A Habilidade 'Improve Codebase Architecture' O autor demonstra uma skill que escaneia o código-base em busca de: • Módulos que poderiam ser aprofundados • Grupos de módulos relacionados que poderiam ser testados como uma unidade • Lacunas de cobertura de testes • Oportunidades de simplificação de interfaces 12. QA e Code Review com IA A fase de QA é onde o desenvolvedor humano impõe seus padrões, gosto e julgamento ao código gerado pela IA. 12.1 A Importância do QA Humano O autor observa que equipes que tentam automatizar tudo - incluindo planejamento, QA, pesquisa e protótipos - acabam com aplicações que: • Carecem de gosto e qualidade • Não funcionam como esperado • São 'slop' (conteúdo de baixa qualidade sem julgamento) O toque humano é essencial. QA não é apenas sobre bugs - é sobre impor os padrões e a visão do desenvolvedor. 12.2 Code Review na Zona Inteligente Um insight técnico importante: fazer code review após uma longa implementação significa revisar na zona burra. A solução: • Limpe o contexto antes de fazer code review • Revise com o contexto em estado inicial (zona inteligente) • O revisor terá mais capacidade de atenção e identificará mais problemas 12.3 Estratégia de Review Processo recomendado pelo autor: • 1. Revisar primeiro os testes - verificar se estão testando coisas razoáveis • 2. Revisar o código - verificar se não está fazendo nada louco • 3. Fazer QA manual - testar visualmente o resultado • 4. Criar novas issues para problemas encontrados - alimentando o Kanban Code Review pelo Agente Para review automático: use um agente revisor separado com o contexto limpo, passando tanto o código quanto os padrões de codificação (push). O implementador pode consultar os padrões por pull quando necessário. 13. Padrões Push e Pull para Agentes Para garantir que os agentes sigam os padrões de codificação e estilos do projeto, o autor distingue dois mecanismos complementares. 13.1 Push - Instrução Proativa No padrão Push, você injeta informações diretamente no contexto do agente: • Colocar regras no Claude.md ou em arquivos de configuração • O agente sempre recebe essas instruções, independente da tarefa • Ideal para padrões críticos que nunca devem ser ignorados 13.2 Pull - Informação sob Demanda No padrão Pull, você disponibiliza informações que o agente pode consultar quando necessário: • Skills (habilidades) armazenadas no repositório com cabeçalho descritivo • O agente lê 'OK, agente, você pode puxar este arquivo quando precisar' • Reduz o tamanho do contexto inicial • Ideal para conhecimento especializado usado em contextos específicos Mecanismo Quando Usar Push Padrões críticos, regras de segurança, convenções sempre aplicáveis Pull (Skills) Conhecimento especializado, padrões de contexto específico 13.3 Aplicação em Code Review Para code review automatizado, a estratégia é: • PUSH os padrões de codificação para o agente revisor • PULL os padrões para o agente implementador (ele pode consultar se tiver dúvida) • O revisor precisa dos padrões ativamente; o implementador os consulta ocasionalmente 14. Sandcastle: Automação Avançada Para demonstrar a paralelização completa, o autor apresenta o Sandcastle, uma biblioteca TypeScript que ele desenvolveu para orquestrar agentes em paralelo. 14.1 O Problema que Sandcastle Resolve O autor não estava satisfeito com as opções existentes para executar agentes 'AFK'. Sandcastle oferece: • Função run() que cria uma work tree em uma branch Git • Sandbox em container Docker para cada agente • Execução de prompts dentro desse ambiente isolado • Paralelização simplificada de múltiplos agentes 14.2 Fluxo do Sandcastle O processo completo: • Um agente Planner analisa o backlog e escolhe tasks sem bloqueios mútuos • Para cada issue, cria um sandbox e executa um agente Implementer • Se commits foram criados, um agente Reviewer faz code review • Um agente Merger consolida as branches, resolvendo conflitos de tipos e testes 14.3 Modelo de IA por Função O autor usa modelos diferentes por tipo de tarefa: Função Modelo Implementação Claude Sonnet (rápido e eficiente) Code Review Claude Opus (maior capacidade de análise crítica) Repositório open source O autor disponibiliza o Sandcastle publicamente. Quem quiser aprofundar a paralelização de agentes pode consultar o código-fonte para aprender mais. 15. Princípios e Boas Práticas - Resumo Final O autor encerra com uma síntese dos principais aprendizados. Esta seção consolida todos os conceitos em princípios acionáveis. 15.1 Os 10 Princípios Fundamentais • 1. Conheça a Zona Inteligente Monitore o contador de tokens em toda sessão. Nunca deixe o contexto crescer ao ponto de entrar na zona burra. Limpe o contexto regularmente ao invés de compactar. • 2. Abrace o Esquecimento da IA Projete seu fluxo para funcionar com contexto sempre limpo. Isso é uma vantagem, não uma limitação: você sempre começa no melhor estado possível. • 3. Alinhe Antes de Implementar Nunca delegue código sem antes executar uma sessão de interrogatório (Grill Me). O custo do realinhamento depois é sempre maior do que o custo do alinhamento antes. • 4. Mantenha o Código em Mente Nem durante o planejamento você pode ignorar o código. Pense em módulos, interfaces e arquitetura desde o primeiro momento. • 5. Prefira Vertical Slices Cada issue deve resultar em algo visível e testável de ponta a ponta. Evite 'camadas de bolo' (horizontais) que só mostram resultado depois de muitas implementações. • 6. TDD é Inegociável A IA sem TDD tende a escrever testes ruins ou a trapacear. Com TDD, a ordem natural força melhores práticas e gera código que a IA pode verificar autonomamente. • 7. Melhore Seus Loops de Feedback A qualidade do seu código gerado por IA é limitada pela qualidade dos seus mecanismos de verificação. Invista em testes bons, type checking e verificações automáticas. • 8. Módulos Profundos, Não Rasos Oriente a IA a criar módulos com interfaces pequenas e muita funcionalidade interna. Projete as interfaces você mesmo; delegue as implementações. • 9. QA é Onde Você Impõe Seu Gosto Não tente automatizar tudo. A fase de QA é onde o julgamento humano, a experiência e o senso estético são aplicados. Sem isso, o resultado é 'slop'. • 10. Leia os Livros Clássicos A recomendação final do autor: compre e leia os livros clássicos de engenharia de software (Martin Fowler - Refactoring, The Pragmatic Programmer, A Philosophy of Software Design). Eles codificam práticas que funcionam igualmente bem com humanos e com IA. 15.2 O Fluxo Completo em uma Visão Etapa Responsável 1. Ideia inicial Humano 2. Grill Me (alinhamento) Humano + IA (interativo) 3. PRD (documento de destino) IA gera, Humano valida 4. Kanban (issues paralelas) IA gera, Humano valida 5. Implementação (Loop AFK) IA trabalha autonomamente 6. QA + Code Review Humano + IA (revisão) 7. Iteração (novas issues) Humano cria, ciclo repete Reflexão final do autor Este não é um compilador de especificações para código. Não é uma IA que simplesmente cospe código. É um processo intencional onde nos preocupamos com os módulos e com a forma do código-base. Usamos o interrogatório para garantir o máximo de alinhamento. Convertemos isso em issues paralelizáveis. Implementamos e fazemos QA e code review rigorosos, continuando a iterar. Referências e Recursos Livros Recomendados • Refactoring - Martin Fowler • The Pragmatic Programmer - David Thomas e Andrew Hunt • A Philosophy of Software Design - John Ousterhout Conceitos e Pessoas Mencionados • Dex Hardy (Human Layer) - conceito de Zona Inteligente / Zona Burra • Ralph Wiggum Loop - iteração contínua orientada a destino • John Ousterhout - módulos profundos vs. rasos Ferramentas e Recursos • Claude Code - ferramenta principal usada no workshop • Sandcastle - biblioteca TypeScript para paralelização de agentes (Matt Pocock) • AI Hero - site do autor com artigos e dicas adicionais • GitHub Issues / Kanban local - gestão de backlog para agentes
Ler dica