<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6212976660383299815</id><updated>2026-03-31T10:25:39.834-03:00</updated><category term="dicas"/><category term="Técnico"/><category term="Hardware"/><category term="softwares"/><category term="PMI"/><category term="Programação"/><category term="Compras"/><category term="celular"/><category term="negócios"/><category term="diversão"/><category term="Viagem"/><category term="Android"/><category term="cartões"/><category term="Emprego"/><category term="Notícias"/><category term="Modem-Roteador"/><category term="docker"/><category term="smarthome"/><category term="3d"/><category term="IA"/><category term="flutter"/><category term="flutterflow"/><category term="drone"/><title type='text'>Informática</title><subtitle type='html'>Diversos posts sobre informática, dicas, hardware, software, empregos, viagens e muito mais.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.neoage.com.br/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>560</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-1611048159773497520</id><published>2026-03-26T11:47:00.003-03:00</published><updated>2026-03-26T11:47:38.799-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>Como instalar o 🐳 Docker no Ubuntu — guia passo a passo para iniciantes</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvwjEKgSbbuDNuFsckVZFBSCYugwTxZmY7hh_yWnxRsWz2tOBbwGEC6vs6kzfcIQHg1KLKstFn9i3rVa8_X9OMK4tvDwgLSgvj_7AvyNzumUQiIrzfF8-0QRArhB9yuH1mVt6mGI4RvmJz8g6oqusEhMqlyIPni2QI5yQqNnHxUoqvK4F8jA_joBlpLQAc/s768/docker.png&quot; style=&quot;border-radius: 10px; border: 4px; solid #000; clear: left; display: block; float: left; padding: 10px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;768&quot; data-original-width=&quot;512&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvwjEKgSbbuDNuFsckVZFBSCYugwTxZmY7hh_yWnxRsWz2tOBbwGEC6vs6kzfcIQHg1KLKstFn9i3rVa8_X9OMK4tvDwgLSgvj_7AvyNzumUQiIrzfF8-0QRArhB9yuH1mVt6mGI4RvmJz8g6oqusEhMqlyIPni2QI5yQqNnHxUoqvK4F8jA_joBlpLQAc/s400/docker.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; line-height: 1.7; margin: 0px auto; max-width: 900px;&quot;&gt;

  &lt;h1 style=&quot;color: #0b57d0;&quot;&gt;🐳 Como instalar o Docker no Ubuntu — guia passo a passo para iniciantes&lt;/h1&gt;

  &lt;p style=&quot;font-size: 17px;&quot;&gt;
    Se você está no começo da graduação, talvez no &lt;strong&gt;2º semestre&lt;/strong&gt;, e começou a ouvir falar de
    &lt;strong&gt;Docker&lt;/strong&gt; em aulas, vídeos ou projetos, este guia foi feito para você 😄
  &lt;/p&gt;

  &lt;p&gt;
    Aqui você vai aprender, de forma simples e prática, &lt;strong&gt;como instalar o Docker no Ubuntu&lt;/strong&gt;,
    entender &lt;strong&gt;o que cada etapa faz&lt;/strong&gt; e testar se tudo ficou funcionando corretamente.
  &lt;/p&gt;

  &lt;div style=&quot;background: rgb(238, 246, 255); border-left: 6px solid rgb(11, 87, 208); border-radius: 8px; margin: 20px 0px; padding: 16px;&quot;&gt;
    &lt;strong&gt;📘 O que é Docker?&lt;/strong&gt;&lt;br /&gt;
    Docker é uma ferramenta que permite empacotar e executar aplicações em &lt;strong&gt;containers&lt;/strong&gt;.
    Pense neles como “caixinhas” organizadas que carregam tudo que um programa precisa para funcionar.
  &lt;/div&gt;

  &lt;h2 style=&quot;color: #146c2e;&quot;&gt;🎯 O que vamos fazer&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Atualizar o Ubuntu&lt;/li&gt;
    &lt;li&gt;Instalar os pacotes necessários&lt;/li&gt;
    &lt;li&gt;Adicionar o repositório oficial do Docker&lt;/li&gt;
    &lt;li&gt;Instalar a versão estável mais recente&lt;/li&gt;
    &lt;li&gt;Testar se o Docker está funcionando&lt;/li&gt;
    &lt;li&gt;Permitir usar Docker sem &lt;code&gt;sudo&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #146c2e;&quot;&gt;🧰 Pré-requisitos&lt;/h2&gt;
  &lt;p&gt;Antes de começar, você precisa:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Ter um computador com &lt;strong&gt;Ubuntu&lt;/strong&gt; instalado&lt;/li&gt;
    &lt;li&gt;Ter acesso a um usuário com permissão de administrador&lt;/li&gt;
    &lt;li&gt;Ter internet funcionando&lt;/li&gt;
    &lt;li&gt;Abrir o &lt;strong&gt;Terminal&lt;/strong&gt; do Ubuntu&lt;/li&gt;
  &lt;/ul&gt;

  &lt;div style=&quot;background: rgb(255, 248, 225); border-left: 6px solid rgb(249, 171, 0); border-radius: 8px; margin: 20px 0px; padding: 16px;&quot;&gt;
    &lt;strong&gt;💡 Dica para iniciantes:&lt;/strong&gt;&lt;br /&gt;
    O terminal pode parecer assustador no início, mas ele é uma das ferramentas mais importantes para quem estuda computação.
    Vá copiando e executando um comando de cada vez com calma.
  &lt;/div&gt;

  &lt;h2 style=&quot;color: #0b57d0;&quot;&gt;1️⃣ Atualizar a lista de pacotes do sistema&lt;/h2&gt;
  &lt;p&gt;
    Primeiro, vamos atualizar as informações dos programas disponíveis no Ubuntu e instalar possíveis atualizações.
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;sudo apt update
sudo apt upgrade -y&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;strong&gt;O que isso faz?&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;sudo&lt;/code&gt;: executa o comando com permissão de administrador&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;apt update&lt;/code&gt;: atualiza a lista de pacotes disponíveis&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;apt upgrade -y&lt;/code&gt;: instala atualizações pendentes automaticamente&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #0b57d0;&quot;&gt;2️⃣ Instalar dependências necessárias&lt;/h2&gt;
  &lt;p&gt;
    Agora vamos instalar alguns pacotes que ajudam o Ubuntu a baixar arquivos com segurança e trabalhar com repositórios externos.
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;sudo apt install -y ca-certificates curl gnupg&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;strong&gt;Explicando:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;ca-certificates&lt;/code&gt;: ajuda na validação de certificados digitais 🔐&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;curl&lt;/code&gt;: permite baixar arquivos pela internet 🌐&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;gnupg&lt;/code&gt;: ajuda a verificar assinaturas e chaves de segurança&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #0b57d0;&quot;&gt;3️⃣ Adicionar a chave GPG oficial do Docker&lt;/h2&gt;
  &lt;p&gt;
    Essa etapa garante que os pacotes do Docker sejam reconhecidos como oficiais e confiáveis.
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;strong&gt;O que está acontecendo aqui?&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Criamos uma pasta para armazenar chaves de segurança&lt;/li&gt;
    &lt;li&gt;Baixamos a chave oficial do Docker&lt;/li&gt;
    &lt;li&gt;Salvamos essa chave em formato adequado para o sistema&lt;/li&gt;
    &lt;li&gt;Liberamos permissão de leitura para o arquivo&lt;/li&gt;
  &lt;/ul&gt;

  &lt;div style=&quot;background: rgb(241, 248, 233); border-left: 6px solid rgb(52, 168, 83); border-radius: 8px; margin: 20px 0px; padding: 16px;&quot;&gt;
    &lt;strong&gt;🛡️ Por que isso é importante?&lt;/strong&gt;&lt;br /&gt;
    Porque o Ubuntu precisa ter certeza de que os pacotes vêm realmente do Docker e não de uma fonte falsa.
  &lt;/div&gt;

  &lt;h2 style=&quot;color: #0b57d0;&quot;&gt;4️⃣ Adicionar o repositório oficial do Docker&lt;/h2&gt;
  &lt;p&gt;
    Agora vamos dizer ao Ubuntu onde ele deve procurar os pacotes do Docker.
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;echo \
&quot;deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release &amp;amp;&amp;amp; echo &quot;$VERSION_CODENAME&quot;) stable&quot; | \
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;strong&gt;Em palavras simples:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;arch=$(dpkg --print-architecture)&lt;/code&gt;: identifica a arquitetura do seu computador, como &lt;code&gt;amd64&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;VERSION_CODENAME&lt;/code&gt;: detecta automaticamente a versão do seu Ubuntu&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;stable&lt;/code&gt;: indica que queremos a versão estável do Docker ✅&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #0b57d0;&quot;&gt;5️⃣ Atualizar novamente a lista de pacotes&lt;/h2&gt;
  &lt;p&gt;
    Como adicionamos um novo repositório, precisamos atualizar a lista de pacotes mais uma vez.
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;

  &lt;h2 style=&quot;color: #0b57d0;&quot;&gt;6️⃣ Instalar o Docker&lt;/h2&gt;
  &lt;p&gt;
    Agora sim: vamos instalar o Docker e alguns componentes importantes que vêm junto com ele.
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;strong&gt;O que esses pacotes fazem?&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;docker-ce&lt;/code&gt;: o motor principal do Docker 🐳&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;docker-ce-cli&lt;/code&gt;: comandos que você usa no terminal&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;containerd.io&lt;/code&gt;: componente que ajuda a executar containers&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;docker-buildx-plugin&lt;/code&gt;: facilita builds avançados de imagens&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;docker-compose-plugin&lt;/code&gt;: permite usar &lt;code&gt;docker compose&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #0b57d0;&quot;&gt;7️⃣ Testar se a instalação funcionou&lt;/h2&gt;
  &lt;p&gt;
    O jeito mais clássico de testar o Docker é rodar o container &lt;strong&gt;hello-world&lt;/strong&gt;.
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;sudo docker run hello-world&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    Se tudo estiver certo, o Docker vai baixar uma imagem de teste e mostrar uma mensagem informando que a instalação foi bem-sucedida 🎉
  &lt;/p&gt;

  &lt;h2 style=&quot;color: #0b57d0;&quot;&gt;8️⃣ Ver a versão instalada&lt;/h2&gt;
  &lt;p&gt;
    Se você quiser confirmar a versão instalada no sistema, use:
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;docker --version&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;Ou, para ver mais detalhes:&lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;docker version&lt;/code&gt;&lt;/pre&gt;

  &lt;div style=&quot;background: rgb(238, 246, 255); border-left: 6px solid rgb(66, 133, 244); border-radius: 8px; margin: 20px 0px; padding: 16px;&quot;&gt;
    &lt;strong&gt;📌 Importante:&lt;/strong&gt;&lt;br /&gt;
    Esse método instala a &lt;strong&gt;versão estável mais recente&lt;/strong&gt; disponível no repositório oficial do Docker para sua versão do Ubuntu.
  &lt;/div&gt;

  &lt;h2 style=&quot;color: #0b57d0;&quot;&gt;9️⃣ Usar Docker sem precisar digitar sudo&lt;/h2&gt;
  &lt;p&gt;
    Por padrão, muitos comandos do Docker exigem &lt;code&gt;sudo&lt;/code&gt;. Para facilitar sua vida, você pode adicionar seu usuário ao grupo &lt;code&gt;docker&lt;/code&gt;.
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;sudo usermod -aG docker $USER&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;
    Depois disso, você precisa &lt;strong&gt;sair e entrar novamente na sessão&lt;/strong&gt; do Ubuntu.
    Se quiser tentar aplicar no terminal atual, use:
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;newgrp docker&lt;/code&gt;&lt;/pre&gt;

  &lt;p&gt;Agora teste sem &lt;code&gt;sudo&lt;/code&gt;:&lt;/p&gt;

  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;docker run hello-world&lt;/code&gt;&lt;/pre&gt;

  &lt;h2 style=&quot;color: #146c2e;&quot;&gt;🔎 Comandos úteis para o dia a dia&lt;/h2&gt;

  &lt;h3 style=&quot;color: #c2185b;&quot;&gt;Verificar se o serviço Docker está rodando&lt;/h3&gt;
  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;sudo systemctl status docker&lt;/code&gt;&lt;/pre&gt;

  &lt;h3 style=&quot;color: #c2185b;&quot;&gt;Iniciar o Docker manualmente&lt;/h3&gt;
  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;sudo systemctl start docker&lt;/code&gt;&lt;/pre&gt;

  &lt;h3 style=&quot;color: #c2185b;&quot;&gt;Fazer o Docker iniciar junto com o sistema&lt;/h3&gt;
  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;sudo systemctl enable docker&lt;/code&gt;&lt;/pre&gt;

  &lt;h3 style=&quot;color: #c2185b;&quot;&gt;Verificar o Docker Compose&lt;/h3&gt;
  &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;docker compose version&lt;/code&gt;&lt;/pre&gt;

  &lt;h2 style=&quot;color: #146c2e;&quot;&gt;⚠️ Problemas comuns&lt;/h2&gt;

  &lt;div style=&quot;background: rgb(255, 243, 243); border-left: 6px solid rgb(217, 48, 37); border-radius: 8px; margin: 14px 0px; padding: 16px;&quot;&gt;
    &lt;strong&gt;Erro: permission denied&lt;/strong&gt;&lt;br /&gt;
    Normalmente isso acontece porque o usuário ainda não foi adicionado ao grupo &lt;code&gt;docker&lt;/code&gt;,
    ou porque você ainda não fez logout/login após o comando.
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 243, 243); border-left: 6px solid rgb(217, 48, 37); border-radius: 8px; margin: 14px 0px; padding: 16px;&quot;&gt;
    &lt;strong&gt;Erro por conflito com instalação antiga&lt;/strong&gt;&lt;br /&gt;
    Se você já tentou instalar Docker antes usando outro método, pode ser necessário remover pacotes antigos:
    &lt;pre style=&quot;background: rgb(17, 17, 17); border-radius: 10px; color: #00ff90; margin-top: 12px; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code&gt;sudo apt remove docker docker-engine docker.io containerd runc&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;h2 style=&quot;color: #146c2e;&quot;&gt;📝 Resumo rápido&lt;/h2&gt;
  &lt;ol&gt;
    &lt;li&gt;Atualize o sistema&lt;/li&gt;
    &lt;li&gt;Instale dependências&lt;/li&gt;
    &lt;li&gt;Adicione a chave oficial do Docker&lt;/li&gt;
    &lt;li&gt;Adicione o repositório oficial&lt;/li&gt;
    &lt;li&gt;Atualize os pacotes novamente&lt;/li&gt;
    &lt;li&gt;Instale o Docker&lt;/li&gt;
    &lt;li&gt;Teste com &lt;code&gt;hello-world&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;Opcionalmente, habilite uso sem &lt;code&gt;sudo&lt;/code&gt;&lt;/li&gt;
  &lt;/ol&gt;

  &lt;h2 style=&quot;color: #0b57d0;&quot;&gt;🎓 Conclusão&lt;/h2&gt;
  &lt;p&gt;
    Instalar o Docker no Ubuntu não é tão complicado quanto parece. Quando você entende o papel de cada etapa,
    tudo faz mais sentido e o terminal deixa de ser um bicho de sete cabeças 😄
  &lt;/p&gt;

  &lt;p&gt;
    Para quem está começando na computação, aprender Docker cedo é excelente, porque ele aparece em
    &lt;strong&gt;desenvolvimento de software&lt;/strong&gt;, &lt;strong&gt;devops&lt;/strong&gt;, &lt;strong&gt;banco de dados&lt;/strong&gt;,
    &lt;strong&gt;deploy&lt;/strong&gt; e até em projetos acadêmicos.
  &lt;/p&gt;

  &lt;div style=&quot;background: linear-gradient(135deg, rgb(232, 240, 254), rgb(230, 244, 234)); border-radius: 12px; margin-top: 24px; padding: 18px;&quot;&gt;
    &lt;strong&gt;🚀 Próximo passo:&lt;/strong&gt;&lt;br /&gt;
    Depois de instalar, experimente aprender:
    &lt;ul&gt;
      &lt;li&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code&gt;docker run&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code&gt;docker compose up&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
    Esses comandos já vão te colocar em outro nível.
  &lt;/div&gt;

&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/1611048159773497520/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/03/como-instalar-o-docker-no-ubuntu-guia.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1611048159773497520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1611048159773497520'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/03/como-instalar-o-docker-no-ubuntu-guia.html' title='Como instalar o 🐳 Docker no Ubuntu — guia passo a passo para iniciantes'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvwjEKgSbbuDNuFsckVZFBSCYugwTxZmY7hh_yWnxRsWz2tOBbwGEC6vs6kzfcIQHg1KLKstFn9i3rVa8_X9OMK4tvDwgLSgvj_7AvyNzumUQiIrzfF8-0QRArhB9yuH1mVt6mGI4RvmJz8g6oqusEhMqlyIPni2QI5yQqNnHxUoqvK4F8jA_joBlpLQAc/s72-c/docker.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-4246030104967599829</id><published>2026-03-23T21:34:00.017-03:00</published><updated>2026-03-25T17:36:59.398-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Compras"/><category scheme="http://www.blogger.com/atom/ns#" term="dicas"/><category scheme="http://www.blogger.com/atom/ns#" term="diversão"/><title type='text'>Guia: Contadores Geiger no AliExpress</title><content type='html'>&lt;article style=&quot;background-color: white; border-radius: 10px; border: 1px solid rgb(238, 238, 238); color: #333333; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Geneva, Verdana, sans-serif; line-height: 1.8; margin: auto; max-width: 850px; padding: 25px;&quot;&gt;

    &lt;header style=&quot;margin-bottom: 40px; text-align: center;&quot;&gt;
        &lt;h1 style=&quot;color: #e67e22; font-size: 2.5em; margin-bottom: 10px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwHNrWi9OYgNpsB6PHFi5NnRIss8ntMjnHQzer7cPC8VA4RAAEnbQSfCkIKWT1rBLCf5XA24u3V39ZVTqZxyFF5DN5TnNsJFcFU8O0mz8BXtVgJJQg4pB79j8n92Qyc4KuKH5RfN_lfnV2DmVQkigAIRvjiAUvX1ZiRWaJkHU-Md-JiXK2Wr2QK-uwLwBo/s1456/contadorGeiger.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;Banner informativo mostrando três contadores Geiger coloridos (amarelo, laranja e azul) sobre uma mesa de madeira, testando a radiação de uma banana e uma pedra de granito, com o título &#39;Guia Contador Geiger AliExpress&#39;.&quot; border=&quot;0&quot; data-original-height=&quot;720&quot; data-original-width=&quot;1456&quot; height=&quot;317&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwHNrWi9OYgNpsB6PHFi5NnRIss8ntMjnHQzer7cPC8VA4RAAEnbQSfCkIKWT1rBLCf5XA24u3V39ZVTqZxyFF5DN5TnNsJFcFU8O0mz8BXtVgJJQg4pB79j8n92Qyc4KuKH5RfN_lfnV2DmVQkigAIRvjiAUvX1ZiRWaJkHU-Md-JiXK2Wr2QK-uwLwBo/w640-h317/contadorGeiger.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;☢️ Guia Completo: Contadores Geiger no AliExpress ☢️&lt;/h1&gt;
        &lt;p style=&quot;color: #7f8c8d; font-size: 1.2em;&quot;&gt;Do hobby à segurança: tudo o que você precisa saber antes de medir o invisível!&lt;/p&gt;
    &lt;/header&gt;
&quot;Da banana ao granito: descubra como os contadores Geiger do AliExpress revelam o mundo invisível da radiação ao seu redor! ☢️🔍&quot;
    &lt;section&gt;
        &lt;h2 style=&quot;border-bottom: 2px solid rgb(230, 126, 34); color: #2c3e50;&quot;&gt;🔍 O que é e como funciona um Contador Geiger?&lt;/h2&gt;
        &lt;p&gt;
            Você já se perguntou como algo invisível pode ser detectado? O segredo está no &lt;strong&gt;Tubo Geiger-Müller (GM)&lt;/strong&gt;, o coração desses aparelhos. Imagine um cilindro cheio de gás inerte e um fio metálico no centro sob alta voltagem. Quando uma partícula radioativa atravessa esse tubo, ela &quot;quebra&quot; as moléculas do gás (ionização), criando um pulso elétrico que o aparelho transforma naquele famoso som de &lt;em&gt;&quot;click&quot;&lt;/em&gt; ou em números na tela.
        &lt;/p&gt;
        &lt;p&gt;
            No AliExpress, você encontrará principalmente tubos de &lt;strong&gt;vidro&lt;/strong&gt; (como no GC-01 e GC-02) e tubos de &lt;strong&gt;metal&lt;/strong&gt; (como no GC-03). Os de vidro são sensíveis e baratos, ideais para começar. Já os de metal são mais robustos e sofrem menos interferência eletrônica de aparelhos como roteadores Wi-Fi ou motores, sendo a escolha ideal para quem busca maior durabilidade e estabilidade nas leituras.
        &lt;/p&gt;
    &lt;/section&gt;

    &lt;section&gt;
        &lt;h2 style=&quot;border-bottom: 2px solid rgb(230, 126, 34); color: #2c3e50;&quot;&gt;🧬 Tipos de Radiação e Onde Encontrá-las&lt;/h2&gt;
        &lt;p&gt;Nem toda radiação é igual! Para usar seu aparelho com inteligência, você precisa entender o que está tentando &quot;caçar&quot;:&lt;/p&gt;
        
        &lt;table style=&quot;background-color: #fcfcfc; border-collapse: collapse; margin: 20px 0px; width: 100%;&quot;&gt;
            &lt;thead&gt;
                &lt;tr style=&quot;background-color: #f39c12; color: white;&quot;&gt;
                    &lt;th style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Tipo&lt;/th&gt;
                    &lt;th style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Fontes Comuns 📍&lt;/th&gt;
                    &lt;th style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Poder de Penetração&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;&lt;strong&gt;Alfa (α)&lt;/strong&gt;&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Detectores de fumaça antigos (Amerício-241), Gás Radônio vindo do solo e minerais de Urânio.&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Muito baixo. Uma folha de papel ou a própria pele a bloqueia. Perigosa se inalada.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr style=&quot;background-color: #f9f9f9;&quot;&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;&lt;strong&gt;Beta (β)&lt;/strong&gt;&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Bananas (Potássio-40), sal de cozinha light, relógios antigos com tinta de Rádio-226.&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Médio. Atravessa papel, mas é parada por uma placa de plástico ou papel alumínio.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;&lt;strong&gt;Gama (γ)&lt;/strong&gt;&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Raios cósmicos vindos do espaço, tratamentos de medicina nuclear (Iodo-131) e rochas profundas.&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Altíssimo. Atravessa quase tudo; requer centímetros de chumbo ou metros de concreto para ser barrada.&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr style=&quot;background-color: #f9f9f9;&quot;&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;&lt;strong&gt;Raios-X&lt;/strong&gt;&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Equipamentos médicos, odontológicos, scanners de bagagem e TVs de tubo (CRT) bem antigas.&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Alto. Similar à radiação Gama, mas gerada artificialmente por eletricidade.&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/section&gt;

    &lt;section&gt;
        &lt;h2 style=&quot;border-bottom: 2px solid rgb(230, 126, 34); color: #2c3e50;&quot;&gt;🏠 Por que testar Mármore e Granito?&lt;/h2&gt;
        &lt;p&gt;
            Essa é uma das dúvidas mais comuns! Pedras naturais, especialmente o &lt;strong&gt;granito&lt;/strong&gt;, são formadas no fundo da terra e podem aprisionar elementos radioativos naturais como o urânio e o tório. Ao decair, esses elementos liberam o gás &lt;strong&gt;radônio&lt;/strong&gt;. 
        &lt;/p&gt;
        &lt;p&gt;
            O teste com o contador Geiger serve para verificar se a sua bancada de cozinha ou piso está emitindo níveis de radiação significativamente acima da &quot;radiação de fundo&quot; local. Embora o risco seja geralmente baixo, em ambientes muito fechados e sem ventilação, o acúmulo de radônio pode ser um fator de risco à saúde a longo prazo. Medir sua pedra é uma forma de garantir paz de espírito! 🧘‍♂️
        &lt;/p&gt;
    &lt;/section&gt;

    &lt;section&gt;
        &lt;h2 style=&quot;border-bottom: 2px solid rgb(230, 126, 34); color: #2c3e50;&quot;&gt;🎮 Múltiplos Usos: Hobby, Educação e Segurança&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Hobby e Colecionismo:&lt;/strong&gt; Se você gosta de visitar feiras de antiguidades, o contador Geiger é seu melhor amigo. Você pode encontrar vidros de urânio (que brilham no UV) ou bússolas militares antigas que &quot;gritam&quot; no aparelho.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Educação:&lt;/strong&gt; Não há forma melhor de ensinar física nuclear do que mostrar a radiação ambiente variando conforme a altitude ou ao aproximar de uma simples banana. É ciência pura na palma da mão! 🎓&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Segurança e Preparação:&lt;/strong&gt; Em um mundo incerto, ter um dispositivo capaz de detectar radiação é parte de um kit de emergência consciente. Seja por um acidente industrial próximo ou para monitorar a segurança de materiais de construção, a informação é sua melhor defesa. 🚨&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/section&gt;

    &lt;section&gt;
        &lt;h2 style=&quot;border-bottom: 2px solid rgb(230, 126, 34); color: #2c3e50;&quot;&gt;🛒 O que considerar antes de comprar?&lt;/h2&gt;
        &lt;p&gt;Ao navegar pelo AliExpress, fique atento a estes detalhes para não levar &quot;gato por lebre&quot;:&lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;&lt;strong&gt;Presença do Tubo GM:&lt;/strong&gt; Alguns aparelhos baratos medem apenas ondas eletromagnéticas (EMF) de Wi-Fi e celular. Certifique-se de que o anúncio diz &quot;Nuclear Radiation&quot; e cita o &quot;Geiger-Müller Tube&quot;.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Dose Acumulada:&lt;/strong&gt; Verifique se o aparelho soma a radiação total recebida ao longo do tempo (uSv), e não apenas a taxa instantânea. Isso é vital em incidentes reais.&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Alarmes Configuráveis:&lt;/strong&gt; Procure modelos que permitam ajustar o nível em que o bipe começa a tocar, evitando alarmes falsos em níveis seguros.&lt;/li&gt;
        &lt;/ol&gt;
    &lt;/section&gt;

    &lt;section&gt;
        &lt;h2 style=&quot;border-bottom: 2px solid rgb(230, 126, 34); color: #2c3e50;&quot;&gt;🏆 Comparativo de Modelos FNIRSI no AliExpress e Amazon&lt;/h2&gt;
        &lt;table style=&quot;border-collapse: collapse; text-align: center; width: 100%;&quot;&gt;
            &lt;thead&gt;
                &lt;tr style=&quot;background-color: #2c3e50; color: white;&quot;&gt;
                    &lt;th style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Modelo&lt;/th&gt;
                    &lt;th style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Preço Médio&lt;/th&gt;
                    &lt;th style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Destaque&lt;/th&gt;
                    &lt;th style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Perfil de Usuário&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://amzn.to/4uRQn9g&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;FNIRSI GC-01&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;R$ 290 - R$ 340&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Popular e Barato&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Curiosos e iniciantes&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr style=&quot;background-color: #f9f9f9;&quot;&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;&lt;strong&gt;FNIRSI GC-02&lt;/strong&gt;&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;R$ 350 - R$ 420&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Super Bateria&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Monitoramento contínuo&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://amzn.to/48b1oZt&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;FNIRSI GC-03&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;R$ 380 - R$ 480&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Tubo Metal / Robusto&lt;/td&gt;
                    &lt;td style=&quot;border: 1px solid rgb(221, 221, 221); padding: 12px;&quot;&gt;Segurança e uso externo&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/section&gt;

    &lt;footer style=&quot;background-color: #eeeeee; border-radius: 8px; margin-top: 40px; padding: 20px; text-align: center;&quot;&gt;
        &lt;p&gt;&lt;strong&gt;💡 Veredito:&lt;/strong&gt; Se você quer o melhor hoje, o &lt;strong&gt;GC-03&lt;/strong&gt; é a escolha mais moderna e resistente. Se o orçamento está curto, o &lt;strong&gt;GC-01&lt;/strong&gt; ainda é um excelente ponto de partida! Boa caçada radioativa! ☢️✨&lt;/p&gt;
    &lt;/footer&gt;

  &lt;section style=&quot;background-color: #fde8e8; border-radius: 8px; border: 1px solid rgb(248, 180, 180); margin-top: 20px; padding: 20px;&quot;&gt;
    &lt;h3 style=&quot;color: #c81e1e; margin-top: 0px;&quot;&gt;🛑 Segurança em Primeiro Lugar!&lt;/h3&gt;
    &lt;p style=&quot;margin-bottom: 0px;&quot;&gt;
        Ao testar objetos antigos ou minerais, &lt;strong&gt;nunca tente abrir ou lixar&lt;/strong&gt; o item. A radiação externa é geralmente baixa, mas o perigo real é a &lt;strong&gt;inalação ou ingestão&lt;/strong&gt; de poeira radioativa (partículas Alfa e Beta). Mantenha itens suspeitos em sacos plásticos selados e lave sempre as mãos após os testes! 🧼
    &lt;/p&gt;
&lt;/section&gt;
  
&lt;/article&gt;


