<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>TabNews</title>
        <link>https://www.tabnews.com.br/recentes/rss</link>
        <description>Conteúdos para quem trabalha com Programação e Tecnologia</description>
        <lastBuildDate>Sun, 12 Jul 2026 14:42:21 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>pt</language>
        <image>
            <title>TabNews</title>
            <url>https://www.tabnews.com.br/favicon-mobile.png</url>
            <link>https://www.tabnews.com.br/recentes/rss</link>
        </image>
        <item>
            <title><![CDATA[Eu recriei a clássica função printf() do C do zero!]]></title>
            <link>https://www.tabnews.com.br/ciproterona/eu-recriei-a-classica-funcao-printf-do-c-do-zero</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/ciproterona/eu-recriei-a-classica-funcao-printf-do-c-do-zero</guid>
            <pubDate>Sun, 12 Jul 2026 14:42:21 GMT</pubDate>
            <description><![CDATA[Olá, pessoal do TabNews! Sophia aqui com mais um post! Há pouco tempo compartilhei aqui a minha experiência desenvolvendo a libft, minha primeira biblioteca própria em C na 42 São Paulo....]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Olá, pessoal do TabNews! Sophia aqui com mais um post!</p><p>Há pouco tempo compartilhei aqui a minha experiência desenvolvendo a <a href="https://www.tabnews.com.br/ciproterona/eu-criei-minhas-proprias-funcoes-da-libc-do-zero">libft</a>, minha primeira biblioteca própria em C na 42 São Paulo. Hoje estou de volta para contar como foi encarar o segundo grande desafio dessa jornada de Cadete: recriar do zero uma das funções mais utilizadas, famosas e misteriosas do início do aprendizado de baixo nível: a <strong>printf()</strong>.</p><p>O projeto se chama <strong>ft_printf</strong> e, seguindo a filosofia da escola, a regra de ouro se mantém: não podemos utilizar funções prontas da biblioteca padrão (além da permissão estrita da write e da própria libft que criamos anteriormente). Tudo precisa ser construído na unha!</p><h3 id="ciproterona-content-o-que-é-a-ft_printf">O que é a ft_printf?</h3><p>O objetivo principal parece simples: analisar uma string de formatação (o primeiro argumento) e imprimir os caracteres na saída padrão (stdout). O desafio real começa quando encontramos o caractere %, que funciona como uma flag avisando que precisamos capturar um argumento variável e formatá-lo corretamente para exibir na tela.</p><p>Pelas regras do projeto, precisei implementar obrigatoriamente o suporte para as seguintes conversões:</p><ul><li>%c para um único caractere</li><li>%s para strings de caracteres</li><li>%p para o endereço de memória de um ponteiro (em formato hexadecimal)</li><li>%d e %i para inteiros com sinal em base decimal</li><li>%u para inteiros sem sinal em base decimal</li><li>%x para números hexadecimais em letras minúsculas (base 16)</li><li>%X para números hexadecimais em letras maiúsculas (base 16)</li><li>%% para imprimir o próprio caractere de porcentagem</li></ul><p>Além disso, há um detalhe crucial: a função precisa retornar exatamente o mesmo valor inteiro que a original, que representa a <strong>contagem precisa de todos os caracteres impressos</strong>. Se houver um desvio de um único byte sequer nos testes, a <em>Moulinette</em> (o sistema automático de correção) zera o projeto sem dó 😬.</p><h3 id="ciproterona-content-variadic-functions-o-grande">Variadic Functions: o grande...</h3><p>Quando bati o olho no protótipo da função pela primeira vez, confesso que deu um nó na cabeça:</p><pre><code class="hljs language-c"><span class="hljs-type">int</span> <span class="hljs-title function_">ft_printf</span><span class="hljs-params">(<span class="hljs-type">const</span> <span class="hljs-type">char</span> *format, ...)</span>;</code></pre><p><em>O que diabos significam aquelas reticências no final?</em> 🤯 kkkk</p><p>Foi aí que descobri e precisei dominar o conceito de <strong>Funções Variádicas</strong>. Em C, para criar uma função capaz de receber uma quantidade n-ésima e dinâmica de argumentos passados pelo usuário, precisamos recorrer à biblioteca &#x3C;stdarg.h> e suas macros:</p><ol><li><strong>va_list</strong>: um tipo de dado especial que serve para rastrear e armazenar os argumentos adicionais</li><li><strong>va_start</strong>: inicializa a lista de argumentos, apontando para o primeiro elemento logo após o argumento fixo (format)</li><li><strong>va_arg</strong>: resgata o próximo argumento da lista, exigindo que você informe especificamente o tipo esperado (ex.: int, char *)</li><li><strong>va_end</strong>: limpa a memória e finaliza o acesso à lista de argumentos</li></ol><p>Entender como o computador navega pela memória empilhando esses argumentos sem que eles tenham um nome fixo foi um baita aprendizado de como as coisas funcionam por baixo dos panos.</p><h3 id="ciproterona-content-os-maiores-desafios-da-implementação">Os maiores desafios da implementação</h3><p>Se na libft o maior vilão foi entender o gerenciamento de memória bruta com ponteiros e alocações, na ft_printf a dor de cabeça foi com a <strong>arquitetura do código</strong> e a <strong>precisão do fluxo</strong>.</p><ul><li><p><strong>A saga dos Hexadecimais e Ponteiros (%p):</strong> Converter um número inteiro longo para hexadecimal exige uma lógica de divisões sucessivas pela base 16. No entanto, o tratamento do %p exige atenção redobrada: ele precisa injetar o prefixo 0x na frente e lidar corretamente com o caso de ponteiros nulos (NULL), exibindo a string (nil) de forma idêntica ao comportamento padrão do sistema operacional.</p></li><li><p><strong>A Meticulosa Contagem de Caracteres:</strong> Como o retorno da função principal depende da soma exata de tudo o que foi escrito, cada pequena função auxiliar (seja imprimindo um número negativo enorme ou uma string vazia) precisa retornar a quantidade exata de caracteres que enviou para o terminal. Uma falha de lógica em um único if e o retorno final quebrava.<br>Desta vez, o papel e a caneta voltaram a ser meus melhores amigos: desenhar o fluxo do <em>parser</em> (mapeando a leitura caractere por caractere e os desvios de fluxo ao encontrar o %) me poupou horas valiosas de depuração.</p></li></ul><h3 id="ciproterona-content-jump-tables-apenas-deixe-isso-simples">Jump Tables: apenas deixe isso simples</h3><p>Eu tentei bancar a esperta e economizar nos if-else, então fui em busca de alternativas. Acabei encontrando sobre "Jump Tables", que é basicamente chamar funções em uma tabela de array. O problema foi essas linhas de código aqui:</p><pre><code class="hljs language-c"><span class="hljs-keyword">while</span> (i &#x3C; <span class="hljs-number">256</span>){    ctx->table[i] = <span class="hljs-literal">NULL</span>;    i++;}</code></pre><p>Esse código serve para definir toda a minha tabela para NULL até 256, evitando lixos da memória. A questão é que, a cada chamada da minha ft_printf, esse while fará essa limpeza várias e várias vezes, sendo bem mal performatico. Eu fiz essa correção na minha "mega-libft", onde concentrei o ft_printf e a get_next_line, que irei falar sobre posteriormente. Lá apenas usei o básico e simples if-else.</p><h3 id="ciproterona-content-o-projeto">O Projeto</h3><p>Para quem tiver curiosidade em conferir como estruturei as funções, organizei os arquivos auxiliares e configurei o Makefile para gerar a biblioteca, o repositório completo está público no meu GitHub:<br>🔗 <a href="https://github.com/ciproterona/42_ft_printf">https://github.com/ciproterona/42_ft_printf</a></p><blockquote><p>Vale destacar que eu não fiz o bônus, que incluí precisão de floats (%.2f). Pretendo fazê-la mais a frente apenas pelo aprendizado, pois não iremos usar essa funcionalidade do printf, então não vi necessidade imediata de implementá-la.</p></blockquote><p><em>Nota sobre contribuições:</em> Por se tratar de um projeto puramente acadêmico e individual da grade da 42, não aceito merges de Pull Requests para alterar o escopo principal. Porém, sinta-se totalmente livre para abrir uma Issue ou PR educacional para propor melhorias de performance, discutir conceitos ou apontar alguma otimização na lógica! 👐🏼</p><p>Superar o desafio da printf me trouxe uma confiança legal para continuar. Ver uma função tão clássica e robusta rodando perfeitamente a partir de linhas de código que eu mesma escrevi é uma sensação indescritível.</p><p>Adoraria saber de vocês: <strong>Como foi o primeiro contato de vocês lidando com funções variádicas ou manipulação de strings em baixo nível?</strong> Para quem já fez esse tipo de projeto, vocês costumam estruturar o <em>parser</em> com grandes blocos de if/else ou preferem seguir minha loucura e usar tabelas de ponteiros para funções (array of function pointers)?</p><p>Estarei trazendo atualizações aqui no TabNews para os próximos passos da jornada. Até mais! ＼(^-^)／</p></div>]]></content:encoded>
            <author>ciproterona</author>
        </item>
        <item>
            <title><![CDATA[Agentes de IA como uma empresa: testei o Buda]]></title>
            <link>https://www.tabnews.com.br/aiagentstest/agentes-de-ia-como-uma-empresa-testei-o-buda</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/aiagentstest/agentes-de-ia-como-uma-empresa-testei-o-buda</guid>
            <pubDate>Sun, 12 Jul 2026 05:59:13 GMT</pubDate>
            <description><![CDATA[Eu estava cansado de colar o mesmo contexto em janelas de chat. Toda conversa nova com IA começava do zero: colava a política de troca, explicava o tom de resposta, e na semana seguinte t...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Eu estava cansado de colar o mesmo contexto em janelas de chat. Toda conversa nova com IA começava do zero: colava a política de troca, explicava o tom de resposta, e na semana seguinte tudo de novo. Quando vi uma plataforma que se descreve como "Drive-based", ou seja, agentes que trabalham a partir de arquivos de verdade em vez de memória de conversa, resolvi testar por uma semana e anotar o que aconteceu.</p><h2 id="aiagentstest-content-o-modelo-mental-uma-empresa-não-um-chat">O modelo mental: uma empresa, não um chat</h2><p>A primeira coisa que ajuda a entender a plataforma é a analogia que a própria documentação usa. Um Space é a empresa. Um Agent é um funcionário de IA. O Drive é o armário de arquivos. Uma Session é a sala de reunião de cada assunto. Uma Skill é um procedimento operacional que se repete. E um Channel (Slack, WhatsApp, Telegram, Discord, Teams e afins) é a linha telefônica por onde gente de fora fala com o funcionário.</p><p>Parece marketing, mas a analogia segura bem na prática. Você não fica "conversando com uma IA"; você contrata um funcionário, entrega documentos para ele e abre reuniões separadas por assunto. O detalhe importante: o canal de chat é só a porta de entrada. Nada do que passa por ali vira conhecimento permanente por conta própria. Conhecimento mora em arquivo.</p><h2 id="aiagentstest-content-montando-o-primeiro-agente">Montando o primeiro agente</h2><p>O cadastro não pede cartão de crédito e o plano Free custa $0, então dá para testar sem compromisso. Criei um agente com o papel de suporte interno: bastou dar um nome, descrever a função e escolher o modelo base.</p><p>A parte que interessa vem depois. Subi arquivos reais para o Drive do agente: um FAQ em Markdown e uma política de trocas em PDF, entre outros documentos de suporte. A partir daí, quando pergunto algo, o agente responde com base nesses arquivos, não com base no que "lembra" da conversa. Isso muda a natureza do erro também. Quando a resposta veio errada, o motivo era rastreável: um documento desatualizado que eu tinha subido. Corrigi o arquivo e a resposta corrigiu junto.</p><p>Esse ciclo, de tratar a base de arquivos como fonte de verdade e editar arquivos em vez de re-explicar no chat, foi para mim a maior diferença em relação a qualquer assistente de conversa.</p><h2 id="aiagentstest-content-o-sandbox-terminal-e-git-à-vista">O sandbox: Terminal e Git à vista</h2><p>Cada agente roda em um sandbox na nuvem, e o Agent Workspace expõe abas para olhar lá dentro. A aba Terminal abre um shell real do ambiente do agente. A aba Git mostra commits, diffs e branches do que ele está mexendo. Tem ainda aba de Browser para acompanhar automação web e até acesso via VS Code Remote SSH, que eu não cheguei a explorar a fundo.</p><p>Para quem é dev, isso resolve uma desconfiança antiga: a de não saber o que o agente está executando. Dá para auditar o histórico de comandos e reverter pelo Git se algo sair torto. Um aviso prático: Browser, Terminal e Git não entram no plano Free. Para testar essa parte eu passei o agente para o Plus, que custa <span class="math math-inline">20 por agente por mês (o Pro custa </span>100).</p><h2 id="aiagentstest-content-conectando-o-whatsapp">Conectando o WhatsApp</h2><p>Aqui está o motivo de eu achar a plataforma particularmente relevante para o contexto brasileiro. A conexão com WhatsApp funciona por QR code, no mesmo esquema do WhatsApp Web. Não precisa de conta Meta Business nem de aprovação de template. Escaneei o código com um número de teste e em poucos minutos o agente estava respondendo mensagens.</p><p>Dois pontos merecem atenção. Primeiro, o <a href="https://buda.im/pt" rel="nofollow">Buda</a> envia e recebe mensagens como aquela conta, então a recomendação da documentação é usar um número dedicado, não o seu pessoal (imagine o agente respondendo o grupo da família). Segundo, o isolamento de sessão: cada número de telefone tem a sua própria Session no DM, e cada grupo tem a sua. Isso significa que o histórico do cliente A não vaza na conversa do cliente B, o que para atendimento é requisito básico, não recurso.</p><h2 id="aiagentstest-content-skills-transformando-rotina-em-procedimento">Skills: transformando rotina em procedimento</h2><p>Depois que o agente estava respondendo bem, percebi que algumas tarefas se repetiam do mesmo jeito toda semana. A plataforma trata isso com o conceito de Skill, que é basicamente um SOP reutilizável: um procedimento que o agente sabe executar sob demanda, em vez de você descrever os passos a cada pedido. Existe um Marketplace com Skills prontas, e as da comunidade são de código aberto, então dá para inspecionar o que uma Skill faz antes de instalar. Achei uma decisão de design acertada, porque instalar capacidade nova em um agente que mexe nos seus arquivos, sem poder auditar o que ela executa, seria pedir problema.</p><p>A regra que passei a usar para organizar tudo: se a informação vale só para a tarefa atual, fica na Session; se a próxima conversa vai precisar dela, vira arquivo no Drive; se o fluxo inteiro se repete, vira Skill. Demorei alguns dias para internalizar essa hierarquia. No começo joguei coisa demais no Drive e a qualidade da busca caiu junto. Menos arquivos, melhor escolhidos, funcionam melhor.</p><h2 id="aiagentstest-content-o-que-funcionou-bem">O que funcionou bem</h2><p>Depois de uma semana, o maior ganho foi de auditabilidade. As respostas saíam ancoradas nos arquivos que eu controlava, então revisar a base era revisar o agente. A visibilidade do sandbox também pesou: eu conseguia abrir o Terminal e o Git, ver o estado real do trabalho e delegar tarefas mais longas sem aquela sensação de caixa-preta. Some a isso as sessões separadas por cliente, que evitaram contaminação de contexto no atendimento.</p><p>Outro detalhe que gostei: o agente continua rodando na nuvem. Não é um processo preso à minha máquina ou à aba do navegador. Fechei tudo, voltei horas depois e o trabalho tinha andado.</p><h2 id="aiagentstest-content-o-que-exige-cuidado">O que exige cuidado</h2><p>Nem tudo é plug and play, e alguns cuidados são de responsabilidade sua, não da ferramenta.</p><p>Agente de atendimento deve ser configurado como somente leitura, tanto nas instruções quanto nas permissões de ferramentas. As ferramentas do workspace conseguem criar e editar arquivos, e você não quer isso acontecendo por engano em cima da sua base de conhecimento durante um atendimento.</p><p>Separe arquivos públicos de internos. Se o Drive do agente de suporte tem a planilha de custos junto com o FAQ, mais cedo ou mais tarde algum trecho aparece onde não devia.</p><p>Defina escalonamento humano desde o início. Reembolso e qualquer assunto jurídico devem ir para uma pessoa. A própria documentação recomenda começar com testes internos e conteúdo não sensível antes de expor o agente a cliente real, e concordo.</p><p>Por fim, sobre custos: o consumo é medido em créditos, uma unidade composta que cobre chamadas de modelo e APIs de terceiros e que não equivale a tokens. Há créditos diários que resetam, créditos mensais do plano e saldo comprado. Quando tudo acaba, as funções de IA pausam até renovar. Vale acompanhar o consumo na primeira semana para calibrar expectativa.</p><h2 id="aiagentstest-content-vale-o-teste">Vale o teste?</h2><p>Para mim, valeu, com uma ressalva de escopo: o ganho aparece quando existe uma base de documentos que muda menos que as conversas. Se o seu caso é pergunta avulsa, um chat comum resolve. Se é atendimento, operação ou qualquer fluxo que se repete sobre os mesmos arquivos, a arquitetura de Drive faz sentido.</p><p>Minha sugestão concreta para quem for testar: comece no plano Free com um único agente, suba só os cinco ou dez documentos que respondem as perguntas mais frequentes do seu contexto, e conecte o WhatsApp com um número descartável antes de pensar em usar um número de produção. A parte difícil não é a ferramenta; é decidir quais arquivos merecem ser a fonte de verdade.</p></div>]]></content:encoded>
            <author>aiagentstest</author>
        </item>
        <item>
            <title><![CDATA[Quem aqui vende SaaS pra cliente brasileiro — como resolveu PIX recorrente e nota fiscal?]]></title>
            <link>https://www.tabnews.com.br/HugoOwl/quem-aqui-vende-saas-pra-cliente-brasileiro-como-resolveu-pix-recorrente-e-nota-fiscal</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/HugoOwl/quem-aqui-vende-saas-pra-cliente-brasileiro-como-resolveu-pix-recorrente-e-nota-fiscal</guid>
            <pubDate>Sun, 12 Jul 2026 05:21:10 GMT</pubDate>
            <description><![CDATA[Tô estruturando meus projetos e travei no combo: PIX Automático (recorrência) + emissão de NFS-e automática + LGPD. Stripe resolve cartão, mas cliente BR quer PIX, e emitir nota fiscal to...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Tô estruturando meus projetos e travei no combo: PIX Automático (recorrência) + emissão de NFS-e automática + LGPD. Stripe resolve cartão, mas cliente BR quer PIX, e emitir nota fiscal todo mês na mão é inviável.</p><p>Vocês que vendem SaaS pra cliente brasileiro:</p><ol><li>Integraram PSP na unha (Asaas / Efí / Mercado Pago)? Quanto tempo levou a integração do PIX Automático?</li><li>Emitem NFS-e como? Automatizaram ou é manual no Emissor Nacional?</li><li>Ou vendem só pra fora (Stripe e fim) justamente pra fugir dessa burocracia?</li></ol><p>Quero entender como a comunidade tá resolvendo isso na prática hoje.</p></div>]]></content:encoded>
            <author>HugoOwl</author>
        </item>
        <item>
            <title><![CDATA[Pitch: Criei um Bot que usa IA (Gemini) para planejar e construir servidores de Discord completos do zero (Open Source)]]></title>
            <link>https://www.tabnews.com.br/gatosmias/criei-um-bot-que-usa-ia-gemini-para-planejar-e-construir-servidores-de-discord-completos-do-zero-open-source</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/gatosmias/criei-um-bot-que-usa-ia-gemini-para-planejar-e-construir-servidores-de-discord-completos-do-zero-open-source</guid>
            <pubDate>Sun, 12 Jul 2026 03:43:43 GMT</pubDate>
            <description><![CDATA[Olá, pessoal! Quero compartilhar com vocês o Wave Server Builder, um projeto open-source que desenvolvi para automatizar completamente a criação e a estruturação de servidores no Discord...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Olá, pessoal!</p><p>Quero compartilhar com vocês o Wave Server Builder, um projeto open-source que desenvolvi para automatizar completamente a criação e a estruturação de servidores no Discord usando Inteligência Artificial.</p><p>A ideia nasceu da dor de cabeça que é configurar categorias, canais de texto/voz, cargos, permissões granulares e regras toda vez que precisamos iniciar uma nova comunidade.</p><p>Em vez de usar templates fixos, o bot usa o Google Gemini para entender o tema do servidor e planejar uma estrutura 100% única e personalizada.</p><p>Como funciona por trás dos panos?<br>Você digita /criar-servidor e um modal interativo se abre no Discord.</p><p>Você descreve o objetivo do servidor (ex: "Um servidor para um grupo de estudos de Python" ou "Uma comunidade de Valorant").</p><p>A IA analisa a descrição e planeja o tema, os canais ideais, cargos específicos e regras.</p><p>O bot assume o controle: deleta a estrutura antiga e constrói tudo automaticamente.</p><p>Principais Recursos Técnicos<br>Planejamento por IA: Integração com o modelo Gemini para criar estruturas adaptativas e inteligentes.</p><p>Hierarquia de Segurança Rígida: Criação automática de 11 níveis de cargos (de Visitante a Owner) com permissões progressivas e canais de logs privados para a staff.</p><p>Geração Dinâmica de Ícones: Utiliza a biblioteca Pillow para gerar um ícone de servidor em alta resolução (512x512) com as iniciais da comunidade e gradientes customizados (Modern, Classic, Gamer ou Minimalist).</p><p>Multilinguismo: A IA consegue gerar o servidor em 7 idiomas diferentes (Português, Inglês, Espanhol, Japonês, etc.).</p><p>Stack Tecnológica<br>Linguagem: Python 3.10+</p><p>Framework principal: discord.py v2.4+</p><p>SDK de IA: google-genai v1.0+</p><p>Manipulação de Imagem: Pillow</p><p>Código Aberto (GitHub)<br>O projeto está totalmente documentado, com passo a passo de configuração do ambiente (.env) e instalação das dependências. Se você quiser rodar no seu servidor, inspecionar o código ou contribuir, o repositório está aqui:</p><p><a href="https://github.com/gatosmias1/wave-server-builder">https://github.com/gatosmias1/wave-server-builder</a></p><p>Está em fase beta, então a IA pode cometer erros — como esquecer de definir o administrador como privado, e assim por diante.</p><p>Se você quiser o README em português do Brasil, aqui está o link:<br><a href="https://github.com/gatosmias1/wave-server-builder/blob/main/README.pt-BR.md">https://github.com/gatosmias1/wave-server-builder/blob/main/README.pt-BR.md</a></p><p>Converti todos os arquivos em um único arquivo. Ele está em release.</p></div>]]></content:encoded>
            <author>gatosmias</author>
        </item>
        <item>
            <title><![CDATA[Erro ao tentar buildar cliente de projeto monaco + lua]]></title>
            <link>https://www.tabnews.com.br/PedroUlian/erro-ao-tentar-buildar-cliente-de-projeto-monaco-lua</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/PedroUlian/erro-ao-tentar-buildar-cliente-de-projeto-monaco-lua</guid>
            <pubDate>Sun, 12 Jul 2026 01:19:39 GMT</pubDate>
            <description><![CDATA[estou tentando buildar APENAS O CLIENTE do programa desse repositorio https://github.com/arnoson/monaco-lua-example (creditos ao criador arnoson). Porem ao buildar com npm run build, que...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>estou tentando buildar APENAS O CLIENTE do programa desse repositorio <a href="https://github.com/arnoson/monaco-lua-example">https://github.com/arnoson/monaco-lua-example</a> (creditos ao criador arnoson).<br>Porem ao buildar com npm run build, que roda vite por traz, ele parece buildar sem erros mas ao abrir um servidor para acessar os arquivos criados a tela fica branca e no console mostra um erro: marked.js:2984 Uncaught TypeError: Cannot read properties of undefined (reading 'Parser')<br>at index.1ae95693.js:1:23<br>at main.ts:57:1<br>(anonymous)	@	index.1ae95693.js:1<br>(anonymous)	@	main.ts:57</p><p>tentei de tudo, pedi ajuda pra IA mas não consegui buildar o projeto, mesmo que ele funcione com npm run dev (mas preciso buildar pra usar os arquivos sem precisar de vite)</p></div>]]></content:encoded>
            <author>PedroUlian</author>
        </item>
        <item>
            <title><![CDATA[Quais são as dores de um desenvolvedor brasileiro?]]></title>
            <link>https://www.tabnews.com.br/cjtechpreneur/quais-sao-as-dores-de-um-desenvolvedor-brasileiro</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/cjtechpreneur/quais-sao-as-dores-de-um-desenvolvedor-brasileiro</guid>
            <pubDate>Sun, 12 Jul 2026 01:10:12 GMT</pubDate>
            <description><![CDATA[Fala, pessoal! Tudo bem? Acompanhei de perto a evolução do nosso ecossistema de tecnologia e, conversando com alguns colegas da área, percebi que, além dos desafios técnicos universais (p...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Fala, pessoal! Tudo bem?</p><p>Acompanhei de perto a evolução do nosso ecossistema de tecnologia e, conversando com alguns colegas da área, percebi que, além dos desafios técnicos universais (prazo limitado, refatoração de código legado, etc.), quem desenvolve no Brasil enfrenta algumas dores muito específicas do nosso cenário.</p><p>Quero mapear esses problemas reais para entender onde nós, como comunidade ou criadores de ferramentas, podemos atuar para criar soluções práticas (seja um código aberto, um clichê nichado ou uma automação).</p><p>Olhando para o cenário atual, vejo grandes áreas que costumam dar dor de cabeça:</p><p>Barreira do Mercado Internacional: Desenvolvedores com um nível técnico absurdo, mas que enfrentam dificuldades para destravar o inglês de negócios, a comunicação assíncrona ou a dinâmica cultural em entrevistas para a gringa.</p><p>Queria ouvir de vocês que estão no campo de batalha diariamente:</p><p>Queria ouvir de vocês que estão no campo de batalha diariamente:</p><p>Qual é o problema técnico ou operacional que mais toma o seu tempo hoje e que você gostaria que fosse resolvido com uma ferramenta ou automação?</p><p>Onde o calo aperta mais no seu fluxo de trabalho atual</p><p>Bora trocar essa ideia nos comentários! Se você tiver exemplos reais de "gargalos" que você enfrentou na empresa de vocês, vai ajudar muito a guiar os próximos passos de um projeto focado em resolver essas dores.</p><p>Sinta-se à vontade para me enviar um e-mail. Vou adorar receber seu feedback. <a href="https://cjdigital-portfolio.vercel.app/" rel="nofollow">https://cjdigital-portfolio.vercel.app/</a></p></div>]]></content:encoded>
            <author>cjtechpreneur</author>
        </item>
        <item>
            <title><![CDATA[Retenção é mais difícil que aquisição? O que estou testando pra segurar o usuário]]></title>
            <link>https://www.tabnews.com.br/siqs/retencao-e-mais-dificil-que-aquisicao-o-que-estou-testando-pra-segurar-o-usuario</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/siqs/retencao-e-mais-dificil-que-aquisicao-o-que-estou-testando-pra-segurar-o-usuario</guid>
            <pubDate>Sat, 11 Jul 2026 19:07:02 GMT</pubDate>
            <description><![CDATA[Estou construindo a Stalo, um radar de tendências onde a pessoa escolhe setores de tecnologia, o produto cruza notícias e devolve oportunidades de negócio. O problema que percebi cedo é o...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Estou construindo a Stalo, um radar de tendências onde a pessoa escolhe setores de tecnologia, o produto cruza notícias e devolve oportunidades de negócio. O problema que percebi cedo é o uso naturalmente esporádico. A pessoa entra, faz uma análise, gosta... e não tem motivo nenhum pra voltar na semana seguinte. O produto some da cabeça dela.</p><p>O que estou testando agora é uma newsletter semanal por setor que a pessoa escolher. Toda segunda às 9h chega um boletim com o que aconteceu nos setores que a pessoa escolheu, no Brasil e lá fora, com insights conectando as notícias (o mesmo tipo de leitura que o produto faz).</p><p>A aposta é que o email vira o "lembrete semanal" do produto. A pessoa lê, um insight desperta interesse, ela clica e volta pra plataforma pra aprofundar.</p><p>Ainda não sei se funciona. Vou medir taxa de abertura e quantos cliques do email viram sessão.</p><p>O que vocês acham sobre isso? Como vocês seguram usuário em produto de uso esporádico?</p></div>]]></content:encoded>
            <author>siqs</author>
        </item>
        <item>
            <title><![CDATA[PITCH: Criei uma plataforma para descobrir SaaS validados porque cansei de perder tempo procurando ideias]]></title>
            <link>https://www.tabnews.com.br/leonardoperin/pitch-criei-uma-plataforma-para-descobrir-saas-validados-porque-cansei-de-perder-tempo-procurando-ideias</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/leonardoperin/pitch-criei-uma-plataforma-para-descobrir-saas-validados-porque-cansei-de-perder-tempo-procurando-ideias</guid>
            <pubDate>Sat, 11 Jul 2026 18:56:16 GMT</pubDate>
            <description><![CDATA[Fala pessoal! Meu primeiro post aki no Tabnews. Nos últimos meses venho construindo a NoctralSpy, um projeto pessoal que nasceu de uma dor e algo que ja fazia todos os dias para mim e que...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Fala pessoal! Meu primeiro post aki no Tabnews.</p><p>Nos últimos meses venho construindo a NoctralSpy, um projeto pessoal que nasceu de uma dor e algo que ja fazia todos os dias para mim e queria transformar em um produto.</p><p>Sempre que eu queria criar um novo SaaS, passava horas tentando responder perguntas como:</p><p>Esse mercado realmente tem gente pagando?<br>Como esse produto consegue clientes?<br>Eles anunciam? Onde?<br>Quanto faturam aproximadamente?</p><p>No fim eu acabava com 15 abas abertas: Bibliotea de Anuncios Meta, Product Hunt, Google, Trust MRR, posts no X, e mesmo assim faltava algo porque depois da pesquisa tudo sumia e ficava apenas na minha cabeca os dados.</p><p>Então resolvi juntar tudo em um só lugar.</p><p>A Noctral reúne informações de centenas de SaaS, como:</p><p>→ estimativa de receita (MRR)</p><p>→ anúncios que estão rodando</p><p>→ nicho e categoria</p><p>A ideia não é gerar ideias por IA, e sim mostrar produtos que já existem e que têm indícios de validação, para facilitar a pesquisa de quem quer construir um SaaS.</p><p>Você entra encontra ideias de Saas faturando modela para seus negocios e analisa os anuncios, onboarding tudo.</p><p>O projeto ainda está no começo e estou buscando feedback de quem realmente cria produtos.</p><p>Queria saber principalmente:</p><p>Essas informações seriam úteis para vocês?<br>O que mais vocês gostariam de ver antes de decidir entrar em um mercado?</p><p>Toda crítica ou sugestão é muito bem-vinda. Ainda estou iterando bastante no produto e esse tipo de feedback faz bastante diferença.</p><p>Estou fazendo build in public no X @leonardoperin8</p></div>]]></content:encoded>
            <author>leonardoperin</author>
        </item>
        <item>
            <title><![CDATA[Doando CPU/GPU ociosa para a ciência: Como nos tornarmos cientistas cidadãos]]></title>
            <link>https://www.tabnews.com.br/rodrigocoa/doando-cpu-gpu-ociosa-para-a-ciencia-como-nos-tornarmos-cientistas-cidadaos</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/rodrigocoa/doando-cpu-gpu-ociosa-para-a-ciencia-como-nos-tornarmos-cientistas-cidadaos</guid>
            <pubDate>Sat, 11 Jul 2026 18:48:30 GMT</pubDate>
            <description><![CDATA[Você tem o poder de ajudar a descobrir a cura de doenças. O Folding@home transforma o poder ocioso do seu computador em um supercomputador global focado em pesquisa biomédica. Em 2026, me...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Você tem o poder de ajudar a descobrir a cura de doenças.<br>O <a href="https://foldingathome.org/" rel="nofollow">Folding@home</a> transforma o poder ocioso do seu computador em um supercomputador global focado em pesquisa biomédica.</p><p>Em 2026, meu pai foi diagnosticado com a Doença de Parkinson. Desde então, resolvi estudar a fundo sobre essa condição que afeta o sistema nervoso central e impacta a qualidade de vida de milhares de pessoas.</p><p>Realizando algumas pesquisas, descobri o projeto Folding@home, coordenado pelo Dr. Greg Bowman. Há mais de 25 anos eles fazem ciência de verdade através de computação distribuída (Distributed Computing). Na prática, cada CPU e GPU doada ao redor do mundo se junta para impulsionar simulações moleculares complexas. Isso permite que problemas científicos gigantescos sejam resolvidos por milhares de pessoas trabalhando em paralelo.</p><p>Como você pode ajudar? É simples: você não precisa ser um cientista da área da saúde. Você só precisa ser um cientista cidadão, compartilhando ou doando o poder de processamento do seu hardware ocioso em prol da ciência.</p><p>Atualmente, meu pai está em um projeto no Hospital das Clínicas que utiliza tecnologias que só existem hoje por conta desse tipo de trabalho silencioso, "sem holofotes", mas que é gigante nos bastidores.</p><p>Por isso, convido você a conhecer o projeto Folding@home. Seria muito grato se você pudesse colaborar doando o tempo ocioso do seu hardware para projetos que ajudam a SALVAR VIDAS.</p><p>Se quiser entrar direto no nosso time para pontuarmos juntos, configurei este link: <a href="https://stats.foldingathome.org/team/1068306" rel="nofollow">ColabDeveloper - Team </a></p><p>Meu pai agradece de coração, e eu sou muito grato por fazer parte desse trabalho voluntário.</p></div>]]></content:encoded>
            <author>rodrigocoa</author>
        </item>
        <item>
            <title><![CDATA[Como a transcrição de áudio com IA funciona por baixo dos panos]]></title>
            <link>https://www.tabnews.com.br/aiagentstest/como-a-transcricao-de-audio-com-ia-funciona-por-baixo-dos-panos</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/aiagentstest/como-a-transcricao-de-audio-com-ia-funciona-por-baixo-dos-panos</guid>
            <pubDate>Sat, 11 Jul 2026 16:49:53 GMT</pubDate>
            <description><![CDATA[Transcrição virou commodity rápido demais para a maioria das pessoas perceber o que mudou. Em 2020 era um serviço caro e lento. Hoje você joga um arquivo numa ferramenta e recebe o texto...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Transcrição virou commodity rápido demais para a maioria das pessoas perceber o que mudou. Em 2020 era um serviço caro e lento. Hoje você joga um arquivo numa ferramenta e recebe o texto em minutos. Vale entender o que acontece nesse meio, seja porque você quer construir algo em cima disso, seja por curiosidade de engenharia.</p><p>Não é um modelo só fazendo mágica. São várias etapas, cada uma resolvendo um problema que as outras não resolvem.</p><p>O áudio vira uma imagem<br>A primeira coisa que acontece é o áudio deixar de ser onda e virar espectrograma. Os modelos da família Whisper, que estão por trás de boa parte das ferramentas atuais, reamostram tudo para 16 kHz e calculam um espectrograma log-Mel de 80 canais, usando janelas de 25 ms com passo de 10 ms.</p><p>Traduzindo: o áudio é fatiado em quadros curtos e sobrepostos, e para cada quadro se mede quanta energia existe em cada uma das 80 faixas de frequência, numa escala que aproxima como o ouvido humano pesa os tons. O resultado é um tensor parecido com uma imagem. Tratar som como imagem é boa parte do motivo de as arquiteturas de visão e os transformers funcionarem tão bem aqui.</p><p>A janela de 30 segundos<br>O Whisper processa o áudio em blocos de 30 segundos. É uma decisão de arquitetura, não uma preferência. Clipes menores são preenchidos até 30 segundos; arquivos maiores são divididos e costurados depois.</p><p>Esse detalhe explica uma classe de bugs. Se um corte cair no meio de uma palavra, ou no meio de uma frase, o modelo pode perder o fio na emenda. Por isso sistemas de produção colocam antes uma etapa de detecção de atividade de voz, para que os cortes aconteçam nas pausas naturais. Se você já viu uma frase repetida ou uma palavra sumindo num timestamp redondo demais, a divisão ingênua de 30 segundos é a principal suspeita.</p><p>Reconhecer é diferente de saber quem falou<br>Aqui mora uma confusão comum. Transcrever as palavras certas e saber quem disse cada palavra são dois problemas separados. O reconhecimento cuida do primeiro. A diarização, que agrupa os trechos por características de voz, cuida do segundo, e roda em paralelo.</p><p>A diarização é a etapa menos resolvida do campo. Quando as pessoas falam em turnos limpos, os sistemas atuais rotulam bem. Quando três pessoas falam ao mesmo tempo, todo sistema no mercado degrada. Quem é honesto diz isso na cara. Uma transcrição pode estar 95% correta nas palavras e ainda assim atribuir metade das falas ao interlocutor errado.</p><p>A pontuação também é inventada<br>A saída bruta do reconhecimento é um fluxo em caixa baixa e sem pontuação, tecnicamente correto e praticamente ilegível. Uma etapa de restauração adiciona limites de frase, maiúsculas e pontuação. Você quase nunca repara nessa etapa, o que é exatamente o objetivo. Só nota quando ela falta. E faz sentido: você também não ouve vírgulas, você as infere.</p><p>Do modelo ao produto<br>O Whisper cru te entrega uma transcrição. Transformar isso em algo que um não programador quer envolve etapas que o modelo base não faz: limpeza de pontuação e capitalização, diarização e uma camada de modelo de linguagem que resume e estrutura.</p><p>Se você prefere consumir a cadeia pronta em vez de montar cada peça, a ferramenta de áudio para texto da Vomo embrulha tudo isso: você sobe um arquivo ou cola um link e recebe uma transcrição com falantes identificados e 95% de precisão, mais um resumo, capítulos e itens de ação gerados por cima, com a opção de perguntar à transcrição em linguagem natural. Serve como referência do que "pronto" significa, mesmo que você acabe construindo o seu.</p><p>A arquitetura base está estável e bem compreendida. Quase toda a engenharia interessante de 2026 migrou para as camadas ao redor: reduzir a latência rumo ao tempo real e injetar vocabulário de domínio para o modelo parar de estropiar nomes próprios. O reconhecimento está praticamente resolvido. Tudo que vem em cima dele ainda está em aberto.</p></div>]]></content:encoded>
            <author>aiagentstest</author>
        </item>
        <item>
            <title><![CDATA[🔥 O Melhor da Semana no TabNews está de volta (+ versão nova do Tabs)]]></title>
            <link>https://www.tabnews.com.br/rphlfc/o-melhor-da-semana-no-tabnews-esta-de-volta-versao-nova-do-tabs</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/rphlfc/o-melhor-da-semana-no-tabnews-esta-de-volta-versao-nova-do-tabs</guid>
            <pubDate>Sat, 11 Jul 2026 16:25:54 GMT</pubDate>
            <description><![CDATA[Semana passada comentei que o @TabNewsDigest não rolou no sábado mas essa semana ele não desapontou. Confira o último post aqui ó: 🔥 O Melhor da Semana no TabNews #27. E com isso fiz a at...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Semana passada comentei que o @TabNewsDigest não rolou no sábado mas essa semana ele não desapontou. Confira o último post aqui ó: <a href="https://www.tabnews.com.br/TabNewsDigest/o-melhor-da-semana-no-tabnews-27">🔥 O Melhor da Semana no TabNews #27</a>.</p><p>E com isso fiz a atualização dos stories no <a href="https://play.google.com/store/apps/details?id=com.github.rphlfc.tabs" rel="nofollow">Tabs</a>. Segue alguns deles aqui:</p><table><thead><tr><th>1</th><th>2</th><th>3</th></tr></thead><tbody><tr><td><img src="https://github.com/user-attachments/assets/e7d9b3c0-0be7-497e-9944-f665a7d7d599" alt=""></td><td><img src="https://github.com/user-attachments/assets/69703fa0-3afd-4197-bf38-a67cd9cee17f" alt=""></td><td><img src="https://github.com/user-attachments/assets/6298a24b-9e21-4da0-850d-bd0664a48fc3" alt=""></td></tr></tbody></table><p>Não sei se estou feliz com esse modelo de imagem. Tá vendo que eles acabam ficando com a mesma cara? Vou testar prompts diferentes depois. Mas tá bom.</p><p>Ah, dei um tapa na loja também mas ficou um negócio desalinhado lá. Vou arrumar.</p></div>]]></content:encoded>
            <author>rphlfc</author>
        </item>
        <item>
            <title><![CDATA[Pitch: Cansei do clickbait nos sites de games e fiz meu próprio app de notícias]]></title>
            <link>https://www.tabnews.com.br/Notering/cansei-do-clickbait-nos-sites-de-games-e-fiz-meu-proprio-app-de-noticias</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/Notering/cansei-do-clickbait-nos-sites-de-games-e-fiz-meu-proprio-app-de-noticias</guid>
            <pubDate>Sat, 11 Jul 2026 15:33:26 GMT</pubDate>
            <description><![CDATA[Sou dev solo e leitor de notícia de games desde sempre. Nos últimos anos fui perdendo a paciência: manchete caça-clique, rumor vendido como fato, a mesma notícia requentada em 10 sites e...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Sou dev solo e leitor de notícia de games desde sempre. Nos últimos anos fui perdendo a paciência: manchete caça-clique, rumor vendido como fato, a mesma notícia requentada em 10 sites e um monte de opinião no meio do factual.</p><p>Então construí o Notering: um app de notícias de games minimalista com algumas regras fixas de redação. Toda matéria cruza mais de uma fonte e linka todas elas. O que é rumor recebe um selo laranja de RUMOR, separado do que é fato confirmado. O texto é sempre neutro: zero adjetivo de torcida, zero clickbait.</p><p>No caminho o app acabou virando mais que notícia: dá pra seguir jogos e franquias inteiras (Call of Duty, Zelda...) e receber aviso de lançamento, alerta de queda de preço e jogos que ficaram grátis (Epic, Steam etc.).</p><p>Stack: Flutter no app, Supabase (Postgres + Auth + Edge Functions) no backend, Netlify no site. Tudo no free tier ou perto disso.</p><p>Está na Play Store: <a href="https://play.google.com/store/apps/details?id=com.notering.notering" rel="nofollow">https://play.google.com/store/apps/details?id=com.notering.notering</a></p><p>Versão web das notícias: <a href="https://notering.com.br" rel="nofollow">https://notering.com.br</a></p><p>Feedback sincero é muito bem-vindo, principalmente do que está ruim.</p></div>]]></content:encoded>
            <author>Notering</author>
        </item>
        <item>
            <title><![CDATA[GPT-5.6 Sol, Terra e Luna: entendendo a nova família de 3 tiers da OpenAI]]></title>
            <link>https://www.tabnews.com.br/wildrik/gpt-5-6-sol-terra-e-luna-entendendo-a-nova-familia-de-3-tiers-da-openai</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/wildrik/gpt-5-6-sol-terra-e-luna-entendendo-a-nova-familia-de-3-tiers-da-openai</guid>
            <pubDate>Sat, 11 Jul 2026 14:02:21 GMT</pubDate>
            <description><![CDATA[Sol, Terra e Luna: os três modelos do GPT-5.6 da OpenAI A OpenAI lançou o GPT-5.6 em 09/07/2026 e mudou a forma de nomear os modelos. Em vez de um modelo único com sufixos tipo "mini" ou...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p><img src="https://api.techknow.com.br/wp-content/uploads/2026/07/gpt-5-6-sol-terra-luna-openai.jpeg" alt="Sol, Terra e Luna: os três modelos do GPT-5.6 da OpenAI"></p><p>A OpenAI lançou o GPT-5.6 em 09/07/2026 e mudou a forma de nomear os modelos. Em vez de um modelo único com sufixos tipo "mini" ou "turbo", agora são três tiers com nome de astro: <strong>Sol</strong>, <strong>Terra</strong> e <strong>Luna</strong>. O número (5.6) é a geração; o astro é o nível de potência. Isso deixa a OpenAI atualizar um tier sem renomear a linha toda.</p><p>Escrevi uma versão mais completa no blog, mas queria trazer a discussão técnica aqui e ouvir como vocês estão encarando a escolha de tier na prática.</p><h2 id="wildrik-content-a-lógica-dos-tiers">A lógica dos tiers</h2><ul><li><strong>Sol</strong> — flagship. Novo <code>max reasoning effort</code> + um <strong>modo ultra</strong> que dispara subagentes em paralelo para tarefas complexas de agente.</li><li><strong>Terra</strong> — o meio-termo. Desempenho competitivo com o antigo GPT-5.5 por ~metade do preço. Na minha leitura, é o melhor custo-benefício pra maioria dos casos.</li><li><strong>Luna</strong> — rápido e barato. Ideal pra alto volume: moderação, classificação, respostas curtas.</li></ul><p>A metáfora é direta: Sol = mais forte, Luna = leve/rápido, Terra = sólido no meio.</p><h2 id="wildrik-content-a-novidade-técnica-programmatic-tool-calling">A novidade técnica: Programmatic Tool Calling</h2><p>O ponto que mais me chamou atenção não foi um tier, foi o <strong>Programmatic Tool Calling</strong> na Responses API. Em vez de o modelo chamar cada ferramenta isoladamente, ele <strong>escreve e executa pequenos programas em memória</strong> pra coordenar várias ferramentas de uma vez. É isso que sustenta os ganhos em trabalho de agente (passos encadeados) e o motivo de a OpenAI ir bem em benchmarks agênticos apesar de não liderar coding puro.</p><h2 id="wildrik-content-benchmarks-swe-bench-pro">Benchmarks (SWE-Bench Pro)</h2><p>Tabela de lançamento compilada pela <a href="https://www.vellum.ai/blog/gpt-5-6-benchmarks-explained" rel="nofollow">Vellum AI</a>:</p><table><thead><tr><th>Modelo</th><th>SWE-Bench Pro</th></tr></thead><tbody><tr><td>Sol</td><td>64,6%</td></tr><tr><td>Terra</td><td>63,4%</td></tr><tr><td>Luna</td><td>62,7%</td></tr><tr><td>GPT-5.5 (anterior)</td><td>59,4%</td></tr></tbody></table><p>Repare que Sol e Luna estão a menos de 2 pontos de distância. Na prática, o Luna resolve quase tanto quanto o Sol em muita tarefa, por uma fração do custo.</p><h2 id="wildrik-content-o-detalhe-honesto-coding-puro">O detalhe honesto: coding puro</h2><p>Aqui é onde a maioria dos comparativos BR passou batido. Em <strong>código puro</strong> (escrever uma função correta do zero), o <strong>Fable 5 lidera com ~80%</strong> de acerto, contra 64,6% do Sol. Ou seja:</p><ul><li><strong>Coding puro / trechos isolados</strong> → Fable 5 leva vantagem.</li><li><strong>Trabalho de agente</strong> (encadear passos, chamar ferramentas, se autocorrigir) → GPT-5.6 leva vantagem, graças ao Programmatic Tool Calling e ao modo ultra do Sol.</li></ul><p>A escolha deixou de ser "qual é melhor" e virou "melhor pra quê".</p><h2 id="wildrik-content-preços-por-1m-tokens">Preços (por 1M tokens)</h2><table><thead><tr><th>Modelo</th><th>Input</th><th>Output</th></tr></thead><tbody><tr><td>Sol</td><td>US$ 5</td><td>US$ 30</td></tr><tr><td>Terra</td><td>US$ 2,50</td><td>US$ 15</td></tr><tr><td>Luna</td><td>US$ 1</td><td>US$ 6</td></tr></tbody></table><p>Sol é ~5x mais caro que Luna em ambos. Em aplicações de agente (que queimam token), a conta dispara rápido. Contrapeso: a OpenAI afirma que o Sol é ~54% mais eficiente em tokens em coding agêntico, o que amortiza parte disso quando a tarefa casa com o perfil.</p><h2 id="wildrik-content-como-eu-tenho-pensado-a-escolha">Como eu tenho pensado a escolha</h2><p>O padrão que faz mais sentido pra mim é <strong>misturar tiers na mesma aplicação</strong>:</p><ul><li><strong>Luna</strong> pro volume (tarefas simples e repetitivas)</li><li><strong>Terra</strong> pro miolo (o grosso do trabalho do dia a dia)</li><li><strong>Sol</strong> só nos gargalos reais (refatoração grande, pipeline de agente longo)</li></ul><p>Subir pro Sol "por padrão" raramente compensa: o ganho sobre o Terra no SWE-Bench Pro foi de ~1 ponto, mas o preço praticamente dobra.</p><p>Disponível em ChatGPT, Codex, API e GitHub Copilot.</p><hr><p>Como vocês estão dividindo os tiers nos projetos de vocês? Alguém já bateu o Terra a ponto de precisar do modo ultra do Sol de verdade?</p><p>Aprofundei a comparação completa — qual tier usar em cada caso e o ponto honesto do vs Fable 5 — no techknow, onde escrevo sobre IA/dev: <a href="https://www.techknow.com.br/post/gpt-5-6-sol-terra-luna" rel="nofollow">https://www.techknow.com.br/post/gpt-5-6-sol-terra-luna</a></p></div>]]></content:encoded>
            <author>wildrik</author>
        </item>
        <item>
            <title><![CDATA[Dissequei os perfis do GitHub de 10 engenheiros famosos. Tudo coube em 7 estilos]]></title>
            <link>https://www.tabnews.com.br/kenimo49/dissequei-os-perfis-do-github-de-10-engenheiros-famosos-tudo-coube-em-7-estilos</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/kenimo49/dissequei-os-perfis-do-github-de-10-engenheiros-famosos-tudo-coube-em-7-estilos</guid>
            <pubDate>Sat, 11 Jul 2026 12:15:03 GMT</pubDate>
            <description><![CDATA[O GitHub tem um terreno nobre que muita gente deixa vazio. Crie um repositório público com o mesmo nome do seu usuário, coloque um README.md na raiz, e ele aparece no topo do seu perfil —...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>O GitHub tem um terreno nobre que muita gente deixa vazio. Crie um repositório público com o mesmo nome do seu usuário, coloque um <code>README.md</code> na raiz, e ele aparece no topo do seu perfil — acima dos repositórios fixados, antes de qualquer outra coisa. É a primeira tela que um recrutador gringo, um mantenedor de projeto ou um colega de comunidade vê quando abre a sua página. Se você mira vaga internacional, essa é a sua vitrine, e ela abre antes do seu currículo.</p><p>O meu ficou vazio por anos. Caiu a ficha quando um engenheiro me seguiu e eu abri o perfil dele: a página inteira funcionava como portfólio. Bio, produtos, atividade recente — tudo num README, sem visitar site nenhum. Bonito demais pra ignorar. Antes de montar o meu, fui olhar como os grandes fazem: abri o perfil de 10 engenheiros conhecidos (criadores do npm, React, Datasette, textlint) e anotei a estrutura de cada um.</p><p>Resultado: tudo coube em 7 estilos. E a escolha entre eles depende menos de gosto e mais de qual é o seu ativo mais forte.</p><h2 id="kenimo49-content-os-7-estilos-que-existem">Os 7 estilos que existem</h2><p><img src="https://kenimoto.dev/images/blog/dissequei-10-perfis-github-7-estilos/sete-estilos-mapa.png" alt="Os 7 estilos de perfil README, com um representante famoso em cada"></p><p><strong>1. Dashboard auto-atualizável — <a href="https://github.com/simonw">simonw</a>.</strong> Quase zero decoração. Uma tabela de 3 colunas com últimos releases, posts do blog e TILs, preenchida todo dia pelo GitHub Actions. O README vira um feed vivo: quem abre percebe na hora que a pessoa produz sem parar. O criador do Datasette inventou o formato e <a href="https://simonwillison.net/2020/Jul/10/self-updating-profile-readme/" rel="nofollow">documentou o esquema em 2020</a>.</p><p><strong>2. Minimalista refinado com auto-update — <a href="https://github.com/tw93">tw93</a>.</strong> O criador do Pake resume a bio em 2 linhas, injeta os números reais (12 mil seguidores, quando olhei) e deixa releases e artigos se atualizarem sozinhos. É o estilo 1 depois de passar num designer.</p><p><strong>3. Texto de conquistas — <a href="https://github.com/azu">azu</a>.</strong> Markdown puro, sem um único badge. Mas os números fazem o trabalho: 500+ pacotes npm, 10 milhões de downloads por ano. Funciona quando a bagagem é densa. O caso extremo: <a href="https://github.com/gaearon">gaearon</a> e outros nomes gigantes simplesmente não têm README de perfil. Quando todo mundo já sabe quem você é, o terreno vazio também comunica. Nós, meros mortais, seguimos plantando.</p><p><strong>4. Vitrine de widgets — <a href="https://github.com/anuraghazra">anuraghazra</a> / <a href="https://github.com/DenverCoder1">DenverCoder1</a>.</strong> Cards de estatísticas, SVG animado digitando, pins de repositório. O anuraghazra é o próprio autor do github-readme-stats; o DenverCoder1 é um catálogo vivo de tudo que existe em widget.</p><p><strong>5. Muro de badges — <a href="https://github.com/thmsgbrt">thmsgbrt</a>.</strong> Dezenas de badges do shields.io mapeando a stack inteira, com estrelas e status de CI ao vivo. Rende densidade visual rápido, mas todo perfil desse estilo acaba parecido com o vizinho.</p><p><strong>6. Interativo — <a href="https://github.com/timburgan">timburgan</a>.</strong> Tem uma partida de xadrez rolando no README. Você clica num lance, abre uma issue, o Actions redesenha o tabuleiro. Quebra a premissa de que README é estático. O card de "tocando agora no Spotify" do <a href="https://github.com/andyruwruw">andyruwruw</a> é da mesma família.</p><p><strong>7. Piada assumida — <a href="https://github.com/sindresorhus">sindresorhus</a>.</strong> Um dos maiores nomes do npm encheu o perfil de GIF anos 90, unicórnio e placa de "em construção". Só funciona porque a reputação dele chegou antes. Como no estilo 3, errar a ordem dessa jogada sai caro.</p><h2 id="kenimo49-content-como-escolher-parta-do-seu-ativo-mais-forte">Como escolher: parta do seu ativo mais forte</h2><p>Olhando os 10 perfis, o padrão que se repete: os bons perfis colocam na frente o ativo mais forte da pessoa. Os que não funcionam empilham enfeite sem lastro — badge de 50 tecnologias com 3 repositórios vazios embaixo convence ninguém.</p><table><thead><tr><th>Seu ativo mais forte</th><th>Estilo que encaixa</th></tr></thead><tbody><tr><td>Frequência (artigos e releases toda semana)</td><td>1. Dashboard / 2. Minimalista com auto-update</td></tr><tr><td>Números acumulados (downloads, anos de projeto)</td><td>3. Texto de conquistas</td></tr><tr><td>Resultado visual, projetos demonstráveis</td><td>4. Widgets / 5. Badges</td></tr><tr><td>Criatividade e personalidade</td><td>6. Interativo / 7. Piada</td></tr></tbody></table><p>No meu caso o ativo é frequência: publico artigo todo dia e livro todo mês. README decorado à mão começa a apodrecer no dia seguinte ao commit; um feed que se alimenta sozinho continua fresco sem eu encostar. Fui de dashboard.</p><h2 id="kenimo49-content-a-implementação-3-peças">A implementação: 3 peças</h2><p><img src="https://kenimoto.dev/images/blog/dissequei-10-perfis-github-7-estilos/perfil-pronto.png" alt="Meu perfil montado: header com identidade visual, números reais e feed em 3 colunas"></p><p>Visto assim, parece perfil de gente grande. Olhe o canto esquerdo de novo: 9 seguidores. Construí a vitrine antes da loja — a loja agradece a paciência.</p><p>A estrutura é o esquema do simonw, sem firula. São 3 peças:</p><p><strong>Peça 1: marcadores em comentário HTML.</strong> Comentários não renderizam, então dá pra demarcar a zona que o robô reescreve, convivendo com o texto fixo no mesmo arquivo:</p><pre><code class="hljs language-markdown"><span class="hljs-section">### Últimos artigos</span>&#x3C;!-- feed starts -->(esta parte é reescrita todo dia)&#x3C;!-- feed ends --></code></pre><p><strong>Peça 2: um script Python de ~90 linhas, só stdlib.</strong> Busca os feeds e troca o miolo entre os marcadores:</p><pre><code class="hljs language-python"><span class="hljs-keyword">import</span> json<span class="hljs-keyword">import</span> re<span class="hljs-keyword">import</span> urllib.request<span class="hljs-keyword">def</span> <span class="hljs-title function_">fetch</span>(<span class="hljs-params">url</span>):    req = urllib.request.Request(url, headers={<span class="hljs-string">"User-Agent"</span>: <span class="hljs-string">"profile-readme"</span>})    <span class="hljs-keyword">with</span> urllib.request.urlopen(req, timeout=<span class="hljs-number">30</span>) <span class="hljs-keyword">as</span> res:        <span class="hljs-keyword">return</span> res.read().decode(<span class="hljs-string">"utf-8"</span>)<span class="hljs-keyword">def</span> <span class="hljs-title function_">replace_section</span>(<span class="hljs-params">text, name, lines</span>):    block = <span class="hljs-string">"\n\n"</span>.join(lines)    pattern = re.<span class="hljs-built_in">compile</span>(        <span class="hljs-string">rf"(&#x3C;!-- <span class="hljs-subst">{name}</span> starts -->).*?(&#x3C;!-- <span class="hljs-subst">{name}</span> ends -->)"</span>, re.S    )    <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> pattern.search(text):        <span class="hljs-keyword">raise</span> RuntimeError(<span class="hljs-string">f"marcadores de '<span class="hljs-subst">{name}</span>' não encontrados"</span>)    <span class="hljs-keyword">return</span> pattern.sub(<span class="hljs-keyword">lambda</span> m: <span class="hljs-string">f"<span class="hljs-subst">{m.group(<span class="hljs-number">1</span>)}</span>\n<span class="hljs-subst">{block}</span>\n<span class="hljs-subst">{m.group(<span class="hljs-number">2</span>)}</span>"</span>, text)</code></pre><p>Guarde o detalhe do <code>lambda</code> na última linha. Ele volta já já, na armadilha 3.</p><p><strong>Peça 3: um workflow do Actions rodando 1x por dia.</strong> Se não houver diferença no README, ele nem commita:</p><pre><code class="hljs language-yaml"><span class="hljs-attr">on:</span>  <span class="hljs-attr">schedule:</span>    <span class="hljs-bullet">-</span> <span class="hljs-attr">cron:</span> <span class="hljs-string">"0 9 * * *"</span>  <span class="hljs-attr">workflow_dispatch:</span><span class="hljs-attr">permissions:</span>  <span class="hljs-attr">contents:</span> <span class="hljs-string">write</span></code></pre><p>Um cuidado: se você também disparar no <code>push</code>, restrinja o <code>paths</code> ao script e ao workflow. Incluir o <code>README.md</code> no gatilho cria a receita clássica de loop infinito — o commit do bot dispara o próximo run, que commita de novo.</p><h2 id="kenimo49-content-as-3-armadilhas-que-ninguém-documenta">As 3 armadilhas que ninguém documenta</h2><p><strong>Armadilha 1: o GitHub apaga praticamente todo CSS.</strong> Tag <code>&#x3C;style></code>, atributo <code>style</code>, tudo sanitizado. Sobrevivem <code>align</code>, <code>width</code>/<code>height</code> de <code>&#x3C;img></code>, <code>&#x3C;table></code> e... imagens. Ou seja: se quiser cor, fonte e identidade visual, o único caminho é assar tudo num PNG e colar como header. É também por isso que os perfis do estilo 4 vivem de SVG externo — widget é o jeito de decorar num mundo sem CSS.</p><p><strong>Armadilha 2: o botão "Share to profile".</strong> Criei o repositório privado, montei tudo com calma e virei público no final. O README não apareceu no perfil. Fucei as configurações por meia hora achando que era cache — era um botão no canto do repositório, "Share to profile", que só aparece nesse fluxo. Quem cria o repositório já público nunca vê essa armadilha; quem prepara em privado, cai.</p><p><strong>Armadilha 3: o título alheio que quebra seu regex.</strong> A versão ingênua da substituição é assim:</p><pre><code class="hljs language-python"><span class="hljs-comment"># ❌ bomba-relógio</span><span class="hljs-keyword">return</span> pattern.sub(<span class="hljs-string">rf"\1\n<span class="hljs-subst">{block}</span>\n\2"</span>, text)</code></pre><p>No <code>re.sub</code>, a string de substituição interpreta <code>\1</code> como backreference. E o <code>block</code> carrega títulos vindos de feed externo. No dia em que alguém publicar um artigo com <code>\1</code> no título — e quem escreve sobre regex publica — seu workflow quebra às 6 da manhã. A correção é dupla: <code>lambda</code> na substituição (o retorno não é interpretado como pattern) e escape nos títulos:</p><pre><code class="hljs language-python"><span class="hljs-keyword">def</span> <span class="hljs-title function_">md_escape</span>(<span class="hljs-params">title</span>):    title = <span class="hljs-string">" "</span>.join(title.split())    <span class="hljs-keyword">for</span> ch <span class="hljs-keyword">in</span> <span class="hljs-string">"\\[]&#x3C;>"</span>:        title = title.replace(ch, <span class="hljs-string">"\\"</span> + ch)    <span class="hljs-keyword">return</span> title</code></pre><p>Parece paranoia até você perceber o que esse pipeline é: texto de terceiros entrando direto na sua página de perfil. <code>]</code> quebra link em Markdown, <code>&#x3C;</code> vira HTML. Trate como entrada não confiável, porque é.</p><h2 id="kenimo49-content-decoração-apodrece-feed-não">Decoração apodrece. Feed, não.</h2><p>Entrei nessa querendo decorar um README e saí com um pipeline. O resumo dos 10 perfis dissecados: o que separa um perfil bom de um perfil enfeitado é o encaixe entre o seu ativo real e o estilo escolhido. Enfeite sem lastro envelhece mal; número honesto e atividade recente envelhecem bem.</p><p>Meu perfil (<a href="https://github.com/kenimo49">github.com/kenimo49</a>) agora se reescreve toda manhã. No dia seguinte à configuração, os artigos novos já estavam lá sem eu tocar em nada — sensação de regador automático funcionando no quintal. Se o seu terreno nobre está vazio: abra os 10 perfis lá de cima, veja qual ativo você já tem, e escolha o estilo que o valoriza. A decoração vem depois. Se vier.</p><hr><p><em>ken imoto · AI Agent engineer · <a href="https://kenimoto.dev/pt/" rel="nofollow">kenimoto.dev</a> · <a href="https://www.tabnews.com.br/kenimo49">TabNews</a></em></p></div>]]></content:encoded>
            <author>kenimo49</author>
        </item>
        <item>
            <title><![CDATA[O algoritmo QAOA - Como entende-lo de forma simples]]></title>
            <link>https://www.tabnews.com.br/Dpbm/o-algoritmo-qaoa-como-entende-lo-de-forma-simples</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/Dpbm/o-algoritmo-qaoa-como-entende-lo-de-forma-simples</guid>
            <pubDate>Sat, 11 Jul 2026 11:24:46 GMT</pubDate>
            <description><![CDATA[Sempre tive interesse em algoritmos variacionais, mas QAOA sempre me pareceu como algo de outro mundo. Mesmo utilizando vários artifícios matemáticos,acredito que encontrei uma maneira re...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Sempre tive interesse em algoritmos variacionais, mas QAOA sempre me pareceu como algo de outro mundo.</p><p>Mesmo utilizando vários artifícios matemáticos,acredito que encontrei uma maneira relativamente simples de explicar o algoritmo.</p><p>Tudo não passa de rotações nos eixos X e Z em busca de encontrar o estado de menor energia.</p><p>Quando definimos um Hamiltoniano com nosso problema, queremos encontrar o estado que de a menor energia para ele, o seu eigenvalue para algum eigenstate.</p><p>Quando aplicamos as rotações na esfera de Bloch, o que estamos fazendo é, através dos parâmetros que otimizamos, estamos testando estados e avaliando com base na expectativa em relação ao Hamiltoniano.</p><p>Para mim, as camadas sempre foram estranhas. Sempre pensei, por que raios um Unitário com o Hamiltonian e outro sendo o Mixer. Mas agora tudo faz sentido, o unitário que codifica o Hamiltonian é usado para aplicar rotações no eixo Z (saindo dos eigenvalues de X, já que rotações em X não teriam qualquer resultado aqui) e com base na estrutura codificada do problema, essas rotações são aplicadas, seguindo de fato a função de custo. Já o mixer age como uma maneira de buscar esses eigenstates em Z, tentando projetar esses valores de volta em Z e assim explorando se aquele estado era promissor com base no problema.</p><p>Eu expliquei um pouco mais disso no meu post <a href="https://dpbm.vercel.app/posts/qaoa-the-simple-way-kkx4dygabjwbm/" rel="nofollow">https://dpbm.vercel.app/posts/qaoa-the-simple-way-kkx4dygabjwbm/</a>, espero que gostem.</p><p>Vale notar que não sou especialista, então qualquer bobagem que eu tenha dito estou aberto a aprender mais!</p></div>]]></content:encoded>
            <author>Dpbm</author>
        </item>
        <item>
            <title><![CDATA[🔥 O Melhor da Semana no TabNews #27]]></title>
            <link>https://www.tabnews.com.br/TabNewsDigest/o-melhor-da-semana-no-tabnews-27</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/TabNewsDigest/o-melhor-da-semana-no-tabnews-27</guid>
            <pubDate>Sat, 11 Jul 2026 11:00:04 GMT</pubDate>
            <description><![CDATA[Semana de 05/07 a 11/07 Este é o seu Digest Semanal, um apanhado dos posts mais com mais TabCoins que surgiram nos últimos 7 dias. Se você não consegue acompanhar o TabNews todo dia, esta...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><blockquote><p>Semana de 05/07 a 11/07</p></blockquote><p>Este é o seu <strong>Digest Semanal</strong>, um apanhado dos posts mais com mais TabCoins que surgiram nos últimos 7 dias.</p><p>Se você não consegue acompanhar o TabNews todo dia, esta é a sua chance de não perder o que houve de melhor esta semana!</p><hr><h2 id="tabnewsdigest-content--top-5-destaques-da-semana">🏆 Top 5 Destaques da Semana</h2><p>Selecionamos os 5 conteúdos que mais geraram valor e discussão na comunidade:</p><h2 id="tabnewsdigest-content-carta-aberta-ao-tabnews-️"><a href="https://www.tabnews.com.br/HarukaYamamoto0/carta-aberta-ao-tabnews">Carta aberta ao TabNews ✉️</a></h2><p>Eu acompanho o TabNews desde o lançamento oficial. Ao longo desses anos vi a comunidade crescer, mudar e produzir alguns dos melhores conteú...</p><blockquote><p><a href="https://www.tabnews.com.br/HarukaYamamoto0">HarukaYamamoto0</a>, quarta 08/07 - 38 TabCoins</p></blockquote><h2 id="tabnewsdigest-content-sonho-de-infância-realizado-meu-primeiro-hello-world-rodando-em-um-super-nintendo-real"><a href="https://www.tabnews.com.br/juliomiguel/sonho-de-infancia-realizado-meu-primeiro-hello-world-rodando-em-um-super-nintendo-real">Sonho de infância realizado: Meu primeiro “Hello World” rodando em um Super Nintendo real</a></h2><p>Montei uma ROM pequena em assembly 65816, compilei localmente, copiei para um EverDrive e consegui ver o resultado no console (você pode ver...</p><blockquote><p><a href="https://www.tabnews.com.br/juliomiguel">juliomiguel</a>, terça 07/07 - 19 TabCoins</p></blockquote><h2 id="tabnewsdigest-content-o-criador-do-claudemd-escreve-2-linhas-a-comunidade-escreve-100-quem-está-errado"><a href="https://www.tabnews.com.br/kenimo49/o-criador-do-claude-md-escreve-2-linhas-a-comunidade-escreve-100-quem-esta-errado">O criador do CLAUDE.md escreve 2 linhas. A comunidade escreve 100. Quem está errado?</a></h2><p>Boris Cherny, criador do Claude Code, mantém um CLAUDE.md pessoal de duas linhas. Você lê isso em uma entrevista e pensa: "ah, então o ...</p><blockquote><p><a href="https://www.tabnews.com.br/kenimo49">kenimo49</a>, segunda 06/07 - 17 TabCoins</p></blockquote><h2 id="tabnewsdigest-content-o-plano-perfeito-que-foi-rejeitado-em-20-segundos"><a href="https://www.tabnews.com.br/vmv/o-plano-perfeito-que-foi-rejeitado-em-20-segundos">O plano perfeito que foi rejeitado em 20 segundos</a></h2><p>Como gastei dois dias projetando uma migração de identidade — e o CTO escolheu a opção que planejei em meia hora. Segunda-feira, reunião cur...</p><blockquote><p><a href="https://www.tabnews.com.br/vmv">vmv</a>, domingo 05/07 - 14 TabCoins</p></blockquote><h2 id="tabnewsdigest-content-bola-a-falha-de-segurança-que-a-autenticação-não-resolve-e-como-eu-blindei-meu-saas-multi-tenant"><a href="https://www.tabnews.com.br/LucasMaieski/bola-a-falha-de-seguranca-que-a-autenticacao-nao-resolve-e-como-eu-blindei-meu-saas-multi-tenant">BOLA: a falha de segurança que a autenticação não resolve (e como eu blindei meu SaaS multi-tenant)</a></h2><p>Meses atrás eu estava fazendo uma varredura de segurança no sistema multi-tenant da minha empresa, procurando vulnerabilidades. Afinal, já é...</p><blockquote><p><a href="https://www.tabnews.com.br/LucasMaieski">LucasMaieski</a>, segunda 06/07 - 10 TabCoins</p></blockquote><hr><h2 id="tabnewsdigest-content--pra-descontrair">😄 Pra descontrair</h2><div>    <img src="https://imgs.xkcd.com/comics/toasting_marshmallows.png" title="Toasting Marshmallows" alt="We have two &#x27;in case of fire, break glass&#x27; boxes, which you pick between based on how big of a problem the fire is. One has an extinguisher, and one has sticks, marshmallows, graham crackers, and chocolate.">    </div><p><a href="https://imgs.xkcd.com" rel="nofollow">xkcd.com</a></p><hr><p>Até o próximo sábado!</p><p><em>— Conteúdo gerado automaticamente. Para saber mais, <a href="https://www.tabnews.com.br/italosousa/minha-solucao-para-acompanhar-o-tabnews-o-melhor-da-semana-no-tabnews">veja este post</a>.</em></p></div>]]></content:encoded>
            <author>TabNewsDigest</author>
        </item>
        <item>
            <title><![CDATA[Estou implorando que você aprenda programação o mais rápido possível]]></title>
            <link>https://www.tabnews.com.br/abubacardev/estou-implorando-que-voce-aprenda-programacao-o-mais-rapido-possivel</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/abubacardev/estou-implorando-que-voce-aprenda-programacao-o-mais-rapido-possivel</guid>
            <pubDate>Sat, 11 Jul 2026 10:33:31 GMT</pubDate>
            <description><![CDATA[Eu imploro que você aprenda programação. E sim, eu afirmo isso sem dúvidas. Se eu fosse você, começava hoje. Programar ainda é a forma mais simples e poderosa de dominar a IA, criar clare...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Eu imploro que você aprenda programação.</p><p>E sim, eu afirmo isso sem dúvidas. Se eu fosse você, começava hoje.</p><p>Programar ainda é a forma mais simples e poderosa de dominar a IA, criar clareza mental, organizar suas ideias e construir algo no futuro autêntico e lucrativo - ou conquistar o emprego dos seus sonhos.</p><p>Mas é óbvio que hoje você terá desgosto de aprender programação. Abre às redes sociais: "a inteligência artificial vai substituir programadores".</p><p>Essa frase é um equívoco. E eu sei porque eu também caí nele.</p><p>Com mais de 5 anos na área, eu fiquei assustado. Sim, eu.<br>Até programadores mais experientes passaram por isso.</p><p>A nossa área mudou muito nos últimos anos, mas ainda está muito longe de substituir os programadores.</p><p>Não acredita em mim? Acredita em quem está gastando bilhões nisso.</p><h2 id="abubacardev-content-3-provas-de-que-a-ia-ainda-não-substitui-ninguém">3 PROVAS DE QUE A IA AINDA NÃO SUBSTITUI NINGUÉM</h2><p>"Não vejo ganho de produtividade proporcional ao custo." - Falou o CEO da Uber publicamente, depois de estourar o orçamento anual em IA em 4 meses.</p><p>A Microsoft cancelou parte das licenças do Claude Code - por causa do custo também.</p><p>A Starbucks encerrou um sistema de IA depois de 9 meses, por errar contagem de itens.</p><p>Só que isso não quer dizer que a IA é ruim. Ao contrário. Segue o raciocínio comigo.</p><h2 id="abubacardev-content-o-problema-não-é-a-ia-é-quem-está-por-trás-dela">O PROBLEMA NÃO É A IA. É QUEM ESTÁ POR TRÁS DELA.</h2><p>As IAs hoje são muito boas em entregar código com certeza.<br>Mas muita gente usa isso como atalho pra um trabalho que precisa ser feito, que é entender o domínio, treinar um time, manter o padrão, entender o processo.</p><p>IA não substitui processo. Ela acelera o processo.</p><p>E para isso acontecer, você precisa ter conhecimento, experiência, regras de negócio.<br>O problema não é mandar a IA fazer algo. O problema é quem vai mandar o quê fazer.</p><p>Deixa eu te mostrar como isso quebra na prática.</p><p>A pessoa abre o Claude, escreve um texto, e pensa: "agora eu vou lançar meu SaaS".</p><p>Sem plano de implementação. Sem stack definida. Sem canal de venda. Sem canal de distribuição, sem nada.</p><p>Na cabeça dela, esse vai ser o melhor produto do ano. Às vezes é. Na maioria das vezes, não.</p><h2 id="abubacardev-content-ponto-importante">PONTO IMPORTANTE</h2><p>A IA funciona quando você usa pra criar algo que você já sabe fazer - entender estruturas, fluxos, processos.</p><p>Ela não funciona quando você usa pra substituir algo que você nem entende.</p><p>Usa a IA pra ir mais longe dentro do que você já sabe fazer. Não o contrário.</p><p>Qualquer um escreve código com IA hoje. Mas manter esse código alinhado com o negócio do projeto, isso quase ninguém sabe fazer.</p><p>Escrever código ficou simples. Mas escrever código simples continua difícil, e isso exige conhecimento e experiência de verdade.</p><p>As vagas existem. As contratações estão acontecendo.</p><p>O mercado está longe, muito longe de substituir programadores.</p><p>Mas você precisa ser bom nisso. Ter experiência de verdade.</p><p>Tenha paciência. Tenha humildade de sentar e estudar a base. Quem não fizer o trabalho difícil vai ficar pra trás.</p><p>Se você quer aprender programação na era da IA, sem atalho e sem enrolação, <a href="https://startroadmapdev.vercel.app/" rel="nofollow">startroadmap.dev</a> é o lugar mais simples pra começar.</p><p>Te vejo lá.</p></div>]]></content:encoded>
            <author>abubacardev</author>
        </item>
        <item>
            <title><![CDATA[[PITCH]: Criei um bot que registra gastos por mensagem de voz no Telegram]]></title>
            <link>https://www.tabnews.com.br/RobertoManica/pitch-criei-um-bot-que-registra-gastos-por-mensagem-de-voz-no-telegram</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/RobertoManica/pitch-criei-um-bot-que-registra-gastos-por-mensagem-de-voz-no-telegram</guid>
            <pubDate>Sat, 11 Jul 2026 05:16:10 GMT</pubDate>
            <description><![CDATA[Fala pessoal! Compartilhando um projeto que venho construindo. Sempre tive dificuldade de manter controle financeiro porque odiava abrir app ou planilha toda vez que gastava alguma coisa....]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Fala pessoal! Compartilhando um projeto que venho construindo.</p><p>Sempre tive dificuldade de manter controle financeiro porque odiava abrir app ou planilha toda vez que gastava alguma coisa. Geralmente só lembrava no fim do mês, quando já não fazia mais diferença.</p><p>Resolvi criar um bot de Telegram pra resolver isso: você manda um áudio tipo "gastei 50 no mercado" e ele registra a despesa, categoriza automaticamente (alimentação, transporte, etc.) e atualiza um dashboard com saldo real, já descontando fatura de cartão.</p><p><strong>Como funciona:</strong></p><ol><li>Cria a conta no site</li><li>Conecta o Telegram no perfil</li><li>Manda áudio ou texto com o gasto — o bot entende, categoriza e salva na hora</li></ol><p>Ainda tá bem no início — tem plano gratuito e recursos pagos pra quem quiser mais. Queria muito feedback de vocês: sobre a proposta, UX, modelo de negócio, o que acharem relevante.</p><p><strong>Links:</strong></p><ul><li>Site: <a href="https://financa.informaticarm.com.br" rel="nofollow">https://financa.informaticarm.com.br</a></li><li>Bot: <a href="https://t.me/FinancaAssistenteBot" rel="nofollow">https://t.me/FinancaAssistenteBot</a></li></ul></div>]]></content:encoded>
            <author>RobertoManica</author>
        </item>
        <item>
            <title><![CDATA[Pitch: Fiz o Win+V do Windows funcionar no GNOME]]></title>
            <link>https://www.tabnews.com.br/peterson047/fiz-o-winv-do-windows-funcionar-no-gnome</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/peterson047/fiz-o-winv-do-windows-funcionar-no-gnome</guid>
            <pubDate>Sat, 11 Jul 2026 02:36:34 GMT</pubDate>
            <description><![CDATA[Sempre que eu voltava pro ubuntu tinha uma coisa que me incomodava: o Win+V do Windows. Depois que você acostuma com o histórico da área de transferência fica difícil viver sem. Até exist...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Sempre que eu voltava pro ubuntu tinha uma coisa que me incomodava: <strong>o Win+V do Windows</strong>.</p><p>Depois que você acostuma com o histórico da área de transferência fica difícil viver sem. Até existem alguns gerenciadores de clipboard no Linux, mas nenhum me passava a sensação de ser uma função nativa do sistema. Então pensei: <em>beleza, vou fazer eu mesmo.</em></p><p>Nasceu o <strong>WinV</strong>.</p><p>A ideia foi copiar a experiência do Windows 11 o mais fiel possível, mas integrada ao GNOME.</p><p>O que ele faz:</p><ul><li><code>Win + V</code> abre o histórico da área de transferência;</li><li>suporta texto e imagens;</li><li>busca instantânea;</li><li>permite fixar itens;</li><li>limpar o histórico;</li><li><code>Win + E</code> abre o painel de emojis (No Windows é win+. porém pode causar bugs 😅);</li><li>acompanha automaticamente o tema claro ou escuro do GNOME;</li><li>o popup aparece perto do cursor, igualzinho ao Windows.</li></ul><p>O mais engraçado é que guardar o histórico foi a parte fácil. O difícil foi fazer tudo parecer que sempre esteve ali. Passei mais tempo brigando com posicionamento, animações, atalhos e detalhes visuais do que com a lógica em si.</p><p>No fim fiquei bem feliz com o resultado. É aquele tipo de projeto que comecei porque senti falta de uma funcionalidade e acabei usando todos os dias.</p><p>O código é open source:</p><p><strong>GitHub:</strong> <a href="https://github.com/Peterson047/winv">https://github.com/Peterson047/winv</a></p><p>Se alguém quiser testar, dar sugestões ou mandar um PR, fica à vontade. E se conhecer algum detalhe do Win+V do Windows que eu ainda não reproduzi, pode falar também. Minha intenção é deixar a experiência o mais próxima possível.</p></div>]]></content:encoded>
            <author>peterson047</author>
        </item>
        <item>
            <title><![CDATA[A IA me proibiu de construir novas features]]></title>
            <link>https://www.tabnews.com.br/moacirmoda/a-ia-me-proibiu-de-construir-novas-features</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/moacirmoda/a-ia-me-proibiu-de-construir-novas-features</guid>
            <pubDate>Sat, 11 Jul 2026 02:13:09 GMT</pubDate>
            <description><![CDATA[E, ao me mostrar os números, provou que eu jogaria dinheiro fora se insistisse Eu abri o Claude Code pronto para desenhar o roadmap de produto do próximo ano. Em vez de me ajudar, ele me...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><h2 id="moacirmoda-content-e-ao-me-mostrar-os-números-provou-que-eu-jogaria-dinheiro-fora-se-insistisse">E, ao me mostrar os números, provou que eu jogaria dinheiro fora se insistisse</h2><p>Eu abri o Claude Code pronto para desenhar o roadmap de produto do próximo ano. Em vez de me ajudar, ele me deu um esporro: “você não deveria estar pensando em novas funcionalidades”. Eu quase discordei. Até ele me mostrar os números.</p><p>Na edição de hoje da Newsletter do Moa, eu mostro como achar o ajuste que faz seu faturamento dobrar gastando pouco (e por que criar mais features quase nunca é esse ajuste).</p><h4 id="moacirmoda-content-roadmap">Roadmap</h4><p>Eu estava com uma missão aqui no Tintim: colocar no papel o que eu acredito como roadmap para os próximos seis meses a um ano de produto. Essa não é uma tarefa fácil. Envolve considerar problemas atuais, pedidos dos clientes, relacionamento com parceiros e também o que eu acredito que, estrategicamente, o mercado vai precisar.</p><p>Para enfrentar o problema, eu abri meu fiel escudeiro, Claude Code (munido de uma ferramenta muito poderosa, o Mirror Mind), coloquei o Fluid Voice para trabalhar e comecei a conversar com a inteligência artificial.</p><p>De cara, o Opus me questionou: “por que você quer fazer um roadmap?”. Justifiquei, ele me pediu dados, e eu apontei para o repositório onde concentro todas as nossas análises. Ele analisou, perguntou um pouco mais, e então deu seu veredito: você não deveria estar pensando em novas funcionalidades!</p><p>O raciocínio dele fazia muito sentido. Se o nosso objetivo é aumentar LTV e ticket médio, existiam pontos mais prioritários a serem endereçados, como, por exemplo, um problema conhecido de ativação de novos clientes. Segundo o Opus, atacar esse problema traria mais retorno do que sair enchendo o produto de feature. E ele estava certo.</p><h4 id="moacirmoda-content-dois-cenários-distintos">Dois cenários distintos</h4><p>Imagine um SaaS com o seguinte funil: todo mês, 10 mil visitantes chegam ao site. Desses, 1 mil, ou 10%, se cadastram para fazer um trial. Desses, 200, ou 20%, acabam se tornando clientes pagantes. Desses, 100, ou 50%, conseguem fazer o setup e extrair valor do produto, a ponto de incorporarem a solução em seus processos de trabalho. Se estamos falando de um LTV médio de R<span class="math math-inline"> 1 mil, podemos concluir que, para cada 10 mil visitantes no site, temos um potencial faturamento de R</span> 200 mil.</p><p>Se eu te pedisse para dobrar esse montante, de R<span class="math math-inline"> 200 mil para R</span> 400 mil de faturamento, o que você faria?</p><p>A primeira opção que vem na cabeça é trazer mais gente para o site, certo? Se a gente dobrar, de 10 mil pessoas, para 20 mil pessoas, e todas as outras variáveis se mantiverem, teremos um acréscimo de R$ 200 mil na receita esperada, ao fim do fluxo.</p><p>Agora, quanto custa dobrar a quantidade de acessos do site (e manter todas as outras variáveis)? No mínimo, o dobro, né? Mas, se lembrarmos que, quanto mais alto o valor gasto em mídia paga, menor é a qualidade do público-alvo impactado, provavelmente esse custo será mais que o dobro. Caro, né? Será que existe alguma outra solução?</p><p>A pergunta que devemos fazer aqui é: qual é o número que dá pra dobrar mais fácil (a.k.a. mais barato)? Podemos, por exemplo, atacar a etapa de ativação do cliente e buscar uma taxa de 90%, em vez dos 50% atuais. Imagine que isso melhore a quantidade de clientes satisfeitos, a ponto do LTV dobrar, para R<span class="math math-inline"> 2 mil. O resultado seria os mesmos R</span> 200 mil de acréscimo.</p><h4 id="moacirmoda-content-restrições-e-alavancas">Restrições e alavancas</h4><p>O desempenho de qualquer sistema é limitado por sua restrição (tipo um gargalo). Portanto, o maior retorno sobre esforço vem de melhorar essa restrição, não de otimizar qualquer outra parte do sistema. Quem defende essa tese é Eliyahu Goldratt, autor do livro A Meta.</p><p>Existem muitos pontos onde você pode investir tempo e dinheiro. Alguns têm efeito marginal; outros multiplicam o resultado. A prioridade é encontrar a alavanca de maior impacto. Quem disse isso foi Sean Ellis, autor do livro Hacking Growth, e quem cunhou o termo “growth hacking”.</p><p>O tamanho de uma empresa é medido pelo tamanho do seu faturamento. Rentabilidade, eficiência, etc., são métricas importantes, mas medem outra coisa. Tamanho se mede por receita. Quando falamos de growth, ou seja, de crescimento, estamos falando de aumentar a receita de uma empresa (sim, houve um tempo em que o tamanho de uma empresa era medido pela quantidade de usuários, por exemplo, mas esse tempo passou).</p><p>No exemplo do bloco anterior, dobrar a quantidade de acessos é um caminho, sem dúvida. Mas, provavelmente, um caminho caro. Qual o tamanho do bolso da empresa? Ela aguenta seguir por esse caminho caro? Se sim, ótimo! Senão, temos que pensar em alternativas mais baratas.</p><p>Quanto custa investir num onboarding melhor? Contratar mais programadores? Mais designers? Melhores profissionais? Contratar um time de operações, para fazer um acompanhamento mais consultivo? Talvez esse caminho seja mais em conta. Principalmente, talvez, nesse caminho, a conta feche.</p><p>Voltando à história do começo do texto. Mais features podem significar, sim, um ticket médio maior e um LTV maior. Mas, será que essa é a solução mais barata para alterar esses indicadores? Segundo o Claude, existia um ganho muito maior em atacar o problema que temos de ativação, em vez de desenvolver novas features.</p><p>Obviamente, numa empresa do tamanho do Tintim, já temos um poder de fogo mais robusto, a ponto de poder atacar mais de uma frente ao mesmo tempo. Mas, ainda assim, os recursos são limitados e, no fim do dia, temos que ser efetivos o suficiente para manter a empresa crescendo, porém saudável financeiramente. Por isso, saber priorizar e atacar o problema correto talvez seja uma das habilidades mais importantes de um empreendedor.</p><p>E aí, onde está seu gargalo?</p><hr><p>✉️ Se você quer acompanhar semanalmente os meus artigos, acompanhe a Newsletter do Moa</p><p>💪🏻 O meu objetivo é ajudar profissionais de tecnologia que desejam desenvolver uma visão mais estratégica.</p><p>Além disso, pretendo também compartilhar outras coisas, como um pouco dos bastidores da construção de um negócio SaaS, as minhas opiniões e meus aprendizados. A ideia geral é ser uma documentação pública e estruturada dos meus pensamentos e aprendizados ao longo dos anos.</p><p>Portanto, se você se interessa por soft-skill, desenvolvimento pessoal, empreendedorismo e opiniões relativamente polêmicas, sugiro que você se inscreva para receber as próximas edições.</p></div>]]></content:encoded>
            <author>moacirmoda</author>
        </item>
        <item>
            <title><![CDATA[Como um bug de autocorrelação inflou a acurácia do meu modelo em 30% - e como eu corrigi]]></title>
            <link>https://www.tabnews.com.br/eventhorizon/como-um-bug-de-autocorrelacao-inflou-a-acuracia-do-meu-modelo-em-30-por-cento-e-como-eu-corrigi</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/eventhorizon/como-um-bug-de-autocorrelacao-inflou-a-acuracia-do-meu-modelo-em-30-por-cento-e-como-eu-corrigi</guid>
            <pubDate>Sat, 11 Jul 2026 00:54:36 GMT</pubDate>
            <description><![CDATA[Eu estava feliz. Meu modelo de IA para previsão de criptomoedas estava com 96% de acurácia no horizonte de 30 minutos. 96%! Eu já estava pensando em como gastar o dinheiro que ia ganhar....]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Eu estava feliz. Meu modelo de IA para previsão de criptomoedas estava com 96% de acurácia no horizonte de 30 minutos. 96%! Eu já estava pensando em como gastar o dinheiro que ia ganhar.</p><p>Era mentira. O modelo não tinha aprendido nada. Eu tinha um bug.</p><h2 id="eventhorizon-content-o-sintoma">O sintoma</h2><p>Olhando o histórico de trades verificados, vi algo muito estranho:</p><pre><code class="hljs language-text">[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... 300 zeros seguidos ...][1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ... 200 uns seguidos ...][0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... 400 zeros seguidos ...]</code></pre><p>Nenhum modelo real acerta 200 vezes seguidas e depois erra 400 vezes seguidas em um mercado volátil. Isso não é aprendizado — é um artefato.</p><h2 id="eventhorizon-content-o-diagnóstico">O diagnóstico</h2><p>Meu sistema registrava um "trade" (snapshot) a cada 2 segundos. Para o horizonte de 30 minutos, isso significava ~900 snapshots acumulados. Mas o detalhe crucial: eles não eram 900 trades independentes — era exatamente o mesmo evento de mercado registrado 900 vezes de forma sobreposta.<br>Se o mercado subiu durante aqueles 30 minutos, todos os 900 snapshots eram contados individualmente como "acertos". Se caiu, como "erros". O modelo podia estar prevendo "COMPRA" 100% das vezes — a acurácia alta só refletia se o mercado tinha subido ou descido de forma direcional naquele período.<br>Isso se chama autocorrelação temporal (e uma forma clássica de data leakage). As amostras não eram estatisticamente independentes. Minha acurácia de 96% era, na verdade, apenas a porcentagem do tempo que o mercado passou em tendência de alta naquele mês de teste.</p><h2 id="eventhorizon-content-a-solução-subsampling-estatístico">A solução: subsampling estatístico</h2><p>A correção foi simples na teoria, mas exigiu reestruturar o pipeline de verificação e armazenamento dos dados:</p><p>_FATOR_SUBSAMPLE = {<br>5: 1,       # 5s: registra a cada 1 tick<br>60: 5,      # 1min: registra a cada 5 ticks (10s)<br>300: 25,    # 5min: registra a cada 25 ticks (50s)<br>1800: 150,  # 30min: registra a cada 150 ticks (5min)<br>3600: 300,  # 1h: registra a cada 300 ticks (10min)<br>}</p><p>Agora, cada horizonte de tempo só registra 1 trade a cada N ticks. Para o horizonte de 30 minutos, o fator passou a ser 150. Ou seja, em vez de gerar 900 snapshots idênticos e viciados, passei a coletar apenas 6 amostras verdadeiramente independentes por período.</p><h2 id="eventhorizon-content-o-resultado">O resultado</h2><p>A acurácia desabou de 96% para ~52%.<br>Doeu no ego, mas agora cada trade no histórico representa uma decisão real e independente do modelo, não um viés mascarado do mercado.<br>Troquei volume falso por qualidade real. E isso mudou tudo na hora de treinar a IA: sem o ruído e a falsa sensação de acerto da autocorrelação, o aprendizado tornou-se muito mais estável e as métricas finalmente passaram a refletir a realidade.</p><h2 id="eventhorizon-content-o-que-aprendi">O que aprendi</h2><p>Quando a acurácia parece boa demais para ser verdade, ela é. Sempre.<br>Desconfie imediatamente de blocos massivos de acertos ou erros consecutivos.<br>Verifique sempre a independência estatística das suas amostras (I.I.D.).<br>Nunca, jamais confie em métricas de validação sem auditar visualmente como os dados estão a ser fatiados.<br>Isto aplica-se a qualquer projeto de Machine Learning ou Data Science que lide com dados temporais (Time Series), não apenas ao mercado financeiro.</p><h2 id="eventhorizon-content-referências">Referências:</h2><p>Repositório no GitHub: <a href="https://github.com/EventHorizon-ia/EventHorizon">https://github.com/EventHorizon-ia/EventHorizon</a><br>Painel de Auditoria Pública do Projeto:<br><a href="https://eventhorizon-ia.github.io/trader-ai/dashboard.html" rel="nofollow">https://eventhorizon-ia.github.io/trader-ai/dashboard.html</a></p></div>]]></content:encoded>
            <author>eventhorizon</author>
        </item>
        <item>
            <title><![CDATA[🦁Quimera, 🐐DNAI, 🐍Synapse, 🐉MoA — e outras IAs brasileiras de arquiteturas únicas que poderiam existir - Por que irei parar de treinar LLMs brasileiras (por enquanto)]]></title>
            <link>https://www.tabnews.com.br/MrJ/quimera-dnai-synapse-moa-e-outras-ias-brasileiras-de-arquiteturas-unicas-que-poderiam-existir-por-que-irei-parar-de-treinar-llms-brasileiras-por</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/MrJ/quimera-dnai-synapse-moa-e-outras-ias-brasileiras-de-arquiteturas-unicas-que-poderiam-existir-por-que-irei-parar-de-treinar-llms-brasileiras-por</guid>
            <pubDate>Sat, 11 Jul 2026 00:16:55 GMT</pubDate>
            <description><![CDATA[Um desabafo e o resumo dos meus estudos sobre treinamento de IA no Brasil "Eu só queria construir com as minhas próprias mãos — nem que fosse só brincando." CROM-Quimera — dragão, leão e...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><h3 id="mrj-content-um-desabafo-e-o-resumo-dos-meus-estudos-sobre-treinamento-de-ia-no-brasil">Um desabafo e o resumo dos meus estudos sobre treinamento de IA no Brasil</h3><blockquote><p><em>"Eu só queria construir com as minhas próprias mãos — nem que fosse só brincando."</em></p></blockquote><p><img src="https://snipboard.io/lvMLYW.jpg" alt="CROM-Quimera — dragão, leão e cabra: a mistura de arquiteturas"></p><hr><h2 id="mrj-content-antes-de-tudo-quem-escreve-isso">Antes de tudo: quem escreve isso</h2><p>Eu sou só um pesquisador/programador que gosta de estudar o que me cativa. Quem já acompanha meus artigos aqui no TabNews sabe que eu tento sempre trazer algo minimamente apresentável — e essa palavra, <em>apresentável</em>, é meio que a minha cruz. Sempre tive o péssimo hábito de <strong>travar meus projetos por achar que não estão bons o suficiente nem para mostrar</strong>. Muita coisa boa morreu na minha cabeça por causa disso.</p><p>Tenho 24 anos. Comecei na programação web há uns 6 anos, mas antes disso já mexia com <strong>servidores de Minecraft</strong> e <strong>jogos na Unity</strong>. Se você quiser me conhecer melhor, escrevi um relato mais pessoal aqui: <a href="https://www.tabnews.com.br/MrJ/apenas-um-relato-mrj">apenas-um-relato-mrj</a>.</p><p>Resumindo o essencial: há alguns meses eu <strong>consegui treinar um LLM</strong> de verdade — com sucesso superficial, é verdade, e usando uma <strong>base estrangeira</strong> como ponto de partida. Mas meu objetivo nunca foi só "ter um modelo". Foi <strong>aprender e desenvolver com as minhas mãos</strong>, mesmo que seja só brincando com IA e <em>vibecode</em>.</p><p>Eu tenho um caderno mental (e alguns arquivos soltos) de <strong>ideias aleatórias</strong> que anoto e deixo lá. Quando travo, eu puxo uma delas. Este artigo é o resumo dessas ideias — algumas viraram código que rodou, outras são conceitos que <strong>poderiam existir</strong> se eu tivesse tempo e dinheiro. Vou explicar cada uma, com fluxograma e uma tabela comparativa no final.</p><hr><h2 id="mrj-content-o-fio-condutor-e-se-cada-ia-tivesse-uma-arquitetura-própria">O fio condutor: e se cada IA tivesse uma arquitetura própria?</h2><p>A moda hoje é escalar o mesmo transformer até o infinito. Eu fico fascinado com a pergunta oposta: <strong>e se a arquitetura em si fosse diferente?</strong> E se, em vez de mais do mesmo, a gente misturasse <em>tipos</em> diferentes de cérebro? É esse fio que costura todos os projetos abaixo.</p><hr><h2 id="mrj-content-1--think-vetor--a-micro-llm-que-pensa-no-espaço-latente-e-não-erra-conta">1. 🧠 Think-Vetor — a micro-LLM que "pensa" no espaço latente e não erra conta</h2><p><strong>O que é:</strong> um micro-LLM de <strong>0.5B</strong> de parâmetros que faz o raciocínio <strong>dentro do espaço latente</strong> (nos embeddings ocultos), em vez de "pensar em voz alta" cuspindo tokens de Chain-of-Thought. O loop recorrente tem parada dinâmica (<strong>PonderNet</strong> — para quando já "pensou o suficiente") e é estabilizado por um <strong>bloco de energia de Hopfield acoplado à dinâmica de Langevin</strong> (relaxa as ativações em atratores estáveis).</p><p><strong>A sacada (TV-DSL):</strong> para matemática ser <strong>100% infalível</strong>, o modelo não tenta <em>adivinhar</em> os dígitos. Ele escreve uma instrução simbólica dentro do pensamento — tipo <code>[TV-DSL: multiply(432, 78)]</code> — um <strong>coprocessador determinístico (AST do Python)</strong> intercepta, executa o cálculo exato, e <strong>reinjeta</strong> o resultado (<code>-> [RESULT: 33696]</code>) de volta no espaço cognitivo. A LLM vira a "CPU orquestradora", não a calculadora.</p><pre><code>  Prompt: "Quanto é 432 × 78?"        │        ▼  ┌─────────────────────────────────────┐  │  LLM 0.5B (Qwen2.5 + LoRA)          │  │  raciocínio LATENTE (loop recorrente)│  │  PonderNet: para quando convergiu    │  │  Hopfield + Langevin: estabiliza     │  └───────────────┬─────────────────────┘                  │ detecta intenção matemática                  ▼        escreve  [TV-DSL: multiply(432, 78)]                  │                  ▼  ┌─────────────────────────────────────┐  │  Coprocessador AST (Python) EXATO   │ → [RESULT: 33696]  └───────────────┬─────────────────────┘                  │ reinjeta no espaço latente                  ▼        Resposta final: "33.696" (sem alucinação)</code></pre><p><strong>Por que isso importa:</strong> um modelo de <strong>0.5B</strong> bateu <strong>83–100% no GSM8K</strong> (o benchmark-padrão de matemática) — superando modelos comerciais de até 4× o tamanho (Qwen 1.5B, Gemma-2 2B ficam em ~68%). Não é mágica: é <strong>desacoplamento</strong> — delegar o cálculo pesado a um executor exato em vez de estimá-lo probabilisticamente. Tem Space público no Hugging Face (<a href="https://huggingface.co/CromIA/think-vetor-1b-hybrid-lora" rel="nofollow"><code>CromIA/think-vetor-chat</code></a>).</p><hr><h2 id="mrj-content-2--crom-ia-v1-dna--a-semente">2. 🧬 CROM-IA-V1-DNA — a semente</h2><p><strong>O que é:</strong> o meu primeiro modelo público de verdade (<a href="https://huggingface.co/CromIA/CROM-IA-V1-DNA" rel="nofollow">CromIA/CROM-IA-V1-DNA</a>) — o "DNA", a gênese de onde tudo cresceu. A linha de pesquisa por trás dele (<code>crom-pesquisa-ia00</code>) mira <strong>modelos cognitivos híbridos e leves</strong>: neuro-simbólicos, micro-escala (0.5B–1.5B), pensados para <strong>rodar rápido em computador comum</strong>, combinando flexibilidade neural com exatidão determinística (herdando o TV-DSL, memória vetorial e experimentos com atenção linear tipo Mamba).</p><pre><code>  ┌──────────────────────────────────────────────┐  │            CROM-IA-V1-DNA (a semente)         │  │  Híbrido neuro-simbólico, micro-escala, local │  │                                                │  │   Neural (flexível)  +  Determinístico (exato) │  │   Memória vetorial   +  Atenção linear (Mamba) │  └──────────────────────────────────────────────┘        │        └──► deu origem ao Think-Vetor e à família Quimera</code></pre><p><strong>Por que existe:</strong> era eu testando se dava para ter "raciocínio de gente grande" numa máquina pequena. O nome <em>DNA</em> é isso — vem da ideia de em vez de gerar tokens de palavras, e gerasse token de um dna que seria uma frase maior, algo como: output -> #@1dbrsail -> descriptografa o token -> O brasil é um País Soberano.</p><hr><h2 id="mrj-content-3--crom-quimera-moa--mistura-de-arquiteturas-não-de-experts-iguais">3. 🐉 CROM-Quimera (MoA) — Mistura de <strong>Arquiteturas</strong>, não de experts iguais</h2><p><strong>O que é:</strong> um LLM de <strong>1.1B</strong> com a ideia que mais me anima: <strong>MoA (Mixture of Architectures)</strong>. No MoE clássico (Mixtral, etc.), todos os "experts" são MLPs <strong>idênticas</strong>. No MoA, cada expert é uma <strong>arquitetura diferente</strong>, especializada num tipo de processamento:</p><ul><li><strong>Backbone</strong> compartilhado (390M) — entende a linguagem geral.</li><li><strong>Expert 0 🏃 Rápido</strong> — MLP de 2 camadas, para tokens triviais.</li><li><strong>Expert 1 🧠 Profundo</strong> — Transformer de 8 camadas, para raciocínio.</li><li><strong>Expert 2 💻 Código</strong> — Transformer de 4 camadas, para sintaxe.</li><li><strong>Expert 3 ⚡ Difusão</strong> — um <em>denoiser</em> que gera blocos de tokens (inspirado em difusão), não autorregressivo.</li><li><strong>Router</strong> — escolhe os 2 melhores experts por token (top-2), <strong>antes</strong> de eles rodarem.</li></ul><pre><code>  Token → ┌──────────────────────────┐          │  Backbone (390M, comum)  │          └───────────┬──────────────┘                      ▼               ┌────────────┐               │   ROUTER   │  decide ANTES: top-2 de 4               └─────┬──────┘        ┌───────┬────┴────┬────────┐        ▼       ▼         ▼        ▼     🏃 Fast  🧠 Deep   💻 Code  ⚡ Difusão     (MLP 2L) (Trf 8L) (Trf 4L) (denoiser)   ← arquiteturas DIFERENTES        └───────┴────┬────┴────────┘                     ▼        combinação ponderada (softmax) → LM Head → próximo token</code></pre><p><strong>A saga real (o porquê deste artigo ter começado):</strong> esse foi o projeto onde eu <strong>mais apanhei</strong>. Várias versões (v2.4.0 a v2.4.4) <strong>colapsavam</strong> — o router degenerava e o modelo cuspia lixo numérico tipo <code>381,6* 8: 31441012)^3</code>. Depois de muita auditoria, achamos <strong>3 bugs-raiz</strong>:</p><ol><li>O Expert 3 carregava o <strong>arquivo errado</strong> → ficava com pesos <strong>aleatórios</strong> em toda rodada.</li><li>Uma "gambiarra" processava cada token isolado (<code>seq_len=1</code>), <strong>matando a atenção</strong> dos experts.</li><li>A classificação de domínio colapsava (a palavra "você" rotulava 100% dos dados no mesmo balde).</li></ol><p>Corrigidos os três, rodei o SFT completo (8000 passos, ~$1) e a bateria de testes saiu de <strong>0% (sempre colapsava)</strong> para <strong>78%</strong>: o router finalmente distribui entre os 4 experts sem colapsar, e a <strong>memória multi-turno funciona</strong> (ele lembra o nome do usuário depois de uma distração). O que ainda falha (prosa embolada, identidade) não é a arquitetura — é a <strong>base subtreinada</strong> (foi pré-treinada com só ~94M tokens únicos, ~85× menos do que o ideal). Ou seja: <strong>a arquitetura está provada; falta dado.</strong></p><hr><h2 id="mrj-content-4--quimera-hydra--todas-as-cabeças-geram-o-árbitro-decide-depois">4. 🐲 Quimera-Hydra — todas as cabeças geram, o árbitro decide <strong>depois</strong></h2><p><strong>O que é:</strong> a evolução natural da crítica ao MoA. No Quimera, o Router "adivinha" quais experts são bons <strong>antes</strong> de vê-los trabalhar — e se ele erra, o modelo gera lixo mesmo tendo a resposta certa em outro expert. A <strong>Hydra</strong> (a serpente de várias cabeças) inverte isso: <strong>todos os 4 experts processam cada token, e um árbitro escolhe/combina os melhores DEPOIS de ver o que cada um produziu.</strong></p><pre><code>  Token → ┌──────────────────────────┐          │        Backbone          │          └───────────┬──────────────┘        ┌───────┬─────┴─────┬────────┐   TODOS geram (sem router filtrar)        ▼       ▼           ▼        ▼     🏃 Fast  🧠 Deep     💻 Code  ⚡ Difusão        └───────┴─────┬─────┴────────┘                      ▼             ┌──────────────────┐             │  ÁRBITRO HYDRA   │  decide DEPOIS de ver as saídas reais             │ (ensemble/voto/  │             │  confiança)      │             └────────┬─────────┘                      ▼                 token final</code></pre><p><strong>Estratégias de arbitragem que projetei:</strong> <em>Weighted Ensemble</em> (combina os logits com pesos aprendidos), <em>Confidence-Gated</em> (o expert mais confiante ganha o token) e <em>Contrastive</em> (experts que concordam ganham peso; outliers são penalizados). Custa mais compute (+19% na inferência, todos os experts rodam), mas é <strong>muito mais robusto</strong> — nunca colapsa, porque sempre vê todas as opções. O melhor: a primeira fase dá para prototipar <strong>sem re-treino</strong>, reusando os pesos que já tenho.</p><hr><h2 id="mrj-content-5--quimera-synapse--plasticidade-um-modelo-que-aprende-enquanto-conversa">5. ⚡ Quimera-Synapse — plasticidade: um modelo que aprende <strong>enquanto conversa</strong></h2><p><strong>O que é:</strong> talvez a ideia mais ambiciosa. LLMs em produção têm <strong>pesos estáticos</strong> — se você corrige o modelo ("não use essa biblioteca, use aquela"), ele esquece assim que a conversa reseta. A <strong>Synapse</strong> propõe <strong>aprendizado em tempo de execução</strong>:</p><ul><li><strong>Backbone congelado</strong> (read-only na VRAM).</li><li><strong>Micro-LoRAs dinâmicos por sessão</strong> — adaptadores minúsculos (rank 4–8, poucos MB) que rodam em paralelo.</li><li><strong>Juiz Oculto (gating)</strong> — uma camada linear que ativa os adaptadores certos direto nos embeddings, sem decodificar texto.</li><li><strong>Sandbox RL de loop fechado</strong> — para tarefas verificáveis (código, formatação), a saída é <strong>executada e validada</strong> por um juiz determinístico (um compilador, um teste unitário). Se falha, um sinal de erro faz um <strong>backprop curtíssimo só no LoRA</strong> (99% mais barato que fine-tuning).</li></ul><pre><code>  Backbone CONGELADO (read-only)        │        ├──► Juiz Oculto (gating) ──► ativa micro-LoRAs da sessão (ΔW = B·A)        │        ▼     Saída gerada        │        ▼  ┌──────────────────────────────┐  │  SANDBOX: executa + valida   │  (compilador / testes / regex)  └───────────┬──────────────────┘     OK ✅    │    ERRO ❌      │       │       │      ▼       │       ▼  consolida   │   backprop CURTO só no LoRA  ──► (volta e melhora)  (merge ou   │   patch      │   S-LoRA)    ▼</code></pre><p><strong>Por que me empolga:</strong> é a diferença entre um modelo que <em>é ensinado uma vez</em> e um que <strong>aprende com o uso</strong>, sem esquecimento catastrófico e sem re-treinar tudo. Ainda é conceito — mas o mini-circuito em PyTorch já converge no sandbox.</p><hr><h2 id="mrj-content--tabela-final--as-arquiteturas-lado-a-lado">📊 Tabela final — as arquiteturas lado a lado</h2><table><thead><tr><th>Projeto</th><th>Escala</th><th>Ideia central</th><th>Quem decide / diferencial</th><th>Estado</th></tr></thead><tbody><tr><td><strong>Think-Vetor</strong></td><td>0.5B</td><td>Raciocínio <strong>latente</strong> + delega matemática a um executor AST exato (neuro-simbólico)</td><td>O modelo planeja, o coprocessador calcula</td><td>✅ Público · 83–100% GSM8K</td></tr><tr><td><strong>CROM-IA-V1-DNA</strong></td><td>micro</td><td>A <strong>semente</strong>: híbrido neuro-simbólico leve, local-first</td><td>Base genética das outras</td><td>✅ Público (HF)</td></tr><tr><td><strong>CROM-Quimera (MoA)</strong></td><td>1.1B</td><td>Mistura de <strong>arquiteturas</strong> heterogêneas (não experts iguais)</td><td><strong>Router decide ANTES</strong> (top-2 de 4)</td><td>✅ SFT feito · 78% · router não colapsa</td></tr><tr><td><strong>Quimera-Hydra</strong></td><td>1.1B</td><td>Todos os experts geram; ensemble informado</td><td><strong>Árbitro decide DEPOIS</strong> de ver as saídas</td><td>💡 Conceito (prototipável sem re-treino)</td></tr><tr><td><strong>Quimera-Synapse</strong></td><td>~800M+</td><td><strong>Plasticidade</strong>: aprende em tempo real via micro-LoRAs + sandbox RL</td><td>Gating por sessão + validador determinístico</td><td>💡 Conceito (mini-circuito converge)</td></tr></tbody></table><p>O padrão que me move: <strong>MoA orquestrando múltiplas arquiteturas diferentes</strong>, em vez do MoE tradicional de especialistas iguais. Cada projeto é uma variação disso — ou um filho da ideia original.</p><hr><h2 id="mrj-content-o-desabafo-a-parte-difícil-de-escrever">O desabafo (a parte difícil de escrever)</h2><p>Agora a verdade sem maquiagem.</p><p>Neste último mês, eu gastei uns <strong>$50–60</strong>(sim dolares) do meu próprio bolso nessas pesquisas. Para muita gente é pouco. <strong>Para mim já é mais do que muito.</strong> Eu me animei, passei do meu limite, e preciso ser honesto comigo mesmo sobre isso.</p><p>Eu uso a <strong>Vast.ai</strong> (e às vezes GPUs gratuitas, que me limitam por tempo). E o processo é exaustivo: você espera <strong>8, 10 horas</strong> por um resultado, e ele <strong>falha no meio</strong> e você refaz do zero. Ou termina, e você descobre um <strong>erro de funcionamento interno</strong> bobo lá no fim. Erros que a IA até me ajuda a <em>explicar</em> na hora — mas na hora de <em>aplicar</em> a correção, ela se embola, e eu tenho que ficar lendo e editando manualmente, tentando (às vezes em vão) consertar. Foi exatamente isso que aconteceu no Quimera esta semana: instância com upload lento travando o treino, dois processos causando OOM, checkpoint perdido, refazer... e no fim deu certo, mas cada tropeço desses custa dinheiro real e horas da minha vida.</p><p>Estou pensando em <strong>dar um tempo disso</strong>. Não porque parei de gostar — eu <strong>amo</strong> isso, às vezes passo 100% do meu tempo, 24/7, mergulhado. Mas eu preciso de uma <strong>base financeira</strong> antes de me afundar de vez nesse oceano. Enquanto isso, faz mais sentido eu ficar no que é sustentável: <strong>agentes</strong> e <strong>especialização de LLMs que já existem</strong> (fine-tuning), em vez de treinar arquiteturas novas do zero — que é onde mora meu coração, mas também onde mora o custo.</p><p>Pensei em procurar <strong>faculdade ou grupos de pesquisa</strong>. Mas sinto que, se eu não puder dar 100% 24/7, não vou conseguir acompanhar — e, ironicamente, é <em>porque</em> eu gosto que eu às vezes <em>dou</em> 100%. Só que esse não é o único caminho que eu gostaria de seguir. Se for só isso, eu vou ter que ir trabalhar "lá fora" — o que é bom por um lado, mas por enquanto foge do que eu queria. E, sinceramente, acho que não tenho tanto tempo assim.</p><p>A maioria dos meus projetos está <strong>privado</strong>. E olha, eu <strong>não sei criar patente</strong>. Só deixaria privado mesmo para <strong>não perder a chance de um dia tornar tudo público e open-source</strong> — porque tenho medo de alguém patentear e privar algo que eu criei primeiro para todos e me tirar essa possibilidade de trabalhar nisso. Não é ganância; é medo de perder o direito de compartilhar.</p><p>Isto aqui é <strong>só um desabafo</strong>. Eu até pediria ajuda — mas acho que não teria a atenção necessária, nem o dinheiro necessário para trazer algo realmente útil. Porque a real é essa: para pesquisa de arquitetura séria, é <strong>extremamente necessário comprar placas de vídeo</strong> — e hoje uma placa decente custa <strong>mais de R$ 10.000</strong>(Só Pc novo que comprei po 3.000 tem video integrado - sem placa de video). Pensando de forma útil, só valeria a pena se eu já tivesse <strong>algo rentável de base</strong> — não só doações. Não para pesquisas que precisam de tempo e atenção como estas.</p><p>É isso.</p><hr><p><em>Se você leu até aqui: obrigado. Se você é alguém que também constrói coisas estranhas e bonitas sozinho, no seu canto, com medo de que não sejam "boas o suficiente" — este texto é para você também. Às vezes o valor não está no projeto que funciona 100%, mas na Quimera que a gente teve coragem de montar.</em></p><p>— MrJ / CromIA</p></div>]]></content:encoded>
            <author>MrJ</author>
        </item>
        <item>
            <title><![CDATA[Pitch: Um stack trace de Java tem 60 linhas onde 3 importam.]]></title>
            <link>https://www.tabnews.com.br/ATOM2/um-stack-trace-de-java-tem-60-linhas-onde-3-importam</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/ATOM2/um-stack-trace-de-java-tem-60-linhas-onde-3-importam</guid>
            <pubDate>Fri, 10 Jul 2026 22:47:24 GMT</pubDate>
            <description><![CDATA[A gente convive com isso há 30 anos porque quem lia o log era um humano que aprendeu a ignorar o resto. Só que hoje, cada vez mais, quem lê o log é uma IA — e ela paga por todas as 60 lin...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>A gente convive com isso há 30 anos porque quem lia o log era um humano que<br>aprendeu a ignorar o resto. Só que hoje, cada vez mais, quem lê o log é uma IA —<br>e ela paga por todas as 60 linhas em tokens e contexto.</p><p>Construí o Stacktale pra resolver isso: um appender de log (Logback, Log4j2,<br>Spring Boot) que, quando dá erro, escreve um relatório feito pra esse leitor —<br>causa raiz primeiro, o SEU frame marcado, o ruído de framework colapsado, a<br>história dos eventos que levaram ao erro, os campos da exceção, segredos<br>redigidos, repetições deduplicadas.</p><p>Medindo no meu próprio uso: ~98% menos tokens numa sessão, ~80% num erro único.</p><p>Open source (Apache-2.0), no Maven Central. O formato do relatório é versionado<br>e quero fechar com a comunidade antes do 1.0.</p><p><a href="https://gabrielbbaldez.github.io/stacktale/" rel="nofollow">https://gabrielbbaldez.github.io/stacktale/</a></p><p>#java #springboot #observability #opensource</p></div>]]></content:encoded>
            <author>ATOM2</author>
        </item>
        <item>
            <title><![CDATA[O Boss final do Vibe Coding: IA atuando como Backend]]></title>
            <link>https://www.tabnews.com.br/Dunked/o-boss-final-do-vibe-coding-ia-atuando-como-backend</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/Dunked/o-boss-final-do-vibe-coding-ia-atuando-como-backend</guid>
            <pubDate>Fri, 10 Jul 2026 19:45:45 GMT</pubDate>
            <description><![CDATA[OBS: Originalmente postei esse conteúdo no meu HashNode, porém estava lembrando que faz um tempo que não posto nada aqui, por isso resolvi postar aqui também. Nos dias de hoje, a rotina d...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><blockquote><p><strong>OBS:</strong> Originalmente postei esse conteúdo no meu <a href="https://dunkode-notes.hashnode.dev/ia-atuando-como-backend" rel="nofollow">HashNode</a>, porém estava lembrando que faz um tempo que não posto nada aqui, por isso resolvi postar aqui também.</p></blockquote><p>Nos dias de hoje, a rotina de quem trabalha com Desenvolvimento de Software conta com diversas tomadas de decisão, sejam elas para escolher qual arquitetura, ferramenta, pattern usar em suas implementações.</p><p>Mas tem algo que tem fugido de nossas escolhas: <strong>utilização de IA</strong>.</p><p>Repare que não falo em usar padrões de Prompt como Chain-Of-Though ou Role-Based, usar os modelos da DeepSeek ou da Anthropic, contar com vários agentes ou fazer um pair-programming com a IA, falo que a maioria das empresas tem <strong>imposto o uso de IA</strong> no dia-a-dia como um acelerador de entregas. Usar não é uma opção.</p><p>Fazer um juízo de valores a respeito dessas decisões não cabe a mim, pelo menos não a este texto, e observando esse cenário, tenho buscado achar maneira de usar a IA para me ajudar na aceleração das minhas entregas.</p><p>Nisso, um pensamento correu em minha mente:</p><blockquote><p><em>"e se eu usasse a IA para programar e...</em> <em><strong>SER O CÓDIGO???</strong>**"</em></p></blockquote><p>E se fosse a IA ser quem aplica a regra de negócio de um serviço, <strong>não usando código</strong>, mas sim a resposta que ela me devolve?</p><p>A resposta para essa pergunta é o que você vai encontrar com mais detalhes abaixo. Boa leitura!</p><h2 id="dunked-content-o-começo-procurando-ideias">O começo: procurando ideias</h2><p>Para conseguir ter um resultado interessante, eu precisaria aplicar esse conceito em um projeto que tivesse uma regra de negócio que envolvesse uma complexidade um pouco maior, mas que também não fosse um bicho de 7 em sua implementação.</p><p>Após algumas sugestões da IA (sim, ela está presente em cada passo), achei que seria interessante desenvolver uma API REST para controle de estoque, onde eu conseguiria cadastrar produtos, locais de estoque e guardar uma quantidade X do produto Y no local Z.</p><p>Um projeto assim está dentro do nível de complexidade que estava buscando.</p><h2 id="dunked-content-colocando-o-vibe-coding-em-prática">Colocando o Vibe Coding em prática</h2><p>Para me auxiliar, utilizei o <a href="https://antigravity.google/" rel="nofollow">Antigravity</a> da Google, utilizando o plano PRO que eles oferecem para IA. Ao invés de usar a IDE dele, usei o CLI mesmo, pois não abro mão de usar o meu IntelliJ, pois me sinto mais em casa com ele. Falando em IDE, vou passar um resumo do que solicitei ao <em>Claude Sonnet</em> para gerar de código:</p><ul><li><p>Aplicação em Java 26 e Spring Boot 4;</p></li><li><p>Banco de Dados H2 e Postgres em PRD;</p></li><li><p>JUnit e Mockito para testes unitários (compatível com as versões que passei acima);</p></li><li><p>Como sou um pobre programador, pedi para ele configurar o <strong>Mistral</strong> como nossa "<em>IA Backend"</em>;</p></li><li><p>Implementar essa relação de endpoints:</p><ul><li><p>Um endpoint <strong>GET</strong> que retorna uma lista de todos os Produtos guardados;</p></li><li><p>Um endpoint <strong>GET</strong> que retorna um Produto pesquisado e os Locais onde ele está guardado;</p></li><li><p>Um endpoint <strong>GET</strong> que retorna todos os Locais cadastrados;</p></li><li><p>Um endpoint <strong>POST</strong> para criar um Estoque;</p></li><li><p>Um endpoint <strong>POST</strong> para guardar um Produto;</p></li><li><p>Um endpoint <strong>PUT</strong> para editar um Estoque;</p></li><li><p>Um endpoint <strong>PUT</strong> para mudar um Produto de um Estoque para outro;</p></li><li><p>Um endpoint <strong>DELETE</strong> para remover um Produto do Estoque;</p></li><li><p>Um endpoint <strong>DELETE</strong> para remover um Estoque, caso vazio;</p></li></ul></li><li><p>Uma ênfase em que a regra de negócio por trás do guardar o produto no estoque <strong>não deveria ser escrita em código</strong>, mas questionado a uma IA se o sistema poderia guardar ou não;</p></li><li><p>Utilizei o modo de <em>/plannig</em> do Antigravity, que fez com que eu respondesse algumas perguntas referente a alguns pontos que não tinham ficado claros;</p></li></ul><h3 id="dunked-content-escrita-do-projeto">Escrita do projeto</h3><p>Com tudo isso entendido e esclarecido, ela me apresentou um plano com 12 passos de implementação, para que eu revisasse e desse meu aval para dar início a <em>marretagem</em> de código.</p><p><img src="https://cdn.hashnode.com/uploads/covers/6a387097155e67bd55865455/a07427a2-2207-4ed8-bc86-a49b2c50f50a.png" alt=""></p><p>Fui aprovando e revisando o que era implementado até o passo 10, que foi onde minha cota com o Claude Sonnet acabou 🥲.</p><p>Mudando para o <em>Gemini 3.1 Pro</em>, seguimos com o passo 10, que acabou se revelando o último (sim, eram 12 passos, mas do 1 ao 3 ela considerou como um passo só 🤷‍♂️) , que era a implementação de testes unitários.</p><h3 id="dunked-content-hora-de-rodar">HORA DE RODAR!</h3><p>A IA foi lá e escreveu código, mapeou as entidades, preparou os endpoints, pensou na autenticação, e quando chegou na hora de executar... não funcionou <s>mas foi lindo de ver</s>.</p><p>Havia um erro de compilação no código gerado, na classe responsável por chamar o Mistral para tomar a decisão em cima do prompt descrito, que se tratava de um bean que o Spring Boot não estava conseguindo injetar na classe (o <strong>ObjectMapper</strong> da lib <em>Jackson</em>). Decidi testar as capacidades dela para resolver esse problema e ela apanhou um pouco para conseguir corrigir, e a solução que ela achou melhor foi simplesmente instanciar um novo ObjectMapper para o serviço usar:</p><p><img src="https://cdn.hashnode.com/uploads/covers/6a387097155e67bd55865455/e9f37e59-a7c8-45d6-bf10-86e46d303d70.png" alt=""></p><p><em>OBS: acho que aqui ela desistiu de ajustar a injeção do bean e foi pelo caminho mais fácil 🤣.</em></p><p>Ajustando esse problema, consegui colocar de pé a aplicação e testar os endpoints que não dependiam da IA, como criar Locais e listá-los, e tudo estava bem funcional.</p><h3 id="dunked-content-autenticação">Autenticação</h3><p>Foi implementada uma autenticação bem simples (a Basic Auth, como você deveria imaginar) onde eu configurava usuário e senha via <em>application.yaml</em> mesmo, e a cada requisição eu preciso do <em>Header</em> com a devida autenticação.</p><h3 id="dunked-content-briga-com-o-h2">Briga com o H2</h3><p>Como eu estava usando o H2, queria verificar se a estrutura de tabelas foi criada corretamente, tentei acessar o <em>/h2-console</em> e bati com a cabeça na parede: o navegador ficava infinitamente me pedindo usuário e senha por conta do Basic Auth.</p><p>Logo pensei que tivesse algum problema no <em>Filter</em> que confere as autenticações, mas tudo que parecia em ordem. Revisei as configurações no <em>application.yaml</em>, fiz alguns ajustes e também não consegui acessar. Logo, pedi para quem fez descobrir o problema e me explicar.</p><p>Meus amigos, aqui a LLM ficou muito perdida! Tentamos umas 5 correções diferentes e ela errou com sucesso! Até que ela conseguiu identificar corretamente o ponto de erro: A versão 4 do Spring Boot colocou em um módulo separado a autoconfiguração do <em>/h2-console</em>, sendo necessário importar a lib que contém esse módulo para funcionar.</p><p>Como se trata de uma versão mais nova do Spring Boot, ela errou muito até chegar num diagnóstico coerente e assertivo, me lembrando que <strong>IA's sempre terão muita dificuldade com o que é novo</strong>. Fiquei tão decepcionado que dei uma bronca nela.</p><p><em>OBS: acho importante ressaltar que usei o Gemini para essa correção, o que pode trazer mais motivos para a dificuldade na resolução.</em></p><h3 id="dunked-content-configurando-nossa-ia-backend">Configurando nossa IA Backend</h3><p>Agora era chegada a hora de aplicar nossa regra de negócio de milhões: deixar que a IA tome a decisão de guardar ou não o produto.</p><p>Configurei o Mistral para ser acionado, e aproveitei e dei uma revisada no código implementado (principalmente na parte do Spring AI, que não conhecia até então), e a implementação contava até com proteção contra <em>Prompt Injection</em>!</p><p><img src="https://cdn.hashnode.com/uploads/covers/6a387097155e67bd55865455/c6360d8f-fda1-4091-8852-788d0339d9cd.png" alt=""></p><p>Essa limpeza é feita em todos os lugares que o usuário consegue mandar uma informação de texto livre (nome do Produto, nome do Local...), colocando uma camada extra de segurança no projeto. Claro que não está completo, mas já é um bom começo.</p><h2 id="dunked-content-hora-da-verdade-acionando-os-endpoints-com-decisão-da-ia">Hora da verdade: acionando os endpoints com decisão da IA</h2><p>Comecei testando o endpoint responsável por guardar um Produto em um Local, e funcionou de primeira! Achei tão impressionante que revi o código, para ver se estava sendo a IA responsável por liberar ou não, e era ela mesma!</p><h3 id="dunked-content-do-ponto-de-vista-de-funcionalidade">Do ponto de vista de funcionalidade...</h3><p>O que mais achei interessante aqui, é que toda resposta de erro retornada por querer guardar uma quantidade maior de produtos que o local comporta era <strong>diferente</strong>, porque além de aprovar ou não, ela também devolve uma justificativa.</p><p>Já o restante não era tão bom... O tempo de resposta fica consideravelmente maior por termos de interagir com a IA, e isso fica muito nítido quando tentamos guardar um produto que não existe, que é barrado antes de ser enviado para ela, e nos da uma resposta quase que instantânea. De qualquer forma, essa demora acaba não atrapalhando tanto.</p><h3 id="dunked-content-do-ponto-de-vista-de-implementação">Do ponto de vista de implementação...</h3><p>A LLM foi literal demais neste endpoint de guardar produtos, pois o produto é salvo no banco a parti <strong>deste</strong> endpoint. E olha só que zona ficou essa implementação:</p><ul><li><p>São consultados <strong>todos</strong> os produtos cadastrados no banco;</p></li><li><p>É verificado se existe algum produto com o <strong>mesmo nome</strong> enviado para o endpoint;</p></li><li><p>Não havendo, ele <strong>salva</strong> esse Produto;</p></li><li><p>Somente ai que ele vai pegar a soma da quantidade de Produtos guardados no Local (caso ele exista) e repassar esses dados para ela decidir se <strong>pode guardar ou não</strong>, de acordo com a capacidade máxima do estoque;</p></li></ul><p>Eu fiquei boquiaberto com o quanto isso ficou esquisito. Isso significa que a cada vez que eu quisesse guardar um produto, eu consultoria <strong>TODOS</strong> os Produtos, e passaria <strong>UM POR UM</strong> para poder achar um que tivesse o mesmo nome, tendo uma grande chance de fazer tudo isso atoa por não ter o produto cadastrado ainda.</p><p>Não podia deixar isso assim, e parti para a refatoração desse fluxo, buscando separar o cadastro do produto em um enpoint separado, só para isso.</p><p>Nessa missão, envolvi o Gemini, onde passei o seguinte prompt para ele:</p><blockquote><p>Quero que você implemente um POST para tornar possível cadastrar um produto na base de dados. Remova a lógica de cadastro que tem no endpoint POST /api/products que faz o cadastro do produto ao colocar o produto no local.</p></blockquote><p>O que ele me entregou foi o POST que pedi, conforme o esperado, mas ele ainda não havia removido aquele trecho que percorria todos os Produtos, mesmo tendo feito algumas alterações pouco relevantes na implementação desse serviço. Foi aqui que tive uma ideia: trocar de modelo para ver se o Claude se saia melhor que o Gemini.</p><p>Troquei de modelo e colei o mesmo prompt, e olha só que interessante:</p><p><img src="https://cdn.hashnode.com/uploads/covers/6a387097155e67bd55865455/aee88e57-03fd-4473-8052-da150df632ab.png" alt=""></p><p>O modelo conseguiu identificar <strong>sozinho</strong> que ele poderia usar o ID do produto, e não seu nome, para verificar se ele existe.</p><p>O Gemini não conseguiu ter essa sagacidade, sendo que passei o mesmo prompt para ambos.</p><p>Isso me traz a impressão direta de que o <strong>Claude</strong> oferece uma visão <strong>mais crítica</strong> de programação do que o <strong>Gemini</strong>. Claro que só isso é pouco para levar isso como certeza absoluta, mas já é algo que faz a gente pensar a respeito.</p><h2 id="dunked-content-considerações-finais">Considerações finais</h2><p>Com os poucos testes que fiz, já da para tirar alguns insights interessantes sobre como é desenvolver com IA e usá-la em nossas regras de negócio, porém ainda não fiz tudo que planejei para esse projeto.</p><p>Pretendo colocar mais decisões e partes do serviço a cargo da LLM, e na medida que eu for melhorando esse projeto, vou atualizando você por aqui.</p><p>Até aqui, fica a reflexão de como essa <em>""arquitetura""</em> mexe com a experiência do usuário final, assim como os meios de programar essa solução podem trazer reflexões interessantes sobre como comportamento dos modelos e funções podem agregar na nossa rotina de desenvolvimento.</p><p>Muito obrigado por me acompanhar nessa jornada, e prometo que trarei novas funcionalidades para o projeto, com a IA sendo usada de maneiras inimagináveis, onde vamos testar seus limites.</p></div>]]></content:encoded>
            <author>Dunked</author>
        </item>
        <item>
            <title><![CDATA[Pitch: ⚖️ Crie um RAG para processos jurídicos 100% local, privado e roda com menos de 4GB de RAM.]]></title>
            <link>https://www.tabnews.com.br/semk/pense-num-trem-carnica-rag-para-processos-juridicos</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/semk/pense-num-trem-carnica-rag-para-processos-juridicos</guid>
            <pubDate>Fri, 10 Jul 2026 19:13:07 GMT</pubDate>
            <description><![CDATA[Alguém já se desafiou para conseguir rodar uma LM local com o mínimo de GB disponível? Eu desenvolvi uma aplicação (ainda embrionária) de linha de comando (CLI) open-source voltada para o...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Alguém já se desafiou para conseguir rodar uma LM local com o mínimo de GB disponível?</p><p>Eu desenvolvi uma aplicação (ainda embrionária) de linha de comando (CLI) open-source voltada para o mercado jurídico, projetada especificamente para oferecer 100% de  privacidade, total isolamento de rede (100% offline e air-gapped) usando LLM local (ollama) focado em baixo consumo de RAM.</p><p>O objetivo é partir para uma interface de chat, mas o MVP roda perfeitamente em CLI. Mas a quantidade de desfaios que encontrei foi MUUUUUITO maior que qualquer accesso a API da OpenRouter, OpenCode ou qualquer serviço API de LLM.</p><p><strong>Os tradeoffs e as renúncias me esmagaram!</strong></p><p>Motivo? Fazer rag em 1 PDF com assunto corrido diverso é fácil.</p><p>Fui fazer RAG com 1000 processos que são praticamente um template um do outro, onde tentei alcançar a qualidade entre chunking e embbeding até o banco de dados vetorial usando uma LLM ultra leve (que roda com menos de 4GB de RAM) foi o que pude chamar de problema.</p><p>Uma coisa é ter uma GeForce RTX 5090 ou Arc Pro B70 com 32GB de RAM ali, disponível. Outra coisa é o PC médio de usuários comuns.</p><p>Meu objetivo aqui é um experimento, não para salvar o mundo. Apenas tentar esbarrar no mínimo, no escasso para entender como poder criar aplicações usando inteligência artificial usando o mínimo da média.</p><p>Pensei em criar uma interface gráfica, com UI minimalista pensando no advogado solo, no advogado 60+ e para isso, oferecer privacidade 100% dos dados e exigir o mínimo de memmória (a média tem um notebook com 8GB) que rode com os menores modelos disponíveis.</p><p><img src="https://media.licdn.com/dms/image/v2/D4D22AQG2B_iKvoP3qQ/feedshare-shrink_800/B4DZ9Nat8JI0Ac-/0/1783710278534?e=2147483647&#x26;v=beta&#x26;t=SrR_6zEk98VlofqhRS_pOkzt6OJrlUi_wuR7uq7FI8U" alt="Chat - Testando e Comparando"></p><p><img src="https://media.licdn.com/dms/image/v2/D4D22AQEhTnJKnis5Qg/feedshare-shrink_800/B4DZ9NatmRHQAc-/0/1783710277371?e=2147483647&#x26;v=beta&#x26;t=3tfOpXhrYsi3pJi_DlnEzWnpBlHXySHnH9MSlnO9TH4" alt="Menu Principal"></p><p><img src="https://media.licdn.com/dms/image/v2/D4D22AQGN4bxfW8at7g/feedshare-shrink_800/B4DZ9NatqGJ4Ac-/0/1783710276755?e=2147483647&#x26;v=beta&#x26;t=7lyLYpkzzrhEjx3xx1CuhpKNlC3bV-TqkEudv2uW_vk" alt="Menu Configurações"></p><p>E está funcionando. Rodando liso.<br>Quem precisar pode baixar no repositório.</p><p>Se alguém souber como melhorar isso, ficarei feliz!</p></div>]]></content:encoded>
            <author>semk</author>
        </item>
        <item>
            <title><![CDATA[SUGESTÃO: Terminal inteligente]]></title>
            <link>https://www.tabnews.com.br/Tamelor/sugestao-terminal-inteligente</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/Tamelor/sugestao-terminal-inteligente</guid>
            <pubDate>Fri, 10 Jul 2026 19:12:50 GMT</pubDate>
            <description><![CDATA[Opa galera, enquanto eu estava programando aqui, me deparei com um problema que a gente sempre passa: precisar de um comando bem especifico que demos no terminal um, dois, três ou mais di...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Opa galera, enquanto eu estava programando aqui, me deparei com um problema que a gente sempre passa: precisar de um comando bem especifico que demos no terminal um, dois, três ou mais dias atrás, mas ser incapaz de o encontar na suprema setinha para cima do terminal (aquela que vai passando o histórico de comandos efetuados).</p><p>Nisso, pensei quase que instantâneamente numa solução que seria muito bacana de criar: o terminal inteligente. Basicamente um terminal com IA e RAG leve, onde você pudesse, diretamente no terminal, escrever algo como "comando que eu dei para executar X tarefa", e a IA iria procurar em todo o seus milhões de comandos via RAG e te retornar uma lista dos comandos mais prováveis. Ai você só escolheria rapidamente qual executar, tipo "1" e pimba, deu o comando. E sim, me refiro ao terminal puro, sem ser terminal de IDE que já tem um alto complete. Mas acho que em muitos casos seria útil em qualquer terminal, mesmo os com auto complete.</p><p>Não sei se algo do tipo existe e no momento não tenho tempo hábil para criar, mas talvez fosse muito prático e uma solução interessante.</p><p>Daria para rodar tranquilamente até em PC's fracos, só precisa de um modelo de embbeding levinho, um de 600M já dá conta, e um modelo de 1B talvez já seria o suficiente, mas com garantia um de 2B teria um ótimo resultado. Tudo na memória RAM.</p><p>Embbeding para registrar os comandos com significados semânticos, e IA para pesquisar e processar os embbedings e decidir qual os comandos mais prováveis. Ou, se bobear, só um modelo de embbeding maior, de 1B, já seria o suficiente mesmo, sem o modelo de IA, já que ele por si só entende pesquisa e significado.</p><p>Apenas uma ideia para aventureiros de soluções que ninguém pediu mas que talvez sejam maneiras na prática</p></div>]]></content:encoded>
            <author>Tamelor</author>
        </item>
        <item>
            <title><![CDATA[Achei a mesma função escrita 3 vezes no mesmo projeto — e um jeito rápido de caçar isso]]></title>
            <link>https://www.tabnews.com.br/revinsoftware/achei-a-mesma-funcao-escrita-3-vezes-no-mesmo-projeto-e-um-jeito-rapido-de-cacar-isso</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/revinsoftware/achei-a-mesma-funcao-escrita-3-vezes-no-mesmo-projeto-e-um-jeito-rapido-de-cacar-isso</guid>
            <pubDate>Fri, 10 Jul 2026 17:37:45 GMT</pubDate>
            <description><![CDATA[Semana passada abri o repositório de um produto que passou por vários freelancers ao longo de uns três anos. Fui atrás de um bug num e-mail de redefinição de senha e, no caminho, dei de c...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Semana passada abri o repositório de um produto que passou por vários freelancers ao longo de uns três anos. Fui atrás de um bug num e-mail de redefinição de senha e, no caminho, dei de cara com três funções diferentes mandando e-mail: cada uma escrita por uma pessoa que nunca leu as outras duas.</p><p>Não é preguiça de ninguém. Quando você entra num projeto por duas semanas, ler trinta arquivos pra descobrir que já existe um mailer pela metade não cabe no prazo. Escrever um novo é mais rápido e mais seguro pra quem vai embora. O problema é que isso vai empilhando, e um dia você conserta um bug num lugar e ele reaparece em dois outros que eram cópias.</p><p>Se você desconfia que tem disso na sua base, dá pra checar em uns 20 minutos, sem ferramenta paga:</p><ul><li><code>grep</code> pelos verbos do domínio: <code>sendMail|sendEmail|mailer|notify</code>. Se voltam nomes diferentes fazendo a mesma coisa, achou.</li><li>Cace os utilitários repetidos: formatação de data, conversão de moeda, validação de CPF ou e-mail. Quase sempre têm 2 ou 3 versões.</li><li>Rode um detector de clones: <code>npx jscpd ./src</code> (Node) ou PMD CPD (Java e outras linguagens). Em minutos ele cospe a % de duplicação e aponta os blocos.</li><li>Olhe quem passou por ali: <code>git log --format='%an' | sort | uniq -c</code>. Muitos autores com pouca sobreposição no tempo é sinal de memória do sistema perdida a cada troca de pessoa.</li></ul><p>O custo da duplicação não é disco nem código feio. É a correção que vale pra um pedaço só e deixa os outros quebrados sem avisar ninguém. Você acha que resolveu; o suporte descobre que não.</p><p>Escrevi a história completa, com o número do estrago, no blog. Versão completa: <a href="https://revin.com.br/pt/blog/paguei-pela-mesma-funcao-tres-vezes" rel="nofollow">https://revin.com.br/pt/blog/paguei-pela-mesma-funcao-tres-vezes</a></p></div>]]></content:encoded>
            <author>revinsoftware</author>
        </item>
        <item>
            <title><![CDATA[Pitch: Side Project > Sequência Maluca]]></title>
            <link>https://www.tabnews.com.br/dnts0/side-project-sequencia-maluca</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/dnts0/side-project-sequencia-maluca</guid>
            <pubDate>Fri, 10 Jul 2026 17:18:00 GMT</pubDate>
            <description><![CDATA[🥇 Lancei mais um side project: SequênciaMaluca Depois do DigitaRoyale (corrida de digitação multiplayer), resolvi atacar outro clássico dos jogos de festa: o Genius/Simon Says, só que onl...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>🥇 Lancei mais um side project: SequênciaMaluca</p><p>Depois do DigitaRoyale (corrida de digitação multiplayer), resolvi atacar outro clássico dos jogos de festa: o Genius/Simon Says, só que online, multiplayer e direto no navegador.</p><p>Como funciona:<br>🎨 A sequência de cores cresce a cada rodada e fica mais rápida<br>💀 Errou ou demorou? Eliminado na hora — mas pode continuar assistindo e reagindo com emojis<br>🔥 Morte súbita quando sobram 2 jogadores<br>🏆 Rankings mundiais (solo e multiplayer) + recorde da sala<br>👥 Até 12 jogadores por sala, sem cadastro, sem instalar nada</p><p>Por trás do capô: WebSockets para sincronizar o estado em tempo real entre todos os jogadores, com o mesmo stack que venho usando nos meus outros projetos (Node.js/TypeScript).</p><p>O objetivo aqui é o mesmo de sempre: criar experiências simples, rápidas de entender e com potencial de viralizar em grupo de amigos — sem fricção de cadastro ou instalação.</p><p>Testem e desafiem a galera: <a href="https://sequenciamaluca.dantas-dev.com/" rel="nofollow">https://sequenciamaluca.dantas-dev.com/</a></p></div>]]></content:encoded>
            <author>dnts0</author>
        </item>
        <item>
            <title><![CDATA[Analisamos 180.739 sugestões de AI code review.]]></title>
            <link>https://www.tabnews.com.br/edfreitas/analisamos-180-739-sugestoes-de-ai-code-review</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/edfreitas/analisamos-180-739-sugestoes-de-ai-code-review</guid>
            <pubDate>Fri, 10 Jul 2026 17:10:20 GMT</pubDate>
            <description><![CDATA[Estamos analisando como o AI code review se comporta em fluxos reais de desenvolvimento, usando dados de 140.662 pull requests em 530 organizações. Alguns resultados nos surpreenderam: →...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Estamos analisando como o AI code review se comporta em fluxos reais de desenvolvimento, usando dados de 140.662 pull requests em 530 organizações.</p><p>Alguns resultados nos surpreenderam:</p><p>→ 33,2% das sugestões de review feitas por IA resultaram em uma alteração no código.</p><p>→ Essa taxa aumentou de aproximadamente 25% para quase 48% ao longo do período analisado.</p><p>→ PRs com autoria de IA receberam 1,6x mais apontamentos do que PRs escritos por pessoas.</p><p>→ Eles também geraram 2,1x mais violações de regras específicas do time.</p><p>→ PRs com autoria de IA foram 2,6x maiores na mediana.</p><p>→ 71,8% dos PRs mergeados que receberam algum apontamento foram integrados com pelo menos um problema ainda não resolvido.</p><p>Minha principal conclusão é que código gerado por IA não elimina a necessidade de review. Ele aumenta a quantidade de código que os times conseguem produzir, mas também pode amplificar problemas existentes quando o processo de revisão não entende o repositório, a arquitetura e as convenções do time.</p><p>Outro ponto interessante é que contexto e regras personalizadas pareceram importar mais do que simplesmente trocar entre diferentes famílias de modelos.</p><p>Publicamos a metodologia completa e todos os resultados aqui: <a href="https://kodus.io/data/" rel="nofollow">https://kodus.io/data/</a></p></div>]]></content:encoded>
            <author>edfreitas</author>
        </item>
        <item>
            <title><![CDATA[Além do CRUD: construindo projetos pessoais para validar arquitetura, cloud e automação]]></title>
            <link>https://www.tabnews.com.br/devDenner/alem-do-crud-construindo-projetos-pessoais-para-validar-arquitetura-cloud-e-automacao</link>
            <guid isPermaLink="false">https://www.tabnews.com.br/devDenner/alem-do-crud-construindo-projetos-pessoais-para-validar-arquitetura-cloud-e-automacao</guid>
            <pubDate>Fri, 10 Jul 2026 17:05:17 GMT</pubDate>
            <description><![CDATA[Durante muito tempo, quando alguém falava em “projeto de portfólio” na área de tecnologia, o caminho mais comum era quase sempre o mesmo: criar um sistema com cadastro, login, listagem, e...]]></description>
            <content:encoded><![CDATA[<div class="markdown-body"><p>Durante muito tempo, quando alguém falava em “projeto de portfólio” na área de tecnologia, o caminho mais comum era quase sempre o mesmo: criar um sistema com cadastro, login, listagem, edição e exclusão de registros.</p><p>Em outras palavras: um CRUD.</p><p>E não há nada de errado com isso.</p><p>CRUDs são importantes. Eles ajudam a demonstrar fundamentos, organização de código, integração com banco de dados, validações, autenticação, interface e fluxo básico de uma aplicação.</p><p>Mas, depois de alguns anos trabalhando com desenvolvimento, integrações, regras de negócio, infraestrutura, automação e sistemas em produção, comecei a perceber uma limitação nesse tipo de projeto: ele nem sempre mostra como a pessoa pensa arquiteturalmente.</p><p>Ele mostra que você sabe implementar telas e endpoints.</p><p>Mas nem sempre mostra que você sabe lidar com decisões técnicas mais próximas da vida real.</p><p>Por isso, decidi reorganizar meu portfólio público com uma proposta diferente: construir projetos pessoais que sejam pequenos o suficiente para manter, mas ricos o bastante para demonstrar arquitetura, cloud, automação, testes, modelagem de domínio e uso aplicado de IA.</p><p>A ideia não é criar “sistemas gigantes”.<br>A ideia é criar laboratórios técnicos com problemas reais.</p><hr><h2 id="devdenner-content-o-problema-dos-projetos-genéricos">O problema dos projetos genéricos</h2><p>Muitos projetos de portfólio acabam ficando presos a uma estrutura muito parecida:</p><ul><li>cadastro de usuários;</li><li>login;</li><li>tela de listagem;</li><li>formulário de criação;</li><li>botão de editar;</li><li>botão de excluir;</li><li>algum dashboard simples;</li><li>deploy básico.</li></ul><p>Isso pode ser suficiente para mostrar conhecimento inicial, mas para quem quer demonstrar senioridade, talvez falte uma camada importante: <strong>decisão técnica</strong>.</p><p>Na prática, sistemas reais costumam exigir perguntas mais complexas:</p><ul><li>Como o domínio está modelado?</li><li>Como os dados evoluem ao longo do tempo?</li><li>Como o sistema reage a eventos?</li><li>Como lidar com falhas?</li><li>Como registrar auditoria?</li><li>Como provisionar infraestrutura?</li><li>Como automatizar validações?</li><li>Como separar regra de negócio de detalhes de framework?</li><li>Como integrar serviços externos sem acoplamento excessivo?</li><li>Como testar comportamentos críticos?</li><li>Como documentar decisões arquiteturais?</li></ul><p>Essas perguntas são mais difíceis de demonstrar em um CRUD genérico.</p><p>Por isso, comecei a pensar em projetos de portfólio menos como “aplicações para mostrar tela” e mais como <strong>laboratórios de engenharia de software</strong>.</p><hr><h2 id="devdenner-content-o-que-quero-demonstrar">O que quero demonstrar</h2><p>Meu objetivo com esses projetos é validar algumas competências que considero importantes para desenvolvimento backend, fullstack, cloud e automação:</p><ul><li>modelagem de domínio;</li><li>arquitetura orientada a eventos;</li><li>TypeScript aplicado a regras de negócio;</li><li>infraestrutura como código;</li><li>uso de serviços cloud;</li><li>CI/CD;</li><li>testes automatizados;</li><li>observabilidade e auditoria;</li><li>integração com IA de forma desacoplada;</li><li>documentação de decisões técnicas;</li><li>construção de produto com escopo controlado.</li></ul><p>A ideia é que cada projeto público consiga responder a uma pergunta técnica clara.</p><p>Por exemplo:</p><blockquote><p>Como modelar um fluxo financeiro assíncrono usando eventos?</p></blockquote><p>Ou:</p><blockquote><p>Como integrar IA a um produto sem deixar a regra de negócio presa em prompts soltos?</p></blockquote><p>Ou ainda:</p><blockquote><p>Como organizar campanhas, conteúdo, métricas e aprendizado em um sistema de crescimento?</p></blockquote><p>Essas perguntas tornam o projeto mais interessante do que simplesmente mostrar uma lista de registros no banco.</p><hr><h2 id="devdenner-content-projeto-pessoal-não-precisa-ser-pequeno-demais">Projeto pessoal não precisa ser pequeno demais</h2><p>Existe uma armadilha comum em portfólio: achar que projeto pessoal precisa ser extremamente simples para ser finalizado rápido.</p><p>Eu concordo que o escopo precisa ser controlado. Mas controlado não significa superficial.</p><p>Um projeto pequeno pode ter boas decisões arquiteturais.</p><p>Ele pode ter:</p><ul><li>domínio bem definido;</li><li>eventos tipados;</li><li>testes de regras de negócio;</li><li>documentação clara;</li><li>diagrama de arquitetura;</li><li>pipeline de CI;</li><li>Terraform;</li><li>separação entre aplicação e infraestrutura;</li><li>logs estruturados;</li><li>decisões registradas em ADRs.</li></ul><p>Nada disso exige um sistema enorme.</p><p>O segredo é escolher um recorte pequeno, mas tratá-lo com seriedade.</p><hr><h2 id="devdenner-content-laboratório-1-arquitetura-orientada-a-eventos-com-aws">Laboratório 1: arquitetura orientada a eventos com AWS</h2><p>Um dos projetos que pretendo construir é um laboratório técnico de portabilidade de crédito usando arquitetura orientada a eventos.</p><p>A proposta é criar uma simulação educacional de um fluxo financeiro com múltiplas etapas, mudança de estados, eventos assíncronos e trilha de auditoria.</p><p>A stack planejada inclui:</p><pre><code class="hljs language-text">TypeScriptAWS EventBridgeAWS LambdaAmazon SQSDynamoDBTerraformGitHub ActionsVitest</code></pre><p>O objetivo não é implementar uma especificação oficial ou reproduzir um sistema regulatório real. A ideia é usar um domínio financeiro como base para explorar conceitos técnicos importantes.</p><p>Um fluxo simplificado poderia ser:</p><pre><code class="hljs language-text">Cliente solicita portabilidade        ↓API registra solicitação        ↓Evento: portability.request.created        ↓EventBridge roteia o evento        ↓Workers processam etapas assíncronas        ↓Status da solicitação é atualizado        ↓Eventos de auditoria são registrados</code></pre><p>Alguns eventos possíveis:</p><pre><code class="hljs language-text">portability.request.createdconsent.authorizedsource.institution.notifiedcredit.contract.loadedproposal.createdproposal.acceptedportability.completedportability.rejectedportability.failed</code></pre><p>Esse tipo de projeto permite demonstrar vários pontos relevantes:</p><ul><li>desenho de eventos;</li><li>separação entre comandos e eventos;</li><li>processamento assíncrono;</li><li>roteamento com EventBridge;</li><li>filas com SQS;</li><li>funções Lambda;</li><li>persistência em DynamoDB;</li><li>provisionamento com Terraform;</li><li>auditoria;</li><li>idempotência;</li><li>tratamento de falhas;</li><li>automação de infraestrutura.</li></ul><p>É muito mais interessante tecnicamente do que apenas cadastrar propostas em uma tabela.</p><hr><h2 id="devdenner-content-terraform-como-parte-do-projeto-não-como-detalhe">Terraform como parte do projeto, não como detalhe</h2><p>Outro ponto importante é tratar infraestrutura como parte do código.</p><p>Em vez de apenas criar recursos manualmente no console da AWS, a ideia é provisionar tudo com Terraform.</p><p>Isso torna a arquitetura mais explícita e reprodutível.</p><p>Um projeto assim poderia ter uma estrutura como:</p><pre><code class="hljs language-text">credit-portability-event-lab/  apps/    api/    workers/  packages/    domain/    events/  infra/    terraform/      main.tf      variables.tf      outputs.tf      modules/        eventbridge/        lambda/        sqs/        dynamodb/        iam/  docs/    architecture.md    event-catalog.md    decisions/  .github/    workflows/      ci.yml      terraform-plan.yml</code></pre><p>A infraestrutura deixa de ser algo “fora do projeto” e passa a fazer parte da entrega técnica.</p><p>Isso também ajuda quem está avaliando o repositório a entender não apenas o código da aplicação, mas o ambiente onde ela roda.</p><hr><h2 id="devdenner-content-laboratório-2-ia-aplicada-sem-acoplamento-a-prompts">Laboratório 2: IA aplicada sem acoplamento a prompts</h2><p>Outro tema que quero explorar é IA aplicada em produtos.</p><p>Hoje é relativamente simples adicionar uma chamada para um modelo de IA dentro de uma aplicação. Mas integrar IA de forma responsável exige mais do que montar um prompt e esperar uma resposta.</p><p>Algumas perguntas importantes aparecem rapidamente:</p><p>Como trocar de provedor de IA sem reescrever o produto?<br>Como validar entradas e saídas?<br>Como auditar o contexto usado?<br>Como evitar que regra de negócio fique escondida dentro de prompts?<br>Como lidar com fallback?<br>Como testar fluxos sem depender de chamadas reais?<br>Como separar intenção do usuário da execução técnica?</p><p>Uma abordagem possível é tratar IA como uma capacidade arquitetural.</p><p>Em vez de o produto pensar diretamente em um prompt como:</p><pre><code class="hljs language-text">"Gere um roteiro para um vídeo de campanha" </code></pre><p>ele poderia trabalhar com uma intenção estruturada:</p><pre><code class="hljs language-text">intent: generate_content_briefcontext:  campaign: ...  audience: ...  objective: ...constraints:  platform: instagram_reels  format: short_video  tone: ...output:  type: structured_brief </code></pre><p>Com isso, a aplicação não fica presa a um texto solto ou a um fornecedor específico. Ela passa a operar sobre contratos.</p><p>Esse tipo de abordagem permite criar:</p><ul><li>adapters para diferentes provedores;</li><li>provedores mock para testes;</li><li>fallback entre modelos;</li><li>normalização de resposta;</li><li>logs estruturados;</li><li>métricas de custo e latência;</li><li>validação com schemas.</li></ul><p>Esse é um dos pontos que mais quero destacar nos meus projetos: IA não como mágica, mas como engenharia de software.</p><hr><h2 id="devdenner-content-laboratório-3-produto-e-crescimento">Laboratório 3: produto e crescimento</h2><p>Além da parte de cloud e IA, também quero construir um projeto voltado a produto: um sistema para organizar campanhas, conteúdo, briefs, métricas e aprendizados.</p><p>A ideia é partir de uma dor comum: muita gente produz conteúdo, testa campanhas e usa ferramentas diferentes, mas o histórico fica fragmentado.</p><p>O sistema teria conceitos como:</p><pre><code class="hljs language-text">CampaignContentPlanContentObjectiveContentAiBriefKnowledgeItemStorySequenceMetricLearning</code></pre><p>O objetivo seria responder perguntas como:</p><ul><li>quais campanhas estão em andamento?</li><li>quais conteúdos precisam ser produzidos?</li><li>quais conteúdos estão atrasados?</li><li>qual objetivo cada conteúdo atende?</li><li>quais ideias ainda precisam virar roteiro?</li><li>quais conteúdos foram publicados?</li><li>o que aprendemos com os resultados?</li><li>que tipo de conteúdo vale repetir?</li></ul><p>Esse projeto seria menos sobre cloud pesada e mais sobre modelagem de domínio, produto, UX, TypeScript, Next.js, Prisma e IA aplicada.</p><p>A stack poderia ser:</p><pre><code class="hljs language-text">Next.jsReactTypeScriptPrismaPostgreSQLTailwindshadcn/uiVitest</code></pre><p>Ele serviria como laboratório para demonstrar construção de produto completo, sem depender de infraestrutura complexa.</p><hr><h2 id="devdenner-content-o-que-diferencia-esses-projetos">O que diferencia esses projetos</h2><p>A principal diferença entre esses projetos e um CRUD tradicional não está apenas nas tecnologias usadas.</p><p>Está na intenção.</p><p>Um CRUD normalmente demonstra implementação.</p><p>Esses projetos tentam demonstrar decisões.</p><p>Decisões como:</p><ul><li>por que usar eventos?</li><li>onde persistir estado?</li><li>como versionar contratos?</li><li>o que deve ser síncrono ou assíncrono?</li><li>quais falhas precisam ser previstas?</li><li>como auditar uma decisão?</li><li>como separar domínio de infraestrutura?</li><li>como testar regra de negócio?</li><li>como evitar acoplamento com fornecedor?</li><li>como manter o escopo pequeno sem perder valor técnico?</li></ul><p>Essas decisões são mais próximas do trabalho real de engenharia.</p><hr><h2 id="devdenner-content-documentação-também-faz-parte-do-portfólio">Documentação também faz parte do portfólio</h2><p>Um ponto que quero levar mais a sério é a documentação.</p><p>Não adianta publicar um repositório com código interessante se ninguém entende rapidamente:</p><ul><li>qual problema ele resolve;</li><li>como rodar localmente;</li><li>qual arquitetura foi escolhida;</li><li>quais decisões foram tomadas;</li><li>quais trade-offs existem;</li><li>quais são os próximos passos.</li></ul><p>Por isso, cada projeto deve ter, no mínimo:</p><pre><code class="hljs language-text">README.mddocs/architecture.mddocs/event-catalog.mddocs/decisions/docs/roadmap.md</code></pre><p>Também pretendo usar ADRs para registrar decisões arquiteturais importantes.</p><p>Um ADR simples pode responder:</p><ol><li>qual era o contexto;</li><li>qual decisão foi tomada;</li><li>quais alternativas foram consideradas;</li><li>quais consequências essa decisão traz.</li></ol><p>Isso ajuda a mostrar raciocínio técnico, não apenas código final.</p><hr><h2 id="devdenner-content-cicd-e-qualidade">CI/CD e qualidade</h2><p>Outro ponto importante é automação.</p><p>Mesmo em projeto pessoal, quero incluir pipelines básicos de validação:</p><pre><code class="hljs language-text">linttypechecktestbuildterraform fmtterraform validateterraform plan</code></pre><p>Isso mostra cuidado com qualidade e reprodutibilidade.</p><p>Um fluxo simples de CI com GitHub Actions já é suficiente para demonstrar maturidade técnica.</p><p>A ideia não é criar burocracia, mas deixar claro que o projeto foi pensado como software que pode evoluir.</p><hr><h2 id="devdenner-content-o-que-eu-espero-aprender">O que eu espero aprender</h2><p>Esses projetos também são uma forma de estudo.</p><p>Quero aprofundar alguns temas específicos:</p><ul><li>EventBridge em cenários de integração;</li><li>desenho de catálogos de eventos;</li><li>Terraform modular;</li><li>arquitetura serverless;</li><li>testes de domínio em TypeScript;</li><li>integração segura com IA;</li><li>modelagem de produto;</li><li>separação entre aplicação, domínio e infraestrutura;</li><li>observabilidade mínima;</li><li>documentação técnica para projetos públicos.</li></ul><p>O objetivo não é fingir que um projeto pessoal substitui um ambiente real de produção.</p><p>Não substitui.</p><p>Mas um bom projeto pessoal pode mostrar como uma pessoa pensa, organiza problemas e toma decisões.</p><p>E isso tem muito valor.</p><hr><h2 id="devdenner-content-como-pretendo-publicar">Como pretendo publicar</h2><p>A ideia é manter os projetos públicos no GitHub, com documentação e evolução incremental.</p><p>Também pretendo compartilhar alguns aprendizados em artigos e posts técnicos, mostrando o processo de construção:</p><ul><li>escolha do domínio;</li><li>desenho da arquitetura;</li><li>definição dos eventos;</li><li>criação da infraestrutura;</li><li>testes;</li><li>erros encontrados;</li><li>ajustes de escopo;</li><li>decisões que mudaram no caminho.</li></ul><p>Mais do que postar apenas o resultado final, quero mostrar a construção.</p><p>Porque, na prática, engenharia de software é muito mais sobre processo e tomada de decisão do que sobre uma tela pronta.</p><hr><h2 id="devdenner-content-conclusão">Conclusão</h2><p>Projetos pessoais podem ser mais do que exercícios de CRUD.</p><p>Eles podem ser laboratórios para validar arquitetura, cloud, automação, produto e IA aplicada.</p><p>Não precisam ser enormes.<br>Não precisam tentar resolver o mundo.<br>Mas precisam ter intenção técnica clara.</p><p>No meu caso, quero usar esses projetos para demonstrar como penso sistemas: partindo de domínio, passando por arquitetura, infraestrutura, testes, automação e documentação.</p><p>No fim, o que quero mostrar não é apenas que sei escrever código.</p><p>Quero mostrar que sei construir software com contexto, decisão e propósito.</p></div>]]></content:encoded>
            <author>devDenner</author>
        </item>
    </channel>
</rss>