&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/4246030104967599829/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/03/guia-completo-contadores-geiger-no.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4246030104967599829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4246030104967599829'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/03/guia-completo-contadores-geiger-no.html' title='Guia: Contadores Geiger no AliExpress'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwHNrWi9OYgNpsB6PHFi5NnRIss8ntMjnHQzer7cPC8VA4RAAEnbQSfCkIKWT1rBLCf5XA24u3V39ZVTqZxyFF5DN5TnNsJFcFU8O0mz8BXtVgJJQg4pB79j8n92Qyc4KuKH5RfN_lfnV2DmVQkigAIRvjiAUvX1ZiRWaJkHU-Md-JiXK2Wr2QK-uwLwBo/s72-w640-h317-c/contadorGeiger.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-8002597500814773650</id><published>2026-03-20T21:09:00.001-03:00</published><updated>2026-03-20T21:19:32.253-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IA"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>Cursor no plano pago: qual modelo de IA escolher em cada situação?</title><content type='html'>&lt;div style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; line-height: 1.7; margin: 0px auto; max-width: 900px;&quot;&gt;

  &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGm4qTKbH17vX0ujyTJJG50usY5gTZq-u-YJdUV3ziSi_5q4PqclEx6zm48l2hyDgk-eoavGEvZQT7FPkNWbwH0Nwga8TSOkrUHCkt4itpQZLLUyoVh-dzC59wtzYlNqsXLjl6unYdIoJo3ZME_86xwDf_MaY86LIw6Wf-swnqmt93-SzaEqhjepKoIvGT/s1536/modelo_cursor.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGm4qTKbH17vX0ujyTJJG50usY5gTZq-u-YJdUV3ziSi_5q4PqclEx6zm48l2hyDgk-eoavGEvZQT7FPkNWbwH0Nwga8TSOkrUHCkt4itpQZLLUyoVh-dzC59wtzYlNqsXLjl6unYdIoJo3ZME_86xwDf_MaY86LIw6Wf-swnqmt93-SzaEqhjepKoIvGT/w640-h426/modelo_cursor.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h1 style=&quot;font-size: 2.2em; margin-bottom: 10px;&quot;&gt;🤖 Cursor no plano pago: qual modelo de IA escolher em cada situação?&lt;/h1&gt;

  &lt;div style=&quot;max-width: 980px; margin: 0 auto; font-family: Arial, Helvetica, sans-serif; color: #1f2937; line-height: 1.75;&quot;&gt;

  &lt;div style=&quot;background: linear-gradient(135deg, #0f172a, #1e3a8a, #0ea5e9); color: #fff; padding: 34px 28px; border-radius: 22px; box-shadow: 0 12px 32px rgba(0,0,0,0.18); margin-bottom: 28px;&quot;&gt;
    &lt;div style=&quot;font-size: 0.95em; opacity: 0.92; margin-bottom: 8px;&quot;&gt;🤖 IA • Cursor • Programação • Produtividade&lt;/div&gt;
    &lt;h1 style=&quot;margin: 0 0 12px 0; font-size: 2.3em; line-height: 1.2;&quot;&gt;Qual IA escolher no Cursor?&lt;/h1&gt;
    &lt;p style=&quot;margin: 0; font-size: 1.08em; max-width: 820px;&quot;&gt;
      Compare &lt;strong&gt;Composer 2 Fast&lt;/strong&gt;, &lt;strong&gt;Composer 1.5&lt;/strong&gt;, &lt;strong&gt;GPT-5.3 Codex&lt;/strong&gt;,
      &lt;strong&gt;GPT-5.4&lt;/strong&gt;, &lt;strong&gt;Sonnet 4.6&lt;/strong&gt; e &lt;strong&gt;Opus 4.6&lt;/strong&gt; e descubra
      qual usar em cada cenário: velocidade, manutenção, arquitetura, debugging, agentes e projetos grandes. 🚀
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 24px;&quot;&gt;
    &lt;div style=&quot;background: #eff6ff; color: #1d4ed8; padding: 10px 14px; border-radius: 999px; font-size: 0.95em; font-weight: bold;&quot;&gt;⚡ Velocidade&lt;/div&gt;
    &lt;div style=&quot;background: #ecfeff; color: #0f766e; padding: 10px 14px; border-radius: 999px; font-size: 0.95em; font-weight: bold;&quot;&gt;🧠 Raciocínio&lt;/div&gt;
    &lt;div style=&quot;background: #f5f3ff; color: #7c3aed; padding: 10px 14px; border-radius: 999px; font-size: 0.95em; font-weight: bold;&quot;&gt;🛠️ Coding agêntico&lt;/div&gt;
    &lt;div style=&quot;background: #fff7ed; color: #c2410c; padding: 10px 14px; border-radius: 999px; font-size: 0.95em; font-weight: bold;&quot;&gt;🐛 Debug&lt;/div&gt;
    &lt;div style=&quot;background: #f0fdf4; color: #15803d; padding: 10px 14px; border-radius: 999px; font-size: 0.95em; font-weight: bold;&quot;&gt;🏗️ Arquitetura&lt;/div&gt;
  &lt;/div&gt;

  &lt;p style=&quot;font-size: 1.06em;&quot;&gt;
    Muita gente escolhe uma IA favorita e tenta usar a mesma para tudo. O problema é que isso quase sempre
    gera mais retrabalho. Na prática, o melhor resultado vem de &lt;strong&gt;usar a IA certa na tarefa certa&lt;/strong&gt;.
  &lt;/p&gt;

  &lt;div style=&quot;background: #f8fafc; border-left: 5px solid #2563eb; padding: 16px 18px; border-radius: 12px; margin: 24px 0;&quot;&gt;
    &lt;strong&gt;📌 Regra de ouro:&lt;/strong&gt; não existe o melhor modelo para tudo.
    Existe o melhor modelo para &lt;strong&gt;cada tipo de uso&lt;/strong&gt;.
  &lt;/div&gt;

  &lt;h2 style=&quot;margin-top: 38px; font-size: 1.8em;&quot;&gt;🧠 As IAs comparadas&lt;/h2&gt;

  &lt;div style=&quot;display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 16px; margin-top: 18px;&quot;&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px; box-shadow: 0 6px 16px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;font-size: 1.1em; font-weight: bold; color: #1d4ed8;&quot;&gt;⚡ Composer 2 Fast&lt;/div&gt;
      &lt;div style=&quot;margin-top: 8px; font-size: 0.96em; color: #475569;&quot;&gt;Perfil: rapidez máxima com foco em coding agêntico no Cursor.&lt;/div&gt;
      &lt;div style=&quot;margin-top: 10px; background: #eff6ff; color: #1d4ed8; display: inline-block; padding: 6px 10px; border-radius: 999px; font-size: 0.88em; font-weight: bold;&quot;&gt;Melhor para produtividade diária&lt;/div&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px; box-shadow: 0 6px 16px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;font-size: 1.1em; font-weight: bold; color: #7c3aed;&quot;&gt;🔁 Composer 1.5&lt;/div&gt;
      &lt;div style=&quot;margin-top: 8px; font-size: 0.96em; color: #475569;&quot;&gt;Perfil: interação leve e rápida para manutenção e evolução incremental.&lt;/div&gt;
      &lt;div style=&quot;margin-top: 10px; background: #f5f3ff; color: #7c3aed; display: inline-block; padding: 6px 10px; border-radius: 999px; font-size: 0.88em; font-weight: bold;&quot;&gt;Melhor para ajustes contínuos&lt;/div&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px; box-shadow: 0 6px 16px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;font-size: 1.1em; font-weight: bold; color: #c2410c;&quot;&gt;🛠️ GPT-5.3 Codex&lt;/div&gt;
      &lt;div style=&quot;margin-top: 8px; font-size: 0.96em; color: #475569;&quot;&gt;Perfil: forte em coding agêntico, tool use, terminal e tarefas longas.&lt;/div&gt;
      &lt;div style=&quot;margin-top: 10px; background: #fff7ed; color: #c2410c; display: inline-block; padding: 6px 10px; border-radius: 999px; font-size: 0.88em; font-weight: bold;&quot;&gt;Melhor para agents de desenvolvimento&lt;/div&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px; box-shadow: 0 6px 16px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;font-size: 1.1em; font-weight: bold; color: #0f766e;&quot;&gt;🧠 GPT-5.4&lt;/div&gt;
      &lt;div style=&quot;margin-top: 8px; font-size: 0.96em; color: #475569;&quot;&gt;Perfil: generalista premium para reasoning, coding e workflows complexos.&lt;/div&gt;
      &lt;div style=&quot;margin-top: 10px; background: #ecfeff; color: #0f766e; display: inline-block; padding: 6px 10px; border-radius: 999px; font-size: 0.88em; font-weight: bold;&quot;&gt;Melhor para tarefas híbridas&lt;/div&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px; box-shadow: 0 6px 16px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;font-size: 1.1em; font-weight: bold; color: #059669;&quot;&gt;⚖️ Sonnet 4.6&lt;/div&gt;
      &lt;div style=&quot;margin-top: 8px; font-size: 0.96em; color: #475569;&quot;&gt;Perfil: excelente equilíbrio entre velocidade, consistência e inteligência.&lt;/div&gt;
      &lt;div style=&quot;margin-top: 10px; background: #f0fdf4; color: #15803d; display: inline-block; padding: 6px 10px; border-radius: 999px; font-size: 0.88em; font-weight: bold;&quot;&gt;Melhor equilíbrio geral&lt;/div&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px; box-shadow: 0 6px 16px rgba(0,0,0,0.05);&quot;&gt;
      &lt;div style=&quot;font-size: 1.1em; font-weight: bold; color: #b91c1c;&quot;&gt;👑 Opus 4.6&lt;/div&gt;
      &lt;div style=&quot;margin-top: 8px; font-size: 0.96em; color: #475569;&quot;&gt;Perfil: máxima capacidade analítica para problemas difíceis e decisões importantes.&lt;/div&gt;
      &lt;div style=&quot;margin-top: 10px; background: #fef2f2; color: #b91c1c; display: inline-block; padding: 6px 10px; border-radius: 999px; font-size: 0.88em; font-weight: bold;&quot;&gt;Melhor para cenários críticos&lt;/div&gt;
    &lt;/div&gt;

  &lt;/div&gt;

  &lt;h2 style=&quot;margin-top: 42px; font-size: 1.8em;&quot;&gt;📊 Comparação direta&lt;/h2&gt;

  &lt;div style=&quot;overflow-x: auto; margin-top: 16px;&quot;&gt;
    &lt;table style=&quot;width: 100%; border-collapse: collapse; font-size: 0.97em; background: #fff; border-radius: 16px; overflow: hidden; box-shadow: 0 8px 20px rgba(0,0,0,0.06);&quot;&gt;
      &lt;thead&gt;
        &lt;tr style=&quot;background: linear-gradient(90deg, #dbeafe, #ecfeff);&quot;&gt;
          &lt;th style=&quot;padding: 14px; border: 1px solid #e5e7eb; text-align: left;&quot;&gt;Modelo&lt;/th&gt;
          &lt;th style=&quot;padding: 14px; border: 1px solid #e5e7eb; text-align: left;&quot;&gt;Destaque principal&lt;/th&gt;
          &lt;th style=&quot;padding: 14px; border: 1px solid #e5e7eb; text-align: left;&quot;&gt;Quando usar&lt;/th&gt;
          &lt;th style=&quot;padding: 14px; border: 1px solid #e5e7eb; text-align: left;&quot;&gt;Resumo rápido&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;&lt;strong&gt;Composer 2 Fast&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Velocidade no editor&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Quando você quer produzir muito e rápido&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;⚡ O “turbo” do dia a dia&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;background: #fafafa;&quot;&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;&lt;strong&gt;Composer 1.5&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Iteração leve&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Mudanças pequenas e manutenção contínua&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;🔁 Simples e ágil&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;&lt;strong&gt;GPT-5.3 Codex&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Agentes de coding&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Tool use, terminal, tarefas longas, automação&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;🛠️ Executor técnico&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;background: #fafafa;&quot;&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;&lt;strong&gt;GPT-5.4&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Raciocínio + coding&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Arquitetura, análise e tarefas mistas&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;🧠 Generalista premium&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;&lt;strong&gt;Sonnet 4.6&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Equilíbrio geral&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Refatorações, debugging, projeto real&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;⚖️ Estável e eficiente&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr style=&quot;background: #fafafa;&quot;&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;&lt;strong&gt;Opus 4.6&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Capacidade máxima&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;Problemas difíceis, revisão pesada, arquitetura crítica&lt;/td&gt;
          &lt;td style=&quot;padding: 14px; border: 1px solid #e5e7eb;&quot;&gt;👑 Topo de linha&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;h2 style=&quot;margin-top: 42px; font-size: 1.8em;&quot;&gt;🎯 Qual usar em cada cenário?&lt;/h2&gt;

  &lt;div style=&quot;display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; margin-top: 16px;&quot;&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px;&quot;&gt;
      &lt;div style=&quot;font-weight: bold; font-size: 1.08em;&quot;&gt;⚡ Quero fazer muito código rápido&lt;/div&gt;
      &lt;p style=&quot;margin: 10px 0 0 0;&quot;&gt;Use &lt;strong&gt;Composer 2 Fast&lt;/strong&gt;.&lt;/p&gt;
      &lt;p style=&quot;margin: 8px 0 0 0; color: #475569;&quot;&gt;É a melhor opção quando velocidade e ritmo de iteração são prioridade.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px;&quot;&gt;
      &lt;div style=&quot;font-weight: bold; font-size: 1.08em;&quot;&gt;🔧 Quero manter e melhorar um projeto aos poucos&lt;/div&gt;
      &lt;p style=&quot;margin: 10px 0 0 0;&quot;&gt;Use &lt;strong&gt;Composer 1.5&lt;/strong&gt; ou &lt;strong&gt;Composer 2 Fast&lt;/strong&gt;.&lt;/p&gt;
      &lt;p style=&quot;margin: 8px 0 0 0; color: #475569;&quot;&gt;Funcionam bem no vai-e-vem da manutenção contínua.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px;&quot;&gt;
      &lt;div style=&quot;font-weight: bold; font-size: 1.08em;&quot;&gt;🛠️ Quero uma IA para agentes, terminal e automação longa&lt;/div&gt;
      &lt;p style=&quot;margin: 10px 0 0 0;&quot;&gt;Use &lt;strong&gt;GPT-5.3 Codex&lt;/strong&gt;.&lt;/p&gt;
      &lt;p style=&quot;margin: 8px 0 0 0; color: #475569;&quot;&gt;Muito forte quando o trabalho envolve várias etapas e ferramentas.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px;&quot;&gt;
      &lt;div style=&quot;font-weight: bold; font-size: 1.08em;&quot;&gt;🧠 Quero pensar arquitetura e tomar decisões técnicas&lt;/div&gt;
      &lt;p style=&quot;margin: 10px 0 0 0;&quot;&gt;Use &lt;strong&gt;GPT-5.4&lt;/strong&gt; ou &lt;strong&gt;Opus 4.6&lt;/strong&gt;.&lt;/p&gt;
      &lt;p style=&quot;margin: 8px 0 0 0; color: #475569;&quot;&gt;São as melhores escolhas para análise profunda e trade-offs.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px;&quot;&gt;
      &lt;div style=&quot;font-weight: bold; font-size: 1.08em;&quot;&gt;🐛 Estou enfrentando um bug difícil&lt;/div&gt;
      &lt;p style=&quot;margin: 10px 0 0 0;&quot;&gt;Use &lt;strong&gt;Sonnet 4.6&lt;/strong&gt; ou &lt;strong&gt;Opus 4.6&lt;/strong&gt;.&lt;/p&gt;
      &lt;p style=&quot;margin: 8px 0 0 0; color: #475569;&quot;&gt;Excelente leitura de contexto, revisão e investigação de erro.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px;&quot;&gt;
      &lt;div style=&quot;font-weight: bold; font-size: 1.08em;&quot;&gt;🏗️ Meu projeto é grande e a codebase é complexa&lt;/div&gt;
      &lt;p style=&quot;margin: 10px 0 0 0;&quot;&gt;Use &lt;strong&gt;Sonnet 4.6&lt;/strong&gt; e, nos casos mais críticos, &lt;strong&gt;Opus 4.6&lt;/strong&gt;.&lt;/p&gt;
      &lt;p style=&quot;margin: 8px 0 0 0; color: #475569;&quot;&gt;Eles tendem a manter mais consistência em mudanças amplas.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px;&quot;&gt;
      &lt;div style=&quot;font-weight: bold; font-size: 1.08em;&quot;&gt;📚 Quero uma IA boa em código + texto + workflow&lt;/div&gt;
      &lt;p style=&quot;margin: 10px 0 0 0;&quot;&gt;Use &lt;strong&gt;GPT-5.4&lt;/strong&gt;.&lt;/p&gt;
      &lt;p style=&quot;margin: 8px 0 0 0; color: #475569;&quot;&gt;É a escolha mais forte para tarefas híbridas e multidisciplinares.&lt;/p&gt;
    &lt;/div&gt;

  &lt;/div&gt;

  &lt;h2 style=&quot;margin-top: 42px; font-size: 1.8em;&quot;&gt;🔥 Workflow profissional recomendado&lt;/h2&gt;

  &lt;div style=&quot;background: linear-gradient(135deg, #f8fafc, #eef2ff); border: 1px solid #dbeafe; border-radius: 18px; padding: 22px; margin-top: 16px;&quot;&gt;
    &lt;ol style=&quot;margin: 0; padding-left: 22px;&quot;&gt;
      &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;&lt;strong&gt;Planejar e decidir:&lt;/strong&gt; &lt;span style=&quot;color: #0f766e;&quot;&gt;&lt;strong&gt;GPT-5.4&lt;/strong&gt;&lt;/span&gt; ou &lt;span style=&quot;color: #b91c1c;&quot;&gt;&lt;strong&gt;Opus 4.6&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
      &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;&lt;strong&gt;Implementar partes críticas:&lt;/strong&gt; &lt;span style=&quot;color: #c2410c;&quot;&gt;&lt;strong&gt;GPT-5.3 Codex&lt;/strong&gt;&lt;/span&gt; ou &lt;span style=&quot;color: #059669;&quot;&gt;&lt;strong&gt;Sonnet 4.6&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
      &lt;li style=&quot;margin-bottom: 10px;&quot;&gt;&lt;strong&gt;Iterar rápido no dia a dia:&lt;/strong&gt; &lt;span style=&quot;color: #1d4ed8;&quot;&gt;&lt;strong&gt;Composer 2 Fast&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Fazer ajustes leves e manutenção contínua:&lt;/strong&gt; &lt;span style=&quot;color: #7c3aed;&quot;&gt;&lt;strong&gt;Composer 1.5&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: #f0fdf4; border-left: 5px solid #16a34a; padding: 16px 18px; border-radius: 12px; margin: 24px 0;&quot;&gt;
    &lt;strong&gt;✅ Resumo executivo:&lt;/strong&gt;&lt;br&gt;
    Use uma IA mais forte para &lt;strong&gt;pensar&lt;/strong&gt;, uma mais estável para &lt;strong&gt;executar&lt;/strong&gt; e uma mais rápida para &lt;strong&gt;iterar&lt;/strong&gt;.
  &lt;/div&gt;

  &lt;h2 style=&quot;margin-top: 42px; font-size: 1.8em;&quot;&gt;🏁 Conclusão&lt;/h2&gt;

  &lt;p&gt;
    Se você quer uma recomendação direta:
  &lt;/p&gt;

  &lt;ul style=&quot;padding-left: 22px;&quot;&gt;
    &lt;li&gt;&lt;strong&gt;⚡ Melhor para velocidade diária:&lt;/strong&gt; Composer 2 Fast&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;🔁 Melhor para manutenção leve:&lt;/strong&gt; Composer 1.5&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;🛠️ Melhor para agents de coding:&lt;/strong&gt; GPT-5.3 Codex&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;🧠 Melhor generalista premium:&lt;/strong&gt; GPT-5.4&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;⚖️ Melhor equilíbrio geral:&lt;/strong&gt; Sonnet 4.6&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;👑 Melhor para cenários difíceis e críticos:&lt;/strong&gt; Opus 4.6&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;
    O segredo não está em escolher “a IA mais famosa”, mas sim em descobrir
    &lt;strong&gt;qual IA combina melhor com a tarefa do momento&lt;/strong&gt;. 🚀
  &lt;/p&gt;

  &lt;hr style=&quot;margin: 36px 0; border: none; border-top: 1px solid #e5e7eb;&quot;&gt;

  &lt;p style=&quot;font-size: 0.95em; color: #64748b;&quot;&gt;
    ✍️ Dica final: em projetos sérios, monte seu próprio fluxo com três camadas:
    &lt;strong&gt;uma IA para pensar, uma para executar e outra para acelerar o trabalho diário&lt;/strong&gt;.
  &lt;/p&gt;

&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/8002597500814773650/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/03/cursor-no-plano-pago-qual-modelo-de-ia.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/8002597500814773650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/8002597500814773650'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/03/cursor-no-plano-pago-qual-modelo-de-ia.html' title='Cursor no plano pago: qual modelo de IA escolher em cada situação?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGm4qTKbH17vX0ujyTJJG50usY5gTZq-u-YJdUV3ziSi_5q4PqclEx6zm48l2hyDgk-eoavGEvZQT7FPkNWbwH0Nwga8TSOkrUHCkt4itpQZLLUyoVh-dzC59wtzYlNqsXLjl6unYdIoJo3ZME_86xwDf_MaY86LIw6Wf-swnqmt93-SzaEqhjepKoIvGT/s72-w640-h426-c/modelo_cursor.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-2887141422871928803</id><published>2026-03-18T21:31:00.003-03:00</published><updated>2026-03-18T21:31:48.760-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dicas"/><title type='text'>Aquecimento solar de piscina: tubos a vácuo, girassol, coletores convencionais e EPDM</title><content type='html'>&lt;div style=&quot;color: #243447; font-family: Arial, Helvetica, sans-serif; font-size: 16px; line-height: 1.75; margin: 0px auto; max-width: 980px;&quot;&gt;

  &lt;div style=&quot;margin: 18px 0px 28px; text-align: center;&quot;&gt;
    &lt;img alt=&quot;Sistemas de aquecimento solar para piscina&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu9jH3Z19OJ8zJhzvlp1uEpKyEsSplow2BRf6OlnJPERdzwg1YmMRAkoFyuAUKMOCw7V1sA5gHSDC97gi1tU2ogwskpZyc7_DgDXXNKIxgVi8UORBfXlY-_da-lLd2TcyYdvBb0Ej1lSwL3vQ34kNnOELulNEJPdKkxcPW0ydQ3EdDWTAJvue2TcG5njiT/s320/aquecedor-solar.png&quot; style=&quot;border-radius: 18px; box-shadow: rgba(0, 0, 0, 0.12) 0px 8px 30px; max-width: 960px; width: 100%;&quot; /&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: linear-gradient(135deg, rgb(255, 248, 232), rgb(238, 248, 255)); border-radius: 20px; border: 1px solid rgb(230, 238, 245); margin-bottom: 28px; padding: 28px;&quot;&gt;
    &lt;h1 style=&quot;color: #17324d; font-size: 34px; margin: 0px 0px 12px;&quot;&gt;Aquecimento solar de piscina: tubos a vácuo, Girassol, coletores convencionais e EPDM&lt;/h1&gt;
    &lt;p style=&quot;color: #35506b; font-size: 18px; margin: 0px 0px 10px;&quot;&gt;&lt;strong&gt;Uma comparação técnica e prática&lt;/strong&gt; sobre eficiência, durabilidade, espaço ocupado, pressão de trabalho e adequação real para piscinas.&lt;/p&gt;
    &lt;p style=&quot;color: #4a6178; margin: 0px;&quot;&gt;Se você está pesquisando a melhor forma de aquecer uma piscina com energia solar, provavelmente já encontrou propostas com &lt;strong&gt;tubos a vácuo&lt;/strong&gt;, sistemas do tipo &lt;strong&gt;Girassol&lt;/strong&gt;, &lt;strong&gt;placas convencionais de polipropileno&lt;/strong&gt; e, talvez, os menos conhecidos coletores de &lt;strong&gt;EPDM&lt;/strong&gt;. Embora todos usem a energia do sol, eles se comportam de formas muito diferentes na prática.&lt;/p&gt;
  &lt;/div&gt;
  &lt;div style=&quot;background: rgb(255, 255, 255); border-radius: 18px; border: 1px solid rgb(230, 238, 245); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;1) O ponto principal: aquecer piscina é diferente de aquecer água para banho&lt;/h2&gt;
    &lt;p&gt;Parece um detalhe, mas esse é o fator que mais gera confusão. Um sistema para banho ou boiler normalmente trabalha com &lt;strong&gt;baixa vazão e temperatura alta&lt;/strong&gt;. Já uma piscina exige o contrário: &lt;strong&gt;alta vazão e pequena elevação de temperatura&lt;/strong&gt;.&lt;/p&gt;
    &lt;p&gt;Na prática, a piscina costuma operar em faixas como &lt;strong&gt;28 °C a 32 °C&lt;/strong&gt;. Ou seja: o objetivo não é ferver água, e sim transferir bastante calor para um grande volume de água, continuamente, com perdas constantes por vento, convecção e principalmente &lt;strong&gt;evaporação&lt;/strong&gt;.&lt;/p&gt;
    &lt;p&gt;Por isso, o melhor sistema não é necessariamente o que atinge a maior temperatura possível, mas sim o que trabalha melhor no &lt;strong&gt;regime térmico e hidráulico típico de piscina&lt;/strong&gt;.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 255, 255); border-radius: 18px; border: 1px solid rgb(230, 238, 245); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;2) Tubos a vácuo: alta eficiência por área, mas com ressalvas importantes&lt;/h2&gt;
    &lt;p&gt;Os tubos a vácuo são muito eficientes porque o vácuo reduz drasticamente as perdas por convecção e condução. Isso faz com que eles tenham excelente desempenho em dias frios, com vento e até sob radiação solar menos intensa.&lt;/p&gt;
    &lt;p&gt;Em termos de &lt;strong&gt;captação de energia por metro quadrado&lt;/strong&gt;, os tubos a vácuo normalmente vencem. Eles são compactos e conseguem entregar muito calor em pouca área de telhado, o que é uma vantagem real em projetos com pouco espaço disponível.&lt;/p&gt;

    &lt;div style=&quot;background: rgb(247, 251, 255); border-left: 5px solid rgb(74, 163, 223); border-radius: 10px; margin: 18px 0px; padding: 14px 16px;&quot;&gt;
      &lt;p style=&quot;margin: 0px;&quot;&gt;&lt;strong&gt;Vantagens dos tubos a vácuo&lt;/strong&gt;&lt;br /&gt;
      • Alta eficiência térmica por área&lt;br /&gt;
      • Melhor desempenho em clima frio e vento&lt;br /&gt;
      • Menor espaço ocupado no telhado&lt;br /&gt;
      • Boa opção quando a área disponível é limitada&lt;/p&gt;
    &lt;/div&gt;

    &lt;p&gt;Mas existe um ponto crucial: &lt;strong&gt;tubos a vácuo foram concebidos principalmente para sistemas de água quente de maior temperatura&lt;/strong&gt;, não para o regime típico de piscina. Em outras palavras, eles são excelentes para aquecer muita energia em água com menor vazão, mas a piscina pede justamente o oposto: mais vazão e menor salto térmico.&lt;/p&gt;
    &lt;p&gt;Isso significa que, mesmo sendo muito eficientes no papel, eles podem ficar &lt;strong&gt;menos adequados na prática&lt;/strong&gt; quando usados diretamente em sistemas de piscina sem uma adaptação hidráulica correta.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 255, 255); border-radius: 18px; border: 1px solid rgb(230, 238, 245); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;3) O problema da pressão de trabalho dos tubos a vácuo&lt;/h2&gt;
    &lt;p&gt;Um detalhe técnico muito importante é a limitação de pressão. Você observou que alguns sistemas de tubos a vácuo indicam trabalho até &lt;strong&gt;5 mca&lt;/strong&gt; (metros de coluna d’água), o que equivale a aproximadamente &lt;strong&gt;0,5 bar&lt;/strong&gt;.&lt;/p&gt;
    &lt;p&gt;Esse valor é &lt;strong&gt;baixo para sistemas típicos de piscina&lt;/strong&gt;. A hidráulica de uma piscina com bomba, filtro, tubulações, curvas, registros e eventuais desníveis frequentemente trabalha em faixas superiores a isso.&lt;/p&gt;

    &lt;div style=&quot;background: rgb(255, 248, 242); border-left: 5px solid rgb(255, 159, 67); border-radius: 10px; margin: 18px 0px; padding: 14px 16px;&quot;&gt;
      &lt;p style=&quot;margin: 0px;&quot;&gt;&lt;strong&gt;Consequências práticas&lt;/strong&gt;&lt;br /&gt;
      • risco de danificar conexões e o manifold&lt;br /&gt;
      • maior chance de vazamentos&lt;br /&gt;
      • necessidade de by-pass e controle fino de vazão&lt;br /&gt;
      • em muitos casos, necessidade de bomba dedicada&lt;/p&gt;
    &lt;/div&gt;

    &lt;p&gt;Ou seja: mesmo que se desconsidere completamente o risco de granizo ou quebra do vidro, o limite de pressão ainda continua sendo uma das maiores barreiras para usar tubos a vácuo diretamente numa piscina.&lt;/p&gt;
    &lt;p&gt;Tecnicamente, a forma mais correta de usar tubos a vácuo com piscina é com &lt;strong&gt;circuito separado, controle hidráulico apropriado e, idealmente, bomba dedicada&lt;/strong&gt;. Sem isso, o sistema fica menos confiável e mais complexo.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 255, 255); border-radius: 18px; border: 1px solid rgb(230, 238, 245); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;4) E se ignorarmos totalmente o problema do granizo?&lt;/h2&gt;
    &lt;p&gt;Se tirarmos da análise a fragilidade do vidro e o risco de granizo, os tubos a vácuo passam a ser ainda mais interessantes. Nesse cenário, eles se destacam principalmente em três pontos:&lt;/p&gt;
    &lt;p&gt;&lt;strong&gt;eficiência por área&lt;/strong&gt;, &lt;strong&gt;desempenho em dias frios&lt;/strong&gt; e &lt;strong&gt;compactação do sistema&lt;/strong&gt;.&lt;/p&gt;
    &lt;p&gt;Então, em um projeto onde o telhado é pequeno, o inverno é relevante e existe liberdade para uma instalação hidráulica mais sofisticada, os tubos a vácuo podem sim fazer sentido.&lt;/p&gt;
    &lt;p&gt;Mesmo assim, ainda permanecem algumas diferenças fundamentais em relação aos coletores específicos para piscina:&lt;/p&gt;
    &lt;ul style=&quot;padding-left: 22px;&quot;&gt;
      &lt;li&gt;trabalham melhor com menor vazão;&lt;/li&gt;
      &lt;li&gt;exigem mais cuidado com pressão e controle;&lt;/li&gt;
      &lt;li&gt;não costumam oferecer a mesma robustez e simplicidade de longo prazo de soluções feitas especificamente para piscina.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;Em resumo: &lt;strong&gt;sem granizo, eles melhoram bastante de posição&lt;/strong&gt;, mas ainda não se tornam automaticamente a melhor opção universal para piscina.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 255, 255); border-radius: 18px; border: 1px solid rgb(230, 238, 245); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;5) Sistema Girassol: solução compacta e mais natural para piscina&lt;/h2&gt;
    &lt;p&gt;Os sistemas do tipo Girassol usam um arranjo helicoidal ou espiralado em material polimérico, pensado para trabalhar justamente com a lógica das piscinas: &lt;strong&gt;alta vazão e temperatura moderada&lt;/strong&gt;.&lt;/p&gt;
    &lt;p&gt;Na prática, ele costuma ser visto como uma solução intermediária entre os coletores convencionais e os tubos a vácuo. Não chega ao nível de eficiência ótica dos tubos, mas tende a aproveitar melhor o regime hidráulico da piscina e ocupar &lt;strong&gt;menos espaço&lt;/strong&gt; do que placas convencionais de polipropileno.&lt;/p&gt;

    &lt;div style=&quot;background: rgb(247, 251, 255); border-left: 5px solid rgb(46, 204, 113); border-radius: 10px; margin: 18px 0px; padding: 14px 16px;&quot;&gt;
      &lt;p style=&quot;margin: 0px;&quot;&gt;&lt;strong&gt;Pontos fortes do Girassol&lt;/strong&gt;&lt;br /&gt;
      • Boa relação entre área ocupada e calor entregue&lt;br /&gt;
      • Melhor compatibilidade com a hidráulica da piscina&lt;br /&gt;
      • Instalação relativamente simples&lt;br /&gt;
      • Menor área necessária do que placas tradicionais&lt;/p&gt;
    &lt;/div&gt;

    &lt;p&gt;Também é uma alternativa interessante quando se busca reduzir área ocupada sem entrar na complexidade dos tubos a vácuo. Em muitos casos residenciais, o Girassol aparece como uma opção de compromisso entre &lt;strong&gt;desempenho, robustez e compactação&lt;/strong&gt;.&lt;/p&gt;
    &lt;p&gt;Quanto à durabilidade, ele costuma ficar numa faixa intermediária: normalmente superior à fragilidade típica dos tubos, porém sem alcançar o patamar de vida útil dos melhores sistemas de EPDM.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 255, 255); border-radius: 18px; border: 1px solid rgb(230, 238, 245); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;6) Coletores convencionais de polipropileno: os mais comuns e mais simples&lt;/h2&gt;
    &lt;p&gt;Os coletores solares convencionais para piscina, feitos em placas de polipropileno com canais paralelos, são os sistemas mais tradicionais no Brasil. A razão é simples: eles funcionam bem, são relativamente econômicos, robustos e casam naturalmente com a hidráulica típica da piscina.&lt;/p&gt;
    &lt;p&gt;Seu ponto fraco principal é o espaço. Para aquecer o mesmo volume de água, eles geralmente precisam de &lt;strong&gt;mais área de telhado&lt;/strong&gt; do que tubos a vácuo ou sistemas mais compactos.&lt;/p&gt;

    &lt;div style=&quot;background: rgb(249, 251, 247); border-left: 5px solid rgb(124, 179, 66); border-radius: 10px; margin: 18px 0px; padding: 14px 16px;&quot;&gt;
      &lt;p style=&quot;margin: 0px;&quot;&gt;&lt;strong&gt;Por que eles continuam tão populares?&lt;/strong&gt;&lt;br /&gt;
      • Boa durabilidade&lt;br /&gt;
      • Baixa manutenção&lt;br /&gt;
      • Custo normalmente mais acessível&lt;br /&gt;
      • Fácil compatibilidade com bombas e filtros de piscina&lt;/p&gt;
    &lt;/div&gt;

    &lt;p&gt;Na prática, para quem tem área disponível no telhado e quer uma solução consolidada, simples e com pouca dor de cabeça, os coletores convencionais continuam sendo uma escolha muito racional.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 255, 255); border-radius: 18px; border: 1px solid rgb(230, 238, 245); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;7) EPDM americano: por que tanta gente no exterior considera essa a solução premium para piscina?&lt;/h2&gt;
    &lt;p&gt;O EPDM é uma borracha sintética de alta resistência, muito usada em aplicações externas severas, justamente por suportar bem radiação UV, ozônio, envelhecimento, cloro e variações térmicas. Em aquecimento solar de piscina, ele aparece geralmente na forma de mantas ou painéis flexíveis com múltiplos canais.&lt;/p&gt;
    &lt;p&gt;Nos Estados Unidos e em outros mercados maduros, o EPDM é amplamente usado em piscinas residenciais grandes, condomínios, clubes, hotéis e resorts. O motivo principal é a combinação rara de &lt;strong&gt;durabilidade, tolerância mecânica e compatibilidade hidráulica&lt;/strong&gt;.&lt;/p&gt;

    &lt;div style=&quot;background: rgb(247, 251, 255); border-left: 5px solid rgb(31, 120, 209); border-radius: 10px; margin: 18px 0px; padding: 14px 16px;&quot;&gt;
      &lt;p style=&quot;margin: 0px;&quot;&gt;&lt;strong&gt;Destaques do EPDM&lt;/strong&gt;&lt;br /&gt;
      • excelente vida útil&lt;br /&gt;
      • alta resistência a UV, cloro e envelhecimento&lt;br /&gt;
      • boa tolerância a variações térmicas e impactos&lt;br /&gt;
      • baixa manutenção&lt;br /&gt;
      • tecnologia muito adequada para piscina&lt;/p&gt;
    &lt;/div&gt;

    &lt;p&gt;Se os tubos a vácuo brilham pela eficiência por metro quadrado, o EPDM se destaca por outra métrica: &lt;strong&gt;confiabilidade de longo prazo&lt;/strong&gt;. É exatamente por isso que muitos projetistas consideram o EPDM uma das melhores soluções do mundo para aquecimento solar de piscina, especialmente quando a prioridade é robustez.&lt;/p&gt;
    &lt;p&gt;O motivo de ele ainda não ser tão comum no Brasil está mais ligado a mercado, distribuição, custo de importação e tradição local do que a limitação técnica da tecnologia em si.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 255, 255); border-radius: 18px; border: 1px solid rgb(230, 238, 245); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;8) Comparação direta: eficiência, espaço, durabilidade e adequação real&lt;/h2&gt;

    &lt;div style=&quot;margin-top: 16px; overflow-x: auto;&quot;&gt;
      &lt;table style=&quot;border-collapse: collapse; font-size: 15px; min-width: 760px; width: 100%;&quot;&gt;
        &lt;thead&gt;
          &lt;tr style=&quot;background: rgb(23, 50, 77); color: white;&quot;&gt;
            &lt;th style=&quot;border: 1px solid rgb(215, 226, 236); padding: 14px; text-align: left;&quot;&gt;Tecnologia&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid rgb(215, 226, 236); padding: 14px; text-align: left;&quot;&gt;Eficiência por área&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid rgb(215, 226, 236); padding: 14px; text-align: left;&quot;&gt;Espaço ocupado&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid rgb(215, 226, 236); padding: 14px; text-align: left;&quot;&gt;Durabilidade&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid rgb(215, 226, 236); padding: 14px; text-align: left;&quot;&gt;Compatibilidade com piscina&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid rgb(215, 226, 236); padding: 14px; text-align: left;&quot;&gt;Complexidade&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
          &lt;tr style=&quot;background: rgb(255, 255, 255);&quot;&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;&lt;strong&gt;Tubos a vácuo&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Muito alta&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Muito pequeno&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Média&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Média, exige adaptação&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Alta&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr style=&quot;background: rgb(248, 251, 254);&quot;&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;&lt;strong&gt;Girassol&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Boa&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Pequeno a médio&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Média a boa&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Boa&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Média&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr style=&quot;background: rgb(255, 255, 255);&quot;&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;&lt;strong&gt;Placa convencional&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Média&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Grande&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Boa a muito boa&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Muito boa&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Baixa&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr style=&quot;background: rgb(248, 251, 254);&quot;&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;&lt;strong&gt;EPDM&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Boa a muito boa&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Médio&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Muito alta&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Excelente&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Baixa a média&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;

    &lt;p style=&quot;margin-top: 18px;&quot;&gt;Em uma leitura direta, dá para resumir assim:&lt;/p&gt;
    &lt;p&gt;&lt;strong&gt;tubos a vácuo&lt;/strong&gt; são os mais compactos e eficientes por área;&lt;br /&gt;
    &lt;strong&gt;placas convencionais&lt;/strong&gt; são as mais simples e econômicas;&lt;br /&gt;
    &lt;strong&gt;Girassol&lt;/strong&gt; tenta equilibrar compactação e compatibilidade com piscina;&lt;br /&gt;
    &lt;strong&gt;EPDM&lt;/strong&gt; é o campeão em robustez e longevidade.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 255, 255); border-radius: 18px; border: 1px solid rgb(230, 238, 245); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;9) Eficiência por espaço ocupado: quem aquece mais ocupando menos área?&lt;/h2&gt;
    &lt;p&gt;Se a comparação for puramente pelo critério &lt;strong&gt;energia captada por metro quadrado&lt;/strong&gt;, os tubos a vácuo normalmente vencem. Em telhados pequenos, isso faz diferença real.&lt;/p&gt;
    &lt;p&gt;Depois tendem a aparecer sistemas compactos como o Girassol. Os coletores convencionais e muitos arranjos em EPDM normalmente precisam de mais área para entregar a mesma energia total.&lt;/p&gt;
    &lt;p&gt;Mas esse resultado precisa ser lido com cautela: &lt;strong&gt;mais eficiência por área não significa, sozinho, melhor sistema global&lt;/strong&gt;. É preciso considerar:&lt;/p&gt;
    &lt;ul style=&quot;padding-left: 22px;&quot;&gt;
      &lt;li&gt;pressão de trabalho suportada;&lt;/li&gt;
      &lt;li&gt;vazão ideal do coletor;&lt;/li&gt;
      &lt;li&gt;durabilidade real do material;&lt;/li&gt;
      &lt;li&gt;facilidade de integração com a hidráulica da piscina;&lt;/li&gt;
      &lt;li&gt;manutenção ao longo dos anos.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;É justamente nesse conjunto de fatores que o EPDM e as placas tradicionais continuam muito fortes, mesmo ocupando mais área.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 255, 255); border-radius: 18px; border: 1px solid rgb(230, 238, 245); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;10) Durabilidade: qual tende a durar mais?&lt;/h2&gt;
    &lt;p&gt;Considerando a experiência prática e a lógica dos materiais, a tendência geral é a seguinte:&lt;/p&gt;

    &lt;div style=&quot;margin-top: 16px; overflow-x: auto;&quot;&gt;
      &lt;table style=&quot;border-collapse: collapse; font-size: 15px; min-width: 680px; width: 100%;&quot;&gt;
        &lt;thead&gt;
          &lt;tr style=&quot;background: rgb(23, 50, 77); color: white;&quot;&gt;
            &lt;th style=&quot;border: 1px solid rgb(215, 226, 236); padding: 14px; text-align: left;&quot;&gt;Tecnologia&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid rgb(215, 226, 236); padding: 14px; text-align: left;&quot;&gt;Tendência de durabilidade&lt;/th&gt;
            &lt;th style=&quot;border: 1px solid rgb(215, 226, 236); padding: 14px; text-align: left;&quot;&gt;Observação prática&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
          &lt;tr style=&quot;background: rgb(255, 255, 255);&quot;&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;&lt;strong&gt;EPDM&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Muito alta&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Excelente resistência a UV, cloro e envelhecimento&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr style=&quot;background: rgb(248, 251, 254);&quot;&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;&lt;strong&gt;Placa convencional&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Alta&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Boa robustez e manutenção simples&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr style=&quot;background: rgb(255, 255, 255);&quot;&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;&lt;strong&gt;Girassol&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Média a boa&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Depende muito da qualidade do polímero e da instalação&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr style=&quot;background: rgb(248, 251, 254);&quot;&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;&lt;strong&gt;Tubos a vácuo&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Média&lt;/td&gt;
            &lt;td style=&quot;border: 1px solid rgb(215, 226, 236); padding: 12px;&quot;&gt;Mesmo sem granizo, ainda exige mais cuidado hidráulico e estrutural&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;

    &lt;p style=&quot;margin-top: 18px;&quot;&gt;Se a prioridade for “instalar e ficar muitos anos com baixa dor de cabeça”, o EPDM costuma levar vantagem. As placas convencionais também são muito fortes nesse quesito. Já os tubos a vácuo brilham mais pelo desempenho por área do que pela robustez global.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 255, 255); border-radius: 18px; border: 1px solid rgb(230, 238, 245); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;11) A capa térmica muda tudo&lt;/h2&gt;
    &lt;p&gt;Existe um aspecto que costuma ser mais importante do que o tipo de coletor: &lt;strong&gt;a perda de calor por evaporação&lt;/strong&gt;. Em muitas piscinas, ela representa a maior parcela das perdas térmicas totais.&lt;/p&gt;
    &lt;p&gt;Por isso, qualquer análise séria de aquecimento solar deveria considerar também o uso de &lt;strong&gt;capa térmica&lt;/strong&gt;. Em muitos casos, ela reduz drasticamente as perdas e melhora tanto o desempenho que muda completamente o dimensionamento necessário.&lt;/p&gt;
    &lt;p&gt;Na prática, um sistema bem dimensionado com capa térmica pode exigir muito menos área coletora do que um sistema excelente sem proteção contra evaporação.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: linear-gradient(135deg, rgb(238, 248, 255), rgb(246, 255, 243)); border-radius: 18px; border: 1px solid rgb(219, 234, 244); margin-bottom: 24px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: #17324d; margin-top: 0px;&quot;&gt;12) Conclusão prática: qual escolher?&lt;/h2&gt;
    &lt;p&gt;&lt;strong&gt;Se a prioridade é ocupar o menor espaço possível no telhado&lt;/strong&gt;, os &lt;strong&gt;tubos a vácuo&lt;/strong&gt; são muito fortes, principalmente se o projeto for tecnicamente bem resolvido e a hidráulica for adaptada corretamente.&lt;/p&gt;
    &lt;p&gt;&lt;strong&gt;Se a prioridade é simplicidade, custo e integração natural com a piscina&lt;/strong&gt;, os &lt;strong&gt;coletores convencionais&lt;/strong&gt; seguem sendo uma escolha muito racional.&lt;/p&gt;
    &lt;p&gt;&lt;strong&gt;Se a ideia é ter uma solução mais compacta que placas tradicionais, mas sem a complexidade típica dos tubos&lt;/strong&gt;, o &lt;strong&gt;Girassol&lt;/strong&gt; merece atenção.&lt;/p&gt;
    &lt;p&gt;&lt;strong&gt;Se a prioridade é durabilidade, robustez e confiabilidade de longo prazo&lt;/strong&gt;, o &lt;strong&gt;EPDM&lt;/strong&gt; é provavelmente uma das alternativas mais interessantes tecnicamente, mesmo ainda sendo pouco difundido no Brasil.&lt;/p&gt;
    &lt;p style=&quot;margin-bottom: 0px;&quot;&gt;&lt;strong&gt;Em poucas palavras:&lt;/strong&gt; para piscina, a melhor escolha não depende apenas da eficiência do coletor, mas do conjunto &lt;strong&gt;área disponível + hidráulica + pressão + manutenção + vida útil + perdas térmicas da piscina&lt;/strong&gt;.&lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(23, 50, 77); border-radius: 18px; color: white; margin-bottom: 10px; padding: 24px;&quot;&gt;
    &lt;h2 style=&quot;color: white; margin-top: 0px;&quot;&gt;Resumo final&lt;/h2&gt;
    &lt;p style=&quot;margin: 0px 0px 10px;&quot;&gt;&lt;strong&gt;Tubos a vácuo:&lt;/strong&gt; mais eficientes por área, mas mais exigentes em pressão, vazão e projeto.&lt;/p&gt;
    &lt;p style=&quot;margin: 0px 0px 10px;&quot;&gt;&lt;strong&gt;Girassol:&lt;/strong&gt; bom equilíbrio entre compactação e adequação para piscina.&lt;/p&gt;
    &lt;p style=&quot;margin: 0px 0px 10px;&quot;&gt;&lt;strong&gt;Placas convencionais:&lt;/strong&gt; solução clássica, robusta, simples e econômica.&lt;/p&gt;
    &lt;p style=&quot;margin: 0px;&quot;&gt;&lt;strong&gt;EPDM:&lt;/strong&gt; excelente durabilidade e uma das soluções mais sólidas do mundo para piscina.&lt;/p&gt;
  &lt;/div&gt;

&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/2887141422871928803/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/03/aquecimento-solar-de-piscina-tubos.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/2887141422871928803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/2887141422871928803'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/03/aquecimento-solar-de-piscina-tubos.html' title='Aquecimento solar de piscina: tubos a vácuo, girassol, coletores convencionais e EPDM'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu9jH3Z19OJ8zJhzvlp1uEpKyEsSplow2BRf6OlnJPERdzwg1YmMRAkoFyuAUKMOCw7V1sA5gHSDC97gi1tU2ogwskpZyc7_DgDXXNKIxgVi8UORBfXlY-_da-lLd2TcyYdvBb0Ej1lSwL3vQ34kNnOELulNEJPdKkxcPW0ydQ3EdDWTAJvue2TcG5njiT/s72-c/aquecedor-solar.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-4154938143250006938</id><published>2026-03-18T11:27:00.003-03:00</published><updated>2026-03-18T21:01:28.674-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="3d"/><category scheme="http://www.blogger.com/atom/ns#" term="dicas"/><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>Comparação realista de engines de física para simulação e renderização</title><content type='html'>    &lt;div style=&quot;background: linear-gradient(rgb(8, 17, 32) 0%, rgb(11, 18, 32) 100%); color: #e5e7eb; font-family: Arial, Helvetica, sans-serif; line-height: 1.7; margin: 0px; padding: 0px;&quot;&gt;

  &lt;div style=&quot;margin: 0px auto; max-width: 980px; padding: 24px;&quot;&gt;

    &lt;!--HERO--&gt;
    &lt;div style=&quot;background: linear-gradient(135deg, rgb(15, 23, 42) 0%, rgb(17, 24, 39) 55%, rgb(23, 37, 84) 100%); border-radius: 22px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.28) 0px 18px 45px; margin-bottom: 24px; overflow: hidden;&quot;&gt;
      
      &lt;!--Se quiser usar sua imagem no topo, troque o src abaixo--&gt;
      &lt;!--Exemplo: faça upload no Blogger e substitua o link--&gt;
      &lt;img alt=&quot;Imagem de capa sobre simulação física&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSPVwIGm3I4V4qgtrFOzUROOdDluv6Z9iWIOWbByoHL3c6m41A__48RMIiHylh4egqkKj3CG-6ookSl3l9yTKJO9v9abjt97iuExhn0kMru2qLVvkjdPm9Dd3WCZ_FCv5x965sUjRjS-QZo1UtoaaZvRsZO3sSC0KcVr9Nnjbpq3FEnZ30kZ6SKP5g-yYZ/s320/engine_fisica.png&quot; style=&quot;border-bottom: 1px solid rgb(31, 41, 55); display: block; height: auto; max-height: 420px; object-fit: cover; width: 100%;&quot; /&gt;

      &lt;div style=&quot;padding: 28px 26px 30px;&quot;&gt;&lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #93c5fd; display: inline-block; font-size: 12px; font-weight: bold; letter-spacing: 0.3px; margin-bottom: 14px; padding: 6px 12px;&quot;&gt;SIMULAÇÃO FÍSICA
        &lt;/div&gt;

        &lt;h1 style=&quot;color: #f8fafc; font-size: 34px; line-height: 1.2; margin: 0px 0px 10px;&quot;&gt;
          Engines de Física 2D e 3D: comparação realista para simular, visualizar e escolher melhor
        &lt;/h1&gt;

        &lt;p style=&quot;color: #cbd5e1; font-size: 17px; margin: 0px;&quot;&gt;
          Um guia prático e elegante sobre bibliotecas e engines gratuitas para &lt;strong&gt;Python&lt;/strong&gt; e outras linguagens, com foco especial em um cenário real:
          &lt;strong&gt;uma esfera de aço arremessada contra uma parede de ferro em um ambiente com gravidade zero&lt;/strong&gt;.
        &lt;/p&gt;

        &lt;div style=&quot;margin-top: 18px;&quot;&gt;
          &lt;span style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #e2e8f0; display: inline-block; font-size: 13px; margin: 0px 8px 8px 0px; padding: 7px 12px;&quot;&gt;🐍 Python&lt;/span&gt;
          &lt;span style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #e2e8f0; display: inline-block; font-size: 13px; margin: 0px 8px 8px 0px; padding: 7px 12px;&quot;&gt;🎮 Tempo real&lt;/span&gt;
          &lt;span style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #e2e8f0; display: inline-block; font-size: 13px; margin: 0px 8px 8px 0px; padding: 7px 12px;&quot;&gt;🎬 Render&lt;/span&gt;
          &lt;span style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #e2e8f0; display: inline-block; font-size: 13px; margin: 0px 8px 8px 0px; padding: 7px 12px;&quot;&gt;🆓 Gratuito&lt;/span&gt;
          &lt;span style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #e2e8f0; display: inline-block; font-size: 13px; margin: 0px 8px 8px 0px; padding: 7px 12px;&quot;&gt;⚙️ Comparação prática&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!--ÍNDICE--&gt;
    &lt;div style=&quot;background: rgb(15, 23, 42); border-radius: 18px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.18) 0px 10px 30px; margin-bottom: 24px; padding: 20px 22px;&quot;&gt;
      &lt;h2 style=&quot;color: #f8fafc; font-size: 22px; margin: 0px 0px 12px;&quot;&gt;📚 Visão geral do conteúdo&lt;/h2&gt;
      &lt;div style=&quot;color: #cbd5e1;&quot;&gt;
        &lt;div style=&quot;margin: 6px 0px;&quot;&gt;1. O que é um motor de física&lt;/div&gt;
        &lt;div style=&quot;margin: 6px 0px;&quot;&gt;2. Bibliotecas para Python&lt;/div&gt;
        &lt;div style=&quot;margin: 6px 0px;&quot;&gt;3. Engines relevantes em outras linguagens&lt;/div&gt;
        &lt;div style=&quot;margin: 6px 0px;&quot;&gt;4. Comparação realista entre as principais opções&lt;/div&gt;
        &lt;div style=&quot;margin: 6px 0px;&quot;&gt;5. Melhor escolha para simular e renderizar&lt;/div&gt;
        &lt;div style=&quot;margin: 6px 0px;&quot;&gt;6. Cenário da esfera de aço contra parede de ferro&lt;/div&gt;
        &lt;div style=&quot;margin: 6px 0px;&quot;&gt;7. Limitações importantes&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!--O QUE É--&gt;
    &lt;div style=&quot;background: rgb(17, 24, 39); border-radius: 18px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 30px; margin-bottom: 22px; padding: 24px;&quot;&gt;
      &lt;h2 style=&quot;color: #f8fafc; font-size: 28px; margin: 0px 0px 12px;&quot;&gt;🧠 O que é um motor de física?&lt;/h2&gt;
      &lt;p style=&quot;color: #dbeafe; margin: 0px 0px 12px;&quot;&gt;
        Um &lt;strong&gt;physics engine&lt;/strong&gt; é um sistema de software responsável por simular o comportamento físico de objetos em um ambiente virtual.
      &lt;/p&gt;
      &lt;p style=&quot;color: #cbd5e1; margin: 0px 0px 14px;&quot;&gt;
        Na prática, ele calcula e atualiza elementos como:
      &lt;/p&gt;
      &lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 10px;&quot;&gt;
        &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #e5e7eb; padding: 8px 12px;&quot;&gt;🌍 Gravidade&lt;/div&gt;
        &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #e5e7eb; padding: 8px 12px;&quot;&gt;💥 Colisões&lt;/div&gt;
        &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #e5e7eb; padding: 8px 12px;&quot;&gt;🧱 Corpos rígidos&lt;/div&gt;
        &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #e5e7eb; padding: 8px 12px;&quot;&gt;🪢 Juntas e articulações&lt;/div&gt;
        &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #e5e7eb; padding: 8px 12px;&quot;&gt;🛞 Atrito e restituição&lt;/div&gt;
        &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 999px; border: 1px solid rgb(51, 65, 85); color: #e5e7eb; padding: 8px 12px;&quot;&gt;🌊 Fluidos e partículas&lt;/div&gt;
      &lt;/div&gt;

      &lt;div style=&quot;background: linear-gradient(rgba(56, 189, 248, 0.1), rgba(56, 189, 248, 0.04)); border-radius: 14px; border: 1px solid rgba(56, 189, 248, 0.24); color: #dbeafe; margin-top: 18px; padding: 14px 16px;&quot;&gt;
        Esses motores são usados em &lt;strong&gt;jogos&lt;/strong&gt;, &lt;strong&gt;robótica&lt;/strong&gt;, &lt;strong&gt;inteligência artificial&lt;/strong&gt;, &lt;strong&gt;simulações científicas&lt;/strong&gt;, &lt;strong&gt;educação&lt;/strong&gt; e &lt;strong&gt;visualização técnica&lt;/strong&gt;.
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!--PYTHON--&gt;
    &lt;div style=&quot;background: rgb(17, 24, 39); border-radius: 18px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 30px; margin-bottom: 22px; padding: 24px;&quot;&gt;
      &lt;h2 style=&quot;color: #f8fafc; font-size: 28px; margin: 0px 0px 16px;&quot;&gt;🐍 Principais motores de física para Python&lt;/h2&gt;

      &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 16px; border: 1px solid rgb(51, 65, 85); margin-bottom: 14px; padding: 18px;&quot;&gt;
        &lt;h3 style=&quot;color: #86efac; font-size: 22px; margin: 0px 0px 8px;&quot;&gt;🔥 PyBullet&lt;/h3&gt;
        &lt;p style=&quot;color: #cbd5e1; margin: 0px 0px 10px;&quot;&gt;
          É uma das opções mais práticas para simulação 3D em Python. Permite abrir uma interface gráfica, definir gravidade, colisões, massas e materiais com pouca configuração.
        &lt;/p&gt;
        &lt;ul style=&quot;color: #cbd5e1; margin: 0px 0px 0px 18px; padding: 0px;&quot;&gt;
          &lt;li&gt;✅ 3D&lt;/li&gt;
          &lt;li&gt;✅ Bom para prototipação rápida&lt;/li&gt;
          &lt;li&gt;✅ Muito usado em robótica e IA&lt;/li&gt;
          &lt;li&gt;✅ Fácil de começar&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;

      &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 16px; border: 1px solid rgb(51, 65, 85); margin-bottom: 14px; padding: 18px;&quot;&gt;
        &lt;h3 style=&quot;color: #93c5fd; font-size: 22px; margin: 0px 0px 8px;&quot;&gt;🧠 MuJoCo&lt;/h3&gt;
        &lt;p style=&quot;color: #cbd5e1; margin: 0px 0px 10px;&quot;&gt;
          É uma engine muito forte em precisão física, especialmente em sistemas articulados, biomecânica, robótica e pesquisa científica.
        &lt;/p&gt;
        &lt;ul style=&quot;color: #cbd5e1; margin: 0px 0px 0px 18px; padding: 0px;&quot;&gt;
          &lt;li&gt;✅ 3D avançado&lt;/li&gt;
          &lt;li&gt;✅ Alta precisão&lt;/li&gt;
          &lt;li&gt;✅ Excelente para pesquisa e controle&lt;/li&gt;
          &lt;li&gt;⚠️ Curva de aprendizado maior&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;

      &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 16px; border: 1px solid rgb(51, 65, 85); margin-bottom: 14px; padding: 18px;&quot;&gt;
        &lt;h3 style=&quot;color: #fcd34d; font-size: 22px; margin: 0px 0px 8px;&quot;&gt;🎮 Pymunk / PyBox2D&lt;/h3&gt;
        &lt;p style=&quot;color: #cbd5e1; margin: 0px 0px 10px;&quot;&gt;
          Ótimos para simulações 2D. São leves, rápidos e muito úteis em jogos, visualizações simples e protótipos bidimensionais.
        &lt;/p&gt;
        &lt;ul style=&quot;color: #cbd5e1; margin: 0px 0px 0px 18px; padding: 0px;&quot;&gt;
          &lt;li&gt;✅ 2D&lt;/li&gt;
          &lt;li&gt;✅ Muito leves&lt;/li&gt;
          &lt;li&gt;✅ Fáceis de usar&lt;/li&gt;
          &lt;li&gt;⚠️ Não servem para o seu caso 3D&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;

      &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 16px; border: 1px solid rgb(51, 65, 85); padding: 18px;&quot;&gt;
        &lt;h3 style=&quot;color: #f9a8d4; font-size: 22px; margin: 0px 0px 8px;&quot;&gt;📘 VPython / PySPH&lt;/h3&gt;
        &lt;p style=&quot;color: #cbd5e1; margin: 0px;&quot;&gt;
          O VPython é excelente para ensino e visualização simples. O PySPH é mais voltado para partículas e fluidos. Ambos são interessantes, mas não seriam minha primeira escolha para a colisão 3D metálica do seu cenário.
        &lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!--OUTRAS LINGUAGENS--&gt;
    &lt;div style=&quot;background: rgb(17, 24, 39); border-radius: 18px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 30px; margin-bottom: 22px; padding: 24px;&quot;&gt;
      &lt;h2 style=&quot;color: #f8fafc; font-size: 28px; margin: 0px 0px 16px;&quot;&gt;🌍 Engines importantes em outras linguagens&lt;/h2&gt;

      &lt;div style=&quot;overflow-x: auto;&quot;&gt;
        &lt;table style=&quot;background: rgb(11, 18, 32); border-collapse: collapse; border-radius: 14px; border: 1px solid rgb(51, 65, 85); overflow: hidden; width: 100%;&quot;&gt;
          &lt;tbody&gt;&lt;tr style=&quot;background: rgb(15, 23, 42);&quot;&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Engine&lt;/th&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Linguagem base&lt;/th&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Perfil&lt;/th&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Observação&lt;/th&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #e5e7eb; padding: 12px 10px;&quot;&gt;&lt;strong&gt;Bullet&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;C++&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;3D geral&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;Base do PyBullet&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #e5e7eb; padding: 12px 10px;&quot;&gt;&lt;strong&gt;Box2D&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;C&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;2D&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;Muito usado em jogos&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #e5e7eb; padding: 12px 10px;&quot;&gt;&lt;strong&gt;PhysX&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;C++&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;Jogos AAA&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;Muito forte em engines de jogo&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #e5e7eb; padding: 12px 10px;&quot;&gt;&lt;strong&gt;Rapier&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;Rust&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;2D/3D moderno&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;Boa opção moderna&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;color: #e5e7eb; padding: 12px 10px;&quot;&gt;&lt;strong&gt;BEPU / dyn4j&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;color: #cbd5e1; padding: 12px 10px;&quot;&gt;C# / Java&lt;/td&gt;
            &lt;td style=&quot;color: #cbd5e1; padding: 12px 10px;&quot;&gt;Física geral&lt;/td&gt;
            &lt;td style=&quot;color: #cbd5e1; padding: 12px 10px;&quot;&gt;Alternativas válidas fora do ecossistema Python&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;&lt;/table&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!--ENGINES COMPLETAS--&gt;
    &lt;div style=&quot;background: rgb(17, 24, 39); border-radius: 18px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 30px; margin-bottom: 22px; padding: 24px;&quot;&gt;
      &lt;h2 style=&quot;color: #f8fafc; font-size: 28px; margin: 0px 0px 16px;&quot;&gt;🎬 Engines completas: física + renderização&lt;/h2&gt;
      &lt;p style=&quot;color: #cbd5e1; margin: 0px 0px 14px;&quot;&gt;
        Quando a necessidade não é apenas simular, mas também &lt;strong&gt;ver a cena funcionando com qualidade visual&lt;/strong&gt;, entram em jogo engines e ferramentas mais completas.
      &lt;/p&gt;

      &lt;div style=&quot;display: grid; gap: 14px; grid-template-columns: repeat(auto-fit,minmax(240px,1fr));&quot;&gt;
        &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 16px; border: 1px solid rgb(51, 65, 85); padding: 18px;&quot;&gt;
          &lt;h3 style=&quot;color: #f8fafc; margin: 0px 0px 8px;&quot;&gt;🎬 Blender&lt;/h3&gt;
          &lt;p style=&quot;color: #cbd5e1; margin: 0px;&quot;&gt;
            Melhor escolha para visual bonito, materiais metálicos, iluminação, câmera e render final em vídeo ou imagem.
          &lt;/p&gt;
        &lt;/div&gt;
        &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 16px; border: 1px solid rgb(51, 65, 85); padding: 18px;&quot;&gt;
          &lt;h3 style=&quot;color: #f8fafc; margin: 0px 0px 8px;&quot;&gt;🕹️ Godot&lt;/h3&gt;
          &lt;p style=&quot;color: #cbd5e1; margin: 0px;&quot;&gt;
            Excelente para criar um simulador interativo em tempo real, alterando parâmetros ao vivo como velocidade, massa e direção.
          &lt;/p&gt;
        &lt;/div&gt;
        &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 16px; border: 1px solid rgb(51, 65, 85); padding: 18px;&quot;&gt;
          &lt;h3 style=&quot;color: #f8fafc; margin: 0px 0px 8px;&quot;&gt;🎮 Unity / Unreal&lt;/h3&gt;
          &lt;p style=&quot;color: #cbd5e1; margin: 0px;&quot;&gt;
            São fortíssimos em jogos e visual, mas geralmente menos práticos para um fluxo simples e direto em Python.
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!--COMPARAÇÃO REALISTA--&gt;
    &lt;div style=&quot;background: rgb(17, 24, 39); border-radius: 18px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 30px; margin-bottom: 22px; padding: 24px;&quot;&gt;
      &lt;h2 style=&quot;color: #f8fafc; font-size: 28px; margin: 0px 0px 16px;&quot;&gt;📊 Comparação realista entre as principais soluções&lt;/h2&gt;

      &lt;div style=&quot;overflow-x: auto;&quot;&gt;
        &lt;table style=&quot;background: rgb(11, 18, 32); border-collapse: collapse; border-radius: 14px; border: 1px solid rgb(51, 65, 85); overflow: hidden; width: 100%;&quot;&gt;
          &lt;tbody&gt;&lt;tr style=&quot;background: rgb(15, 23, 42);&quot;&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Engine&lt;/th&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Realismo físico&lt;/th&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Velocidade&lt;/th&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Facilidade&lt;/th&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Melhor uso&lt;/th&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #e5e7eb; padding: 12px 10px;&quot;&gt;&lt;strong&gt;MuJoCo&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #86efac; padding: 12px 10px;&quot;&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #86efac; padding: 12px 10px;&quot;&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #fde68a; padding: 12px 10px;&quot;&gt;⭐⭐&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;Pesquisa, robótica, IA&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #e5e7eb; padding: 12px 10px;&quot;&gt;&lt;strong&gt;PyBullet&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #93c5fd; padding: 12px 10px;&quot;&gt;⭐⭐⭐⭐&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #93c5fd; padding: 12px 10px;&quot;&gt;⭐⭐⭐⭐&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #86efac; padding: 12px 10px;&quot;&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;Prototipação rápida em Python&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #e5e7eb; padding: 12px 10px;&quot;&gt;&lt;strong&gt;PhysX&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #93c5fd; padding: 12px 10px;&quot;&gt;⭐⭐⭐⭐&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #86efac; padding: 12px 10px;&quot;&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #fde68a; padding: 12px 10px;&quot;&gt;⭐⭐⭐&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #cbd5e1; padding: 12px 10px;&quot;&gt;Jogos e engines visuais&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;color: #e5e7eb; padding: 12px 10px;&quot;&gt;&lt;strong&gt;Box2D&lt;/strong&gt;&lt;/td&gt;
            &lt;td style=&quot;color: #fde68a; padding: 12px 10px;&quot;&gt;⭐⭐⭐&lt;/td&gt;
            &lt;td style=&quot;color: #86efac; padding: 12px 10px;&quot;&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
            &lt;td style=&quot;color: #86efac; padding: 12px 10px;&quot;&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
            &lt;td style=&quot;color: #cbd5e1; padding: 12px 10px;&quot;&gt;Jogos e simulações 2D&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;&lt;/table&gt;
      &lt;/div&gt;

      &lt;div style=&quot;background: linear-gradient(rgba(34, 197, 94, 0.1), rgba(34, 197, 94, 0.04)); border-radius: 14px; border: 1px solid rgba(34, 197, 94, 0.22); color: #dcfce7; margin-top: 16px; padding: 14px 16px;&quot;&gt;
        &lt;strong&gt;Resumo honesto:&lt;/strong&gt; se a prioridade for &lt;strong&gt;realismo científico&lt;/strong&gt;, MuJoCo tende a ficar na frente. Se a prioridade for &lt;strong&gt;produtividade e rapidez em Python&lt;/strong&gt;, PyBullet costuma ser a opção mais prática.
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!--CENÁRIO ESPECÍFICO--&gt;
    &lt;div style=&quot;background: rgb(17, 24, 39); border-radius: 18px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 30px; margin-bottom: 22px; padding: 24px;&quot;&gt;
      &lt;h2 style=&quot;color: #f8fafc; font-size: 28px; margin: 0px 0px 16px;&quot;&gt;⚙️ Aplicando ao cenário real: esfera de aço contra parede de ferro em gravidade zero&lt;/h2&gt;

      &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 16px; border: 1px solid rgb(51, 65, 85); margin-bottom: 14px; padding: 18px;&quot;&gt;
        &lt;h3 style=&quot;color: #f8fafc; margin: 0px 0px 8px;&quot;&gt;🌌 O ambiente&lt;/h3&gt;
        &lt;p style=&quot;color: #cbd5e1; margin: 0px;&quot;&gt;
          Como a gravidade é zero, a esfera não “cai”. O movimento será dominado pela &lt;strong&gt;velocidade inicial&lt;/strong&gt; e pela física da colisão.
        &lt;/p&gt;
      &lt;/div&gt;

      &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 16px; border: 1px solid rgb(51, 65, 85); margin-bottom: 14px; padding: 18px;&quot;&gt;
        &lt;h3 style=&quot;color: #f8fafc; margin: 0px 0px 8px;&quot;&gt;💥 O impacto&lt;/h3&gt;
        &lt;p style=&quot;color: #cbd5e1; margin: 0px;&quot;&gt;
          O que mais influencia o resultado visual e dinâmico é o conjunto de parâmetros como:
        &lt;/p&gt;
        &lt;ul style=&quot;color: #cbd5e1; margin: 10px 0px 0px 18px; padding: 0px;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;velocidade inicial&lt;/strong&gt; da esfera&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;massa&lt;/strong&gt; e raio&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;restituição&lt;/strong&gt; (quanto ela quica)&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;atrito&lt;/strong&gt; e atrito de rolamento&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;espessura e rigidez&lt;/strong&gt; da parede no modelo usado&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;

      &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 16px; border: 1px solid rgb(51, 65, 85); padding: 18px;&quot;&gt;
        &lt;h3 style=&quot;color: #f8fafc; margin: 0px 0px 8px;&quot;&gt;🎯 Melhor escolha para esse caso&lt;/h3&gt;
        &lt;p style=&quot;color: #cbd5e1; margin: 0px 0px 10px;&quot;&gt;
          Para &lt;strong&gt;simular e ver funcionando&lt;/strong&gt;, minha recomendação prática é:
        &lt;/p&gt;
        &lt;div style=&quot;display: grid; gap: 12px; grid-template-columns: repeat(auto-fit,minmax(230px,1fr));&quot;&gt;
          &lt;div style=&quot;background: rgb(8, 17, 32); border-radius: 14px; border: 1px solid rgb(51, 65, 85); padding: 14px;&quot;&gt;
            &lt;div style=&quot;font-size: 20px; margin-bottom: 6px;&quot;&gt;🐍&lt;/div&gt;
            &lt;div style=&quot;color: #86efac; font-weight: bold; margin-bottom: 4px;&quot;&gt;PyBullet&lt;/div&gt;
            &lt;div style=&quot;color: #cbd5e1; font-size: 15px;&quot;&gt;Melhor para testar rápido em Python e abrir uma GUI 3D simples.&lt;/div&gt;
          &lt;/div&gt;
          &lt;div style=&quot;background: rgb(8, 17, 32); border-radius: 14px; border: 1px solid rgb(51, 65, 85); padding: 14px;&quot;&gt;
            &lt;div style=&quot;font-size: 20px; margin-bottom: 6px;&quot;&gt;🎬&lt;/div&gt;
            &lt;div style=&quot;color: #93c5fd; font-weight: bold; margin-bottom: 4px;&quot;&gt;Blender&lt;/div&gt;
            &lt;div style=&quot;color: #cbd5e1; font-size: 15px;&quot;&gt;Melhor para materiais metálicos, luz, câmera e render visual bonito.&lt;/div&gt;
          &lt;/div&gt;
          &lt;div style=&quot;background: rgb(8, 17, 32); border-radius: 14px; border: 1px solid rgb(51, 65, 85); padding: 14px;&quot;&gt;
            &lt;div style=&quot;font-size: 20px; margin-bottom: 6px;&quot;&gt;🕹️&lt;/div&gt;
            &lt;div style=&quot;color: #fcd34d; font-weight: bold; margin-bottom: 4px;&quot;&gt;Godot&lt;/div&gt;
            &lt;div style=&quot;color: #cbd5e1; font-size: 15px;&quot;&gt;Melhor se a ideia for virar um simulador interativo ou mini app.&lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!--TABELA PRÁTICA--&gt;
    &lt;div style=&quot;background: rgb(17, 24, 39); border-radius: 18px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 30px; margin-bottom: 22px; padding: 24px;&quot;&gt;
      &lt;h2 style=&quot;color: #f8fafc; font-size: 28px; margin: 0px 0px 16px;&quot;&gt;📈 Comparação prática para esse cenário específico&lt;/h2&gt;

      &lt;div style=&quot;overflow-x: auto;&quot;&gt;
        &lt;table style=&quot;background: rgb(11, 18, 32); border-collapse: collapse; border-radius: 14px; border: 1px solid rgb(51, 65, 85); overflow: hidden; width: 100%;&quot;&gt;
          &lt;tbody&gt;&lt;tr style=&quot;background: rgb(15, 23, 42);&quot;&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Critério&lt;/th&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;PyBullet&lt;/th&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Blender&lt;/th&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;Godot&lt;/th&gt;
            &lt;th style=&quot;border-bottom: 1px solid rgb(51, 65, 85); color: #dbeafe; padding: 12px 10px; text-align: left;&quot;&gt;MuJoCo&lt;/th&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #e5e7eb; padding: 12px 10px;&quot;&gt;Ver funcionando rapidamente&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #86efac; padding: 12px 10px;&quot;&gt;9/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #fde68a; padding: 12px 10px;&quot;&gt;6/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #93c5fd; padding: 12px 10px;&quot;&gt;8/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #fde68a; padding: 12px 10px;&quot;&gt;5/10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #e5e7eb; padding: 12px 10px;&quot;&gt;Qualidade visual final&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #fca5a5; padding: 12px 10px;&quot;&gt;4/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #86efac; padding: 12px 10px;&quot;&gt;10/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #93c5fd; padding: 12px 10px;&quot;&gt;7/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #fca5a5; padding: 12px 10px;&quot;&gt;3/10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #e5e7eb; padding: 12px 10px;&quot;&gt;Controle via Python&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #86efac; padding: 12px 10px;&quot;&gt;10/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #93c5fd; padding: 12px 10px;&quot;&gt;6/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #fde68a; padding: 12px 10px;&quot;&gt;4/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #93c5fd; padding: 12px 10px;&quot;&gt;8/10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #e5e7eb; padding: 12px 10px;&quot;&gt;Interatividade&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #fde68a; padding: 12px 10px;&quot;&gt;6/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #fca5a5; padding: 12px 10px;&quot;&gt;3/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #86efac; padding: 12px 10px;&quot;&gt;10/10&lt;/td&gt;
            &lt;td style=&quot;border-bottom: 1px solid rgb(36, 50, 68); color: #fca5a5; padding: 12px 10px;&quot;&gt;4/10&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td style=&quot;color: #e5e7eb; padding: 12px 10px;&quot;&gt;Curva de aprendizado&lt;/td&gt;
            &lt;td style=&quot;color: #93c5fd; padding: 12px 10px;&quot;&gt;8/10&lt;/td&gt;
            &lt;td style=&quot;color: #93c5fd; padding: 12px 10px;&quot;&gt;6/10&lt;/td&gt;
            &lt;td style=&quot;color: #93c5fd; padding: 12px 10px;&quot;&gt;7/10&lt;/td&gt;
            &lt;td style=&quot;color: #fde68a; padding: 12px 10px;&quot;&gt;4/10&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;&lt;/table&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!--RECOMENDAÇÃO FINAL--&gt;
    &lt;div style=&quot;background: rgb(17, 24, 39); border-radius: 18px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 30px; margin-bottom: 22px; padding: 24px;&quot;&gt;
      &lt;h2 style=&quot;color: #f8fafc; font-size: 28px; margin: 0px 0px 16px;&quot;&gt;⭐ Recomendação final&lt;/h2&gt;

      &lt;div style=&quot;background: linear-gradient(rgba(34, 197, 94, 0.1), rgba(34, 197, 94, 0.04)); border-radius: 16px; border: 1px solid rgba(34, 197, 94, 0.22); margin-bottom: 14px; padding: 18px;&quot;&gt;
        &lt;h3 style=&quot;color: #dcfce7; font-size: 21px; margin: 0px 0px 8px;&quot;&gt;Fluxo mais inteligente para esse tipo de projeto&lt;/h3&gt;
        &lt;p style=&quot;color: #dcfce7; margin: 0px;&quot;&gt;
          &lt;strong&gt;PyBullet&lt;/strong&gt; para validar a física e experimentar o impacto rapidamente.&lt;br /&gt;
          &lt;strong&gt;Blender&lt;/strong&gt; para refazer a cena com materiais metálicos, luz e render mais bonito.&lt;br /&gt;
          &lt;strong&gt;Godot&lt;/strong&gt; se a meta for criar uma experiência interativa ou um mini simulador.
        &lt;/p&gt;
      &lt;/div&gt;

      &lt;div style=&quot;background: rgb(11, 18, 32); border-radius: 16px; border: 1px solid rgb(51, 65, 85); padding: 18px;&quot;&gt;
        &lt;h3 style=&quot;color: #f8fafc; font-size: 21px; margin: 0px 0px 8px;&quot;&gt;Escolha direta por objetivo&lt;/h3&gt;
        &lt;ul style=&quot;color: #cbd5e1; margin: 0px 0px 0px 18px; padding: 0px;&quot;&gt;
          &lt;li&gt;&lt;strong&gt;Quero ver funcionando agora em Python:&lt;/strong&gt; PyBullet&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Quero um render bonito para post, vídeo ou apresentação:&lt;/strong&gt; Blender&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Quero um app interativo:&lt;/strong&gt; Godot&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Quero máxima precisão científica:&lt;/strong&gt; MuJoCo&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!--LIMITAÇÕES--&gt;
    &lt;div style=&quot;background: rgb(17, 24, 39); border-radius: 18px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 30px; margin-bottom: 22px; padding: 24px;&quot;&gt;
      &lt;h2 style=&quot;color: #f8fafc; font-size: 28px; margin: 0px 0px 16px;&quot;&gt;⚠️ Limitações importantes&lt;/h2&gt;

      &lt;p style=&quot;color: #cbd5e1; margin: 0px 0px 12px;&quot;&gt;
        Um ponto crucial: motores de física comuns usados em jogos e protótipos geralmente trabalham com &lt;strong&gt;corpos rígidos&lt;/strong&gt;.
      &lt;/p&gt;

      &lt;ul style=&quot;color: #cbd5e1; margin: 0px 0px 14px 18px; padding: 0px;&quot;&gt;
        &lt;li&gt;Isso significa que eles simulam muito bem a colisão, o movimento, o quique e a resposta dinâmica.&lt;/li&gt;
        &lt;li&gt;Mas não costumam simular com fidelidade a &lt;strong&gt;deformação real do metal&lt;/strong&gt;.&lt;/li&gt;
        &lt;li&gt;Também não são a melhor ferramenta para &lt;strong&gt;amassamento preciso&lt;/strong&gt;, &lt;strong&gt;fratura&lt;/strong&gt; ou &lt;strong&gt;ruptura estrutural&lt;/strong&gt;.&lt;/li&gt;
      &lt;/ul&gt;

      &lt;div style=&quot;background: linear-gradient(rgba(239, 68, 68, 0.1), rgba(239, 68, 68, 0.04)); border-radius: 14px; border: 1px solid rgba(239, 68, 68, 0.22); color: #fee2e2; padding: 14px 16px;&quot;&gt;
        Para esse nível de fidelidade, o caminho normalmente passa por &lt;strong&gt;FEM&lt;/strong&gt; (método dos elementos finitos) e ferramentas de engenharia mais especializadas.
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;!--FECHAMENTO--&gt;
    &lt;div style=&quot;background: linear-gradient(135deg, rgb(15, 23, 42) 0%, rgb(17, 24, 39) 100%); border-radius: 18px; border: 1px solid rgb(31, 41, 55); box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 30px; padding: 22px;&quot;&gt;
      &lt;h2 style=&quot;color: #f8fafc; font-size: 26px; margin: 0px 0px 10px;&quot;&gt;✅ Conclusão&lt;/h2&gt;
      &lt;p style=&quot;color: #cbd5e1; margin: 0px;&quot;&gt;
        Existe, sim, um ótimo ecossistema gratuito para simulação física em Python e em outras linguagens. Para a maioria dos casos práticos, a decisão não é “qual engine é melhor no papel”, mas sim &lt;strong&gt;qual engine entrega melhor o que você precisa ver&lt;/strong&gt;.
      &lt;/p&gt;
      &lt;p style=&quot;color: #e2e8f0; margin: 12px 0px 0px;&quot;&gt;
        Para o cenário da esfera de aço contra uma parede em gravidade zero, a resposta mais honesta é:
        &lt;strong&gt;PyBullet para testar, Blender para impressionar, Godot para interagir e MuJoCo para pesquisar.&lt;/strong&gt;
      &lt;/p&gt;
    &lt;/div&gt;

  &lt;/div&gt;
&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/4154938143250006938/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/03/comparacao-realista-de-engines-de.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4154938143250006938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4154938143250006938'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/03/comparacao-realista-de-engines-de.html' title='Comparação realista de engines de física para simulação e renderização'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSPVwIGm3I4V4qgtrFOzUROOdDluv6Z9iWIOWbByoHL3c6m41A__48RMIiHylh4egqkKj3CG-6ookSl3l9yTKJO9v9abjt97iuExhn0kMru2qLVvkjdPm9Dd3WCZ_FCv5x965sUjRjS-QZo1UtoaaZvRsZO3sSC0KcVr9Nnjbpq3FEnZ30kZ6SKP5g-yYZ/s72-c/engine_fisica.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-4897372769113593286</id><published>2026-02-25T20:34:00.019-03:00</published><updated>2026-02-25T20:34:00.120-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dicas"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><title type='text'>ChartDB: diagramas de banco (ERD) em segundos</title><content type='html'>&lt;!--Post para Blogger (cole no modo &quot;HTML&quot;)--&gt;
&lt;div style=&quot;font-family: Arial, sans-serif; line-height: 1.6; margin: 0px auto; max-width: 900px;&quot;&gt;
  &lt;h1 style=&quot;color: #1f2937; margin-bottom: 6px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTXzRBqeY2uVovlGW8c309E0PZS5FMv3Ugfg3V-z5AqL7yAvGxC20NfXSU8PxQ81cprBOMlWxIMMGX49mdHZNzxUwf0MwyYmY-TrPtBZBRYGvMHFygebbhhJ0kW2Q_s8PLzMrQHZ7rjl4Uixr_ylSTcnRsIQi32S409fMnj10T_2kG4aG7Jz0PNJQV0Xqy/s1024/chartDb.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTXzRBqeY2uVovlGW8c309E0PZS5FMv3Ugfg3V-z5AqL7yAvGxC20NfXSU8PxQ81cprBOMlWxIMMGX49mdHZNzxUwf0MwyYmY-TrPtBZBRYGvMHFygebbhhJ0kW2Q_s8PLzMrQHZ7rjl4Uixr_ylSTcnRsIQi32S409fMnj10T_2kG4aG7Jz0PNJQV0Xqy/s320/chartDb.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;ChartDB: diagramas de banco (ERD) em segundos — online ou self-hosted com Docker 🚀&lt;/h1&gt;
  &lt;p style=&quot;color: #4b5563; margin-top: 0px;&quot;&gt;
    A dica de hoje é uma ferramenta que costuma economizar horas quando você precisa
    &lt;b&gt;entender&lt;/b&gt;, &lt;b&gt;documentar&lt;/b&gt; ou &lt;b&gt;evoluir&lt;/b&gt; um esquema de banco: &lt;b&gt;ChartDB&lt;/b&gt;.
  &lt;/p&gt;

  &lt;div style=&quot;background: rgb(243, 244, 246); border-left: 6px solid rgb(59, 130, 246); border-radius: 10px; margin: 14px 0px; padding: 12px 14px;&quot;&gt;
    &lt;b&gt;Links oficiais:&lt;/b&gt;
    &lt;ul style=&quot;margin: 8px 0px 0px 18px;&quot;&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.chartdb.io&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;chartdb.io (teste online)&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/chartdb/chartdb&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;GitHub: chartdb/chartdb (código-fonte)&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;

  &lt;h2 style=&quot;color: #111827;&quot;&gt;O que é o ChartDB?&lt;/h2&gt;
  &lt;p style=&quot;color: #374151;&quot;&gt;
    O &lt;b&gt;ChartDB&lt;/b&gt; é um editor web open-source para &lt;b&gt;diagramas de esquema de banco&lt;/b&gt; (ERD/relacionamentos).
    A ideia é simples e poderosa: você &lt;b&gt;importa o schema&lt;/b&gt; (muitas vezes com uma única query “inteligente”),
    visualiza as tabelas/relacionamentos, ajusta o diagrama e exporta quando precisar.
  &lt;/p&gt;

  &lt;h2 style=&quot;color: #111827;&quot;&gt;Opção 1: testar online (zero instalação) 🌐&lt;/h2&gt;
  &lt;p style=&quot;color: #374151;&quot;&gt;
    Quer só validar a ferramenta rapidinho? Vai no site e testa no navegador:
    &lt;a href=&quot;https://www.chartdb.io&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.chartdb.io&lt;/a&gt;.
    É ótimo para:
  &lt;/p&gt;
  &lt;ul style=&quot;color: #374151;&quot;&gt;
    &lt;li&gt;entender um banco legado antes de mexer nele;&lt;/li&gt;
    &lt;li&gt;gerar um diagrama pra documentação;&lt;/li&gt;
    &lt;li&gt;explicar o modelo pro time (ou pro “eu do futuro” 😄).&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #111827;&quot;&gt;Opção 2: rodar na sua infraestrutura (self-hosted) com Docker 🐳&lt;/h2&gt;
  &lt;p style=&quot;color: #374151;&quot;&gt;
    Se você trabalha com dados sensíveis, rede restrita, ou simplesmente quer &lt;b&gt;controle total&lt;/b&gt;,
    dá pra subir o ChartDB localmente com Docker em poucos segundos.
  &lt;/p&gt;

  &lt;h3 style=&quot;color: #111827; margin-bottom: 6px;&quot;&gt;🚦 “Quero rodar AGORA” (sem IA)&lt;/h3&gt;
  &lt;p style=&quot;color: #374151; margin-top: 0px;&quot;&gt;
    Para as funcionalidades &lt;b&gt;sem IA&lt;/b&gt;, você &lt;b&gt;não precisa&lt;/b&gt; de API key.
    Basta subir o container e acessar no navegador:
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(11, 16, 32); border-radius: 12px; color: #e5e7eb; overflow: auto; padding: 14px;&quot;&gt;&lt;code&gt;docker run -p 8080:80 ghcr.io/chartdb/chartdb:latest&lt;/code&gt;&lt;/pre&gt;

  &lt;p style=&quot;color: #374151;&quot;&gt;
    Depois abra: &lt;b&gt;http://localhost:8080&lt;/b&gt;
  &lt;/p&gt;

  &lt;h3 style=&quot;color: #111827; margin-bottom: 6px;&quot;&gt;🤖 “Quero IA também” (opcional)&lt;/h3&gt;
  &lt;p style=&quot;color: #374151; margin-top: 0px;&quot;&gt;
    O ChartDB tem recursos com IA (por exemplo, assistente/geração/ajuda em exportações). Para isso, você configura
    uma chave (ou um endpoint/modelo custom, dependendo do seu setup).
    Um jeito bem direto é via variável de ambiente:
  &lt;/p&gt;

  &lt;pre style=&quot;background: rgb(11, 16, 32); border-radius: 12px; color: #e5e7eb; overflow: auto; padding: 14px;&quot;&gt;&lt;code&gt;docker run -e OPENAI_API_KEY=YOUR_OPEN_AI_KEY -p 8080:80 ghcr.io/chartdb/chartdb:latest&lt;/code&gt;&lt;/pre&gt;

  &lt;div style=&quot;background: rgb(236, 254, 255); border-radius: 10px; border: 1px solid rgb(103, 232, 249); margin: 12px 0px; padding: 12px 14px;&quot;&gt;
    &lt;b&gt;Dica de sala de aula:&lt;/b&gt; se você só quer diagramar/importar/exportar sem recursos de IA, &lt;b&gt;não coloque&lt;/b&gt; a chave.
    Assim você evita dependências desnecessárias e mantém o setup mais “seco” e previsível.
  &lt;/div&gt;

  &lt;h3 style=&quot;color: #111827; margin-bottom: 6px;&quot;&gt;🕵️ Extra: desabilitar analytics (se você preferir)&lt;/h3&gt;
  &lt;p style=&quot;color: #374151; margin-top: 0px;&quot;&gt;
    Se a sua política interna pede o mínimo de telemetria possível, existe opção de desabilitar analytics via env:
  &lt;/p&gt;
  &lt;pre style=&quot;background: rgb(11, 16, 32); border-radius: 12px; color: #e5e7eb; overflow: auto; padding: 14px;&quot;&gt;&lt;code&gt;docker run -e DISABLE_ANALYTICS=true -p 8080:80 ghcr.io/chartdb/chartdb:latest&lt;/code&gt;&lt;/pre&gt;

  &lt;h2 style=&quot;color: #111827;&quot;&gt;Quando eu usaria isso na vida real?&lt;/h2&gt;
  &lt;ul style=&quot;color: #374151;&quot;&gt;
    &lt;li&gt;&lt;b&gt;Onboarding&lt;/b&gt; de dev/analista novo: “tá aqui o mapa do banco”.&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Refactor&lt;/b&gt; com segurança: enxergar dependências antes de renomear/migrar tabelas.&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Documentação&lt;/b&gt; viva: diagrama + export gerando base pro seu ADR/README.&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Discussões de arquitetura&lt;/b&gt;: o time fala melhor olhando o desenho do que só lendo DDL.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #111827;&quot;&gt;Fechando (e a lição de casa 😄)&lt;/h2&gt;
  &lt;p style=&quot;color: #374151;&quot;&gt;
    Se você nunca testou uma ferramenta de ERD “rápida”, faz assim:
  &lt;/p&gt;
  &lt;ol style=&quot;color: #374151;&quot;&gt;
    &lt;li&gt;abre o &lt;a href=&quot;https://www.chartdb.io&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ChartDB online&lt;/a&gt; e brinca 10 minutos;&lt;/li&gt;
    &lt;li&gt;depois sobe com Docker local pra ver como fica no seu ambiente;&lt;/li&gt;
    &lt;li&gt;por fim, decide se vale habilitar IA (só quando fizer sentido).&lt;/li&gt;
  &lt;/ol&gt;

  &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2_EcAGAD8PbI3f9EiFlNJgrEBhGTMkQjerfFf2oFeFfsDT8palrRwErQa-BANWVsOpBZuajLr0QJ43bsnGEaAfHKIqW2ScDj7FDjZSp7W7BiOyQ9AU7QJxeZKfQdlrdHL-V0tmcs-XOUfDxWOVV3dAFCqBO_gLr6ek3tgIQPAhExwMG-vZUyrfSLMFoWm/s2752/chartDb-info.png&quot; imageanchor=&quot;1&quot; style=&quot;font-size: 32px; font-weight: 700; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2752&quot; data-original-width=&quot;1536&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2_EcAGAD8PbI3f9EiFlNJgrEBhGTMkQjerfFf2oFeFfsDT8palrRwErQa-BANWVsOpBZuajLr0QJ43bsnGEaAfHKIqW2ScDj7FDjZSp7W7BiOyQ9AU7QJxeZKfQdlrdHL-V0tmcs-XOUfDxWOVV3dAFCqBO_gLr6ek3tgIQPAhExwMG-vZUyrfSLMFoWm/w357-h640/chartDb-info.png&quot; width=&quot;357&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;color: #6b7280; font-size: 13px; margin-top: 18px;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;color: #6b7280; font-size: 13px; margin-top: 18px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: #6b7280; font-size: 13px; margin-top: 18px;&quot;&gt;
    Referências: &lt;a href=&quot;https://www.chartdb.io&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;chartdb.io&lt;/a&gt; ·
    &lt;a href=&quot;https://github.com/chartdb/chartdb&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;github.com/chartdb/chartdb&lt;/a&gt;
  &lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/4897372769113593286/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/02/chartdb-diagramas-de-banco-erd-em.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4897372769113593286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4897372769113593286'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/02/chartdb-diagramas-de-banco-erd-em.html' title='ChartDB: diagramas de banco (ERD) em segundos'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTXzRBqeY2uVovlGW8c309E0PZS5FMv3Ugfg3V-z5AqL7yAvGxC20NfXSU8PxQ81cprBOMlWxIMMGX49mdHZNzxUwf0MwyYmY-TrPtBZBRYGvMHFygebbhhJ0kW2Q_s8PLzMrQHZ7rjl4Uixr_ylSTcnRsIQi32S409fMnj10T_2kG4aG7Jz0PNJQV0Xqy/s72-c/chartDb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-4584866707182100275</id><published>2026-02-22T23:01:00.000-03:00</published><updated>2026-02-22T23:01:10.619-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>📊 Prompt para Análise e Reverse-Engineering de Dashboard</title><content type='html'>&lt;!--Post para Blogger: Prompt para Análise e Reverse-Engineering de Dashboard--&gt;
&lt;div style=&quot;color: #222222; font-family: Arial, sans-serif; line-height: 1.6;&quot;&gt;
  &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmO6ojwwLqtN1YiXXUF97YuiukwDOfHf7u4SRh3Rko2_DlYgx5nJD6r7z9BJ5R8B7cou93HQYO8BawzLHg2nP0DtLnUj2micrTHfTgyuYQTcfTMBh7H6fcsTonMwfmhK9I4LDx2Ej7nJV2DocCgRyHfuafrexLWLMsaNkBuOOVacm5iDA1gfFZoYHfgxZG/s1536/prompt-dashboard.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmO6ojwwLqtN1YiXXUF97YuiukwDOfHf7u4SRh3Rko2_DlYgx5nJD6r7z9BJ5R8B7cou93HQYO8BawzLHg2nP0DtLnUj2micrTHfTgyuYQTcfTMBh7H6fcsTonMwfmhK9I4LDx2Ej7nJV2DocCgRyHfuafrexLWLMsaNkBuOOVacm5iDA1gfFZoYHfgxZG/s320/prompt-dashboard.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h1 style=&quot;margin: 0px 0px 8px;&quot;&gt;&lt;br /&gt;&lt;/h1&gt;
  &lt;p style=&quot;margin: 0px 0px 16px;&quot;&gt;
    Se você usa IA no &lt;strong&gt;Cursor&lt;/strong&gt; (ou qualquer editor com copilots) para criar interfaces,
    já deve ter percebido um problema clássico: a IA até descreve a tela… mas mistura explicação com estrutura,
    perde consistência e vira um “texto bonito” difícil de implementar.
  &lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 16px;&quot;&gt;Para criar os exemplos de interfaces você pode usar o &lt;a href=&quot;https://stitch.withgoogle.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Google Stitch - Design with AI&lt;/a&gt;.&lt;/p&gt;

  &lt;p style=&quot;margin: 0px 0px 16px;&quot;&gt;
    A solução é simples e poderosa: escrever um prompt que força uma &lt;strong&gt;análise de UI/UX&lt;/strong&gt; como um handoff real
    de &lt;em&gt;designer → dev&lt;/em&gt;, com saída em &lt;strong&gt;JSONC&lt;/strong&gt; (estrutura previsível, fácil de evoluir e versionar).
  &lt;/p&gt;

  &lt;hr style=&quot;border-bottom: none; border-image: initial; border-left: none; border-right: none; border-top: 1px solid rgb(221, 221, 221); border: none; margin: 18px 0px;&quot; /&gt;

  &lt;h2 style=&quot;margin: 0px 0px 10px;&quot;&gt;🎯 O objetivo&lt;/h2&gt;
  &lt;ul style=&quot;margin: 0px 0px 16px 18px;&quot;&gt;
    &lt;li&gt;“Reverse-engineering” do dashboard a partir de um screenshot&lt;/li&gt;
    &lt;li&gt;Descrever layout, componentes, hierarquia e interação&lt;/li&gt;
    &lt;li&gt;Cobrir &lt;strong&gt;light mode&lt;/strong&gt; e &lt;strong&gt;dark mode&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Definir responsividade com breakpoints padrão do Tailwind&lt;/li&gt;
    &lt;li&gt;Extrair paletas e &lt;strong&gt;design tokens&lt;/strong&gt; sem exagerar nos detalhes&lt;/li&gt;
    &lt;li&gt;Gerar um brief final para implementação (sem entrar em “stack”)&lt;/li&gt;
  &lt;/ul&gt;

  &lt;div style=&quot;background: rgb(246, 248, 250); border-radius: 10px; border: 1px solid rgb(229, 231, 235); margin: 0px 0px 16px; padding: 14px;&quot;&gt;
    &lt;p style=&quot;margin: 0px;&quot;&gt;
      ✅ Resultado: você ganha um “contrato de UI” que pode ser iterado, comparado no Git, reaproveitado como base de design system
      e usado para gerar componentes com muito menos retrabalho.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;h2 style=&quot;margin: 0px 0px 10px;&quot;&gt;🧠 Por que JSONC é melhor do que só Markdown?&lt;/h2&gt;
  &lt;p style=&quot;margin: 0px 0px 12px;&quot;&gt;
    Markdown é ótimo para explicar, mas ruim para &lt;strong&gt;estruturar&lt;/strong&gt;. Quando o objetivo é construir UI com precisão,
    você quer uma saída que seja:
  &lt;/p&gt;
  &lt;ul style=&quot;margin: 0px 0px 16px 18px;&quot;&gt;
    &lt;li&gt;&lt;strong&gt;Previsível&lt;/strong&gt; (sempre no mesmo formato)&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Parsável&lt;/strong&gt; (dá pra transformar em config, schema, DSL, etc.)&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Iterável&lt;/strong&gt; (diferenças aparecem claramente em diff no Git)&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p style=&quot;margin: 0px 0px 16px;&quot;&gt;
    O ideal é o formato híbrido:
    &lt;strong&gt;Markdown&lt;/strong&gt; para instruções + &lt;strong&gt;JSONC&lt;/strong&gt; como saída + um &lt;strong&gt;prompt final&lt;/strong&gt; em bloco de código.
  &lt;/p&gt;

  &lt;hr style=&quot;border-bottom: none; border-image: initial; border-left: none; border-right: none; border-top: 1px solid rgb(221, 221, 221); border: none; margin: 18px 0px;&quot; /&gt;

  &lt;h2 style=&quot;margin: 0px 0px 10px;&quot;&gt;🧩 O prompt (no Gist)&lt;/h2&gt;
  &lt;p style=&quot;margin: 0px 0px 12px;&quot;&gt;
    Eu deixei o prompt completo pronto para copiar e colar no Cursor. 
    Basta acessar o Gist pelo link abaixo:
  &lt;/p&gt;

  &lt;!--TROQUE O LINK ABAIXO PELO SEU GIST--&gt;
  &lt;p style=&quot;margin: 0px 0px 18px;&quot;&gt;
    🔗 &lt;a href=&quot;https://gist.github.com/dmslabsbr/3201d68af4f3ea280a36915763d8bbdf&quot; rel=&quot;noopener noreferrer&quot; style=&quot;color: #0b57d0; font-weight: 600;&quot; target=&quot;_blank&quot;&gt;      Abrir o prompt no GitHub Gist    &lt;/a&gt;
  &lt;/p&gt;
  
  
  &lt;div style=&quot;background: rgb(255, 247, 237); border-radius: 10px; border: 1px solid rgb(254, 215, 170); margin: 0px 0px 16px; padding: 14px;&quot;&gt;
    &lt;p style=&quot;margin: 0px;&quot;&gt;
      💡 Dica: no Cursor, cole o prompt e peça: &lt;strong&gt;“analise esta imagem e gere a saída em JSONC”&lt;/strong&gt;. 
      Depois, reaproveite os &lt;em&gt;tokens&lt;/em&gt; para criar uma base de design system.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;h2 style=&quot;margin: 0px 0px 10px;&quot;&gt;🚀 Como usar (fluxo recomendado)&lt;/h2&gt;
  &lt;ol style=&quot;margin: 0px 0px 16px 18px;&quot;&gt;
    &lt;li&gt;Anexe o screenshot do dashboard para a IA&lt;/li&gt;
    &lt;li&gt;Rode o prompt e gere o &lt;strong&gt;JSONC&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Revise tokens/paletas e normalize nomes (primary/secondary/grays)&lt;/li&gt;
    &lt;li&gt;Use o “prompt final para dev” (gerado pela IA) para guiar a implementação&lt;/li&gt;
    &lt;li&gt;Itere: peça alterações específicas e compare mudanças no diff&lt;/li&gt;
  &lt;/ol&gt;

  &lt;h2 style=&quot;margin: 0px 0px 10px;&quot;&gt;✨ Bônus: evoluindo para uma DSL de UI&lt;/h2&gt;
  &lt;p style=&quot;margin: 0px 0px 16px;&quot;&gt;
    Se você criar muitos dashboards parecidos, vale considerar uma &lt;strong&gt;DSL de UI&lt;/strong&gt; (uma linguagem declarativa para descrever telas).
    O JSONC que esse prompt produz já pode ser o primeiro passo: um contrato estruturado que vira “config de tela”
    e pode alimentar um renderizador, um builder visual ou templates padronizados.
  &lt;/p&gt;

  &lt;p style=&quot;color: #555555; font-size: 14px; margin: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/4584866707182100275/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/02/prompt-para-analise-e-reverse.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4584866707182100275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4584866707182100275'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/02/prompt-para-analise-e-reverse.html' title='📊 Prompt para Análise e Reverse-Engineering de Dashboard'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmO6ojwwLqtN1YiXXUF97YuiukwDOfHf7u4SRh3Rko2_DlYgx5nJD6r7z9BJ5R8B7cou93HQYO8BawzLHg2nP0DtLnUj2micrTHfTgyuYQTcfTMBh7H6fcsTonMwfmhK9I4LDx2Ej7nJV2DocCgRyHfuafrexLWLMsaNkBuOOVacm5iDA1gfFZoYHfgxZG/s72-c/prompt-dashboard.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-7954377952818835222</id><published>2026-02-06T20:11:00.001-03:00</published><updated>2026-03-20T21:11:02.381-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><title type='text'>Como Resolver o Erro de Certificado SSL no Git</title><content type='html'>&lt;article style=&quot;color: #333333; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; margin: auto; max-width: 800px;&quot;&gt;
    
    &lt;header&gt;
        &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp2dBUwz1Y8QU5Z2Hj6drSHx3MrhxTJVWD6LikRBuiQ82QHiPwSfe36mre8Z-m3ZcBvUCSje_UGyheco9hneuwSXf-6ndY4cK-Uv1LC4-q1MIt1KxiHHEeAVevR7h-XYJ698DSUHiSJCdksjChuJm6bngLN3Cb3mvfBliyUT8jMlHsk4PJjWmY1ewt_d_2/s1536/Git-ssl-error.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp2dBUwz1Y8QU5Z2Hj6drSHx3MrhxTJVWD6LikRBuiQ82QHiPwSfe36mre8Z-m3ZcBvUCSje_UGyheco9hneuwSXf-6ndY4cK-Uv1LC4-q1MIt1KxiHHEeAVevR7h-XYJ698DSUHiSJCdksjChuJm6bngLN3Cb3mvfBliyUT8jMlHsk4PJjWmY1ewt_d_2/w640-h426/Git-ssl-error.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h1 style=&quot;border-bottom: 2px solid rgb(52, 152, 219); color: #2c3e50; padding-bottom: 10px;&quot;&gt;&lt;br /&gt;&lt;/h1&gt;
    &lt;/header&gt;

    &lt;p&gt;Se você trabalha em redes corporativas e tentou rodar um &lt;code&gt;pip install&lt;/code&gt; ou &lt;code&gt;git clone&lt;/code&gt;, provavelmente encontrou este erro frustrante:&lt;/p&gt;

    &lt;section style=&quot;background-color: #fdf2f2; border-left: 5px solid rgb(217, 83, 79); margin-bottom: 30px; padding: 15px;&quot;&gt;
        &lt;h3 style=&quot;color: #a94442; margin-top: 0px;&quot;&gt;O Problema&lt;/h3&gt;
        &lt;code&gt;fatal: unable to access &#39;...&#39;: schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325)&lt;/code&gt;
    &lt;/section&gt;

    &lt;h2 style=&quot;color: #2980b9;&quot;&gt;Por que isso acontece?&lt;/h2&gt;
    &lt;p&gt;
        Esse erro ocorre porque o Git (usando o &lt;em&gt;SChannel&lt;/em&gt; do Windows) tenta validar o certificado SSL do servidor GitLab interno. Em intranets, é comum o uso de &lt;strong&gt;certificados autoassinados&lt;/strong&gt; ou emitidos por uma &lt;strong&gt;CA (Autoridade Certificadora) interna&lt;/strong&gt; que não está na lista de &quot;raízes confiáveis&quot; do seu sistema operacional.
    &lt;/p&gt;
    &lt;p&gt;Como o Windows não consegue garantir que o servidor é quem diz ser, ele bloqueia a conexão para te proteger.&lt;/p&gt;

    &lt;h2 style=&quot;color: #2980b9;&quot;&gt;Como Resolver&lt;/h2&gt;

    &lt;h3&gt;Solução 1: Variável de Ambiente (Recomendado para uso pontual)&lt;/h3&gt;
    &lt;p&gt;A forma mais rápida no PowerShell, sem precisar alterar configurações globais do Git:&lt;/p&gt;
    &lt;pre style=&quot;background-color: #282c34; border-radius: 6px; color: #abb2bf; font-family: Consolas, monospace; overflow-x: auto; padding: 15px;&quot;&gt;$env:GIT_SSL_NO_VERIFY=$true
pip install git+https://gitlab.intranet.br&lt;/pre&gt;

    &lt;h3&gt;Solução 2: Configuração Global do Git&lt;/h3&gt;
    &lt;p&gt;Para não precisar digitar o comando acima toda vez:&lt;/p&gt;
    &lt;pre style=&quot;background-color: #f4f4f4; border-radius: 4px; border: 1px solid rgb(221, 221, 221); padding: 10px;&quot;&gt;git config --global http.sslVerify false&lt;/pre&gt;

    &lt;h3&gt;Solução 3: Mudar o Backend de Segurança&lt;/h3&gt;
    &lt;p&gt;Às vezes, forçar o Git a usar o OpenSSL resolve problemas de integração com o Windows:&lt;/p&gt;
    &lt;pre style=&quot;background-color: #f4f4f4; border-radius: 4px; border: 1px solid rgb(221, 221, 221); padding: 10px;&quot;&gt;git config --global http.sslBackend openssl&lt;/pre&gt;

    &lt;footer style=&quot;border-top: 1px solid rgb(238, 238, 238); font-style: italic; margin-top: 40px; padding-top: 20px;&quot;&gt;
        &lt;p&gt;&lt;strong&gt;Dica de Segurança:&lt;/strong&gt; Embora desativar o SSL facilite o trabalho interno, lembre-se de reativá-lo ao trabalhar com repositórios públicos na internet para garantir sua segurança.&lt;/p&gt;
    &lt;/footer&gt;

&lt;/article&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/7954377952818835222/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/02/como-resolver-o-erro-de-certificado-ssl.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/7954377952818835222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/7954377952818835222'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/02/como-resolver-o-erro-de-certificado-ssl.html' title='Como Resolver o Erro de Certificado SSL no Git'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp2dBUwz1Y8QU5Z2Hj6drSHx3MrhxTJVWD6LikRBuiQ82QHiPwSfe36mre8Z-m3ZcBvUCSje_UGyheco9hneuwSXf-6ndY4cK-Uv1LC4-q1MIt1KxiHHEeAVevR7h-XYJ698DSUHiSJCdksjChuJm6bngLN3Cb3mvfBliyUT8jMlHsk4PJjWmY1ewt_d_2/s72-w640-h426-c/Git-ssl-error.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-2854322097814451903</id><published>2026-02-03T11:32:00.000-03:00</published><updated>2026-02-03T15:53:59.540-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>GitLab: Merge do main no seu branch</title><content type='html'>&lt;!--✅ Blogger-ready HTML | Tema: Merge do main no seu branch (Opção B)--&gt;
&lt;div style=&quot;color: #1f2937; font-family: Arial, sans-serif; line-height: 1.55; margin: 0px auto; max-width: 900px;&quot;&gt;

  &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7QF5IDew6sjYS4QHkpWHUq5N9mFBK1b4AqrnhThwmw5iL1nml5GDG6mhXzpV8M2P5VbrBUmMWrWwu4T9BlIP0M1UHnNIFXdR9ViJfXahC1Cz1Y87rxuLozsbPGm-yo3aE12gxE46si9INmwxq5HwEAEyykdN-5KN0fAqBEA6IyFbPWmn83JTDXhbSmwhi/s1536/merge-no-main-logo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;1024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7QF5IDew6sjYS4QHkpWHUq5N9mFBK1b4AqrnhThwmw5iL1nml5GDG6mhXzpV8M2P5VbrBUmMWrWwu4T9BlIP0M1UHnNIFXdR9ViJfXahC1Cz1Y87rxuLozsbPGm-yo3aE12gxE46si9INmwxq5HwEAEyykdN-5KN0fAqBEA6IyFbPWmn83JTDXhbSmwhi/w426-h640/merge-no-main-logo.png&quot; width=&quot;426&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h1 style=&quot;color: #0f172a; margin-bottom: 6px;&quot;&gt;🔀✅ Fazer &lt;span style=&quot;color: #2563eb;&quot;&gt;Merge do main&lt;/span&gt; no seu branch (sem reescrever histórico)&lt;/h1&gt;

  &lt;p style=&quot;color: #475569; margin-top: 0px;&quot;&gt;
    Se alguém acabou de fazer merge no &lt;b&gt;main&lt;/b&gt; no GitLab e você está trabalhando em outro branch, o caminho mais simples e seguro é:
    &lt;b&gt;trazer o main atualizado para dentro do seu branch&lt;/b&gt; usando &lt;span style=&quot;background: rgb(224, 242, 254); border-radius: 6px; padding: 2px 6px;&quot;&gt;merge&lt;/span&gt;.
  &lt;/p&gt;

  &lt;div style=&quot;background: rgb(236, 253, 245); border-left: 6px solid rgb(34, 197, 94); border-radius: 10px; margin: 14px 0px; padding: 12px 14px;&quot;&gt;
    &lt;b&gt;✅ Por que essa opção é “mais simples”?&lt;/b&gt;
    &lt;ul style=&quot;margin: 8px 0px 0px 18px;&quot;&gt;
      &lt;li&gt;📌 &lt;b&gt;Não reescreve histórico&lt;/b&gt; (nada de &lt;code&gt;--force&lt;/code&gt;)&lt;/li&gt;
      &lt;li&gt;🤝 Melhor para trabalho em equipe&lt;/li&gt;
      &lt;li&gt;🧯 Menor risco de confusão e perdas&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;

  &lt;h2 style=&quot;color: #111827; margin-top: 22px;&quot;&gt;🧭 Quando usar o merge do main no seu branch?&lt;/h2&gt;
  &lt;ul style=&quot;margin: 8px 0px 0px 18px;&quot;&gt;
    &lt;li&gt;🚧 Você ainda está desenvolvendo e quer evitar conflitos grandes depois&lt;/li&gt;
    &lt;li&gt;🧪 Você quer garantir que seu branch funciona com o main mais recente&lt;/li&gt;
    &lt;li&gt;📦 Você vai abrir/atualizar um Merge Request no GitLab&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2 style=&quot;color: #111827; margin-top: 22px;&quot;&gt;🛠️ Passo a passo (comandos Git)&lt;/h2&gt;

  &lt;div style=&quot;border-radius: 10px; border: 1px solid rgb(229, 231, 235); margin: 12px 0px; overflow: hidden;&quot;&gt;
    &lt;div style=&quot;background: rgb(11, 18, 32); color: #e5e7eb; font-weight: bold; padding: 10px 12px;&quot;&gt;
      1) Verifique seu estado atual 🧩
    &lt;/div&gt;
    &lt;pre style=&quot;background: rgb(15, 23, 42); color: #e2e8f0; margin: 0px; overflow: auto; padding: 12px;&quot;&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(255, 251, 235); border-left: 6px solid rgb(245, 158, 11); border-radius: 10px; margin: 14px 0px; padding: 12px 14px;&quot;&gt;
    &lt;b&gt;⚠️ Se tiver alterações não commitadas:&lt;/b&gt;
    &lt;ul style=&quot;margin: 8px 0px 0px 18px;&quot;&gt;
      &lt;li&gt;✅ Recomendado: faça commit (mesmo WIP)&lt;/li&gt;
      &lt;li&gt;🧳 Alternativa: use stash&lt;/li&gt;
    &lt;/ul&gt;
    &lt;div style=&quot;margin-top: 10px;&quot;&gt;
      &lt;pre style=&quot;background: rgb(17, 24, 39); border-radius: 8px; color: #e5e7eb; margin: 0px; overflow: auto; padding: 10px;&quot;&gt;&lt;code&gt;git add .
git commit -m &quot;WIP: salvando trabalho&quot;&lt;/code&gt;&lt;/pre&gt;
      &lt;div style=&quot;height: 10px;&quot;&gt;&lt;/div&gt;
      &lt;pre style=&quot;background: rgb(17, 24, 39); border-radius: 8px; color: #e5e7eb; margin: 0px; overflow: auto; padding: 10px;&quot;&gt;&lt;code&gt;git stash -u&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;border-radius: 10px; border: 1px solid rgb(229, 231, 235); margin: 12px 0px; overflow: hidden;&quot;&gt;
    &lt;div style=&quot;background: rgb(11, 18, 32); color: #e5e7eb; font-weight: bold; padding: 10px 12px;&quot;&gt;
      2) Atualize o main local ⬇️
    &lt;/div&gt;
    &lt;pre style=&quot;background: rgb(15, 23, 42); color: #e2e8f0; margin: 0px; overflow: auto; padding: 12px;&quot;&gt;&lt;code&gt;git fetch origin
git checkout main
git pull origin main&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;div style=&quot;border-radius: 10px; border: 1px solid rgb(229, 231, 235); margin: 12px 0px; overflow: hidden;&quot;&gt;
    &lt;div style=&quot;background: rgb(11, 18, 32); color: #e5e7eb; font-weight: bold; padding: 10px 12px;&quot;&gt;
      3) Volte para seu branch e faça merge do main 🔀
    &lt;/div&gt;
    &lt;pre style=&quot;background: rgb(15, 23, 42); color: #e2e8f0; margin: 0px; overflow: auto; padding: 12px;&quot;&gt;&lt;code&gt;git checkout feature/seu-branch
git merge main&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;div style=&quot;border-radius: 10px; border: 1px solid rgb(229, 231, 235); margin: 12px 0px; overflow: hidden;&quot;&gt;
    &lt;div style=&quot;background: rgb(11, 18, 32); color: #e5e7eb; font-weight: bold; padding: 10px 12px;&quot;&gt;
      4) Resolva conflitos (se aparecerem) 🧯
    &lt;/div&gt;
    &lt;div style=&quot;background: rgb(248, 250, 252); padding: 12px;&quot;&gt;
      &lt;p style=&quot;color: #334155; margin: 0px 0px 8px;&quot;&gt;
        Se o Git parar e indicar conflitos:
      &lt;/p&gt;
      &lt;ol style=&quot;margin: 0px 0px 0px 18px;&quot;&gt;
        &lt;li&gt;🔎 Abra os arquivos marcados como conflito&lt;/li&gt;
        &lt;li&gt;✍️ Escolha o conteúdo correto e remova os marcadores &lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/code&gt; / &lt;code&gt;=======&lt;/code&gt; / &lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;✅ Marque como resolvido e finalize&lt;/li&gt;
      &lt;/ol&gt;
      &lt;div style=&quot;height: 10px;&quot;&gt;&lt;/div&gt;
      &lt;pre style=&quot;background: rgb(17, 24, 39); border-radius: 8px; color: #e5e7eb; margin: 0px; overflow: auto; padding: 10px;&quot;&gt;&lt;code&gt;git add .
git commit -m &quot;Merge main no meu branch&quot;&lt;/code&gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div style=&quot;border-radius: 10px; border: 1px solid rgb(229, 231, 235); margin: 12px 0px; overflow: hidden;&quot;&gt;
    &lt;div style=&quot;background: rgb(11, 18, 32); color: #e5e7eb; font-weight: bold; padding: 10px 12px;&quot;&gt;
      5) Envie seu branch atualizado para o GitLab 🚀
    &lt;/div&gt;
    &lt;pre style=&quot;background: rgb(15, 23, 42); color: #e2e8f0; margin: 0px; overflow: auto; padding: 12px;&quot;&gt;&lt;code&gt;git push&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;div style=&quot;background: rgb(239, 246, 255); border-left: 6px solid rgb(59, 130, 246); border-radius: 10px; margin: 14px 0px; padding: 12px 14px;&quot;&gt;
    &lt;b&gt;💡 Dica esperta:&lt;/b&gt; depois do merge, rode seus testes/local server antes do MR:
    &lt;div style=&quot;height: 10px;&quot;&gt;&lt;/div&gt;
    &lt;pre style=&quot;background: rgb(17, 24, 39); border-radius: 8px; color: #e5e7eb; margin: 0px; overflow: auto; padding: 10px;&quot;&gt;&lt;code&gt;python manage.py test
# ou seu comando de testes/lint&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;h2 style=&quot;color: #111827; margin-top: 22px;&quot;&gt;✅ Vantagens vs ⚠️ Desvantagens&lt;/h2&gt;

  &lt;div style=&quot;border-radius: 12px; border: 1px solid rgb(229, 231, 235); display: block; margin: 12px 0px; overflow: hidden;&quot;&gt;
    &lt;div style=&quot;background: rgb(241, 245, 249); color: #0f172a; font-weight: bold; padding: 10px 12px;&quot;&gt;
      📌 Comparativo rápido
    &lt;/div&gt;
    &lt;div style=&quot;padding: 12px;&quot;&gt;
      &lt;p style=&quot;margin: 0px 0px 8px;&quot;&gt;
        &lt;span style=&quot;color: #16a34a; font-weight: bold;&quot;&gt;✅ Vantagens&lt;/span&gt;
      &lt;/p&gt;
      &lt;ul style=&quot;margin: 0px 0px 14px 18px;&quot;&gt;
        &lt;li&gt;🧾 Histórico preservado (sem reescrever commits)&lt;/li&gt;
        &lt;li&gt;🤝 Menos risco em equipe&lt;/li&gt;
        &lt;li&gt;🚫 Não precisa &lt;code&gt;push --force&lt;/code&gt;&lt;/li&gt;
      &lt;/ul&gt;

      &lt;p style=&quot;margin: 0px 0px 8px;&quot;&gt;
        &lt;span style=&quot;color: #dc2626; font-weight: bold;&quot;&gt;⚠️ Desvantagens&lt;/span&gt;
      &lt;/p&gt;
      &lt;ul style=&quot;margin: 0px 0px 0px 18px;&quot;&gt;
        &lt;li&gt;🌀 Pode criar commits de merge extras&lt;/li&gt;
        &lt;li&gt;📚 Histórico pode ficar menos “linear”&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;h2 style=&quot;color: #111827; margin-top: 22px;&quot;&gt;🧷 FAQ rápido&lt;/h2&gt;

  &lt;p style=&quot;margin: 8px 0px;&quot;&gt;
    &lt;b&gt;❓ “Eu preciso fazer isso sempre?”&lt;/b&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #475569;&quot;&gt;Não sempre — mas é recomendado antes de abrir/atualizar MR ou quando o main mudou bastante.&lt;/span&gt;
  &lt;/p&gt;

  &lt;p style=&quot;margin: 8px 0px;&quot;&gt;
    &lt;b&gt;❓ “E se eu não quiser mexer agora?”&lt;/b&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #475569;&quot;&gt;Você pode continuar no seu branch, mas o ideal é integrar o main cedo para evitar conflitos maiores depois.&lt;/span&gt;
  &lt;/p&gt;

  &lt;div style=&quot;background: rgb(15, 23, 42); border-radius: 12px; color: #e2e8f0; margin: 22px 0px 6px; padding: 12px 14px;&quot;&gt;
    &lt;b&gt;✅ TL;DR (roteiro rápido)&lt;/b&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #93c5fd;&quot;&gt;git fetch origin&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #93c5fd;&quot;&gt;git checkout main&lt;/span&gt; → &lt;span style=&quot;color: #93c5fd;&quot;&gt;git pull origin main&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #93c5fd;&quot;&gt;git checkout feature/seu-branch&lt;/span&gt; → &lt;span style=&quot;color: #93c5fd;&quot;&gt;git merge main&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #93c5fd;&quot;&gt;git push&lt;/span&gt;
  &lt;/div&gt;

  &lt;p style=&quot;color: #64748b; font-size: 12px; margin-top: 14px;&quot;&gt;
    ✍️ Post prático para equipes: Merge do main no branch sem reescrever histórico (ideal quando você não quer usar rebase/force push).
  &lt;/p&gt;&lt;p style=&quot;color: #64748b; font-size: 12px; margin-top: 14px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4tfqKogURqrTIpkIbus28y4YXvoag-r0SULJAvxPErSV6SXR39xIllGJsV2YpVGkwW9pmuSrE_Vs8nVtv_7huo6XC7TZhWEP2bVD2_xNwVX5YjPTbG7IG8wNeaxB4z-2-X6a2oaiUiQQ8ypHirA2FqfH1gH1TEMrZEiwS2xQUThV0oV8lVtKFNrv5Udxc/s1536/Merge-no-main.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;1024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4tfqKogURqrTIpkIbus28y4YXvoag-r0SULJAvxPErSV6SXR39xIllGJsV2YpVGkwW9pmuSrE_Vs8nVtv_7huo6XC7TZhWEP2bVD2_xNwVX5YjPTbG7IG8wNeaxB4z-2-X6a2oaiUiQQ8ypHirA2FqfH1gH1TEMrZEiwS2xQUThV0oV8lVtKFNrv5Udxc/w426-h640/Merge-no-main.png&quot; width=&quot;426&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style=&quot;color: #64748b; font-size: 12px; margin-top: 14px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/2854322097814451903/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/02/gitlab-merge-do-main-no-seu-branch.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/2854322097814451903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/2854322097814451903'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/02/gitlab-merge-do-main-no-seu-branch.html' title='GitLab: Merge do main no seu branch'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7QF5IDew6sjYS4QHkpWHUq5N9mFBK1b4AqrnhThwmw5iL1nml5GDG6mhXzpV8M2P5VbrBUmMWrWwu4T9BlIP0M1UHnNIFXdR9ViJfXahC1Cz1Y87rxuLozsbPGm-yo3aE12gxE46si9INmwxq5HwEAEyykdN-5KN0fAqBEA6IyFbPWmn83JTDXhbSmwhi/s72-w426-h640-c/merge-no-main-logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-7735536475136273029</id><published>2026-01-21T20:59:00.005-03:00</published><updated>2026-01-23T16:11:07.597-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>Git + GitLab na prática: criar branch, enviar, abrir MR, dar merge e limpar branch</title><content type='html'>&lt;!--Post HTML estilizado com cores e emoticons – pronto para Blogger--&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlO3nwL-jqQcYRPZBY4OB0iK2Umu4aHFhKsVdV-VKFYVC_llNummGmlDD-vBAsLtwo4EpXmtwc0QhQXUEBHdDfHVEOsen5O18bIGZAbm2f7TrgP9jfuoG8TlIu61k314hwM-JzPcv6490J-0Oq-AEo5OtWMW6jfvXsvtBYv52OwQwCaAsD-vuWccS_zxKb/s1536/git-journey.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;1024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlO3nwL-jqQcYRPZBY4OB0iK2Umu4aHFhKsVdV-VKFYVC_llNummGmlDD-vBAsLtwo4EpXmtwc0QhQXUEBHdDfHVEOsen5O18bIGZAbm2f7TrgP9jfuoG8TlIu61k314hwM-JzPcv6490J-0Oq-AEo5OtWMW6jfvXsvtBYv52OwQwCaAsD-vuWccS_zxKb/w426-h640/git-journey.png&quot; width=&quot;426&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h1 style=&quot;color: #2563eb;&quot;&gt;🚀 Git + GitLab na prática: branch, merge e limpeza sem dor de cabeça&lt;/h1&gt;

&lt;p&gt;
Este guia é um &lt;strong&gt;passo a passo direto ao ponto&lt;/strong&gt; para o fluxo mais comum no Git/GitLab:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;🌱 Criar um novo branch&lt;/li&gt;
  &lt;li&gt;📤 Enviar para o GitLab e fazer merge com &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;🧹 Voltar para o branch principal e apagar o branch local&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 style=&quot;color: #0f766e;&quot;&gt;✅ Pré-check (altamente recomendado)&lt;/h2&gt;

&lt;p&gt;Antes de qualquer coisa, confira em qual branch você está:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(241, 245, 249); border-left: 4px solid rgb(37, 99, 235); padding: 10px;&quot;&gt;git branch
&lt;/pre&gt;

&lt;p&gt;Atualize seu &lt;code&gt;main&lt;/code&gt; local antes de criar novos branches:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(241, 245, 249); border-left: 4px solid rgb(37, 99, 235); padding: 10px;&quot;&gt;git checkout main
git pull origin main
&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2 style=&quot;color: #2563eb;&quot;&gt;🌱 1) Como criar um novo branch&lt;/h2&gt;

&lt;h3 style=&quot;color: #0f766e;&quot;&gt;Opção A (recomendada)&lt;/h3&gt;

&lt;p&gt;Crie o branch sempre a partir do &lt;code&gt;main&lt;/code&gt; atualizado:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(236, 254, 255); border-left: 4px solid rgb(6, 182, 212); padding: 10px;&quot;&gt;git checkout main
git pull origin main
git checkout -b feature/nome-da-feature
&lt;/pre&gt;

&lt;p&gt;📌 Exemplo real:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(236, 254, 255); border-left: 4px solid rgb(6, 182, 212); padding: 10px;&quot;&gt;git checkout -b feature/projetos
&lt;/pre&gt;

&lt;h3 style=&quot;color: #0f766e;&quot;&gt;Opção B (Git moderno)&lt;/h3&gt;

&lt;pre style=&quot;background: rgb(236, 254, 255); border-left: 4px solid rgb(6, 182, 212); padding: 10px;&quot;&gt;git switch main
git pull origin main
git switch -c feature/projetos
&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2 style=&quot;color: #2563eb;&quot;&gt;📤 2) Já fiz commit. Como enviar para o GitLab e fazer merge?&lt;/h2&gt;

&lt;h3 style=&quot;color: #0f766e;&quot;&gt;2.1 Enviar o branch para o remoto&lt;/h3&gt;

&lt;p&gt;Primeiro push do branch:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(240, 253, 244); border-left: 4px solid rgb(34, 197, 94); padding: 10px;&quot;&gt;git push -u origin feature/projetos
&lt;/pre&gt;

&lt;p&gt;Pushs seguintes:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(240, 253, 244); border-left: 4px solid rgb(34, 197, 94); padding: 10px;&quot;&gt;git push
&lt;/pre&gt;

&lt;h3 style=&quot;color: #0f766e;&quot;&gt;2.2 Criar o Merge Request no GitLab&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;🌐 Abra o repositório no GitLab&lt;/li&gt;
  &lt;li&gt;🔀 Vá em &lt;strong&gt;Merge Requests → New merge request&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;
    Selecione:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;code&gt;feature/projetos&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Target:&lt;/strong&gt; &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;✅ Crie o MR e clique em &lt;strong&gt;Merge&lt;/strong&gt; quando estiver pronto&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 style=&quot;color: #b45309;&quot;&gt;⚠️ Boa prática antes do merge&lt;/h3&gt;

&lt;p&gt;Traga o &lt;code&gt;main&lt;/code&gt; mais recente para dentro do seu branch:&lt;/p&gt;

&lt;pre style=&quot;background: rgb(255, 251, 235); border-left: 4px solid rgb(245, 158, 11); padding: 10px;&quot;&gt;git fetch origin
git checkout feature/projetos
git merge origin/main
git add .
git commit
git push
&lt;/pre&gt;

&lt;p&gt;
💡 Algumas equipes preferem &lt;code&gt;rebase&lt;/code&gt;. Se for o seu caso:
&lt;/p&gt;

&lt;pre style=&quot;background: rgb(255, 251, 235); border-left: 4px solid rgb(245, 158, 11); padding: 10px;&quot;&gt;git fetch origin
git checkout feature/projetos
git rebase origin/main
git push --force-with-lease
&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2 style=&quot;color: #2563eb;&quot;&gt;🧹 3) Voltar para o main e apagar o branch local&lt;/h2&gt;

&lt;h3 style=&quot;color: #0f766e;&quot;&gt;3.1 Voltar para o branch principal&lt;/h3&gt;

&lt;pre style=&quot;background: rgb(241, 245, 249); border-left: 4px solid rgb(37, 99, 235); padding: 10px;&quot;&gt;git checkout main
git pull origin main
&lt;/pre&gt;

&lt;h3 style=&quot;color: #0f766e;&quot;&gt;3.2 Apagar o branch local após o merge&lt;/h3&gt;

&lt;p&gt;Forma segura (recomendada):&lt;/p&gt;

&lt;pre style=&quot;background: rgb(254, 242, 242); border-left: 4px solid rgb(239, 68, 68); padding: 10px;&quot;&gt;git branch -d feature/projetos
&lt;/pre&gt;

&lt;p&gt;
⚠️ Se o Git reclamar que não está mergeado:
&lt;/p&gt;

&lt;pre style=&quot;background: rgb(254, 242, 242); border-left: 4px solid rgb(239, 68, 68); padding: 10px;&quot;&gt;git pull origin main
git branch -d feature/projetos
&lt;/pre&gt;

&lt;p&gt;
🔥 Forçar exclusão (use só se tiver certeza):
&lt;/p&gt;

&lt;pre style=&quot;background: rgb(254, 226, 226); border-left: 4px solid rgb(220, 38, 38); padding: 10px;&quot;&gt;git branch -D feature/projetos
&lt;/pre&gt;

&lt;h3 style=&quot;color: #0f766e;&quot;&gt;3.3 Limpar referências de branches remotos&lt;/h3&gt;

&lt;pre style=&quot;background: rgb(241, 245, 249); border-left: 4px solid rgb(37, 99, 235); padding: 10px;&quot;&gt;git fetch --prune
&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2 style=&quot;color: #0f766e;&quot;&gt;📌 Checklist final (salva-vidas)&lt;/h2&gt;

&lt;pre style=&quot;background: rgb(236, 254, 255); border-left: 4px solid rgb(6, 182, 212); padding: 12px;&quot;&gt;# criar branch
git checkout main
git pull origin main
git checkout -b feature/projetos

# trabalhar, commitar, enviar
git add .
git commit -m &quot;feat: projetos&quot;
git push -u origin feature/projetos

# (GitLab) abrir MR → merge

# voltar ao main e limpar branch
git checkout main
git pull origin main
git branch -d feature/projetos
git fetch --prune
&lt;/pre&gt;

&lt;p style=&quot;color: #16a34a; font-weight: bold;&quot;&gt;
✅ Pronto! Fluxo limpo, previsível e profissional.
&lt;/p&gt;

&lt;!--Fim do post--&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/7735536475136273029/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/01/git-gitlab-na-pratica-criar-branch.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/7735536475136273029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/7735536475136273029'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/01/git-gitlab-na-pratica-criar-branch.html' title='Git + GitLab na prática: criar branch, enviar, abrir MR, dar merge e limpar branch'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlO3nwL-jqQcYRPZBY4OB0iK2Umu4aHFhKsVdV-VKFYVC_llNummGmlDD-vBAsLtwo4EpXmtwc0QhQXUEBHdDfHVEOsen5O18bIGZAbm2f7TrgP9jfuoG8TlIu61k314hwM-JzPcv6490J-0Oq-AEo5OtWMW6jfvXsvtBYv52OwQwCaAsD-vuWccS_zxKb/s72-w426-h640-c/git-journey.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-1073852411687570803</id><published>2026-01-21T20:32:00.007-03:00</published><updated>2026-01-21T20:32:00.110-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>PostgreSQL e IDENTITY: por que a sequência “desalinha” e como corrigir</title><content type='html'>&lt;!--Post pronto para Blogger (cole no modo &quot;HTML&quot; do editor do Blogger)--&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvj-9jD7MBORKWDgkzo-AP7c2kZpBlt0IcERzio6TQy7A7E3gk3o3vDnrbtrPVhqMuz6-Oyw-B5S_TF0ZcOMrowmmJKm7hUMDPGo391Q4igguENNjK5XD3qHbvGhNjUSoZybMdTVeJxoh4uSo8Ub_OqgT_cgK1KZsVLuyrdwZMOVeePHIEklIj2z4Emx6E/s1536/postgree_identity.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;1024&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvj-9jD7MBORKWDgkzo-AP7c2kZpBlt0IcERzio6TQy7A7E3gk3o3vDnrbtrPVhqMuz6-Oyw-B5S_TF0ZcOMrowmmJKm7hUMDPGo391Q4igguENNjK5XD3qHbvGhNjUSoZybMdTVeJxoh4uSo8Ub_OqgT_cgK1KZsVLuyrdwZMOVeePHIEklIj2z4Emx6E/w266-h400/postgree_identity.png&quot; width=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h1&gt;&lt;br /&gt;&lt;/h1&gt;

&lt;p&gt;Se você usa PostgreSQL, provavelmente já viu (ou vai ver) um erro como:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ERROR: duplicate key value violates unique constraint
DETAIL: Key (id)=(2) already exists.&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Esse erro costuma aparecer quando uma coluna &lt;strong&gt;IDENTITY&lt;/strong&gt; (ou &lt;strong&gt;SERIAL&lt;/strong&gt;) está tentando gerar um ID que &lt;strong&gt;já existe&lt;/strong&gt; na tabela. Na prática, isso significa que a &lt;strong&gt;sequência interna&lt;/strong&gt; do PostgreSQL ficou &lt;strong&gt;desalinhada&lt;/strong&gt; com os dados.&lt;/p&gt;

&lt;p&gt;Neste artigo você vai entender:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;o que é a sequência interna (sequence) do IDENTITY&lt;/li&gt;
  &lt;li&gt;por que ela pode “perder o valor correto”&lt;/li&gt;
  &lt;li&gt;como diagnosticar o problema&lt;/li&gt;
  &lt;li&gt;como ajustar a sequência com segurança&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2&gt;1) O que é IDENTITY no PostgreSQL?&lt;/h2&gt;

&lt;p&gt;Uma coluna definida como &lt;code&gt;GENERATED ... AS IDENTITY&lt;/code&gt; gera valores automaticamente usando uma &lt;strong&gt;sequence&lt;/strong&gt; (sequência) por trás.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;CREATE TABLE exemplo (
  id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  nome text NOT NULL
);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;O PostgreSQL cria uma sequence interna (com um nome próprio) e passa a usar algo como:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;nextval(&#39;nome_da_sequence&#39;)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;para gerar IDs automaticamente.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;2) Por que a sequência pode “desalinhar”?&lt;/h2&gt;

&lt;p&gt;O ponto mais importante é este:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;A sequence é independente da tabela.&lt;/strong&gt; Ela não “olha” os dados para decidir o próximo número.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ou seja: a tabela pode ter ID 1000, mas se a sequence ainda estiver em 10, o próximo insert automático pode tentar gerar 11, 12... e em algum momento pode gerar um valor que já existe, causando erro.&lt;/p&gt;

&lt;h3&gt;Motivos comuns (na prática)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Importação/carga de dados&lt;/strong&gt; inserindo IDs manualmente (ex.: INSERT com &lt;code&gt;id=1000&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Restore de backup&lt;/strong&gt; onde os dados voltam, mas a sequence não é ajustada&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Scripts de migração&lt;/strong&gt; ou manutenção que inserem IDs explicitamente&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;TRUNCATE/DELETE&lt;/strong&gt; (a tabela muda, mas a sequence mantém o valor antigo)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Testes/seed&lt;/strong&gt; com dados fixos e IDs definidos “na mão”&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2&gt;3) Como diagnosticar se a sequence está errada&lt;/h2&gt;

&lt;p&gt;O diagnóstico clássico compara:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;maior ID da tabela&lt;/strong&gt; vs&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;valor atual da sequence&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;3.1 Descobrir o nome da sequence associada ao IDENTITY&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;SELECT pg_get_serial_sequence(&#39;schema.tabela&#39;, &#39;coluna_id&#39;);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Exemplo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SELECT pg_get_serial_sequence(&#39;public.exemplo&#39;, &#39;id&#39;);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;O retorno será o nome da sequence (por exemplo &lt;code&gt;public.exemplo_id_seq&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;3.2 Ver o maior ID existente na tabela&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;SELECT MAX(id) FROM public.exemplo;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;3.3 Ver o valor atual da sequence&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;SELECT last_value FROM public.exemplo_id_seq;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Se &lt;code&gt;last_value&lt;/code&gt; for menor que o &lt;code&gt;MAX(id)&lt;/code&gt;, você tem um desalinhamento.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;4) Como ajustar a sequência do IDENTITY (forma segura)&lt;/h2&gt;

&lt;p&gt;A correção consiste em configurar a sequence para continuar a partir do maior ID existente.&lt;/p&gt;

&lt;h3&gt;4.1 Ajuste automático usando o máximo da tabela&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;SELECT setval(
  pg_get_serial_sequence(&#39;schema.tabela&#39;, &#39;coluna_id&#39;),
  (SELECT COALESCE(MAX(coluna_id), 1) FROM schema.tabela)
);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Exemplo completo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SELECT setval(
  pg_get_serial_sequence(&#39;public.exemplo&#39;, &#39;id&#39;),
  (SELECT COALESCE(MAX(id), 1) FROM public.exemplo)
);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Após isso, o próximo INSERT automático usará &lt;code&gt;MAX(id) + 1&lt;/code&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;5) Caso especial: tabela vazia&lt;/h2&gt;

&lt;p&gt;Se a tabela estiver vazia e você quiser reiniciar a contagem, use o terceiro parâmetro do &lt;code&gt;setval&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SELECT setval(
  pg_get_serial_sequence(&#39;public.exemplo&#39;, &#39;id&#39;),
  1,
  false
);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;O &lt;code&gt;false&lt;/code&gt; indica que o próximo valor gerado será exatamente 1.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;6) Por que “buracos” em IDs são normais&lt;/h2&gt;

&lt;p&gt;Um detalhe que muita gente estranha:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Sequences não fazem rollback.&lt;/strong&gt; Elas avançam mesmo se a transação falhar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Exemplo:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;BEGIN;
INSERT INTO public.exemplo (nome) VALUES (&#39;Teste&#39;);
ROLLBACK;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Mesmo com rollback, a sequence pode ter incrementado. Isso gera “buracos” nos IDs, e isso é esperado. IDs não devem ser usados como números contábeis ou sequenciais perfeitos.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;7) Boas práticas para evitar o problema&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Evite inserir IDs manualmente. Se precisar, ajuste a sequence depois.&lt;/li&gt;
  &lt;li&gt;Após restore/importações, sempre valide &lt;code&gt;MAX(id)&lt;/code&gt; vs sequence.&lt;/li&gt;
  &lt;li&gt;Crie um checklist pós-deploy para checar sequences.&lt;/li&gt;
  &lt;li&gt;Em migrações, prefira inserir sem ID e deixar o banco gerar.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;Quando o PostgreSQL “tenta repetir um ID”, quase sempre o problema é a &lt;strong&gt;sequence interna&lt;/strong&gt; do IDENTITY que ficou atrás do maior valor real da tabela.&lt;/p&gt;

&lt;p&gt;A correção é simples e segura usando &lt;code&gt;setval&lt;/code&gt; alinhado ao &lt;code&gt;MAX(id)&lt;/code&gt;. Com isso, você evita erros de chave duplicada e mantém o banco saudável mesmo após importações ou restores.&lt;/p&gt;

&lt;p&gt;Se você quiser, eu posso publicar uma versão complementar mostrando:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;como resetar sequences em lote para um schema inteiro&lt;/li&gt;
  &lt;li&gt;como fazer isso no contexto do Django (sqlsequencereset)&lt;/li&gt;
  &lt;li&gt;como automatizar validação pós-deploy&lt;/li&gt;
&lt;/ul&gt;

&lt;!--Fim do post--&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/1073852411687570803/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/01/postgresql-e-identity-por-que-sequencia.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1073852411687570803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1073852411687570803'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/01/postgresql-e-identity-por-que-sequencia.html' title='PostgreSQL e IDENTITY: por que a sequência “desalinha” e como corrigir'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvj-9jD7MBORKWDgkzo-AP7c2kZpBlt0IcERzio6TQy7A7E3gk3o3vDnrbtrPVhqMuz6-Oyw-B5S_TF0ZcOMrowmmJKm7hUMDPGo391Q4igguENNjK5XD3qHbvGhNjUSoZybMdTVeJxoh4uSo8Ub_OqgT_cgK1KZsVLuyrdwZMOVeePHIEklIj2z4Emx6E/s72-w266-h400-c/postgree_identity.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-1649313173084312570</id><published>2026-01-21T10:21:00.004-03:00</published><updated>2026-01-21T18:15:52.120-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="softwares"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>Tabelas Padrão do Django: Autenticação, Permissões e Infraestrutura</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTjHUxoNGKOjcuVuBuumo4Cw956-7Y3J59FugQROpZpafrSTrUU1pl2iWa_mTQw3oT2jiUVKwasmExhsC-nqKuYJnbFsY2rCk5ixpCU_e_4yqM3YvW41ohyphenhyphenNvBj5dhrDzJvVaSHTMiHdfSxnswV34wMi6OzP-hSU4zHa153C-PJP2t0RMvw9wKcv9VDWlh/s1536/django.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;1024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTjHUxoNGKOjcuVuBuumo4Cw956-7Y3J59FugQROpZpafrSTrUU1pl2iWa_mTQw3oT2jiUVKwasmExhsC-nqKuYJnbFsY2rCk5ixpCU_e_4yqM3YvW41ohyphenhyphenNvBj5dhrDzJvVaSHTMiHdfSxnswV34wMi6OzP-hSU4zHa153C-PJP2t0RMvw9wKcv9VDWlh/w427-h640/django.png&quot; width=&quot;427&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;


&lt;!-- Post pronto para Blogger (cole no modo &quot;HTML&quot; do editor do Blogger) --&gt;

&lt;h1&gt;Entendendo as Tabelas Padrão do Django: Autenticação, Permissões e Infraestrutura&lt;/h1&gt;

&lt;p&gt;Quando iniciamos um projeto com Django, várias tabelas são criadas automaticamente no banco de dados.
Para quem olha pela primeira vez, nomes como &lt;code&gt;auth_group&lt;/code&gt;, &lt;code&gt;django_content_type&lt;/code&gt; ou &lt;code&gt;django_migrations&lt;/code&gt; podem parecer confusos.&lt;/p&gt;

&lt;p&gt;Este artigo explica &lt;strong&gt;para que serve cada uma dessas tabelas&lt;/strong&gt;, como elas se relacionam e &lt;strong&gt;quando você deve (ou não) interagir com elas&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Atenção:&lt;/strong&gt; a maioria dessas tabelas faz parte da &lt;strong&gt;infraestrutura do framework&lt;/strong&gt;. Elas &lt;strong&gt;não são tabelas de negócio&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr&gt;

&lt;h2&gt;Visão geral&lt;/h2&gt;

&lt;p&gt;As tabelas padrão do Django podem ser agrupadas em quatro grandes áreas:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Autenticação (quem é o usuário)&lt;/li&gt;
  &lt;li&gt;Autorização (o que o usuário pode fazer)&lt;/li&gt;
  &lt;li&gt;Infraestrutura interna do framework&lt;/li&gt;
  &lt;li&gt;Sessão e estado&lt;/li&gt;
&lt;/ol&gt;

&lt;hr&gt;

&lt;h2&gt;1. Tabelas de Autenticação&lt;/h2&gt;

&lt;h3&gt;&lt;code&gt;auth_user&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;É a tabela central de &lt;strong&gt;usuários autenticáveis&lt;/strong&gt; do Django.&lt;/p&gt;

&lt;p&gt;Ela armazena informações como:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;nome de usuário&lt;/li&gt;
  &lt;li&gt;senha (sempre em hash)&lt;/li&gt;
  &lt;li&gt;e-mail&lt;/li&gt;
  &lt;li&gt;flags de acesso (&lt;code&gt;is_active&lt;/code&gt;, &lt;code&gt;is_staff&lt;/code&gt;, &lt;code&gt;is_superuser&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;datas de login e criação&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa tabela é usada pelo sistema de login, logout e controle de acesso.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Boa prática:&lt;/strong&gt; use &lt;code&gt;auth_user&lt;/code&gt; para autenticação, não como entidade de negócio (ex.: funcionário, cliente, aluno).&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;2. Tabelas de Autorização (Permissões)&lt;/h2&gt;

&lt;h3&gt;&lt;code&gt;auth_permission&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Armazena &lt;strong&gt;permissões individuais&lt;/strong&gt; do sistema.&lt;/p&gt;

&lt;p&gt;Para cada model Django, o framework cria automaticamente permissões padrão, como:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;adicionar&lt;/li&gt;
  &lt;li&gt;alterar&lt;/li&gt;
  &lt;li&gt;excluir&lt;/li&gt;
  &lt;li&gt;visualizar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas permissões são usadas para controlar o acesso a funcionalidades específicas.&lt;/p&gt;

&lt;h3&gt;&lt;code&gt;auth_group&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Representa &lt;strong&gt;grupos de usuários&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Um grupo é basicamente um &lt;strong&gt;conjunto de permissões&lt;/strong&gt; que pode ser atribuído a vários usuários.&lt;/p&gt;

&lt;p&gt;Exemplos de grupos comuns:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Administradores&lt;/li&gt;
  &lt;li&gt;Editores&lt;/li&gt;
  &lt;li&gt;Leitores&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&lt;code&gt;auth_group_permissions&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Tabela associativa entre:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;grupos&lt;/li&gt;
  &lt;li&gt;permissões&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Define quais permissões cada grupo possui.&lt;/p&gt;

&lt;p&gt;É aqui que o Django resolve a pergunta:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“O que usuários deste grupo podem fazer?”&lt;/p&gt;&lt;/blockquote&gt;

&lt;h3&gt;&lt;code&gt;auth_user_groups&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Tabela associativa entre:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;usuários&lt;/li&gt;
  &lt;li&gt;grupos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Define a quais grupos cada usuário pertence.&lt;/p&gt;

&lt;p&gt;Um usuário pode estar em vários grupos ao mesmo tempo.&lt;/p&gt;

&lt;h3&gt;&lt;code&gt;auth_user_user_permissions&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Tabela associativa entre:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;usuários&lt;/li&gt;
  &lt;li&gt;permissões individuais&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Permite conceder permissões &lt;strong&gt;diretamente a um usuário&lt;/strong&gt;, sem passar por grupos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Boa prática:&lt;/strong&gt; usar grupos sempre que possível e evitar permissões diretas, pois elas dificultam a manutenção.&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;3. Tabelas de Infraestrutura do Django&lt;/h2&gt;

&lt;h3&gt;&lt;code&gt;django_content_type&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Registra todos os &lt;strong&gt;models instalados no projeto&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cada registro identifica:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;o app&lt;/li&gt;
  &lt;li&gt;o nome do model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa tabela é usada internamente pelo Django para:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;sistema de permissões&lt;/li&gt;
  &lt;li&gt;Django Admin&lt;/li&gt;
  &lt;li&gt;relacionamentos genéricos&lt;/li&gt;
  &lt;li&gt;logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ela é fundamental para o funcionamento interno do framework.&lt;/p&gt;

&lt;h3&gt;&lt;code&gt;django_admin_log&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Armazena logs de ações realizadas no &lt;strong&gt;Django Admin&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Registra informações como:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;qual usuário realizou a ação&lt;/li&gt;
  &lt;li&gt;qual objeto foi afetado&lt;/li&gt;
  &lt;li&gt;qual operação foi executada (criação, alteração, exclusão)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É muito útil para auditoria administrativa.&lt;/p&gt;

&lt;h3&gt;&lt;code&gt;django_migrations&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Controla quais &lt;strong&gt;migrações já foram aplicadas&lt;/strong&gt; no banco de dados.&lt;/p&gt;

&lt;p&gt;Cada vez que você executa &lt;code&gt;python manage.py migrate&lt;/code&gt;, o Django consulta essa tabela para saber:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;quais migrações já rodaram&lt;/li&gt;
  &lt;li&gt;quais ainda precisam ser aplicadas&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Importante:&lt;/strong&gt; nunca edite ou apague registros dessa tabela manualmente.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr&gt;

&lt;h2&gt;4. Tabela de Sessão&lt;/h2&gt;

&lt;h3&gt;&lt;code&gt;django_session&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Armazena as &lt;strong&gt;sessões ativas dos usuários&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;É usada para:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;manter usuários logados&lt;/li&gt;
  &lt;li&gt;armazenar dados temporários&lt;/li&gt;
  &lt;li&gt;mensagens flash&lt;/li&gt;
  &lt;li&gt;estados intermediários de formulários&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As sessões têm prazo de validade e podem ser limpas automaticamente.&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;Resumo rápido&lt;/h2&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;8&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse; width:100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align:left;&quot;&gt;Tabela&lt;/th&gt;
      &lt;th style=&quot;text-align:left;&quot;&gt;Finalidade&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;auth_user&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Usuários do sistema&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;auth_group&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Grupos / perfis&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;auth_permission&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Permissões&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;auth_group_permissions&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Grupo ↔ Permissão&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;auth_user_groups&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Usuário ↔ Grupo&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;auth_user_user_permissions&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Permissões diretas&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;django_content_type&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Registro de models&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;django_admin_log&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Log do admin&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;django_migrations&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Controle de migrations&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;django_session&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Sessões&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;hr&gt;

&lt;h2&gt;Boas práticas gerais&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Não manipule essas tabelas diretamente via SQL.&lt;/li&gt;
  &lt;li&gt;Use sempre a API do Django (models, admin, permissions).&lt;/li&gt;
  &lt;li&gt;Centralize permissões em grupos.&lt;/li&gt;
  &lt;li&gt;Use &lt;code&gt;auth_user&lt;/code&gt; apenas para autenticação.&lt;/li&gt;
  &lt;li&gt;Separe entidades de negócio em tabelas próprias.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;As tabelas padrão do Django formam a &lt;strong&gt;base de segurança e funcionamento do framework&lt;/strong&gt;.
Entendê-las ajuda a:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;modelar sistemas mais seguros&lt;/li&gt;
  &lt;li&gt;evitar erros em produção&lt;/li&gt;
  &lt;li&gt;criar arquiteturas mais limpas e escaláveis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mesmo que você nunca precise mexer nelas diretamente, saber &lt;strong&gt;para que cada uma existe&lt;/strong&gt; faz toda a diferença.&lt;/p&gt;

&lt;!-- Fim do post --&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/1649313173084312570/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2026/01/tabelaspadraodjango.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1649313173084312570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1649313173084312570'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2026/01/tabelaspadraodjango.html' title='Tabelas Padrão do Django: Autenticação, Permissões e Infraestrutura'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTjHUxoNGKOjcuVuBuumo4Cw956-7Y3J59FugQROpZpafrSTrUU1pl2iWa_mTQw3oT2jiUVKwasmExhsC-nqKuYJnbFsY2rCk5ixpCU_e_4yqM3YvW41ohyphenhyphenNvBj5dhrDzJvVaSHTMiHdfSxnswV34wMi6OzP-hSU4zHa153C-PJP2t0RMvw9wKcv9VDWlh/s72-w427-h640-c/django.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-1459243751660824633</id><published>2025-12-17T20:00:00.009-03:00</published><updated>2025-12-17T20:00:00.118-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>Como mover uma tabela de um schema para outro no PostgreSQL 📦 </title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh88lQqQn3brmeEVYlhdXqY8ytVwkiHAwaYRDSonTGogfXnmowit9CbR9wZBYPLNIeq5aq2p34fbNyhgRnhkjjilro7Y2dWyJFLhYuv2Cnb5P0xRQ571NEThNggMY3bq11ieQC2iiPQQkgrmrIi2riSNYVkJh86FWX1_0QM79PXvNt7YIsCLW9oi1h3ZUXY/s1024/mover_tabela_schema.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh88lQqQn3brmeEVYlhdXqY8ytVwkiHAwaYRDSonTGogfXnmowit9CbR9wZBYPLNIeq5aq2p34fbNyhgRnhkjjilro7Y2dWyJFLhYuv2Cnb5P0xRQ571NEThNggMY3bq11ieQC2iiPQQkgrmrIi2riSNYVkJh86FWX1_0QM79PXvNt7YIsCLW9oi1h3ZUXY/s320/mover_tabela_schema.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h1&gt;📦 Como mover uma tabela de um schema para outro no PostgreSQL&lt;/h1&gt;

&lt;p&gt;
Organizar tabelas em schemas é uma prática essencial para manter bancos de dados grandes 
bem estruturados — especialmente em aplicações com múltiplos módulos, equipes ou microserviços.
&lt;/p&gt;

&lt;p&gt;
Mas o que fazer quando você precisa mover uma tabela existente para outro schema?  
Felizmente, o PostgreSQL oferece um comando simples e poderoso para isso.
&lt;/p&gt;

&lt;h2&gt;✅ Comando oficial: ALTER TABLE ... SET SCHEMA&lt;/h2&gt;

&lt;p&gt;
Para mover uma tabela de um schema para outro, basta executar:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ALTER TABLE schema_atual.nome_da_tabela 
SET SCHEMA novo_schema;&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;📌 Exemplo prático&lt;/h3&gt;

&lt;p&gt;Mover a tabela &lt;strong&gt;usuarios&lt;/strong&gt; de &lt;code&gt;public&lt;/code&gt; para &lt;code&gt;app_core&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ALTER TABLE public.usuarios
SET SCHEMA app_core;&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2&gt;📁 O que acontece quando você move uma tabela?&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;As constraints (PK, FK, UNIQUE) vão junto automaticamente ✔️&lt;/li&gt;
  &lt;li&gt;As foreign keys continuam funcionando ✔️&lt;/li&gt;
  &lt;li&gt;Views e funções que referem o schema antigo podem parar de funcionar ⚠️&lt;/li&gt;
  &lt;li&gt;Triggers, policies e permissões seguem anexadas à tabela ✔️&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Ou seja: o PostgreSQL move toda a estrutura interna de forma segura, 
mas você precisa revisar apenas objetos que usam o nome qualificado do schema.
&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;🔎 Verificando dependências antes de mover&lt;/h2&gt;

&lt;p&gt;Quer saber onde a tabela está sendo usada?&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SELECT *
FROM pg_depend d
JOIN pg_class c ON d.refobjid = c.oid
WHERE c.relname = &#39;usuarios&#39;;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
Isso ajuda a identificar views, funções ou objetos que referenciam a tabela.
&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;🚚 Mover todas as tabelas de um schema automaticamente&lt;/h2&gt;

&lt;p&gt;
Se você precisa mover várias tabelas de uma vez, use o bloco DO abaixo:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DO $$
DECLARE r RECORD;
BEGIN
  FOR r IN
    SELECT tablename
    FROM pg_tables
    WHERE schemaname = &#39;public&#39;
  LOOP
    EXECUTE format(&#39;ALTER TABLE public.%I SET SCHEMA app_core;&#39;, r.tablename);
  END LOOP;
END$$;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Simples e eficiente para reorganizar um banco inteiro.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;🏗️ Quando faz sentido mover tabelas para outro schema?&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Separar tabelas internas das tabelas da aplicação&lt;/li&gt;
  &lt;li&gt;Organizar módulos diferentes (ex.: &lt;code&gt;financeiro&lt;/code&gt;, &lt;code&gt;usuarios&lt;/code&gt;, &lt;code&gt;core&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Melhorar segurança com permissões por schema&lt;/li&gt;
  &lt;li&gt;Evitar poluição do schema &lt;code&gt;public&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Criar schemas bem definidos melhora a manutenção, a governança de dados e 
a colaboração entre equipes de desenvolvimento.
&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;🎯 Conclusão&lt;/h2&gt;

&lt;p&gt;
Mover tabelas entre schemas no PostgreSQL é simples com &lt;code&gt;ALTER TABLE ... SET SCHEMA&lt;/code&gt;, 
e essa prática ajuda a manter sua estrutura de banco de dados limpa, organizada e modular.
&lt;/p&gt;

&lt;p&gt;
Se você utiliza Django, Supabase ou microserviços, separar suas tabelas em schemas diferentes 
pode ser um grande avanço na arquitetura do projeto.
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gostou do conteúdo?&lt;/strong&gt; Compartilhe com outros desenvolvedores! 🚀&lt;/p&gt;



&lt;div style=&quot;background: rgb(248, 250, 255); border-radius: 10px; border: 2px solid rgb(74, 144, 226); max-width: 650px; padding: 15px;&quot;&gt;

  &lt;h2 style=&quot;color: #4a90e2; text-align: center;&quot;&gt;📦 PostgreSQL: Movendo Tabelas Entre Schemas&lt;/h2&gt;

  &lt;h3 style=&quot;color: #333333;&quot;&gt;1️⃣ Comando Principal&lt;/h3&gt;
  &lt;pre style=&quot;background: rgb(238, 244, 255); border-left: 4px solid rgb(74, 144, 226); padding: 10px;&quot;&gt;ALTER TABLE schema_atual.tabela
SET SCHEMA novo_schema;
  &lt;/pre&gt;

  &lt;p&gt;✔ Simples, rápido e seguro.&lt;br /&gt;
     ✔ Move a tabela inteira, incluindo PK, FK, UNIQUE e índices.&lt;/p&gt;

  &lt;hr /&gt;

  &lt;h3 style=&quot;color: #333333;&quot;&gt;2️⃣ O que Acontece ao Mover?&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;🔗 FKs, PKs e UNIQUE vão junto automaticamente.&lt;/li&gt;
    &lt;li&gt;🏷 Views e funções que referem o schema antigo podem precisar de ajuste.&lt;/li&gt;
    &lt;li&gt;⚙ Permissões e triggers permanecem funcionando.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr /&gt;

  &lt;h3 style=&quot;color: #333333;&quot;&gt;3️⃣ Verificar Dependências Antes&lt;/h3&gt;
  &lt;pre style=&quot;background: rgb(238, 244, 255); border-left: 4px solid rgb(74, 144, 226); padding: 10px;&quot;&gt;SELECT *
FROM pg_depend d
JOIN pg_class c ON d.refobjid = c.oid
WHERE c.relname = &#39;nome_da_tabela&#39;;
  &lt;/pre&gt;

  &lt;p&gt;🔍 Útil para localizar views, triggers e funções dependentes.&lt;/p&gt;

  &lt;hr /&gt;

  &lt;h3 style=&quot;color: #333333;&quot;&gt;4️⃣ Mover Todas as Tabelas de um Schema&lt;/h3&gt;
  &lt;pre style=&quot;background: rgb(238, 244, 255); border-left: 4px solid rgb(74, 144, 226); padding: 10px;&quot;&gt;DO $$
DECLARE r RECORD;
BEGIN
  FOR r IN
    SELECT tablename
    FROM pg_tables
    WHERE schemaname = &#39;public&#39;
  LOOP
    EXECUTE format(&#39;ALTER TABLE public.%I SET SCHEMA app_core;&#39;, r.tablename);
  END LOOP;
END$$;
  &lt;/pre&gt;

  &lt;p&gt;🚚 Excelente para reorganizar o banco inteiro.&lt;/p&gt;

  &lt;hr /&gt;

  &lt;h3 style=&quot;color: #333333;&quot;&gt;5️⃣ Quando Usar Schemas Separados?&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;📁 Separar tabelas internas e tabelas de aplicação.&lt;/li&gt;
    &lt;li&gt;🧩 Organizar módulos (financeiro, usuários, core etc.).&lt;/li&gt;
    &lt;li&gt;🔐 Melhorar segurança com permissões por schema.&lt;/li&gt;
    &lt;li&gt;🧹 Evitar poluição do schema &lt;code&gt;public&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr /&gt;

  &lt;h3 style=&quot;color: #4a90e2; text-align: center;&quot;&gt;🎯 Dica Final&lt;/h3&gt;
  &lt;p style=&quot;text-align: center;&quot;&gt;
    &lt;strong&gt;Use schemas para modularidade, segurança e organização do banco.&lt;br /&gt;
    Mover tabelas é seguro e simples com SET SCHEMA.&lt;/strong&gt;
  &lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;



&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNinM_Hfxnng96K5X0_CHfNqU9jJQEoucaoO45sS_APN1AfzFkAc_CaGwMJIgseCPfNsyg4cSA8TFfnoeYsLJbyLJydVl-kRnNArvRQhd08En02_6_iOmIiBG5-Pcg-W4f3Am5SMV9Oydj-0q59mJHH4lXLlsjR-ty2fbV5Fp_k-eTgcQdfkof5VXdwE_f/s2752/mover_tabela_schema_info.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;2752&quot; height=&quot;358&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNinM_Hfxnng96K5X0_CHfNqU9jJQEoucaoO45sS_APN1AfzFkAc_CaGwMJIgseCPfNsyg4cSA8TFfnoeYsLJbyLJydVl-kRnNArvRQhd08En02_6_iOmIiBG5-Pcg-W4f3Am5SMV9Oydj-0q59mJHH4lXLlsjR-ty2fbV5Fp_k-eTgcQdfkof5VXdwE_f/w640-h358/mover_tabela_schema_info.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/1459243751660824633/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2025/12/como-mover-uma-tabela-de-um-schema-para.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1459243751660824633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1459243751660824633'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2025/12/como-mover-uma-tabela-de-um-schema-para.html' title='Como mover uma tabela de um schema para outro no PostgreSQL 📦 '/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh88lQqQn3brmeEVYlhdXqY8ytVwkiHAwaYRDSonTGogfXnmowit9CbR9wZBYPLNIeq5aq2p34fbNyhgRnhkjjilro7Y2dWyJFLhYuv2Cnb5P0xRQ571NEThNggMY3bq11ieQC2iiPQQkgrmrIi2riSNYVkJh86FWX1_0QM79PXvNt7YIsCLW9oi1h3ZUXY/s72-c/mover_tabela_schema.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-6262299456553007338</id><published>2025-12-09T21:00:00.006-03:00</published><updated>2026-01-21T18:16:06.614-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>Git: Comandos para Desfazer e Deletar</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtenFWZwo1LT8rzP8yAuDbl_CRQG31DMQV9XdMVnksW-UnLUD0QhUkbxpdIZz0QX50nKQZCQG_Gp-mK4zOxdgkNLTz9nMe9N3rTC8A3OQm3xE0Hjw7SuR3duc2Z7eVS6EH31dQyoggg4h2oijo1KK_p5bWQobiSZloe6IJAv3tJnDWrtUTEjAxRGaMYa87/s2752/git%20descomplique.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;2752&quot; height=&quot;179&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtenFWZwo1LT8rzP8yAuDbl_CRQG31DMQV9XdMVnksW-UnLUD0QhUkbxpdIZz0QX50nKQZCQG_Gp-mK4zOxdgkNLTz9nMe9N3rTC8A3OQm3xE0Hjw7SuR3duc2Z7eVS6EH31dQyoggg4h2oijo1KK_p5bWQobiSZloe6IJAv3tJnDWrtUTEjAxRGaMYa87/s320/git%20descomplique.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Se você trabalha com programação, cedo ou tarde vai precisar dominar os comandos essenciais do &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+Git&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;Git&lt;/a&gt;. Neste guia prático, você vai aprender de forma simples como &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=apagar+branches+Git&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;apagar branches&lt;/a&gt;, &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=desfazer+commits+Git&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;desfazer commits&lt;/a&gt;, &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=criar+novos+branches+Git&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;criar novos branches&lt;/a&gt; e trabalhar corretamente com o &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+GitLab&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;GitLab&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3&gt;✅ Como Apagar um Branch com Segurança&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;⚠️ Erro comum:&lt;/strong&gt; não é possível apagar o branch que está em uso no momento. O Git protege você contra isso.&lt;/p&gt;

&lt;h4&gt;1️⃣ Volte para o branch principal&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=git+checkout+main+example&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;git checkout main&lt;/a&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;2️⃣ Apague o branch local&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=git+branch+-D+nome_do_branch&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;git branch -D nome_do_branch&lt;/a&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;3️⃣ (Opcional) Apague o branch remoto no GitLab&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=git+push+origin+--delete+nome_do_branch&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;git push origin --delete nome_do_branch&lt;/a&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;h3&gt;✅ 4 Maneiras de Desfazer um Commit&lt;/h3&gt;

&lt;h4&gt;🔹 1. Corrigir mensagem ou incluir arquivo (mantém alterações)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=git+reset+--soft+HEAD~1&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;git reset --soft HEAD~1&lt;/a&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Desfaz o commit, mas mantém os arquivos no estado de modificação.&lt;/p&gt;

&lt;h4&gt;🔹 2. Descartar completamente o último commit&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=git+reset+--hard+HEAD~1&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;git reset --hard HEAD~1&lt;/a&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;⚠️ Apaga tudo permanentemente.&lt;/p&gt;

&lt;h4&gt;🔹 3. Desfazer um commit que já foi enviado (push)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=git+revert+HEAD&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;git revert HEAD&lt;/a&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cria um novo commit que desfaz o anterior (modo mais seguro).&lt;/p&gt;

&lt;h4&gt;🔹 4. Apagar commit até no repositório remoto (perigoso)&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;git reset --hard HEAD~1
git push origin main --force&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;h3&gt;✅ Ciclo de Vida de um Branch no GitLab&lt;/h3&gt;

&lt;h4&gt;🚀 1. Enviar (push) seu novo branch&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;git push -u origin nome_do_branch&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;🗑️ 2. Apagar a cópia local após o merge&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;git branch -d nome_do_branch&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;🌐 3. Apagar o branch remoto&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;git push origin --delete nome_do_branch&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;💡 Dica Pro:&lt;/strong&gt; ao criar um Merge Request (MR) no GitLab, marque a opção &lt;em&gt;“Delete source branch after merge”&lt;/em&gt; para apagar automaticamente.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3&gt;✅ Como Criar um Novo Branch para uma Nova Funcionalidade&lt;/h3&gt;

&lt;h4&gt;1️⃣ Vá para a branch principal e atualize&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;git checkout main
git pull origin main&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;2️⃣ Crie e já entre no novo branch&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;git checkout -b feature/nova-funcionalidade&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;3️⃣ Envie para o GitLab&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;git push -u origin feature/nova-funcionalidade&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;h3&gt;✅ Como Renomear um Branch&lt;/h3&gt;

&lt;h4&gt;Se estiver no próprio branch:&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=git+branch+-m+novo_nome&amp;amp;bbid=6212976660383299815&amp;amp;bpid=6262299456553007338&quot; target=&quot;_blank&quot;&gt;git branch -m novo_nome&lt;/a&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Se for outro branch:&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;git branch -m nome_antigo novo_nome&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Atualizar no GitLab:&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;git push -u origin novo_nome
git push origin --delete nome_antigo&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;h3&gt;✅ Resumo Rápido dos Comandos Essenciais&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Criar branch:&lt;/strong&gt; git checkout -b feature/minha-feature&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Enviar branch:&lt;/strong&gt; git push -u origin minha-feature&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Apagar branch local:&lt;/strong&gt; git branch -d minha-feature&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Apagar branch remoto:&lt;/strong&gt; git push origin --delete minha-feature&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Desfazer commit mantendo arquivos:&lt;/strong&gt; git reset --soft HEAD~1&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Desfazer commit apagando tudo:&lt;/strong&gt; git reset --hard HEAD~1&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Desfazer commit já enviado:&lt;/strong&gt; git revert HEAD&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h3&gt;🎯 Conclusão&lt;/h3&gt;

&lt;p&gt;Dominar esses comandos do Git e o fluxo com GitLab é essencial para trabalhar com qualidade, segurança e produtividade. Com esse guia, você evita erros comuns, mantém seu repositório limpo e trabalha alinhado com boas práticas profissionais.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 Bons commits!&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/6262299456553007338/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2025/12/git-comandos-para-desfazer-e-deletar.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/6262299456553007338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/6262299456553007338'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2025/12/git-comandos-para-desfazer-e-deletar.html' title='Git: Comandos para Desfazer e Deletar'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtenFWZwo1LT8rzP8yAuDbl_CRQG31DMQV9XdMVnksW-UnLUD0QhUkbxpdIZz0QX50nKQZCQG_Gp-mK4zOxdgkNLTz9nMe9N3rTC8A3OQm3xE0Hjw7SuR3duc2Z7eVS6EH31dQyoggg4h2oijo1KK_p5bWQobiSZloe6IJAv3tJnDWrtUTEjAxRGaMYa87/s72-c/git%20descomplique.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-4770576657826528400</id><published>2025-12-07T21:18:00.008-03:00</published><updated>2025-12-07T22:04:18.540-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dicas"/><category scheme="http://www.blogger.com/atom/ns#" term="Hardware"/><title type='text'>Como Resetar a Epson L3150 - Almofada de Tinta Cheia</title><content type='html'>  &lt;h1&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDybR_icFMF7zej8drAPDhMzv-PieTFhyphenhyphen1wXGnfAEUMmAUPxxTxG8wLue4Qtgo_80Qq4Bd8u0fStaVQbRQocPtC1tS55y6SpGLkuxSjvMFDinGbPI6RqsKeZAMPBKSAMkwmFgOISZhyAjKXO5q-6VRzYG1_IF76l2JrvP8xDdjR92Urez3aFlpMY3c8W74/s1024/2%20de%20ago.%20de%202025,%2023_50_40.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDybR_icFMF7zej8drAPDhMzv-PieTFhyphenhyphen1wXGnfAEUMmAUPxxTxG8wLue4Qtgo_80Qq4Bd8u0fStaVQbRQocPtC1tS55y6SpGLkuxSjvMFDinGbPI6RqsKeZAMPBKSAMkwmFgOISZhyAjKXO5q-6VRzYG1_IF76l2JrvP8xDdjR92Urez3aFlpMY3c8W74/s320/2%20de%20ago.%20de%202025,%2023_50_40.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;🖨️ Como Resetar a Epson L3150 com WIC Reset Utility (Windows, macOS e Linux) – GRÁTIS!&lt;/h1&gt;

  &lt;p&gt;Se sua impressora Epson parou de funcionar e exibe mensagens como &lt;strong&gt;“A almofada de tinta da impressora está no fim da vida útil”&lt;/strong&gt;, saiba que o problema é reversível. Isso acontece quando a impressora atinge o limite programado de uso da &lt;em&gt;waste ink pad&lt;/em&gt; (almofada de tinta). 😖&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;A boa notícia?&lt;/strong&gt; Você pode resetar isso &lt;strong&gt;gratuitamente&lt;/strong&gt; com a &lt;strong&gt;Trial Key&lt;/strong&gt; usando o utilitário &lt;strong&gt;WIC Reset Utility&lt;/strong&gt; – compatível com &lt;strong&gt;Windows&lt;/strong&gt;, &lt;strong&gt;macOS (Intel)&lt;/strong&gt; e &lt;strong&gt;Linux&lt;/strong&gt;. Veja o passo a passo completo! ✅&lt;/p&gt;

  &lt;hr /&gt;

  &lt;h2&gt;🔧 O que você vai precisar&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;🟢 Sua &lt;strong&gt;impressora Epson compatível&lt;/strong&gt; (como a L3150)&amp;nbsp;🖨️&lt;/li&gt;
    &lt;li&gt;🟢 Um computador com &lt;strong&gt;Windows, macOS (Intel)&lt;/strong&gt; ou &lt;strong&gt;Linux&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;🟢 Conexão USB com a impressora&lt;/li&gt;
    &lt;li&gt;🟢 &lt;a href=&quot;https://www.wic.support/download/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Baixar o WIC Reset Utility ou iWIC aqui&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;🟢 Usar a &lt;strong&gt;chave de teste gratuita (TRIAL)&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;🟢 Almofada absorvente (&amp;nbsp;🇧🇷&amp;nbsp;&lt;a href=&quot;https://www.amazon.com.br/s?k=almofada+de+tinta+da+epson+l3150&amp;amp;tag=dms0ae-20&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;BR&lt;/a&gt;&amp;nbsp;/&amp;nbsp;🇺🇲 &amp;nbsp;&lt;a href=&quot;https://amzn.to/45z9x96&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;US&lt;/a&gt; /&amp;nbsp;🇨🇳&amp;nbsp;&lt;a href=&quot;https://s.click.aliexpress.com/e/_oBxyQc9&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;CH&lt;/a&gt; )&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;🧭 Etapas do Reset Gratuito&lt;/h2&gt;

  &lt;h3&gt;1. 🔽 Baixe o WIC Reset Utility&lt;/h3&gt;
  &lt;p&gt;Acesse o site oficial:&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;https://www.wic.support/download/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.wic.support/download/&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;Escolha a versão certa para o seu sistema:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;💻 &lt;strong&gt;Windows&lt;/strong&gt; → WIC Reset Utility for Windows&lt;/li&gt;
    &lt;li&gt;🍎 &lt;strong&gt;Mac (Intel)&lt;/strong&gt; → iWIC.dmg&lt;/li&gt;
    &lt;li&gt;🐧 &lt;strong&gt;Linux&lt;/strong&gt; → Versão .sh para terminal&lt;/li&gt;
  &lt;/ul&gt;&lt;div&gt;* lembre sempre de verificar se tem algum vírus nos arquivos.&lt;/div&gt;

  &lt;h3&gt;2. 🖥️ Conecte sua impressora via USB&lt;/h3&gt;
  &lt;p&gt;Ligue sua impressora Epson e conecte ao computador por cabo USB. &lt;strong&gt;Não use Wi-Fi&lt;/strong&gt; neste processo.&lt;/p&gt;&lt;p&gt;Aparentemente a versão MAC permite o uso via Wi-Fi, se conseguir coloque nos comentários.&lt;/p&gt;

  &lt;h3&gt;3. 🚀 Execute o utilitário&lt;/h3&gt;
  &lt;p&gt;Abra o WIC (ou iWIC/iWIC Linux) e aguarde ele detectar a impressora.&amp;nbsp;&lt;/p&gt;

  &lt;h3&gt;4. 🧪 Use a Trial Key Gratuita&lt;/h3&gt;
  &lt;p&gt;Clique em &lt;strong&gt;“Read Waste Counters”&lt;/strong&gt; para ver o estado das almofadas de tinta.&lt;/p&gt;
  &lt;p&gt;Depois, clique em &lt;strong&gt;“Reset Waste Ink Counters”&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Na tela que pede a chave de ativação, digite:&lt;/p&gt;
  &lt;pre&gt;&lt;code&gt;TRIAL&lt;/code&gt;&lt;/pre&gt;
  &lt;p&gt;🟢 A trial key irá resetar os contadores &lt;strong&gt;para 80%&lt;/strong&gt; – o suficiente para a impressora voltar a funcionar!&lt;/p&gt;

  &lt;h3&gt;5. ✅ Finalize&lt;/h3&gt;
  &lt;p&gt;Aguarde a conclusão do processo. Quando solicitado, &lt;strong&gt;reinicie a impressora&lt;/strong&gt;. Ela voltará a imprimir normalmente!&lt;/p&gt;

  &lt;hr /&gt;

  &lt;h2&gt;&lt;/h2&gt;

  &lt;h2&gt;📝 Conclusão&lt;/h2&gt;

  &lt;p&gt;🧼 Trocar as almofadas físicas de tinta não basta: é necessário &lt;strong&gt;informar à impressora que isso foi feito&lt;/strong&gt;.&lt;/p&gt;
  &lt;p&gt;Com o &lt;strong&gt;WIC Reset Utility&lt;/strong&gt;, você pode fazer isso em minutos – sem risco, sem pagar, sem complicação.&lt;/p&gt;
  &lt;p&gt;Use a versão grátis com a &lt;strong&gt;Trial Key&lt;/strong&gt; e economize tempo e dinheiro!&lt;/p&gt;

  &lt;p&gt;Se gostou, compartilhe com quem tem uma Epson travada em casa! 💬&lt;/p&gt;

  &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHsGIEkZnFMaCyRaJR6g0Gc2Dk3qZHXtveveIAp5F7hiug_CoQ-4QoxBq-mQFFPguNMyuXn6weoPiDp2SPT95r01KjUZTBbOjpPWGdwyqELSkM9nvtNRzmibJKby5TEOFPbrFvYDm-euLeJXLEOd397ABeQ3wqlejmjn2MF8ZVzwaYvVcbh-VKDRj_c0fS/s2752/resetL3150.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;2752&quot; height=&quot;179&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHsGIEkZnFMaCyRaJR6g0Gc2Dk3qZHXtveveIAp5F7hiug_CoQ-4QoxBq-mQFFPguNMyuXn6weoPiDp2SPT95r01KjUZTBbOjpPWGdwyqELSkM9nvtNRzmibJKby5TEOFPbrFvYDm-euLeJXLEOd397ABeQ3wqlejmjn2MF8ZVzwaYvVcbh-VKDRj_c0fS/s320/resetL3150.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/5DnHqAbWQhs&quot; width=&quot;320&quot; youtube-src-id=&quot;5DnHqAbWQhs&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://youtu.be/5DnHqAbWQhs&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://youtu.be/5DnHqAbWQhs&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/4770576657826528400/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2025/08/como-resetar-epson-l3150-almofada-de.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4770576657826528400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4770576657826528400'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2025/08/como-resetar-epson-l3150-almofada-de.html' title='Como Resetar a Epson L3150 - Almofada de Tinta Cheia'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDybR_icFMF7zej8drAPDhMzv-PieTFhyphenhyphen1wXGnfAEUMmAUPxxTxG8wLue4Qtgo_80Qq4Bd8u0fStaVQbRQocPtC1tS55y6SpGLkuxSjvMFDinGbPI6RqsKeZAMPBKSAMkwmFgOISZhyAjKXO5q-6VRzYG1_IF76l2JrvP8xDdjR92Urez3aFlpMY3c8W74/s72-c/2%20de%20ago.%20de%202025,%2023_50_40.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-4368375114957091169</id><published>2025-11-24T22:03:00.006-03:00</published><updated>2025-11-25T14:13:07.213-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>FastAPI + HTMX vs Django em times com IA, Cursor e GitLab</title><content type='html'>&lt;article&gt;
  &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Qfucy5PSH6wsKxvZbJ1xR-JAfax2WVGhyphenhyphenDGh3Bwe8irc7aPn1TAU902BvE8T5xkkgTrpSH00qMoWtP2gPibo00irl8xvt2_bbLYm36VuAyMvU3r0aKJp-_blKaaePy7Wq_XA9TPAoyi9-W8aNvWD3oYYD6lZHCgU9P55ZeCjDch5uyFNyRvtZUMNNWLX/s1024/ChatGPT%20Image%2025%20de%20nov.%20de%202025,%2014_11_54.png&quot; imageanchor=&quot;1&quot; rel=&quot;nofollow&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Qfucy5PSH6wsKxvZbJ1xR-JAfax2WVGhyphenhyphenDGh3Bwe8irc7aPn1TAU902BvE8T5xkkgTrpSH00qMoWtP2gPibo00irl8xvt2_bbLYm36VuAyMvU3r0aKJp-_blKaaePy7Wq_XA9TPAoyi9-W8aNvWD3oYYD6lZHCgU9P55ZeCjDch5uyFNyRvtZUMNNWLX/s320/ChatGPT%20Image%2025%20de%20nov.%20de%202025,%2014_11_54.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h1&gt;FastAPI + HTMX vs Django em times com IA, Cursor e GitLab 🚀&lt;/h1&gt;

  &lt;p&gt;
    Quando falamos em construir um &lt;strong&gt;único sistema grande, com vários módulos&lt;/strong&gt; 
    (usuários, financeiro, relatórios, etc.), usando 
    &lt;strong&gt;PostgreSQL&lt;/strong&gt; e apoio pesado de &lt;strong&gt;IA no Cursor/Vibe Code&lt;/strong&gt;, 
    a escolha entre &lt;strong&gt;FastAPI + HTMX&lt;/strong&gt; e &lt;strong&gt;Django&lt;/strong&gt; 
    vai muito além de performance. Entra na conta a experiência do time com 
    &lt;strong&gt;trabalho colaborativo&lt;/strong&gt;, &lt;strong&gt;Git&lt;/strong&gt;, 
    &lt;strong&gt;branches&lt;/strong&gt; e &lt;strong&gt;merge requests&lt;/strong&gt; no GitLab. 😅
  &lt;/p&gt;

  &lt;h2&gt;1. Visão geral dos dois cenários&lt;/h2&gt;

  &lt;h3&gt;FastAPI + HTMX&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;FastAPI&lt;/strong&gt;: framework moderno, assíncrono, tipado e ótimo para APIs.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;HTMX&lt;/strong&gt;: permite interações dinâmicas sem precisar de SPA pesada.&lt;/li&gt;
    &lt;li&gt;Arquitetura mais aberta: você decide ORM, auth, estrutura de pastas, etc.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;Django&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Framework &quot;baterias incluídas&quot;: ORM, auth, templates, admin, etc.&lt;/li&gt;
    &lt;li&gt;Estrutura de projeto bem definida (apps, urls, settings).&lt;/li&gt;
    &lt;li&gt;Excelente para um &lt;strong&gt;monolito organizado em vários apps&lt;/strong&gt;.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;2. IA escrevendo código: quem se beneficia mais? 🤖&lt;/h2&gt;

  &lt;p&gt;
    Com o &lt;strong&gt;Cursor&lt;/strong&gt; e o &lt;strong&gt;Vibe Code&lt;/strong&gt; gerando trechos de código, 
    o framework que tiver &lt;strong&gt;padrões mais previsíveis&lt;/strong&gt; sai na frente.
  &lt;/p&gt;

  &lt;h3&gt;Django + IA&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Apps, models, views, urls, templates: tudo segue um padrão conhecido.&lt;/li&gt;
    &lt;li&gt;A IA &quot;sabe&quot; preencher esse esqueleto com muita facilidade.&lt;/li&gt;
    &lt;li&gt;Menos risco de virar um código todo fragmentado com vários estilos diferentes.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;FastAPI + HTMX + IA&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;A IA também lida muito bem com FastAPI.&lt;/li&gt;
    &lt;li&gt;Mas, como a arquitetura é mais flexível, cada dev pode induzir a IA a 
        criar estruturas diferentes (pastas, serviços, camadas).&lt;/li&gt;
    &lt;li&gt;Isto exige um &lt;strong&gt;guia de arquitetura bem definido&lt;/strong&gt; 
        para humanos e IA seguirem o mesmo padrão.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;3. Comparativo rápido 💡&lt;/h2&gt;

  &lt;table border=&quot;1&quot; cellpadding=&quot;6&quot; cellspacing=&quot;0&quot;&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th&gt;Critério&lt;/th&gt;
        &lt;th&gt;FastAPI + HTMX&lt;/th&gt;
        &lt;th&gt;Django&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;Arquitetura&lt;/td&gt;
        &lt;td&gt;Flexível; você define camadas e padrões.&lt;/td&gt;
        &lt;td&gt;Mais opinativo; estrutura de apps bem definida.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;IA (Cursor / Vibe Code)&lt;/td&gt;
        &lt;td&gt;Funciona muito bem, mas exige guia de estilo forte.&lt;/td&gt;
        &lt;td&gt;IA se apoia em padrões consolidados do framework.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Curva de aprendizado em time colaborativo&lt;/td&gt;
        &lt;td&gt;Maior risco de divergência de estilos entre módulos.&lt;/td&gt;
        &lt;td&gt;Mais “trilhos” para o time seguir junto.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Admin interno&lt;/td&gt;
        &lt;td&gt;Depende de bibliotecas externas ou código próprio.&lt;/td&gt;
        &lt;td&gt;&lt;strong&gt;Django Admin&lt;/strong&gt; pronto para uso.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Microservices no futuro&lt;/td&gt;
        &lt;td&gt;Naturalmente amigável a divisão em serviços.&lt;/td&gt;
        &lt;td&gt;Dá para fazer, mas o “modo padrão” é monolito.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Integração com PostgreSQL&lt;/td&gt;
        &lt;td&gt;Ótima (SQLAlchemy, etc.).&lt;/td&gt;
        &lt;td&gt;Ótima (Django ORM com suporte nativo).&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;Tamanho do time (2–4 devs)&lt;/td&gt;
        &lt;td&gt;Bom, se todos seguirem o mesmo padrão.&lt;/td&gt;
        &lt;td&gt;Muito bom, especialmente com menos experiência em Git.&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;

  &lt;h2&gt;4. Organização do repositório e módulos 🧩&lt;/h2&gt;

  &lt;p&gt;
    Em ambos os casos, faz muita diferença ter um 
    &lt;strong&gt;monorepo bem organizado no GitLab&lt;/strong&gt;, 
    com módulos claros e responsabilidades definidas.
  &lt;/p&gt;

  &lt;h3&gt;Exemplo de organização com Django&lt;/h3&gt;
  &lt;pre&gt;project/
  manage.py
  project/
    settings.py
    urls.py
  apps/
    usuarios/
      models.py
      views.py
      urls.py
      templates/usuarios/
    financeiro/
    relatorios/
  &lt;/pre&gt;

  &lt;p&gt;
    Cada app representa um módulo de negócio.  
    Isso facilita o trabalho em paralelo: um dev cuida de &lt;strong&gt;usuarios&lt;/strong&gt;, outro de 
    &lt;strong&gt;financeiro&lt;/strong&gt;, e assim por diante.
  &lt;/p&gt;

  &lt;h3&gt;Exemplo de organização com FastAPI&lt;/h3&gt;
  &lt;pre&gt;app/
  main.py
  core/
  db/
  modules/
    usuarios/
      routers.py
      models.py
      schemas.py
      services.py
      templates/
    financeiro/
    relatorios/
  &lt;/pre&gt;

  &lt;p&gt;
    Aqui, os &lt;strong&gt;routers&lt;/strong&gt; e &lt;strong&gt;services&lt;/strong&gt; de cada módulo ficam 
    agrupados. Também é uma boa abordagem, mas depende mais de disciplina da equipe.
  &lt;/p&gt;

  &lt;h2&gt;5. GitLab, branches e merges para iniciantes em trabalho conjunto 🧵&lt;/h2&gt;

  &lt;p&gt;
    Mesmo com desenvolvedores experientes em outras tecnologias, 
    a parte de &lt;strong&gt;trabalhar no mesmo app&lt;/strong&gt; e fazer 
    &lt;strong&gt;merge de código&lt;/strong&gt; é um desafio à parte.
  &lt;/p&gt;

  &lt;h3&gt;Fluxo simples recomendado&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Manter uma branch principal: &lt;code&gt;main&lt;/code&gt; ou &lt;code&gt;dev&lt;/code&gt;.&lt;/li&gt;
    &lt;li&gt;Para cada funcionalidade: criar uma &lt;strong&gt;feature branch&lt;/strong&gt;,
        por exemplo:
      &lt;ul&gt;
        &lt;li&gt;&lt;code&gt;feature/usuarios-listagem&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;&lt;code&gt;feature/financeiro-faturas&lt;/code&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Commits pequenos e frequentes.&lt;/li&gt;
    &lt;li&gt;Abrir &lt;strong&gt;Merge Requests&lt;/strong&gt; no GitLab para revisão, mesmo que rápida.&lt;/li&gt;
    &lt;li&gt;Evitar codar diretamente na branch principal.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;Cuidando do escopo da IA&lt;/h3&gt;
  &lt;p&gt;
    Ao pedir ajuda para a IA no Cursor:
  &lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Seja bem específico: 
      &lt;em&gt;&quot;No arquivo X, crie apenas a função Y. Não altere outros módulos.&quot;&lt;/em&gt;
    &lt;/li&gt;
    &lt;li&gt;Evite pedir refatorações gigantescas em muitos arquivos de uma vez.&lt;/li&gt;
    &lt;li&gt;Use um &lt;strong&gt;README ou arquivo de regras&lt;/strong&gt; explicando a arquitetura 
        e peça para a IA seguir esse padrão.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;6. Quando faz mais sentido usar cada stack? 🎯&lt;/h2&gt;

  &lt;h3&gt;Use FastAPI + HTMX se:&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Você quer muito foco em APIs modernas e assíncronas.&lt;/li&gt;
    &lt;li&gt;Pensa em evoluir para microservices no médio prazo.&lt;/li&gt;
    &lt;li&gt;Seu time tem boa disciplina de arquitetura e vai manter 
        um padrão firme (apoiado por README/.rules).&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;Use Django se:&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;O objetivo é um &lt;strong&gt;grande sistema único&lt;/strong&gt; 
        com vários módulos internos.&lt;/li&gt;
    &lt;li&gt;O time ainda está aprendendo a trabalhar no mesmo código, 
        fazendo merges e lidando com conflitos.&lt;/li&gt;
    &lt;li&gt;Você quer usufruir do &lt;strong&gt;Django Admin&lt;/strong&gt; e da estrutura 
        de apps bem definida.&lt;/li&gt;
    &lt;li&gt;Quer que a &lt;strong&gt;IA siga trilhos mais claros&lt;/strong&gt;, com menos decisões 
        arquiteturais no dia a dia.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;7. Conclusão 💬&lt;/h2&gt;

  &lt;p&gt;
    Em um cenário com &lt;strong&gt;2 a 4 desenvolvedores&lt;/strong&gt;, 
    usando &lt;strong&gt;IA (Cursor/Vibe Code)&lt;/strong&gt; para escrever boa parte do código 
    e &lt;strong&gt;PostgreSQL&lt;/strong&gt; como banco de dados, a escolha do framework 
    não é só técnica: é também organizacional.
  &lt;/p&gt;

  &lt;p&gt;
    Se o time ainda está pegando o jeito de trabalhar junto, 
    fazer branches, revisar e fazer merge sem conflitos enormes, 
    &lt;font color=&quot;green&quot;&gt;&lt;strong&gt;Django tende a ser a escolha mais segura&lt;/strong&gt;&lt;/font&gt; 
    pela quantidade de padrões que ele já traz.  
    Já o combo &lt;font color=&quot;blue&quot;&gt;&lt;strong&gt;FastAPI + HTMX&lt;/strong&gt;&lt;/font&gt; 
    brilha quando há experiência maior em arquitetura e desejo de flexibilidade.
  &lt;/p&gt;

  &lt;p&gt;
    O mais importante é: 
    &lt;strong&gt;definir padrões claros, registrar isso no repositório e ensinar esses padrões tanto ao time quanto à IA&lt;/strong&gt;.  
    Assim, o framework escolhido deixa de ser um problema e vira um aliado na entrega do produto. 💻✨
  &lt;/p&gt;
&lt;/article&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/4368375114957091169/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2025/11/fastapi-htmx-vs-django-em-times-com-ia.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4368375114957091169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/4368375114957091169'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2025/11/fastapi-htmx-vs-django-em-times-com-ia.html' title='FastAPI + HTMX vs Django em times com IA, Cursor e GitLab'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Qfucy5PSH6wsKxvZbJ1xR-JAfax2WVGhyphenhyphenDGh3Bwe8irc7aPn1TAU902BvE8T5xkkgTrpSH00qMoWtP2gPibo00irl8xvt2_bbLYm36VuAyMvU3r0aKJp-_blKaaePy7Wq_XA9TPAoyi9-W8aNvWD3oYYD6lZHCgU9P55ZeCjDch5uyFNyRvtZUMNNWLX/s72-c/ChatGPT%20Image%2025%20de%20nov.%20de%202025,%2014_11_54.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-9200818926974721210</id><published>2025-11-07T20:57:00.004-03:00</published><updated>2025-11-25T14:07:10.721-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="softwares"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>5 ferramentas open‑source e gratuitas para diagramas ER</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSx189EjJze7leQnSTE1PnFw1hKP8WQy9a1Ut97iWKwrOmiXDVCnhVKXAUTxE9Iaqob65Qu9wotvWOf0a89G5fRFklKDFZbioElKfKxEcz9uItdry2-3QUIX4hRbimeuoJAT8RMDjZMW3v1ixgQ1E0-jK-vZNMWx2I9bCgTt_eeZZSn5hHjfC7nuHm2OcE/s1024/ChatGPT%20Image%2025%20de%20nov.%20de%202025,%2014_03_20.png&quot; imageanchor=&quot;1&quot; rel=&quot;nofollow&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSx189EjJze7leQnSTE1PnFw1hKP8WQy9a1Ut97iWKwrOmiXDVCnhVKXAUTxE9Iaqob65Qu9wotvWOf0a89G5fRFklKDFZbioElKfKxEcz9uItdry2-3QUIX4hRbimeuoJAT8RMDjZMW3v1ixgQ1E0-jK-vZNMWx2I9bCgTt_eeZZSn5hHjfC7nuHm2OcE/s320/ChatGPT%20Image%2025%20de%20nov.%20de%202025,%2014_03_20.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;main style=&quot;color: #1f2937; margin: 0px auto; max-width: 1000px; padding: 2rem 1rem 4rem;&quot;&gt;&lt;section style=&quot;background: rgb(249, 250, 251); border-radius: 12px; border: 1px solid rgb(229, 231, 235); margin: 1.5rem 0px 2rem; padding: 1rem 1.25rem;&quot;&gt;&lt;p style=&quot;font-weight: 600; margin: 0px 0px 0.5rem;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 1.6rem;&quot;&gt;Tabela comparativa&lt;/span&gt;&lt;/p&gt;&lt;/section&gt;&lt;section id=&quot;comparativo&quot;&gt;
    &lt;table style=&quot;border-collapse: collapse; margin: 1rem 0px; width: 100%;&quot;&gt;
      &lt;thead&gt;
        &lt;tr&gt;
          &lt;th style=&quot;background: rgb(243, 244, 246); border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem; text-align: left;&quot;&gt;Ferramenta&lt;/th&gt;
          &lt;th style=&quot;background: rgb(243, 244, 246); border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem; text-align: left;&quot;&gt;Licença / modelo&lt;/th&gt;
          &lt;th style=&quot;background: rgb(243, 244, 246); border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem; text-align: left;&quot;&gt;Instalação / hospedagem&lt;/th&gt;
          &lt;th style=&quot;background: rgb(243, 244, 246); border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem; text-align: left;&quot;&gt;Suporte a bancos&lt;/th&gt;
          &lt;th style=&quot;background: rgb(243, 244, 246); border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem; text-align: left;&quot;&gt;Vantagens&lt;/th&gt;
          &lt;th style=&quot;background: rgb(243, 244, 246); border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem; text-align: left;&quot;&gt;Limitações&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
        &lt;tr&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;DrawDB&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Open‑source (GitHub)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Navegador; também local/Docker&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;MySQL, PostgreSQL, SQLite, MariaDB, SQL Server&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;GUI intuitiva, exporta DDL, leve para começar&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Modelagem avançada limitada vs. soluções enterprise&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;ChartDB&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Open‑source; opção self‑hosted&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Servidor próprio ou cloud; import de esquema&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;PostgreSQL, MySQL, SQLite, SQL Server, MariaDB&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Bom com bases existentes; colaboração&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Projeto mais novo; recursos avançados em evolução&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;PlantUML&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;GPL (open‑source)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Local (macOS/Windows/Linux), plugins IDE&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Independente (descrição textual de qualquer ER)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Versionável, automatizável, perfeito p/ documentação&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Sem drag‑and‑drop; curva de aprendizagem&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Mermaid&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;MIT (open‑source)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Markdown, wikis, pipelines CI&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Independente (descrição textual)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Integração nativa com GitHub/GitLab&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Modelagem menos detalhada; foco em docs&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;diagrams.net&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Open‑source / gratuito&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Web e desktop; salva local/nuvem&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;N/A (ferramenta genérica de diagramas)&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Flexível para diversos diagramas&lt;/td&gt;
          &lt;td style=&quot;border: 1px solid rgb(229, 231, 235); padding: 0.7rem 0.6rem;&quot;&gt;Sem DDL/reverse‑engineer nativos&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/section&gt;

  &lt;section id=&quot;ferramentas&quot;&gt;
    &lt;h2 style=&quot;font-size: 1.6rem; margin-top: 2.5rem;&quot;&gt;Ferramentas: prós, contras e quando usar&lt;/h2&gt;
    &lt;h3 id=&quot;drawdb&quot; style=&quot;font-size: 1.25rem; margin-top: 1.5rem;&quot;&gt;1) DrawDB&lt;/h3&gt;
    &lt;p&gt;&lt;strong&gt;Quando usar:&lt;/strong&gt; quer algo visual, direto, com export de DDL para bancos populares. Ótimo para prototipar e documentar.&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;✅ Drag‑and‑drop, entidades, chaves e relacionamentos.&lt;/li&gt;
      &lt;li&gt;✅ Exporta SQL/DDL (MySQL, PostgreSQL, MariaDB, SQLite, SQL Server).&lt;/li&gt;
      &lt;li&gt;⚠️ Recursos “enterprise” (versionamento/sincronização) são limitados.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href=&quot;https://github.com/drawdb-io/drawdb&quot; rel=&quot;nofollow&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt; · &lt;a href=&quot;https://drawdb.app/&quot; rel=&quot;nofollow&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Site&lt;/a&gt;&lt;/p&gt;

    &lt;h3 id=&quot;chartdb&quot; style=&quot;font-size: 1.25rem; margin-top: 1.5rem;&quot;&gt;2) ChartDB&lt;/h3&gt;
    &lt;p&gt;&lt;strong&gt;Quando usar:&lt;/strong&gt; você possui bancos existentes e quer importar o esquema para gerar o ERD; prefere self‑hosting.&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;✅ Importa estrutura e gera diagrama automaticamente.&lt;/li&gt;
      &lt;li&gt;✅ Opção self‑hosted para times.&lt;/li&gt;
      &lt;li&gt;⚠️ Projeto recente; verifique roadmap e issues.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href=&quot;https://chartdb.io/&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Site&lt;/a&gt; · &lt;a href=&quot;https://github.com/chartdb&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;/p&gt;

    &lt;h3 id=&quot;plantuml&quot; style=&quot;font-size: 1.25rem; margin-top: 1.5rem;&quot;&gt;3) PlantUML&lt;/h3&gt;
    &lt;p&gt;&lt;strong&gt;Quando usar:&lt;/strong&gt; quer manter o diagrama como código (controle de versão, PRs, automação em CI/CD) e gerar imagens atualizadas.&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;✅ ERD via DSL de texto: excelente para padronizar e revisar.&lt;/li&gt;
      &lt;li&gt;✅ Integra com IDEs e pipelines; diffs claros em PR.&lt;/li&gt;
      &lt;li&gt;⚠️ Não é GUI; exige familiaridade com a sintaxe.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href=&quot;https://plantuml.com/&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Documentação&lt;/a&gt; · &lt;a href=&quot;https://github.com/plantuml/plantuml&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;/p&gt;

    &lt;h3 id=&quot;mermaid&quot; style=&quot;font-size: 1.25rem; margin-top: 1.5rem;&quot;&gt;4) Mermaid&lt;/h3&gt;
    &lt;p&gt;&lt;strong&gt;Quando usar:&lt;/strong&gt; documentação em Markdown (GitHub/GitLab/Wikis), posts técnicos, READMEs e páginas estáticas.&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;✅ &lt;code&gt;erDiagram&lt;/code&gt; simples; encaixa bem em Markdown.&lt;/li&gt;
      &lt;li&gt;✅ Suporte amplo em plataformas e wikis.&lt;/li&gt;
      &lt;li&gt;⚠️ Menos recursos “profissionais” de modelagem.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href=&quot;https://mermaid.js.org/syntax/entityRelationshipDiagram.html&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Sintaxe ER&lt;/a&gt; · &lt;a href=&quot;https://github.com/mermaid-js/mermaid&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;/p&gt;

    &lt;h3 id=&quot;diagrams-net&quot; style=&quot;font-size: 1.25rem; margin-top: 1.5rem;&quot;&gt;5) diagrams.net (draw.io)&lt;/h3&gt;
    &lt;p&gt;&lt;strong&gt;Quando usar:&lt;/strong&gt; você precisa de uma ferramenta universal de diagramação (processos, arquitetura, fluxos) além de ERD.&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;✅ Desktop e web; salva local ou em nuvem.&lt;/li&gt;
      &lt;li&gt;✅ Biblioteca de formas ampla; bom para documentação visual.&lt;/li&gt;
      &lt;li&gt;⚠️ Sem geração de DDL nativa; foco é diagrama em geral.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt; &lt;a href=&quot;https://www.diagrams.net/&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Site&lt;/a&gt; · &lt;a href=&quot;https://github.com/jgraph/drawio&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;/p&gt;
  &lt;/section&gt;

  &lt;section id=&quot;exemplos&quot;&gt;
    &lt;h2 style=&quot;font-size: 1.6rem; margin-top: 2.5rem;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;🧪&lt;/span&gt;Exemplos (PlantUML &amp;amp; Mermaid)&lt;/h2&gt;

    &lt;h3 style=&quot;font-size: 1.25rem; margin-top: 1.5rem;&quot;&gt;PlantUML – ERD básico&lt;/h3&gt;
    &lt;pre style=&quot;background: rgb(11, 16, 33); border-radius: 10px; color: #e5e7eb; overflow: auto; padding: 1rem;&quot;&gt;&lt;code style=&quot;font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 0.95rem;&quot;&gt;@startuml
!theme plain
entity &quot;Usuario&quot; as usuario {
  *id : UUID &amp;lt;&lt;pk&gt;&amp;gt;
  --
  nome : varchar(120)
  email : varchar(254) &amp;lt;&lt;uq&gt;&amp;gt;
  criado_em : timestamp
}
entity &quot;Papel&quot; as papel {
  *id : serial &amp;lt;&lt;pk&gt;&amp;gt;
  nome : varchar(64)
}
entity &quot;Acesso&quot; as acesso {
  *id : bigserial &amp;lt;&lt;pk&gt;&amp;gt;
  usuario_id : UUID &amp;lt;&lt;fk&gt;&amp;gt;
  papel_id   : int  &amp;lt;&lt;fk&gt;&amp;gt;
  criado_em  : timestamp
}
usuario ||--o{ acesso : possui
papel   ||--o{ acesso : atribui
@enduml&lt;/fk&gt;&lt;/fk&gt;&lt;/pk&gt;&lt;/pk&gt;&lt;/uq&gt;&lt;/pk&gt;&lt;/code&gt;&lt;/pre&gt;

    &lt;h3 style=&quot;font-size: 1.25rem; margin-top: 1.5rem;&quot;&gt;Mermaid – ERD básico&lt;/h3&gt;
    &lt;pre style=&quot;background: rgb(11, 16, 33); border-radius: 10px; color: #e5e7eb; overflow: auto; padding: 1rem;&quot;&gt;&lt;code style=&quot;font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 0.95rem;&quot;&gt;erDiagram
  USUARIO {
    uuid id PK
    varchar nome
    varchar email
    timestamp criado_em
  }
  PAPEL {
    int id PK
    varchar nome
  }
  ACESSO {
    bigint id PK
    uuid usuario_id FK
    int papel_id FK
    timestamp criado_em
  }
  USUARIO ||--o{ ACESSO : possui
  PAPEL   ||--o{ ACESSO : atribui&lt;/code&gt;&lt;/pre&gt;

    &lt;p style=&quot;background: rgb(238, 242, 255); border-radius: 10px; border: 1px solid rgb(199, 210, 254); color: #1e3a8a; padding: 0.85rem 1rem;&quot;&gt;Dica: mantenha os arquivos &lt;code&gt;.puml&lt;/code&gt; ou blocos Mermaid no mesmo repositório dos scripts SQL e do código da aplicação.&lt;/p&gt;
  &lt;/section&gt;

  &lt;section id=&quot;como-escolher&quot;&gt;
    &lt;h2 style=&quot;font-size: 1.6rem; margin-top: 2.5rem;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;🎯&lt;/span&gt;Como escolher (checklist rápido)&lt;/h2&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;Precisa de DDL/reverse‑engineer?&lt;/strong&gt; Prefira DrawDB/ChartDB.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Quer versionar como código?&lt;/strong&gt; PlantUML/Mermaid.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Vai documentar além de ERD?&lt;/strong&gt; diagrams.net.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Time colaborativo e self‑host?&lt;/strong&gt; ChartDB.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Protótipo rápido e visual?&lt;/strong&gt; DrawDB.&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;

  &lt;section id=&quot;links&quot;&gt;
    &lt;h2 style=&quot;font-size: 1.6rem; margin-top: 2.5rem;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;📌&lt;/span&gt;Links úteis&lt;/h2&gt;
    &lt;ul&gt;
      &lt;li&gt;DrawDB — &lt;a href=&quot;https://github.com/drawdb-io/drawdb&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt; · &lt;a href=&quot;https://drawdb.app/&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Site&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;ChartDB — &lt;a href=&quot;https://chartdb.io/&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Site&lt;/a&gt; · &lt;a href=&quot;https://github.com/chartdb&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;PlantUML — &lt;a href=&quot;https://plantuml.com/&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Docs&lt;/a&gt; · &lt;a href=&quot;https://github.com/plantuml/plantuml&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Mermaid — &lt;a href=&quot;https://mermaid.js.org/syntax/entityRelationshipDiagram.html&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Sintaxe ER&lt;/a&gt; · &lt;a href=&quot;https://github.com/mermaid-js/mermaid&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;diagrams.net — &lt;a href=&quot;https://www.diagrams.net/&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Site&lt;/a&gt; · &lt;a href=&quot;https://github.com/jgraph/drawio&quot; style=&quot;color: #2563eb; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/section&gt;&lt;/main&gt;&lt;ul&gt;
&lt;/ul&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/9200818926974721210/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2025/11/ferramentas-er.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/9200818926974721210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/9200818926974721210'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2025/11/ferramentas-er.html' title='5 ferramentas open‑source e gratuitas para diagramas ER'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSx189EjJze7leQnSTE1PnFw1hKP8WQy9a1Ut97iWKwrOmiXDVCnhVKXAUTxE9Iaqob65Qu9wotvWOf0a89G5fRFklKDFZbioElKfKxEcz9uItdry2-3QUIX4hRbimeuoJAT8RMDjZMW3v1ixgQ1E0-jK-vZNMWx2I9bCgTt_eeZZSn5hHjfC7nuHm2OcE/s72-c/ChatGPT%20Image%2025%20de%20nov.%20de%202025,%2014_03_20.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-8859230243182196682</id><published>2025-07-18T20:30:00.005-03:00</published><updated>2025-12-07T23:16:29.301-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Compras"/><category scheme="http://www.blogger.com/atom/ns#" term="dicas"/><category scheme="http://www.blogger.com/atom/ns#" term="Hardware"/><category scheme="http://www.blogger.com/atom/ns#" term="Modem-Roteador"/><title type='text'>Sistemas Mesh de Marcas Famosas: Qual é o Melhor?</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT9dFBGvkQVIv3HJ0kgWsdlhbLLu-8AM5oTRrVhcoldgTz59UPfgdBprJ9oBJzd5wB4klP601YUpzQfyO8OFPjnynooAObWvngU0IZcem5nAEaG2smVctTEKOzxfkIMUOerds5xF73JaMAG2Ai5GevKszsNVnWp73mGknsEQzk_OA5W9YuFQ5SCokDQJmP/s1024/mesh-img.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT9dFBGvkQVIv3HJ0kgWsdlhbLLu-8AM5oTRrVhcoldgTz59UPfgdBprJ9oBJzd5wB4klP601YUpzQfyO8OFPjnynooAObWvngU0IZcem5nAEaG2smVctTEKOzxfkIMUOerds5xF73JaMAG2Ai5GevKszsNVnWp73mGknsEQzk_OA5W9YuFQ5SCokDQJmP/s320/mesh-img.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h1&gt;&lt;br /&gt;&lt;/h1&gt;&lt;h1&gt;Sistemas Mesh de Marcas Famosas: Qual é o Melhor?&lt;/h1&gt;

&lt;p&gt;Se você está procurando um sistema Wi-Fi Mesh para melhorar o sinal da internet em toda a casa, é importante conhecer as diferenças entre os sistemas das principais marcas. Embora todos prometam ampliar o sinal com estabilidade, nem todos oferecem compatibilidade entre modelos ou entre marcas diferentes.&lt;/p&gt;

&lt;h2&gt;Comparativo dos Principais Sistemas Mesh Proprietários&lt;/h2&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;10&quot; cellspacing=&quot;0&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Sistema Mesh&lt;/th&gt;
      &lt;th&gt;Fabricante(s)&lt;/th&gt;
      &lt;th&gt;Compatível com diferentes modelos?&lt;/th&gt;
      &lt;th&gt;Compatível com outras marcas?&lt;/th&gt;
      &lt;th&gt;Destaques e limitações&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;AiMesh&amp;nbsp;&lt;span class=&quot;x19la9d6 x1fc57z9 x6ikm8r x10wlt62 x19co3pv x1g5zs5t xfibh0p xiy17q3 x1xsqp64 x1lkfr7t xexx8yu xyri2b x18d9i69 x1c1uobl&quot; style=&quot;background-image: url(&amp;quot;https://web.whatsapp.com/emoji/v1/16/0/1/single/w/40/01f1e7_01f1f7.png&amp;quot;); white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;xrtxmta x1bhl96m&quot;&gt;&lt;a href=&quot;https://amzn.to/4lvC9pv&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇧🇷 &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;ASUS&amp;nbsp;&lt;span class=&quot;x19la9d6 x1fc57z9 x6ikm8r x10wlt62 x19co3pv x1g5zs5t xfibh0p xiy17q3 x1xsqp64 x1lkfr7t xexx8yu xyri2b x18d9i69 x1c1uobl&quot; style=&quot;background-image: url(&amp;quot;https://web.whatsapp.com/emoji/v1/16/0/1/single/w/40/01f1fa_01f1f8.png&amp;quot;); white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;xrtxmta x1bhl96m&quot;&gt;&lt;a href=&quot;https://amzn.to/4eX6uef&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇺🇸&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;Sim&lt;/td&gt;
      &lt;td&gt;Não&lt;/td&gt;
      &lt;td&gt;Estável, suporta backhaul Ethernet/Wi-Fi, boa interface&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;OneMesh&amp;nbsp;&lt;span style=&quot;white-space-collapse: preserve;&quot;&gt;&lt;a href=&quot;https://amzn.to/46jh0Kq&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇧🇷&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;TP-Link&amp;nbsp;&lt;span class=&quot;x19la9d6 x1fc57z9 x6ikm8r x10wlt62 x19co3pv x1g5zs5t xfibh0p xiy17q3 x1xsqp64 x1lkfr7t xexx8yu xyri2b x18d9i69 x1c1uobl&quot; style=&quot;background-image: url(&amp;quot;https://web.whatsapp.com/emoji/v1/16/0/1/single/w/40/01f1fa_01f1f8.png&amp;quot;); white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;xrtxmta x1bhl96m&quot;&gt;🇺🇸&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;Parcial (só modelos OneMesh)&lt;/td&gt;
      &lt;td&gt;Não&lt;/td&gt;
      &lt;td&gt;Simples, mas limitado. Mesh completo só em modelos recentes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;EasyMesh&amp;nbsp;&lt;span style=&quot;white-space-collapse: preserve;&quot;&gt;&lt;a href=&quot;https://amzn.to/4kR3b9M&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇧🇷&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;Vários (padrão aberto)&amp;nbsp;&lt;span class=&quot;x19la9d6 x1fc57z9 x6ikm8r x10wlt62 x19co3pv x1g5zs5t xfibh0p xiy17q3 x1xsqp64 x1lkfr7t xexx8yu xyri2b x18d9i69 x1c1uobl&quot; style=&quot;background-image: url(&amp;quot;https://web.whatsapp.com/emoji/v1/16/0/1/single/w/40/01f1fa_01f1f8.png&amp;quot;); white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;xrtxmta x1bhl96m&quot;&gt;&lt;a href=&quot;https://amzn.to/44W6Pcm&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇺🇸&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;Parcial&lt;/td&gt;
      &lt;td&gt;Teoricamente sim&lt;/td&gt;
      &lt;td&gt;Padrão aberto, mas poucas marcas implementam bem&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Deco Mesh&amp;nbsp;&lt;span style=&quot;white-space-collapse: preserve;&quot;&gt;&lt;a href=&quot;https://amzn.to/4f6gnq4&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇧🇷&lt;/a&gt; &lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;TP-Link (linha Deco)&amp;nbsp;&lt;span class=&quot;x19la9d6 x1fc57z9 x6ikm8r x10wlt62 x19co3pv x1g5zs5t xfibh0p xiy17q3 x1xsqp64 x1lkfr7t xexx8yu xyri2b x18d9i69 x1c1uobl&quot; style=&quot;background-image: url(&amp;quot;https://web.whatsapp.com/emoji/v1/16/0/1/single/w/40/01f1fa_01f1f8.png&amp;quot;); white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;xrtxmta x1bhl96m&quot;&gt;&lt;a href=&quot;https://amzn.to/44WCMkW&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇺🇸&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;Não&lt;/td&gt;
      &lt;td&gt;Não&lt;/td&gt;
      &lt;td&gt;Estável e fácil, mas totalmente fechado e restrito a Deco&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Google/Nest Wifi&amp;nbsp;&lt;span style=&quot;white-space-collapse: preserve;&quot;&gt;&lt;a href=&quot;https://amzn.to/4nXPJDw&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇧🇷 &lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;Google&amp;nbsp;&lt;span class=&quot;x19la9d6 x1fc57z9 x6ikm8r x10wlt62 x19co3pv x1g5zs5t xfibh0p xiy17q3 x1xsqp64 x1lkfr7t xexx8yu xyri2b x18d9i69 x1c1uobl&quot; style=&quot;background-image: url(&amp;quot;https://web.whatsapp.com/emoji/v1/16/0/1/single/w/40/01f1fa_01f1f8.png&amp;quot;); white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;xrtxmta x1bhl96m&quot;&gt;&lt;a href=&quot;https://amzn.to/4nXq6Tv&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇺🇸&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;Parcial (entre modelos Nest/Google Wifi)&lt;/td&gt;
      &lt;td&gt;Não&lt;/td&gt;
      &lt;td&gt;Fácil de usar, mas fechado e com poucas funções avançadas&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Eero Mesh&amp;nbsp;&lt;span style=&quot;white-space-collapse: preserve;&quot;&gt;🇧🇷 &lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;Amazon&amp;nbsp;&lt;span class=&quot;x19la9d6 x1fc57z9 x6ikm8r x10wlt62 x19co3pv x1g5zs5t xfibh0p xiy17q3 x1xsqp64 x1lkfr7t xexx8yu xyri2b x18d9i69 x1c1uobl&quot; style=&quot;background-image: url(&amp;quot;https://web.whatsapp.com/emoji/v1/16/0/1/single/w/40/01f1fa_01f1f8.png&amp;quot;); white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;xrtxmta x1bhl96m&quot;&gt;&lt;a href=&quot;https://amzn.to/40YIotD&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇺🇸&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;Não&lt;/td&gt;
      &lt;td&gt;Não&lt;/td&gt;
      &lt;td&gt;Simples, boa para iniciantes, mas coleta dados e é fechada&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ubiquiti UniFi&amp;nbsp;&lt;span style=&quot;white-space-collapse: preserve;&quot;&gt;&lt;a href=&quot;https://amzn.to/3IyDAox&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇧🇷 &lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;Ubiquiti&amp;nbsp;&lt;span class=&quot;x19la9d6 x1fc57z9 x6ikm8r x10wlt62 x19co3pv x1g5zs5t xfibh0p xiy17q3 x1xsqp64 x1lkfr7t xexx8yu xyri2b x18d9i69 x1c1uobl&quot; style=&quot;background-image: url(&amp;quot;https://web.whatsapp.com/emoji/v1/16/0/1/single/w/40/01f1fa_01f1f8.png&amp;quot;); white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;xrtxmta x1bhl96m&quot;&gt;&lt;a href=&quot;https://amzn.to/40twbgl&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;🇺🇸&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;td&gt;Sim&lt;/td&gt;
      &lt;td&gt;Não&lt;/td&gt;
      &lt;td&gt;Profissional, ideal para redes grandes, exige controlador&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2&gt;Conclusão&lt;/h2&gt;

&lt;p&gt;Se você busca facilidade e simplicidade, sistemas como &lt;strong&gt;TP-Link Deco&lt;/strong&gt;, &lt;strong&gt;Eero&lt;/strong&gt; ou &lt;strong&gt;Google Nest Wifi&lt;/strong&gt; são boas opções.&lt;/p&gt;

&lt;p&gt;Para quem deseja expandir a rede com flexibilidade dentro da mesma marca, &lt;strong&gt;ASUS AiMesh&lt;/strong&gt; é a escolha mais completa e versátil.&lt;/p&gt;

&lt;p&gt;Já usuários mais técnicos ou profissionais podem preferir soluções como &lt;strong&gt;Ubiquiti UniFi&lt;/strong&gt; ou até mesmo configurar sua própria rede Mesh com &lt;strong&gt;OpenWRT&lt;/strong&gt; e o protocolo 802.11s, para controle total e compatibilidade com múltiplos equipamentos.&lt;/p&gt;

&lt;p&gt;Antes de investir, sempre verifique se os modelos escolhidos realmente suportam Mesh e se o firmware está atualizado para ativar o recurso.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilF2WLvK_NsH6n9kYhyphenhyphendTUiIPhTQX7zuPFPhME5_kmoISELBLTzhZq-uPPQ50dn2KqUW75SMXDDBSHpYNi4sxaxAEHhQKBXpoijqQ1JfOtE_MASXVuTzQZq5iIFutjlVEJrZ8yjM0ywo39HTT3Kllpkru61oq-ZX5wmvz39vizUDiS1xfGJj9PQKZONyL3/s2752/wifiMesh.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;2752&quot; height=&quot;179&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilF2WLvK_NsH6n9kYhyphenhyphendTUiIPhTQX7zuPFPhME5_kmoISELBLTzhZq-uPPQ50dn2KqUW75SMXDDBSHpYNi4sxaxAEHhQKBXpoijqQ1JfOtE_MASXVuTzQZq5iIFutjlVEJrZ8yjM0ywo39HTT3Kllpkru61oq-ZX5wmvz39vizUDiS1xfGJj9PQKZONyL3/s320/wifiMesh.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/UlXOabjsgk8&quot; width=&quot;320&quot; youtube-src-id=&quot;UlXOabjsgk8&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/8859230243182196682/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2025/07/sistemas-mesh-de-marcas-famosas-qual-e.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/8859230243182196682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/8859230243182196682'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2025/07/sistemas-mesh-de-marcas-famosas-qual-e.html' title='Sistemas Mesh de Marcas Famosas: Qual é o Melhor?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT9dFBGvkQVIv3HJ0kgWsdlhbLLu-8AM5oTRrVhcoldgTz59UPfgdBprJ9oBJzd5wB4klP601YUpzQfyO8OFPjnynooAObWvngU0IZcem5nAEaG2smVctTEKOzxfkIMUOerds5xF73JaMAG2Ai5GevKszsNVnWp73mGknsEQzk_OA5W9YuFQ5SCokDQJmP/s72-c/mesh-img.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-1839925514887146073</id><published>2025-07-17T20:26:00.013-03:00</published><updated>2025-07-17T20:26:00.121-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dicas"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>Ferramentas para Criar Diagramas com Código</title><content type='html'>  &lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnBFzIQ8GFx7iC_OT76cdJUX9UPBTL60FzNwyLETG0MdLqNNcUafkn6MX2z-GAhpvdvo2AGopgBNePyzBD1iSzDBOwBWAAoYj-KplxV-STTZta-uY9DscXoTcdARCSpcmoZrd3CA8EoebOi7HwkHO1en2ArjgcAMEc3OosM9r-t_RV3KXCecjTXngXWubR/s1536/ferramentDia.png&quot; imageanchor=&quot;1&quot; rel=&quot;nofollow&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnBFzIQ8GFx7iC_OT76cdJUX9UPBTL60FzNwyLETG0MdLqNNcUafkn6MX2z-GAhpvdvo2AGopgBNePyzBD1iSzDBOwBWAAoYj-KplxV-STTZta-uY9DscXoTcdARCSpcmoZrd3CA8EoebOi7HwkHO1en2ArjgcAMEc3OosM9r-t_RV3KXCecjTXngXWubR/s320/ferramentDia.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;h1 style=&quot;color: #2a4d69; font-family: Arial, sans-serif;&quot;&gt;Ferramentas para Criar Diagramas com Código&lt;/h1&gt;

  &lt;p style=&quot;font-family: Arial, sans-serif; line-height: 1.6;&quot;&gt;
    Se você trabalha com documentação técnica, engenharia de software ou simplesmente gosta de automatizar tarefas, ferramentas que geram diagramas a partir de texto são ideais.
    Abaixo, listamos as principais opções do mercado com uma breve descrição e uma tabela comparativa.
  &lt;/p&gt;

  &lt;h2 style=&quot;color: #2a4d69; font-family: Arial, sans-serif;&quot;&gt;
    &lt;a href=&quot;https://www.mermaidchart.com/&quot; rel=&quot;nofollow&quot; style=&quot;color: #1a73e8; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;MermaidChart&lt;/a&gt;
  &lt;/h2&gt;
  &lt;p style=&quot;font-family: Arial, sans-serif; line-height: 1.6;&quot;&gt;
    Ferramenta baseada em Mermaid.js para criar diagramas diretamente a partir de código em linguagem markdown.
    Ideal para fluxogramas, organogramas e diagramas Gantt simples.
  &lt;/p&gt;

  &lt;h2 style=&quot;color: #2a4d69; font-family: Arial, sans-serif;&quot;&gt;
    &lt;a href=&quot;https://plantuml.com/&quot; rel=&quot;nofollow&quot; style=&quot;color: #1a73e8; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;PlantUML&lt;/a&gt;
  &lt;/h2&gt;
  &lt;p style=&quot;font-family: Arial, sans-serif; line-height: 1.6;&quot;&gt;
    Focada em diagramas UML, permite criar diagramas detalhados como casos de uso, sequência, classes e componentes.
    Usa uma sintaxe própria e pode ser executado localmente ou via web.
  &lt;/p&gt;

  &lt;h2 style=&quot;color: #2a4d69; font-family: Arial, sans-serif;&quot;&gt;
    &lt;a href=&quot;https://www.draw.io/&quot; rel=&quot;nofollow&quot; style=&quot;color: #1a73e8; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Diagrams.net (Draw.io)&lt;/a&gt;
  &lt;/h2&gt;
  &lt;p style=&quot;font-family: Arial, sans-serif; line-height: 1.6;&quot;&gt;
    Ferramenta visual (drag-and-drop), não usa código, mas é poderosa, gratuita e com suporte a integrações com Google Drive e outras plataformas.
  &lt;/p&gt;

  &lt;h2 style=&quot;color: #2a4d69; font-family: Arial, sans-serif;&quot;&gt;
    &lt;a href=&quot;https://lucidchart.com/&quot; rel=&quot;nofollow&quot; style=&quot;color: #1a73e8; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Lucidchart&lt;/a&gt;
  &lt;/h2&gt;
  &lt;p style=&quot;font-family: Arial, sans-serif; line-height: 1.6;&quot;&gt;
    Plataforma comercial e colaborativa para criação de diagramas profissionais com múltiplos recursos. Possui versão gratuita com limitações.
  &lt;/p&gt;

  &lt;h2 style=&quot;color: #2a4d69; font-family: Arial, sans-serif;&quot;&gt;
    &lt;a href=&quot;https://d2lang.com/&quot; rel=&quot;nofollow&quot; style=&quot;color: #1a73e8; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;D2&lt;/a&gt;
  &lt;/h2&gt;
  &lt;p style=&quot;font-family: Arial, sans-serif; line-height: 1.6;&quot;&gt;
    Nova linguagem para diagramas com foco em sintaxe limpa e renderização elegante. Alternativa moderna ao Mermaid e PlantUML.
  &lt;/p&gt;

  &lt;h2 style=&quot;color: #2a4d69; font-family: Arial, sans-serif;&quot;&gt;Tabela Comparativa&lt;/h2&gt;

  &lt;table style=&quot;border-collapse: collapse; font-family: Arial, sans-serif; margin-top: 20px; width: 100%;&quot;&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th style=&quot;background-color: #f2f2f2; border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Ferramenta&lt;/th&gt;
        &lt;th style=&quot;background-color: #f2f2f2; border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Baseada em Código?&lt;/th&gt;
        &lt;th style=&quot;background-color: #f2f2f2; border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Tipos de Diagramas&lt;/th&gt;
        &lt;th style=&quot;background-color: #f2f2f2; border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Colaboração&lt;/th&gt;
        &lt;th style=&quot;background-color: #f2f2f2; border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Licença&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;
          &lt;a href=&quot;https://www.mermaidchart.com/&quot; rel=&quot;nofollow&quot; style=&quot;color: #1a73e8; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;MermaidChart&lt;/a&gt;
        &lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Sim (Mermaid.js)&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Fluxogramas, Gantt, ERD&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Básica&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Gratuito&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;
          &lt;a href=&quot;https://plantuml.com/&quot; rel=&quot;nofollow&quot; style=&quot;color: #1a73e8; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;PlantUML&lt;/a&gt;
        &lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Sim&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;UML (casos de uso, classes, etc.)&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Limitada&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Gratuito (open source)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;
          &lt;a href=&quot;https://www.draw.io/&quot; rel=&quot;nofollow&quot; style=&quot;color: #1a73e8; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Diagrams.net&lt;/a&gt;
        &lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Não&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Todos (manual)&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Sim&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Gratuito&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;
          &lt;a href=&quot;https://lucidchart.com/&quot; rel=&quot;nofollow&quot; style=&quot;color: #1a73e8; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Lucidchart&lt;/a&gt;
        &lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Não&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Todos&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Sim (colaboração em tempo real)&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Freemium&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;
          &lt;a href=&quot;https://d2lang.com/&quot; rel=&quot;nofollow&quot; style=&quot;color: #1a73e8; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;D2&lt;/a&gt;
        &lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Sim&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Fluxos, redes, organogramas&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Limitada&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(204, 204, 204); padding: 10px;&quot;&gt;Gratuito / Open Source&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/1839925514887146073/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2025/07/ferramentas-para-criar-diagramas-com.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1839925514887146073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1839925514887146073'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2025/07/ferramentas-para-criar-diagramas-com.html' title='Ferramentas para Criar Diagramas com Código'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnBFzIQ8GFx7iC_OT76cdJUX9UPBTL60FzNwyLETG0MdLqNNcUafkn6MX2z-GAhpvdvo2AGopgBNePyzBD1iSzDBOwBWAAoYj-KplxV-STTZta-uY9DscXoTcdARCSpcmoZrd3CA8EoebOi7HwkHO1en2ArjgcAMEc3OosM9r-t_RV3KXCecjTXngXWubR/s72-c/ferramentDia.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-825795240366512075</id><published>2025-04-07T20:05:00.008-03:00</published><updated>2025-12-07T22:43:25.253-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IA"/><category scheme="http://www.blogger.com/atom/ns#" term="smarthome"/><title type='text'>n8n vs Node-RED: Qual escolher?</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_auHVQl1gfxtGiuXWONArh3aRHuVVbd72H8m8QTPealuTFr99-RAr2LYKZImW5UYPOQKswUiw1W8uFd5t42Yw8mFdUGPwCwgwvbJ3jsd7qI-qS1zG9g_Z8Luh8RNwG9tP7XAvOJ_cCf0xvvOzr_bwr8c3jiuobNWjWNY-9nOchf2px-gvC3eSddS0Glkm/s320/ChatGPT%20Image%207%20de%20abr.%20de%202025,%2017_42_35.png&quot; /&gt;&lt;/div&gt;&lt;h3&gt;🏠 Node-RED com Home Assistant&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;
  O &lt;strong&gt;Node-RED&lt;/strong&gt; é amplamente utilizado junto com o &lt;strong&gt;Home Assistant&lt;/strong&gt; para automação residencial, justamente por sua integração nativa com sensores, dispositivos IoT e protocolos como &lt;em&gt;MQTT&lt;/em&gt;, &lt;em&gt;Zigbee&lt;/em&gt; e &lt;em&gt;Z-Wave&lt;/em&gt;. Ele permite criar fluxos visuais para controlar luzes, câmeras, alarmes e muito mais, com uma interface prática e altamente personalizável.
&lt;/p&gt;
&lt;p&gt;
  Embora o &lt;strong&gt;n8n&lt;/strong&gt; não tenha integração oficial com o Home Assistant, é possível usá-lo para automações domésticas via &lt;strong&gt;APIs REST&lt;/strong&gt; ou &lt;strong&gt;webhooks&lt;/strong&gt; expostos pelo próprio Home Assistant. Assim, o n8n pode agir como uma camada de lógica externa, lidando com notificações, integrações com serviços externos (como e-mail, Telegram, Google Sheets etc.) e até decisões baseadas em contexto, enquanto o Home Assistant cuida dos dispositivos físicos.&lt;/p&gt;&lt;h2&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;n8n vs Node-RED: Qual escolher?&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;Ambas são ferramentas de automação visual, mas com focos diferentes. Veja a comparação completa:&lt;/p&gt;

&lt;h3&gt;1. Visão geral&lt;/h3&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;6&quot; cellspacing=&quot;0&quot;&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;th&gt;Característica&lt;/th&gt;
    &lt;th&gt;n8n&lt;/th&gt;
    &lt;th&gt;Node-RED&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;🧠 Foco principal&lt;/td&gt;
    &lt;td&gt;Automação de fluxos para integrações modernas (APIs, SaaS)&lt;/td&gt;
    &lt;td&gt;IoT, automação local, dispositivos físicos&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;🌐 Interface visual&lt;/td&gt;
    &lt;td&gt;Sim&lt;/td&gt;
    &lt;td&gt;Sim&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;💡 Casos comuns&lt;/td&gt;
    &lt;td&gt;Integrações web, APIs REST, automações com apps&lt;/td&gt;
    &lt;td&gt;Automação residencial, IoT, controle de hardware&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;🌍 Código aberto?&lt;/td&gt;
    &lt;td&gt;Sim&lt;/td&gt;
    &lt;td&gt;Sim&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;h3&gt;2. Linguagem e extensibilidade&lt;/h3&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;6&quot; cellspacing=&quot;0&quot;&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;th&gt;&lt;/th&gt;
    &lt;th&gt;n8n&lt;/th&gt;
    &lt;th&gt;Node-RED&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Linguagem principal&lt;/td&gt;
    &lt;td&gt;JavaScript / TypeScript&lt;/td&gt;
    &lt;td&gt;JavaScript&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Criação de nodes&lt;/td&gt;
    &lt;td&gt;Modular com &quot;credenciais&quot;, &quot;executors&quot;, etc.&lt;/td&gt;
    &lt;td&gt;Mais direta com funções JavaScript&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Funções customizadas&lt;/td&gt;
    &lt;td&gt;Suporta, mas foca em &quot;nós de integração&quot;&lt;/td&gt;
    &lt;td&gt;Muito flexível com &quot;Function Nodes&quot;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;h3&gt;3. Integrações e conectores&lt;/h3&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;6&quot; cellspacing=&quot;0&quot;&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;th&gt;&lt;/th&gt;
    &lt;th&gt;n8n&lt;/th&gt;
    &lt;th&gt;Node-RED&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Conectores prontos&lt;/td&gt;
    &lt;td&gt;+400 conectores SaaS (Google, Slack, etc.)&lt;/td&gt;
    &lt;td&gt;Vários, mas foco em dispositivos e protocolos&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Integração com REST APIs&lt;/td&gt;
    &lt;td&gt;Muito forte — lógica de fluxo robusta&lt;/td&gt;
    &lt;td&gt;Também possível, mas menos intuitivo&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Suporte a Webhooks&lt;/td&gt;
    &lt;td&gt;Sim&lt;/td&gt;
    &lt;td&gt;Sim&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;h3&gt;4. Infraestrutura e execução&lt;/h3&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;6&quot; cellspacing=&quot;0&quot;&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;th&gt;&lt;/th&gt;
    &lt;th&gt;n8n&lt;/th&gt;
    &lt;th&gt;Node-RED&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Execução&lt;/td&gt;
    &lt;td&gt;Workflow baseado em tarefas&lt;/td&gt;
    &lt;td&gt;Fluxo contínuo de mensagens&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Estado&lt;/td&gt;
    &lt;td&gt;Baseado em execução de fluxo&lt;/td&gt;
    &lt;td&gt;Estado mantido entre mensagens&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Ideal para&lt;/td&gt;
    &lt;td&gt;Automatizações tipo Zapier, Make&lt;/td&gt;
    &lt;td&gt;Automação IoT, Raspberry Pi&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;h3&gt;5. Quando usar qual?&lt;/h3&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;6&quot; cellspacing=&quot;0&quot;&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;th&gt;Quero...&lt;/th&gt;
    &lt;th&gt;Use...&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Automatizar tarefas web com APIs modernas&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;n8n&lt;/strong&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Criar lógica entre sensores físicos, MQTT, dispositivos&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;Node-RED&lt;/strong&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Substituir ferramentas como Zapier/Make&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;n8n&lt;/strong&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Rodar automações locais em hardware&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;Node-RED&lt;/strong&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Criar rotinas simples com pouco código&lt;/td&gt;
    &lt;td&gt;Ambos&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;h3&gt;Exemplos práticos&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;n8n:&lt;/strong&gt; Quando um novo e-mail chega no Gmail, extrair o anexo, enviar para o Google Drive e notificar no Slack.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Node-RED:&lt;/strong&gt; Quando um sensor de movimento é ativado, ligar uma luz por 5 minutos e enviar uma notificação via MQTT.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Conclusão&lt;/h3&gt;
&lt;p&gt;
  &lt;strong&gt;✅ Use n8n&lt;/strong&gt; para integrações modernas com serviços e APIs web.&lt;br /&gt;
  &lt;strong&gt;✅ Use Node-RED&lt;/strong&gt; para automação local, dispositivos físicos e IoT.&lt;br /&gt;
  Ambas são ferramentas poderosas de automação, mas com propósitos distintos!
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzbanCLcjK0EurLNa0eRHTjW7w3m3uvqvWpL1HN6HTO0T9PsWcmPnMLqCYo6T0TRfvnjvOsmUKeMwxtr92ZyF7o6i6hbSJPfpQMuHUxU2OpDP739t5eJnskqWCTVz_CSxP7tbqEtRQP3rdjXfwkRWw8RexHpX2cCRrlRYowFWa2VfTC2z3kq4X7YqQX00t/s2752/n8nVsNode.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;2752&quot; height=&quot;179&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzbanCLcjK0EurLNa0eRHTjW7w3m3uvqvWpL1HN6HTO0T9PsWcmPnMLqCYo6T0TRfvnjvOsmUKeMwxtr92ZyF7o6i6hbSJPfpQMuHUxU2OpDP739t5eJnskqWCTVz_CSxP7tbqEtRQP3rdjXfwkRWw8RexHpX2cCRrlRYowFWa2VfTC2z3kq4X7YqQX00t/s320/n8nVsNode.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/XpbJIDhAXyA&quot; width=&quot;320&quot; youtube-src-id=&quot;XpbJIDhAXyA&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://youtu.be/XpbJIDhAXyA&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://youtu.be/XpbJIDhAXyA&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/825795240366512075/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2025/04/n8n-vs-node-red-qual-escolher.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/825795240366512075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/825795240366512075'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2025/04/n8n-vs-node-red-qual-escolher.html' title='n8n vs Node-RED: Qual escolher?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_auHVQl1gfxtGiuXWONArh3aRHuVVbd72H8m8QTPealuTFr99-RAr2LYKZImW5UYPOQKswUiw1W8uFd5t42Yw8mFdUGPwCwgwvbJ3jsd7qI-qS1zG9g_Z8Luh8RNwG9tP7XAvOJ_cCf0xvvOzr_bwr8c3jiuobNWjWNY-9nOchf2px-gvC3eSddS0Glkm/s72-c/ChatGPT%20Image%207%20de%20abr.%20de%202025,%2017_42_35.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-2625525679843445240</id><published>2025-03-18T15:39:00.002-03:00</published><updated>2026-01-21T18:16:19.307-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dicas"/><title type='text'>Pegboards, multiboard e outros paineis para ferramentas</title><content type='html'>&lt;h2&gt;🛠️ Padrões de Pegboard para Organização de Ferramentas&lt;/h2&gt;

&lt;p&gt;
  Estava tentando descobrir se os painéis perfurados para organização de ferramentas seguem algum padrão específico, e encontrei que muitos deles seguem o padrão &lt;strong&gt;LIDL Parkside Pegboard Wall Organizer&lt;/strong&gt;. Em algumas regiões, esse modelo também é conhecido como &lt;strong&gt;LIDL Powerfix&lt;/strong&gt;.
&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_RoKCNLYUESu76HF2dYgeagwvo6H7fXe0PJZ4GAaWwzwbIrzm7pSRbSwUaRND2hH768UCrcx06gFoMyh2ptkAQc9iNnp4fVIE6kchja-Uh__OktLbD3C_szeU1i-DyxnMOjh2HNMWHBdkF7f9O6C23oMsBGlNY6_gtrxMDjrgJAsAimd-mPdC-ZV2rriz/s1224/pegboard.png&quot; style=&quot;display: block; margin: auto;&quot;&gt;
    &lt;img alt=&quot;Painel Parkside Pegboard&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_RoKCNLYUESu76HF2dYgeagwvo6H7fXe0PJZ4GAaWwzwbIrzm7pSRbSwUaRND2hH768UCrcx06gFoMyh2ptkAQc9iNnp4fVIE6kchja-Uh__OktLbD3C_szeU1i-DyxnMOjh2HNMWHBdkF7f9O6C23oMsBGlNY6_gtrxMDjrgJAsAimd-mPdC-ZV2rriz/s320/pegboard.png&quot; /&gt;
  &lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;h1 aria-label=&quot;Lidl/Parkside Pegboard Gridfinity Bases&quot; class=&quot;title-for-share translated-text mw-css-138ahmw&quot; style=&quot;background-color: white; box-sizing: inherit; color: #1f1f1f; font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans; font-size: 18px; line-height: 24px; margin: 0px; overflow: hidden; text-overflow: ellipsis; text-wrap-mode: nowrap;&quot;&gt;Lidl/Parkside Pegboard&lt;/h1&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMGG8n5CEfdeZXyM90VcS4qI44_aIXE_9ab6z4fsnl9COUVGetwvTS16SAhr__bCzJDA9-WmPmYhgH0msRBIcNC6JPk7WA8ZFybhEE6XHcLR-EQ1lBFfbt5npbVJYKlUPDgsWHnU1dmJ7OTSgBgR7RpPaut8mZuNMBrRSJCa66kgol1xkYkA0zQ3rOrOiY/s696/Captura%20de%20Tela%202025-10-15%20a%CC%80s%2016.26.41.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;456&quot; data-original-width=&quot;696&quot; height=&quot;210&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMGG8n5CEfdeZXyM90VcS4qI44_aIXE_9ab6z4fsnl9COUVGetwvTS16SAhr__bCzJDA9-WmPmYhgH0msRBIcNC6JPk7WA8ZFybhEE6XHcLR-EQ1lBFfbt5npbVJYKlUPDgsWHnU1dmJ7OTSgBgR7RpPaut8mZuNMBrRSJCa66kgol1xkYkA0zQ3rOrOiY/s320/Captura%20de%20Tela%202025-10-15%20a%CC%80s%2016.26.41.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;
  Para quem tem uma impressora 3D, existem padrões alternativos muito interessantes que podem ser usados para imprimir suportes e acessórios compatíveis:
&lt;/p&gt;

&lt;h3&gt;🔹 1. &lt;a href=&quot;https://www.multiboard.io/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Multiboard&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
  O Multiboard é um sistema modular bastante versátil e focado em organização funcional de oficinas e bancadas. Ideal para quem deseja algo mais robusto e personalizável.
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBTWXAvtiQzExN6e_ieIMF9NuL4IBoyijPlc4M4azVTv7sOsQQFL9D14W-0OfZ2hzT_dwo_PSmSTiRhsvUIpIGbu6EbY1W3-Hf2zZnSe0vCSFKyWq6B-wdLVeWAs2ERxjspitJXX9MwbO-W9hCYWSz_DIOSLBGK0U20XTFsAZEXt45q4NEcXnYLn_9jwY/s1640/mutiboard.png&quot; style=&quot;display: block; margin: auto;&quot;&gt;
    &lt;img alt=&quot;Multiboard sistema&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSBTWXAvtiQzExN6e_ieIMF9NuL4IBoyijPlc4M4azVTv7sOsQQFL9D14W-0OfZ2hzT_dwo_PSmSTiRhsvUIpIGbu6EbY1W3-Hf2zZnSe0vCSFKyWq6B-wdLVeWAs2ERxjspitJXX9MwbO-W9hCYWSz_DIOSLBGK0U20XTFsAZEXt45q4NEcXnYLn_9jwY/s320/mutiboard.png&quot; /&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;h3&gt;🔹 2. &lt;a href=&quot;https://www.printables.com/model/152592-honeycomb-storage-wall&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Honeycomb Storage Wall (HSW)&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
  Um dos padrões mais populares na comunidade 3D, o &lt;strong&gt;HSW&lt;/strong&gt; usa uma estrutura hexagonal semelhante a um favo de mel para encaixar suportes modulares. Ele é bonito, eficiente e altamente personalizável para ferramentas de todos os tipos.
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCfI5hEflaBZLBZLYeOlJdJswsjvTZ1iqwJGvY23t3822yrLzzDExP9r7aWTciVhxLbBNRARDHJf9qq_4oy8uPGpNwPPXVHcHNc19VQetQUtZblAFRw_nfagavTAXeXpCkIbhGDjViPLV90OASlt0PCc7rrHMv8rbU3vutpOvH42Aj5uaUKk2ik4zbpXQd/s1600/hsw.webp&quot; style=&quot;display: block; margin: auto;&quot;&gt;
    &lt;img alt=&quot;HSW Painel hexagonal&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCfI5hEflaBZLBZLYeOlJdJswsjvTZ1iqwJGvY23t3822yrLzzDExP9r7aWTciVhxLbBNRARDHJf9qq_4oy8uPGpNwPPXVHcHNc19VQetQUtZblAFRw_nfagavTAXeXpCkIbhGDjViPLV90OASlt0PCc7rrHMv8rbU3vutpOvH42Aj5uaUKk2ik4zbpXQd/s320/hsw.webp&quot; /&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;h3&gt;🧩 Compatibilidade entre padrões&lt;/h3&gt;
&lt;p&gt;
  Cada padrão possui espaçamentos, encaixes e suportes únicos. Embora alguns acessórios possam ser adaptados de um sistema para outro, o ideal é sempre verificar as dimensões e formatos dos encaixes para garantir compatibilidade. A vantagem dos sistemas baseados em impressão 3D é justamente a liberdade de personalizar ou adaptar peças conforme sua necessidade.
&lt;/p&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/2625525679843445240/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2025/03/pegboards-multiboard-e-outros-paineis.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/2625525679843445240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/2625525679843445240'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2025/03/pegboards-multiboard-e-outros-paineis.html' title='Pegboards, multiboard e outros paineis para ferramentas'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_RoKCNLYUESu76HF2dYgeagwvo6H7fXe0PJZ4GAaWwzwbIrzm7pSRbSwUaRND2hH768UCrcx06gFoMyh2ptkAQc9iNnp4fVIE6kchja-Uh__OktLbD3C_szeU1i-DyxnMOjh2HNMWHBdkF7f9O6C23oMsBGlNY6_gtrxMDjrgJAsAimd-mPdC-ZV2rriz/s72-c/pegboard.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-1781494330154579085</id><published>2024-11-05T20:04:00.012-03:00</published><updated>2025-04-07T17:39:30.604-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dicas"/><category scheme="http://www.blogger.com/atom/ns#" term="softwares"/><title type='text'>Softwares de fotos</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_avFUJsDNiFVRTbapAk_eZnemA3wM5F9n53fb1xDFMkJSSCwDJbG63NqMd_9Skx6A3dup6E4KDbFhTo8DwPchmbfBItR59I0aLAtxYtmNIU82HnSyqgb81eyX2wgDo8PYWavx79JiPYrSfKEh-n4HUeVed5cQy65C9-tfXSNoFxrBRu01P97f517FY2-l/s320/ChatGPT%20Image%207%20de%20abr.%20de%202025,%2017_38_55.png&quot; /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_avFUJsDNiFVRTbapAk_eZnemA3wM5F9n53fb1xDFMkJSSCwDJbG63NqMd_9Skx6A3dup6E4KDbFhTo8DwPchmbfBItR59I0aLAtxYtmNIU82HnSyqgb81eyX2wgDo8PYWavx79JiPYrSfKEh-n4HUeVed5cQy65C9-tfXSNoFxrBRu01P97f517FY2-l/s1024/ChatGPT%20Image%207%20de%20abr.%20de%202025,%2017_38_55.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;🎨 Softwares de Edição de Imagem para Testar&lt;/h2&gt;

&lt;p&gt;Confira abaixo algumas ótimas opções de softwares (gratuitos ou com versão de teste) para edição de imagens, design e criatividade:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://affinity.serif.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;
      &lt;strong&gt;Affinity&lt;/strong&gt;
    &lt;/a&gt; – O software de edição fotográfica dos sonhos. Profissional, robusto e com excelente desempenho, ideal para quem busca uma alternativa ao Photoshop.
  &lt;/li&gt;
  &lt;br /&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://pixlr.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;
      &lt;strong&gt;Pixlr&lt;/strong&gt;
    &lt;/a&gt; – Ferramentas de design e geração de imagens com inteligência artificial, direto no navegador.
  &lt;/li&gt;
  &lt;br /&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://www.photopea.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;
      &lt;strong&gt;Photopea&lt;/strong&gt;
    &lt;/a&gt; – O melhor editor de fotos gratuito e online. Suporta PSD, Sketch, XD, e outros formatos populares.
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;📊 Comparativo entre os softwares&lt;/h3&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;8&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse: collapse; text-align: center; width: 100%;&quot;&gt;
  &lt;thead style=&quot;background-color: #f0f0f0;&quot;&gt;
    &lt;tr&gt;
      &lt;th&gt;Software&lt;/th&gt;
      &lt;th&gt;Gratuito&lt;/th&gt;
      &lt;th&gt;Baseado na Web&lt;/th&gt;
      &lt;th&gt;Suporta PSD&lt;/th&gt;
      &lt;th&gt;Recursos com IA&lt;/th&gt;
      &lt;th&gt;Indicado para&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Affinity&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;❌ (pago com teste)&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;Design profissional e fotografia&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Pixlr&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;Parcial&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;Edição rápida e AI para imagens&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Photopea&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;Usuários do Photoshop e design leve&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/1781494330154579085/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2024/11/softwares-de-fotos.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1781494330154579085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/1781494330154579085'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2024/11/softwares-de-fotos.html' title='Softwares de fotos'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_avFUJsDNiFVRTbapAk_eZnemA3wM5F9n53fb1xDFMkJSSCwDJbG63NqMd_9Skx6A3dup6E4KDbFhTo8DwPchmbfBItR59I0aLAtxYtmNIU82HnSyqgb81eyX2wgDo8PYWavx79JiPYrSfKEh-n4HUeVed5cQy65C9-tfXSNoFxrBRu01P97f517FY2-l/s72-c/ChatGPT%20Image%207%20de%20abr.%20de%202025,%2017_38_55.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-703948916521820892</id><published>2024-09-28T15:19:00.002-03:00</published><updated>2025-04-07T17:23:59.903-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="3d"/><title type='text'>Filamentos para impressão 3d</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsSVpIxaLB3YOFiRVynlbt7YJ7epjz2lc5tuN8RpJ39Dtha3tAsh6TbHOuB0vl10MVd5FsAX1MxEZm3d8R8DbWkk3H_FZOh-PDSRVcwUZVzcFgLCsv9c_Bx0LxvhDnZfoA-DxMYvTZ1FNUDSd0BbX43w0qsbPn6Nf7D22a-8GR0tX08lOBsaT65oYBpFle/s320/ChatGPT%20Image%207%20de%20abr.%20de%202025,%2017_21_56.png&quot; /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsSVpIxaLB3YOFiRVynlbt7YJ7epjz2lc5tuN8RpJ39Dtha3tAsh6TbHOuB0vl10MVd5FsAX1MxEZm3d8R8DbWkk3H_FZOh-PDSRVcwUZVzcFgLCsv9c_Bx0LxvhDnZfoA-DxMYvTZ1FNUDSd0BbX43w0qsbPn6Nf7D22a-8GR0tX08lOBsaT65oYBpFle/s1024/ChatGPT%20Image%207%20de%20abr.%20de%202025,%2017_21_56.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;🧵 Filamentos para Impressão 3D: Comparativo e Aplicações&lt;/h2&gt;

&lt;h3&gt;💧 BVOH – Suporte Solúvel em Água&lt;/h3&gt;
&lt;p&gt;
  O &lt;strong&gt;BVOH&lt;/strong&gt; (copolímero de buteno-diol e álcool vinílico) é um filamento solúvel em água, ideal para a impressão de &lt;em&gt;prototipagens perfeitas&lt;/em&gt;, &lt;em&gt;estruturas complexas&lt;/em&gt; e &lt;em&gt;mecanismos móveis&lt;/em&gt;. É muito útil quando os suportes tradicionais são difíceis de remover ou comprometem a qualidade da peça final.
&lt;/p&gt;
&lt;p&gt;
  Após a impressão, basta submergir o modelo em água morna e o suporte se dissolverá completamente, resultando em uma peça com acabamento muito superior ao de suportes quebráveis.
&lt;/p&gt;
&lt;p&gt;
  Compatível com impressoras de duplo extrusor, o BVOH tem excelente aderência a diversos materiais como PLA, ABS, PET-G, ASA, TPU, entre outros. Deve ser armazenado em local seco para evitar absorção de umidade.
&lt;/p&gt;
&lt;p&gt;
  🔗 &lt;a href=&quot;https://fiberlogy.com/en/fiberlogy-filaments/bvoh/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Saiba mais sobre BVOH (Fiberlogy)&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;🟡 PCTG – A Melhor Alternativa ao PET-G&lt;/h3&gt;
&lt;p&gt;
  O &lt;strong&gt;PCTG&lt;/strong&gt; pertence à mesma família de poliésteres que o PET-G, mas oferece &lt;strong&gt;maior resistência a impacto&lt;/strong&gt;, &lt;strong&gt;maior transparência&lt;/strong&gt; e &lt;strong&gt;melhor estabilidade térmica&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
  Ideal para impressoras domésticas, o PCTG dispensa o uso de câmara aquecida e apresenta baixa contração e excelente estabilidade dimensional, tornando-o uma excelente opção até mesmo para usuários iniciantes.

&lt;/p&gt;&lt;h3&gt;🧪 CPE / Tritan (Copoliéster)&lt;/h3&gt;
&lt;p&gt;
  O &lt;strong&gt;CPE (Tritan)&lt;/strong&gt; é um copoliéster de alta resistência, seguro para contato com alimentos e com ótima durabilidade mecânica.
&lt;/p&gt;
&lt;p&gt;
  🔗 &lt;a href=&quot;https://en.wikipedia.org/wiki/Tritan_copolyester&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Mais sobre Tritan (Wikipedia)&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;🧰 Outros Filamentos Técnicos&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;PA (Poliamida / Nylon):&lt;/strong&gt; Alta resistência a impacto, uso contínuo até 120 °C, ideal para aplicações técnicas exigentes. Semiflexível e com baixo coeficiente de atrito.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PVA (Polivinil Álcool):&lt;/strong&gt; Suporte solúvel em água, semelhante ao BVOH. 🔗 &lt;a href=&quot;https://www.sigmaaldrich.com/BR/pt/product/aldrich/901031&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Mais sobre PVA (Sigma-Aldrich)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PLA/PHA:&lt;/strong&gt; Mistura bioplástica com maior resistência e acabamento superior. Desenvolvido pela colorFabb.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PP (Polipropileno):&lt;/strong&gt; Leve, semiflexível e resistente à fadiga. Ideal para aplicações de baixa força e alta repetição.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PPS (Polifenileno Sulfeto):&lt;/strong&gt; Excelente estabilidade térmica e resistência química. Usado em aplicações industriais avançadas.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h3&gt;📊 Tabela Comparativa de Filamentos&lt;/h3&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;8&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse: collapse; text-align: center; width: 100%;&quot;&gt;
  &lt;thead style=&quot;background-color: #f0f0f0;&quot;&gt;
    &lt;tr&gt;
      &lt;th&gt;Filamento&lt;/th&gt;
      &lt;th&gt;Tipo&lt;/th&gt;
      &lt;th&gt;Solúvel em Água&lt;/th&gt;
      &lt;th&gt;Resistência Térmica&lt;/th&gt;
      &lt;th&gt;Flexibilidade&lt;/th&gt;
      &lt;th&gt;Uso Recomendado&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;BVOH&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Suporte&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;⬤ Média&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;Suporte técnico para peças complexas&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;PCTG&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Estrutural&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;⬤ Alta&lt;/td&gt;
      &lt;td&gt;⚪ Leve&lt;/td&gt;
      &lt;td&gt;Peças resistentes e transparentes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;CPE / Tritan&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Estrutural&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;⬤ Alta&lt;/td&gt;
      &lt;td&gt;⚪ Média&lt;/td&gt;
      &lt;td&gt;Segurança alimentar e durabilidade&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;PA (Nylon)&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Engenharia&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;⬤ Alta&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;Engrenagens, articulações, protótipos técnicos&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;PVA&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Suporte&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;⬤ Baixa&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;Suporte solúvel alternativo ao BVOH&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;PLA/PHA&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Bioplástico&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;⬤ Média&lt;/td&gt;
      &lt;td&gt;⚪ Leve&lt;/td&gt;
      &lt;td&gt;Impressões decorativas, prototipagem simples&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;PP&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Funcional&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;⬤ Média&lt;/td&gt;
      &lt;td&gt;✅&lt;/td&gt;
      &lt;td&gt;Dobradiças, peças leves e resistentes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;PPS&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Engenharia&lt;/td&gt;
      &lt;td&gt;❌&lt;/td&gt;
      &lt;td&gt;⬤ Muito Alta&lt;/td&gt;
      &lt;td&gt;⚪ Leve&lt;/td&gt;
      &lt;td&gt;Ambientes agressivos, indústria&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/703948916521820892/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2024/09/filamentos.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/703948916521820892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/703948916521820892'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2024/09/filamentos.html' title='Filamentos para impressão 3d'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsSVpIxaLB3YOFiRVynlbt7YJ7epjz2lc5tuN8RpJ39Dtha3tAsh6TbHOuB0vl10MVd5FsAX1MxEZm3d8R8DbWkk3H_FZOh-PDSRVcwUZVzcFgLCsv9c_Bx0LxvhDnZfoA-DxMYvTZ1FNUDSd0BbX43w0qsbPn6Nf7D22a-8GR0tX08lOBsaT65oYBpFle/s72-c/ChatGPT%20Image%207%20de%20abr.%20de%202025,%2017_21_56.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-795366004979690900</id><published>2024-09-27T20:21:00.001-03:00</published><updated>2024-09-27T20:21:00.116-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="softwares"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>PostgreSQL - Supabase - Ferramentas para acesso a banco de dados</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://dbeaver.io/wp-content/uploads/2015/09/beaver-head.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;128&quot; data-original-width=&quot;128&quot; height=&quot;128&quot; src=&quot;https://dbeaver.io/wp-content/uploads/2015/09/beaver-head.png&quot; width=&quot;128&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp; &amp;nbsp; Ferramentas como&amp;nbsp;&lt;strong&gt;&lt;a href=&quot;https://www.beekeeperstudio.io/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Beekeeper Studio&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;e&amp;nbsp;&lt;strong&gt;&lt;a href=&quot;https://dbeaver.io/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;DBeaver&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;oferecem uma solução eficiente para gerenciar bancos de dados online, como o &lt;b&gt;&lt;span style=&quot;color: #6aa84f;&quot;&gt;Supabase&lt;/span&gt;&lt;/b&gt;, especialmente nas versões gratuitas que possuem limitações de funcionalidades. Elas permitem realizar tarefas essenciais, como importação, exportação, backup e execução de consultas complexas, sem depender das restrições de funcionalidades nativas dessas plataformas. Isso diminui o impacto das limitações impostas por versões gratuitas, permitindo aos desenvolvedores e administradores gerenciar e manipular dados de forma flexível e sem custos adicionais, maximizando a produtividade e a eficiência em seus projetos.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://dbeaver.io/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://dbeaver.io/&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://www.beekeeperstudio.io/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.beekeeperstudio.io/&lt;/a&gt;&lt;/div&gt;



&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/795366004979690900/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2024/09/postgresql-supabase-ferramentas-para.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/795366004979690900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/795366004979690900'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2024/09/postgresql-supabase-ferramentas-para.html' title='PostgreSQL - Supabase - Ferramentas para acesso a banco de dados'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6212976660383299815.post-6198544740441219110</id><published>2024-09-26T19:00:00.005-03:00</published><updated>2025-03-24T13:57:03.930-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dicas"/><category scheme="http://www.blogger.com/atom/ns#" term="docker"/><category scheme="http://www.blogger.com/atom/ns#" term="flutter"/><category scheme="http://www.blogger.com/atom/ns#" term="flutterflow"/><category scheme="http://www.blogger.com/atom/ns#" term="Programação"/><category scheme="http://www.blogger.com/atom/ns#" term="softwares"/><category scheme="http://www.blogger.com/atom/ns#" term="Técnico"/><title type='text'>SQL: Função listar tabelas PostgreSQL / SUPABASE e outros</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwVzBdT5F-x1Z9ixKPjuAkI7TG2GADwn47tjxH9Qec7QqnVO6T0N0KDF58Jn7P8605uOYqQonI1cDXTPgjEQEipjLj7hzy2-Bx5juLfdF1la1VdsuNVQUUwxVgZrpCUk44PmQ0PAH4SwiFFgums9k3vQ4RbzEPNi8uT-xoPF6APkh3GhK1vei7V0viY7Yb/s1024/DALL%C2%B7E%202025-01-02%2021.55.38%20-%20A%20professional%20and%20clean%20blog%20image%20for%20the%20title%20&#39;SQL_%20Func%CC%A7a%CC%83o%20listar%20tabelas%20PostgreSQL%20_%20SUPABASE.&#39;%20The%20design%20should%20feature%20a%20database%20icon%20or%20ser.webp&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwVzBdT5F-x1Z9ixKPjuAkI7TG2GADwn47tjxH9Qec7QqnVO6T0N0KDF58Jn7P8605uOYqQonI1cDXTPgjEQEipjLj7hzy2-Bx5juLfdF1la1VdsuNVQUUwxVgZrpCUk44PmQ0PAH4SwiFFgums9k3vQ4RbzEPNi8uT-xoPF6APkh3GhK1vei7V0viY7Yb/s320/DALL%C2%B7E%202025-01-02%2021.55.38%20-%20A%20professional%20and%20clean%20blog%20image%20for%20the%20title%20&#39;SQL_%20Func%CC%A7a%CC%83o%20listar%20tabelas%20PostgreSQL%20_%20SUPABASE.&#39;%20The%20design%20should%20feature%20a%20database%20icon%20or%20ser.webp&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Segue um SQL para criação de uma função dentro do PostgreSQL / SUPABASE&lt;/p&gt;&lt;div style=&quot;background-color: #f0f0f0; color: #444444; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; line-height: 18px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: blue;&quot;&gt;CREATE&lt;/span&gt; &lt;span style=&quot;color: lightslategrey;&quot;&gt;OR&lt;/span&gt; REPLACE FUNCTION get_table_list&lt;span style=&quot;color: black;&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;RETURNS &lt;span style=&quot;color: blue;&quot;&gt;TABLE&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;table_name TEXT&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt; table_type TEXT&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt; table_schema TEXT&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;AS&lt;/span&gt; &lt;span style=&quot;color: #098658;&quot;&gt;$$&lt;/span&gt;&lt;/div&gt;&lt;div&gt;BEGIN&lt;/div&gt;&lt;div&gt;&amp;nbsp; RETURN QUERY&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;SELECT&lt;/span&gt; t&lt;span style=&quot;color: black;&quot;&gt;.&lt;/span&gt;table_name::text&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt; t&lt;span style=&quot;color: black;&quot;&gt;.&lt;/span&gt;table_type::text&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt; t&lt;span style=&quot;color: black;&quot;&gt;.&lt;/span&gt;table_schema::text&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;FROM&lt;/span&gt; information_schema&lt;span style=&quot;color: black;&quot;&gt;.&lt;/span&gt;tables t&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;WHERE&lt;/span&gt; t&lt;span style=&quot;color: black;&quot;&gt;.&lt;/span&gt;table_schema &lt;span style=&quot;color: lightslategrey;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #24b47e;&quot;&gt;&#39;public&#39;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: blue;&quot;&gt;END&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #098658;&quot;&gt;$$&lt;/span&gt; LANGUAGE plpgsql&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;background-color: #f0f0f0; color: #444444; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; line-height: 18px; white-space: pre;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;select&lt;/span&gt; &lt;span style=&quot;color: lightslategrey;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;from&lt;/span&gt; get_table_list&lt;span style=&quot;color: black;&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Consulta SQL para listar os nomes dos campos de uma tabela no PostgreSQL&amp;nbsp;&amp;nbsp;/ Supabase:&lt;/p&gt;&lt;div style=&quot;background-color: #f0f0f0; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; line-height: 18px; white-space: pre;&quot;&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;SELECT &lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;column_name&lt;br /&gt; &lt;/span&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;FROM &lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;information_schema.columns&lt;br /&gt; &lt;/span&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;WHERE &lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;table_schema = &#39;public&#39;&lt;br /&gt; &lt;/span&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;AND &lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;table_name = &#39;nome_da_tabela&#39;;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Consulta SQL para consultar a definição (o SQL) que criou uma view no PostgreSQL / Supabase:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;background-color: #f0f0f0; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; line-height: 18px; white-space: pre;&quot;&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;SELECT &lt;span style=&quot;color: #444444;&quot;&gt;definition&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;FROM &lt;span style=&quot;color: #444444;&quot;&gt;pg_views&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;WHERE &lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;schemaname &lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;= &#39;public&#39;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #444444;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;AND &lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;viewname &lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;= &#39;nome_da_tabela&#39;;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ou&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #f0f0f0; color: #2b00fe; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; white-space: pre;&quot;&gt;SELECT &lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: Consolas, Courier New, monospace;&quot;&gt;&lt;span style=&quot;font-size: 13px; white-space: pre;&quot;&gt;view_definition&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;background-color: #f0f0f0; line-height: 18px;&quot;&gt;&lt;span style=&quot;color: #444444; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #2b00fe; font-family: Consolas, Courier New, monospace;&quot;&gt;&lt;span style=&quot;font-size: 13px; white-space: pre;&quot;&gt;FROM &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: Consolas, Courier New, monospace;&quot;&gt;&lt;span style=&quot;font-size: 13px; white-space: pre;&quot;&gt;information_schema.views&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; white-space: pre;&quot;&gt;WHERE &lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: Consolas, Courier New, monospace;&quot;&gt;&lt;span style=&quot;font-size: 13px; white-space: pre;&quot;&gt;table_schema&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; white-space: pre;&quot;&gt;= &#39;public&#39;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #444444; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; white-space: pre;&quot;&gt;AND &lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 13px; white-space: pre;&quot;&gt;&lt;span style=&quot;color: #444444; font-family: Consolas, Courier New, monospace;&quot;&gt;table_name = &#39;nome_da_view&#39;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;dms&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.neoage.com.br/feeds/6198544740441219110/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.neoage.com.br/2024/09/sql-funcao-listar-tabelas-postgresql.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/6198544740441219110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6212976660383299815/posts/default/6198544740441219110'/><link rel='alternate' type='text/html' href='http://www.neoage.com.br/2024/09/sql-funcao-listar-tabelas-postgresql.html' title='SQL: Função listar tabelas PostgreSQL / SUPABASE e outros'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwVzBdT5F-x1Z9ixKPjuAkI7TG2GADwn47tjxH9Qec7QqnVO6T0N0KDF58Jn7P8605uOYqQonI1cDXTPgjEQEipjLj7hzy2-Bx5juLfdF1la1VdsuNVQUUwxVgZrpCUk44PmQ0PAH4SwiFFgums9k3vQ4RbzEPNi8uT-xoPF6APkh3GhK1vei7V0viY7Yb/s72-c/DALL%C2%B7E%202025-01-02%2021.55.38%20-%20A%20professional%20and%20clean%20blog%20image%20for%20the%20title%20&#39;SQL_%20Func%CC%A7a%CC%83o%20listar%20tabelas%20PostgreSQL%20_%20SUPABASE.&#39;%20The%20design%20should%20feature%20a%20database%20icon%20or%20ser.webp" height="72" width="72"/><thr:total>0</thr:total></entry></feed>