<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Tiago Costa</title>
    <link>https://tiagoscosta.tpps.com.br/posts/</link>
    <description>Recent content in Posts on Tiago Costa</description>
    <generator>Hugo</generator>
    <language>pt-br</language>
    <lastBuildDate>Thu, 28 May 2026 15:52:00 +0000</lastBuildDate>
    <atom:link href="https://tiagoscosta.tpps.com.br/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>📝 Transformando um aplicação web em um PWA (Progressive Web App) com Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-transformando-um-aplica%C3%A7%C3%A3o-web-em-um-pwa-progressive-web-app-com-angular/</link>
      <pubDate>Thu, 28 May 2026 15:52:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-transformando-um-aplica%C3%A7%C3%A3o-web-em-um-pwa-progressive-web-app-com-angular/</guid>
      <description>&lt;p&gt;Adicionar recursos de &lt;strong&gt;PWA (Progressive Web App)&lt;/strong&gt; a uma aplicação para eleva a experiência do usuário a outro patamar. Além de permitir que o aplicativo seja instalado diretamente na tela inicial do celular ou desktop sem depender das lojas de aplicativos (Google Play ou App Store), o PWA habilita o carregamento instantâneo de recursos através do armazenamento em cache por meio de &lt;em&gt;Service Workers&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, você aprenderá o passo a passo completo para configurar o suporte a PWA no ecossistema moderno do Angular.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Dominando Padrões de Criação: Singleton e Factory Method</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-dominando-padr%C3%B5es-de-cria%C3%A7%C3%A3o-singleton-e-factory-method/</link>
      <pubDate>Sat, 09 May 2026 22:17:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-dominando-padr%C3%B5es-de-cria%C3%A7%C3%A3o-singleton-e-factory-method/</guid>
      <description>&lt;p&gt;No desenvolvimento orientado a objetos, a forma como criamos instâncias de classes pode determinar quão flexível ou rígido um sistema será. Os padrões &lt;strong&gt;Singleton&lt;/strong&gt; e &lt;strong&gt;Factory Method&lt;/strong&gt; oferecem controle sobre esse processo, garantindo eficiência e baixo acoplamento.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-singleton-a-instância-única&#34;&gt;&#xA;  ​1. Singleton: A Instância Única&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-singleton-a-inst%c3%a2ncia-%c3%banica&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;​O &lt;strong&gt;Singleton&lt;/strong&gt; é utilizado quando precisamos garantir que uma classe tenha &lt;strong&gt;apenas uma instância&lt;/strong&gt; durante toda a execução do programa. Ele centraliza o acesso a um recurso compartilhado.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 O Guia Essencial dos Design Patterns: Eficiência e Elegância no Código</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-o-guia-essencial-dos-design-patterns-efici%C3%AAncia-e-eleg%C3%A2ncia-no-c%C3%B3digo/</link>
      <pubDate>Sat, 09 May 2026 16:21:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-o-guia-essencial-dos-design-patterns-efici%C3%AAncia-e-eleg%C3%A2ncia-no-c%C3%B3digo/</guid>
      <description>&lt;p&gt;​No mundo do desenvolvimento de software, não precisamos reinventar a roda para cada problema estrutural que encontramos. Os &lt;strong&gt;Design Patterns&lt;/strong&gt; (Padrões de Projeto) funcionam como um catálogo de soluções testadas e aprovadas para problemas recorrentes no design de sistemas orientados a objetos.&lt;/p&gt;&#xA;&lt;p&gt;​Abaixo, exploramos os padrões mais utilizados no mercado, divididos por suas finalidades principais.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-padrões-criacionais-como-os-objetos-são-instanciados&#34;&gt;&#xA;  ​1. Padrões Criacionais (Como os objetos são instanciados)&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-padr%c3%b5es-criacionais-como-os-objetos-s%c3%a3o-instanciados&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;​Estes padrões visam abstrair o processo de instanciação, tornando o sistema independente de como seus objetos são criados.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Estratégias de Multitenancy em Bancos de Dados</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-estrat%C3%A9gias-de-multitenancy-em-bancos-de-dados/</link>
      <pubDate>Sat, 09 May 2026 11:15:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-estrat%C3%A9gias-de-multitenancy-em-bancos-de-dados/</guid>
      <description>&lt;p&gt;No desenvolvimento de aplicações SaaS (Software as a Service), o conceito de &lt;strong&gt;Multitenancy&lt;/strong&gt; (Multilocação) é fundamental. Ele se refere a uma arquitetura onde uma única instância de um software atende a vários clientes (tenants). O grande desafio técnico reside em como isolar os dados de cada cliente de forma segura e eficiente no banco de dados.&lt;/p&gt;&#xA;&lt;p&gt;​Existem três abordagens principais para implementar essa segregação:&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-database-per-tenant-isolamento-total&#34;&gt;&#xA;  ​1. Database per Tenant (Isolamento Total)&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-database-per-tenant-isolamento-total&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;​Cada cliente possui seu próprio banco de dados físico. É a forma mais segura de isolamento.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Arquitetura de Software: Do Macro ao Micro</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-arquitetura-de-software-do-macro-ao-micro/</link>
      <pubDate>Mon, 27 Apr 2026 12:35:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-arquitetura-de-software-do-macro-ao-micro/</guid>
      <description>&lt;p&gt;No desenvolvimento de sistemas modernos, a palavra &amp;ldquo;arquitetura&amp;rdquo; pode gerar confusão por ser aplicada em diferentes níveis. Para construir sistemas robustos, é preciso entender que a arquitetura não é uma escolha única, mas uma composição de decisões que vão desde a infraestrutura global até a organização das pastas no seu editor de código.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-arquitetura-de-sistema-vs-arquitetura-de-aplicação&#34;&gt;&#xA;  1. Arquitetura de Sistema vs. Arquitetura de Aplicação&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-arquitetura-de-sistema-vs-arquitetura-de-aplica%c3%a7%c3%a3o&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Antes de escolher um padrão, precisamos diferenciar o &lt;strong&gt;escopo&lt;/strong&gt; da decisão:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Explorando o DDD no Ecossistema Laravel: Da Teoria à Prática</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-explorando-o-ddd-no-ecossistema-laravel-da-teoria-%C3%A0-pr%C3%A1tica/</link>
      <pubDate>Thu, 23 Apr 2026 18:35:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-explorando-o-ddd-no-ecossistema-laravel-da-teoria-%C3%A0-pr%C3%A1tica/</guid>
      <description>&lt;p&gt;O &lt;strong&gt;Domain-Driven Design (DDD)&lt;/strong&gt; não é apenas um padrão de pastas, mas uma filosofia de design de software que coloca a &lt;strong&gt;Regra de Negócio&lt;/strong&gt; (o Domínio) como o centro de todas as decisões. No Laravel, aplicar DDD significa elevar o nível de maturidade do código, garantindo que o framework sirva à aplicação, e não o contrário.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-que-é-ddd-e-por-que-aplicá-lo&#34;&gt;&#xA;  1. O que é DDD e por que aplicá-lo?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-que-%c3%a9-ddd-e-por-que-aplic%c3%a1-lo&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;No desenvolvimento tradicional (MVC puro), é comum encontrarmos lógica de banco de dados em Controllers ou Models gigantes. O DDD propõe o desacoplamento. Ele divide o sistema em camadas para que, se você precisar trocar o banco de dados ou a forma como um comando é disparado, a regra de negócio permaneça intacta.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 O Mistério dos Caracteres Interrogados: Por que a flag -utf8 no s3270 é a &#34;Bala de Prata&#34;</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-o-mist%C3%A9rio-dos-caracteres-interrogados-por-que-a-flag-utf8-no-s3270-%C3%A9-a-bala-de-prata/</link>
      <pubDate>Thu, 09 Apr 2026 11:31:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-o-mist%C3%A9rio-dos-caracteres-interrogados-por-que-a-flag-utf8-no-s3270-%C3%A9-a-bala-de-prata/</guid>
      <description>&lt;p&gt;Se você trabalha com integração de sistemas modernos e Mainframes via protocolo 3270, certamente já se deparou com este cenário frustrante: sua aplicação PHP recebe os dados, mas o que deveria ser &lt;strong&gt;&amp;ldquo;LIGAÇÃO&amp;rdquo;&lt;/strong&gt; aparece como &lt;strong&gt;&amp;ldquo;LIGA??O&amp;rdquo;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Mesmo testando diversos charsets no construtor da sua classe, o sinal de interrogação insiste em aparecer. Vamos entender por que a flag &lt;code&gt;-utf8&lt;/code&gt; resolve isso e como ela atua no fluxo de dados.&lt;/p&gt;&#xA;&lt;h2 id=&#34;o-problema-o-choque-de-três-mundos&#34;&gt;&#xA;  O Problema: O Choque de Três Mundos&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-problema-o-choque-de-tr%c3%aas-mundos&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Para entender a solução, precisamos visualizar o caminho que o dado percorre:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Explorando Metadados no MySQL: Como Consultar a Estrutura de Colunas Específicas</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-explorando-metadados-no-mysql-como-consultar-a-estrutura-de-colunas-espec%C3%ADficas/</link>
      <pubDate>Tue, 24 Feb 2026 16:53:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-explorando-metadados-no-mysql-como-consultar-a-estrutura-de-colunas-espec%C3%ADficas/</guid>
      <description>&lt;p&gt;No dia a dia do desenvolvimento, é comum precisarmos validar tipos de dados, tamanhos de campos ou permissões de nulidade para garantir que nossas Migrations ou Queries estejam sincronizadas com o banco de dados. No MySQL, existem duas formas principais de obter essas informações de maneira filtrada.&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, utilizaremos como exemplo uma tabela genérica chamada &lt;code&gt;produtos_estoque&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-método-pragmático-show-columns&#34;&gt;&#xA;  1. O Método Pragmático: &lt;code&gt;SHOW COLUMNS&lt;/code&gt;&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-m%c3%a9todo-pragm%c3%a1tico-show-columns&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O comando &lt;code&gt;SHOW COLUMNS&lt;/code&gt; é a ferramenta de &amp;ldquo;campo&amp;rdquo; do desenvolvedor. Ele é direto, fácil de lembrar e retorna o essencial para o trabalho imediato.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Git Invisível: Como Ignorar Arquivos sem Alterar o .gitignore</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-git-invis%C3%ADvel-como-ignorar-arquivos-sem-alterar-o-gitignore/</link>
      <pubDate>Thu, 19 Feb 2026 12:45:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-git-invis%C3%ADvel-como-ignorar-arquivos-sem-alterar-o-gitignore/</guid>
      <description>&lt;p&gt;No dia a dia de um desenvolvedor, é comum lidarmos com arquivos que são estritamente pessoais: scripts de automação local, arquivos de anotações, dumps de banco de dados para testes ou configurações específicas de uma IDE. Embora o &lt;code&gt;.gitignore&lt;/code&gt; seja a ferramenta padrão para gerenciar o que o Git deve ignorar, ele é um arquivo versionado e compartilhado com toda a equipe.&lt;/p&gt;&#xA;&lt;p&gt;Mas e quando você quer ignorar algo apenas na sua máquina, sem que ninguém mais saiba? Existem três formas poderosas de fazer isso de forma &amp;ldquo;invisível&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Sincronia de Dados: Como Comparar Colunas entre Tabelas no MySQL</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-sincronia-de-dados-como-comparar-colunas-entre-tabelas-no-mysql/</link>
      <pubDate>Thu, 19 Feb 2026 12:35:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-sincronia-de-dados-como-comparar-colunas-entre-tabelas-no-mysql/</guid>
      <description>&lt;p&gt;Em ambientes de banco de dados dinâmicos, é comum nos depararmos com situações onde precisamos validar a estrutura de duas tabelas. Seja após uma migração de emergência devido a uma corrupção de arquivos (como o erro &lt;strong&gt;SQL 1034&lt;/strong&gt;), ou antes de realizar um deploy, garantir que a &amp;ldquo;Tabela A&amp;rdquo; possui as mesmas colunas que a &amp;ldquo;Tabela B&amp;rdquo; é crucial para a integridade do sistema.&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, vamos explorar como utilizar o &lt;code&gt;INFORMATION_SCHEMA&lt;/code&gt; para identificar discrepâncias estruturais de forma rápida e segura.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Protegendo sua Aplicação Angular 18 com Firebase App Check e reCAPTCHA v3 (Guia Completo)</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-protegendo-sua-aplica%C3%A7%C3%A3o-angular-18-com-firebase-app-check-e-recaptcha-v3-guia-completo/</link>
      <pubDate>Sun, 08 Feb 2026 15:13:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-protegendo-sua-aplica%C3%A7%C3%A3o-angular-18-com-firebase-app-check-e-recaptcha-v3-guia-completo/</guid>
      <description>&lt;p&gt;Se você utiliza o &lt;strong&gt;Firebase&lt;/strong&gt; como backend, sabe que a segurança é uma via de mão dupla. Não basta apenas ter boas regras no Firestore; é preciso garantir que apenas o &lt;strong&gt;seu&lt;/strong&gt; aplicativo acesse seus recursos. Neste guia, vamos aprender como implementar o App Check com reCAPTCHA &lt;strong&gt;v3&lt;/strong&gt; em um projeto &lt;strong&gt;Angular 18&lt;/strong&gt; utilizando &lt;strong&gt;NgModules&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-o-que-é-o-app-check&#34;&gt;&#xA;  1. O que é o App Check?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-que-%c3%a9-o-app-check&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O Firebase App Check é uma camada de segurança que ajuda a proteger seus serviços na nuvem (Firestore, Realtime Database, Cloud Storage) verificando se o tráfego vem de um aplicativo legítimo e bloqueando o tráfego sem credenciais válidas.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Estratégias de Otimização: Como &#34;Emagrecer&#34; seu App Angular com Bundle Analyzer</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-estrat%C3%A9gias-de-otimiza%C3%A7%C3%A3o-como-emagrecer-seu-app-angular-com-bundle-analyzer/</link>
      <pubDate>Sat, 07 Feb 2026 10:09:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-estrat%C3%A9gias-de-otimiza%C3%A7%C3%A3o-como-emagrecer-seu-app-angular-com-bundle-analyzer/</guid>
      <description>&lt;p&gt;No desenvolvimento de aplicações modernas, é fácil perder o controle do tamanho do pacote final. Bibliotecas que prometem facilitar nossa vida podem, silenciosamente, inflar o main.js, prejudicando a experiência do usuário, especialmente em conexões móveis.&lt;/p&gt;&#xA;&lt;p&gt;Recentemente, ao analisar o build do um projeto, identificamos um pacote inicial de &lt;strong&gt;1.45&lt;/strong&gt; MB. Através do &lt;strong&gt;Webpack Bundle Analyzer&lt;/strong&gt;, conseguimos visualizar os &amp;ldquo;vilões&amp;rdquo; da performance e traçar um plano de ação.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-passo-a-passo-como-instalar-e-usar-o-analisador&#34;&gt;&#xA;  🛠️ Passo a Passo: Como instalar e usar o Analisador&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#-passo-a-passo-como-instalar-e-usar-o-analisador&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Para realizar esse &amp;ldquo;raio-X&amp;rdquo; na sua própria aplicação, siga estes passos:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Sanitização de Dados e Gestão de Memória: Como Criar Processos de Longa Duração Resilientes no Laravel</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-sanitiza%C3%A7%C3%A3o-de-dados-e-gest%C3%A3o-de-mem%C3%B3ria-como-criar-processos-de-longa-dura%C3%A7%C3%A3o-resilientes-no-laravel/</link>
      <pubDate>Sat, 07 Feb 2026 00:53:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-sanitiza%C3%A7%C3%A3o-de-dados-e-gest%C3%A3o-de-mem%C3%B3ria-como-criar-processos-de-longa-dura%C3%A7%C3%A3o-resilientes-no-laravel/</guid>
      <description>&lt;p&gt;Ao desenvolver Workers ou comandos que rodam em loop infinito (como consumidores de Kafka ou RabbitMQ), o desenvolvedor enfrenta dois grandes inimigos: &lt;strong&gt;a inconsistência de dados (registros fantasma)&lt;/strong&gt; e o &lt;strong&gt;estouro de memória&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;​Neste artigo, veremos como limpar o banco de dados e manter a saúde do servidor PHP ao mesmo tempo.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-problema-registros-inconsistentes-e-memória-infinita&#34;&gt;&#xA;  ​1. O Problema: Registros Inconsistentes e Memória Infinita&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-problema-registros-inconsistentes-e-mem%c3%b3ria-infinita&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;​Em sistemas legados, é comum encontrar registros com colunas nulas que impedem a lógica de updateOrCreate. Além disso, se o seu script roda 24/7, cada consulta ao banco pode acumular logs internos, e cada objeto criado consome memória que o PHP, por padrão, demora a liberar.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Testando o Intestável: Como Validar Métodos Privados e Lógica de Banco no Laravel</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-testando-o-intest%C3%A1vel-como-validar-m%C3%A9todos-privados-e-l%C3%B3gica-de-banco-no-laravel/</link>
      <pubDate>Sat, 07 Feb 2026 00:20:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-testando-o-intest%C3%A1vel-como-validar-m%C3%A9todos-privados-e-l%C3%B3gica-de-banco-no-laravel/</guid>
      <description>&lt;p&gt;Muitas vezes, nos deparamos com classes de serviço ou comandos que possuem métodos privados complexos, responsáveis por transformações de dados e persistência. O dilema surge: devemos tornar o método público apenas para testar? Ou devemos testar apenas o método principal e esperar que tudo funcione?&lt;/p&gt;&#xA;&lt;p&gt;​Neste artigo, vamos explorar como testar métodos privados e garantir a integridade do banco de dados sem comprometer o encapsulamento da sua classe.&lt;/p&gt;&#xA;&lt;h2 id=&#34;o-cenário&#34;&gt;&#xA;  ​O Cenário&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-cen%c3%a1rio&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;​Imagine um sistema de logística que processa atualizações de rastreio vindas de uma fila. Temos um método privado saveDeliveryStatus que decide, com base em strings brutas, qual o status real da entrega.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Transformando seu App Angular 16 em um PWA: Guia Prático com Foco em UX</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-transformando-seu-app-angular-16-em-um-pwa-guia-pr%C3%A1tico-com-foco-em-ux/</link>
      <pubDate>Wed, 04 Feb 2026 18:25:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-transformando-seu-app-angular-16-em-um-pwa-guia-pr%C3%A1tico-com-foco-em-ux/</guid>
      <description>&lt;p&gt;Ter uma aplicação web é ótimo, mas permitir que o usuário a instale no smartphone como se fosse um app nativo eleva o nível da experiência (UX). Neste artigo, vamos explorar como converter um projeto Angular 16 em um &lt;strong&gt;Progressive Web App (PWA)&lt;/strong&gt;, superando desafios comuns de dependências e cache.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-por-que-pwa&#34;&gt;&#xA;  1. Por que PWA?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-por-que-pwa&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Diferente de apps nativos, o PWA não precisa de lojas (Play Store/App Store) para ser instalado. Ele oferece:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Como Gerenciar Scripts de Anúncios e Evitar Erros de ViewChild no Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-como-gerenciar-scripts-de-an%C3%BAncios-e-evitar-erros-de-viewchild-no-angular/</link>
      <pubDate>Thu, 29 Jan 2026 16:22:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-como-gerenciar-scripts-de-an%C3%BAncios-e-evitar-erros-de-viewchild-no-angular/</guid>
      <description>&lt;p&gt;Ao desenvolver aplicações que utilizam redes de anúncios ou scripts externos (como Adsterra, AdSense ou widgets de terceiros), é comum enfrentarmos dois desafios: o bloqueio por antivírus/adblocks durante demonstrações profissionais (como em processos seletivos) e erros de execução no ciclo de vida do Angular quando tentamos esconder esses elementos.&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, exploraremos como criar um serviço de injeção dinâmica e como tratar o erro &lt;code&gt;TypeError: Cannot read properties of undefined (reading &#39;nativeElement&#39;)&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 SEO para Web Apps: Dominando Sitemap, Robots.txt e Google Search Console</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-seo-para-web-apps-dominando-sitemap-robots-txt-e-google-search-console/</link>
      <pubDate>Wed, 28 Jan 2026 17:02:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-seo-para-web-apps-dominando-sitemap-robots-txt-e-google-search-console/</guid>
      <description>&lt;p&gt;Para que uma aplicação Angular seja encontrada, não basta que ela seja rápida; ela precisa ser &amp;ldquo;comunicativa&amp;rdquo; com os robôs de busca. No seu projeto, utilizará o tripé essencial de SEO técnico para garantir visibilidade orgânica.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-mapa-da-mina-sitemapxml&#34;&gt;&#xA;  1. O Mapa da Mina: Sitemap.xml&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-mapa-da-mina-sitemapxml&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O &lt;code&gt;sitemap.xml&lt;/code&gt; funciona como um índice para o Google. Ele informa quais páginas são prioritárias e com que frequência elas são atualizadas.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Guia de Implementação: Google Analytics 4 (GA4) em Projetos Angular 21 (Standalone)</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-guia-de-implementa%C3%A7%C3%A3o-google-analytics-4-ga4-em-projetos-angular-21-standalone/</link>
      <pubDate>Wed, 28 Jan 2026 16:22:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-guia-de-implementa%C3%A7%C3%A3o-google-analytics-4-ga4-em-projetos-angular-21-standalone/</guid>
      <description>&lt;p&gt;Integrar o Google Analytics em uma aplicação moderna, não serve apenas para contar visitas. É a ferramenta essencial para entender a retenção de usuários e validar a eficácia da monetização.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-por-que-usar-o-ga4-em-sua-aplicação&#34;&gt;&#xA;  1. Por que usar o GA4 em sua aplicação?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-por-que-usar-o-ga4-em-sua-aplica%c3%a7%c3%a3o&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Diferente de sites estáticos, muitas vezes aplicações de angular dependem de eventos. O GA4 permite medir:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Engajamento Real:&lt;/strong&gt; Quantas ações foram executadas.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Guia Definitivo: Laravel &#43; Docker &#43; Xdebug no WSL2</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-guia-definitivo-laravel-docker-xdebug-no-wsl2/</link>
      <pubDate>Wed, 28 Jan 2026 13:01:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-guia-definitivo-laravel-docker-xdebug-no-wsl2/</guid>
      <description>&lt;p&gt;Este artigo detalha como configurar um ambiente de desenvolvimento onde o código reside no sistema de arquivos do Linux (WSL), rodando em containers Docker, com debug funcional no VS Code.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-por-que-rodar-no-diretório-do-wsl&#34;&gt;&#xA;  1. Por que rodar no diretório do WSL?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-por-que-rodar-no-diret%c3%b3rio-do-wsl&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Para performance máxima. O Docker Desktop no Windows tem um gargalo de IO quando acessa arquivos no &lt;code&gt;/mnt/c/&lt;/code&gt;. Ao mover o projeto para &lt;code&gt;\\wsl.localhost\Ubuntu\home\...&lt;/code&gt;, a aplicação Laravel pode rodar até 10x mais rápido.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Firebase App Check: Blindando sua Infraestrutura contra Acessos Não Autorizados</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-firebase-app-check-blindando-sua-infraestrutura-contra-acessos-n%C3%A3o-autorizados/</link>
      <pubDate>Mon, 26 Jan 2026 18:29:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-firebase-app-check-blindando-sua-infraestrutura-contra-acessos-n%C3%A3o-autorizados/</guid>
      <description>&lt;p&gt;O &lt;strong&gt;Firebase App Check&lt;/strong&gt; funciona como um selo de autenticidade para o seu aplicativo. Ele garante que as requisições feitas ao seu projeto Firebase venham exclusivamente do &lt;em&gt;seu site oficial&lt;/em&gt;* e de &lt;strong&gt;dispositivos legítimos&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Sem o App Check, um atacante poderia extrair suas chaves do Firebase do código-fonte (que são públicas por natureza no frontend) e usá-las para manipular seu banco de dados através de scripts externos. Com o App Check, o Firebase rejeita qualquer requisição que não possua um token de validação válido.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Guia de Implementação: reCAPTCHA v3 no Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-guia-de-implementa%C3%A7%C3%A3o-recaptcha-v3-no-angular/</link>
      <pubDate>Mon, 26 Jan 2026 18:28:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-guia-de-implementa%C3%A7%C3%A3o-recaptcha-v3-no-angular/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Proteção Invisível contra Bots e Automações Maliciosas&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;O &lt;strong&gt;reCAPTCHA v3&lt;/strong&gt; representa uma evolução na segurança web. Diferente das versões anteriores, ele não interrompe o fluxo do usuário com desafios de &amp;ldquo;clique em todas as pontes&amp;rdquo;. Em vez disso, ele monitora o comportamento e retorna uma pontuação (score) que permite à aplicação decidir se a interação é legítima ou fruto de um script automatizado.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-preparação-obtendo-as-chaves-de-api&#34;&gt;&#xA;  1. Preparação: Obtendo as Chaves de API&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-prepara%c3%a7%c3%a3o-obtendo-as-chaves-de-api&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Antes de tocar no código, você precisa registrar sua aplicação no ecossistema do Google.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Blindando Seu Aplicativo: Estratégias Essenciais Contra Ataques DoS e Exaustão de Recursos</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-blindando-seu-aplicativo-estrat%C3%A9gias-essenciais-contra-ataques-dos-e-exaust%C3%A3o-de-recursos/</link>
      <pubDate>Mon, 26 Jan 2026 17:59:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-blindando-seu-aplicativo-estrat%C3%A9gias-essenciais-contra-ataques-dos-e-exaust%C3%A3o-de-recursos/</guid>
      <description>&lt;p&gt;No universo do desenvolvimento web, a preocupação com a segurança vai além de senhas fortes e criptografia. Ataques de Negação de Serviço (DoS) e tentativas de exaustão de recursos são ameaças reais que podem sobrecarregar seus servidores, inflar seus custos e, no pior dos cenários, tirar sua aplicação do ar.&lt;/p&gt;&#xA;&lt;p&gt;Para desenvolvedores que utilizam plataformas como o Firebase, a preocupação se desloca do &amp;ldquo;derrubar o servidor&amp;rdquo; (que o Google gerencia com maestria) para o &lt;strong&gt;&amp;ldquo;estourar o orçamento&amp;rdquo;&lt;/strong&gt; ou &lt;strong&gt;&amp;ldquo;atingir limites de cota&amp;rdquo;&lt;/strong&gt; rapidamente. Felizmente, com as ferramentas certas, é possível construir uma defesa robusta.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Como Criar e Configurar Subdomínios no Registro.br e Firebase Hosting</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-como-criar-e-configurar-subdom%C3%ADnios-no-registro-br-e-firebase-hosting/</link>
      <pubDate>Mon, 26 Jan 2026 16:19:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-como-criar-e-configurar-subdom%C3%ADnios-no-registro-br-e-firebase-hosting/</guid>
      <description>&lt;p&gt;Ter um domínio principal (como seudominio.com.br) permite que você organize diferentes aplicações através de subdomínios. Se você utiliza o Firebase Hosting, este é o guia completo.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-configuração-no-firebase-console&#34;&gt;&#xA;  1. Configuração no Firebase Console&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-configura%c3%a7%c3%a3o-no-firebase-console&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O Firebase precisa validar que você é o proprietário do subdomínio:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;No &lt;strong&gt;Firebase Console&lt;/strong&gt;, vá em &lt;strong&gt;Hosting &amp;gt; Adicionar domínio personalizado&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Insira o endereço completo (ex: &lt;code&gt;suaaplicacao.seudominio.com.br&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;O Firebase fornecerá um registro &lt;strong&gt;CNAME&lt;/strong&gt; (ou registros &lt;strong&gt;A&lt;/strong&gt; e &lt;strong&gt;TXT&lt;/strong&gt;). Copie esses valores.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-configuração-no-registrobr&#34;&gt;&#xA;  2. Configuração no Registro.br&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#2-configura%c3%a7%c3%a3o-no-registrobr&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Agora, aponte o subdomínio para os servidores do Google:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Como Configurar Domínio do Registro.br no Firebase Hosting</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-como-configurar-dom%C3%ADnio-do-registro-br-no-firebase-hosting/</link>
      <pubDate>Fri, 23 Jan 2026 14:17:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-como-configurar-dom%C3%ADnio-do-registro-br-no-firebase-hosting/</guid>
      <description>&lt;p&gt;Ter um domínio próprio é essencial para passar credibilidade aos usuários e para a aprovação em redes de anúncios como o Adsterra. Siga este passo a passo para realizar a integração.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-iniciando-a-configuração-no-firebase&#34;&gt;&#xA;  1. Iniciando a Configuração no Firebase&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-iniciando-a-configura%c3%a7%c3%a3o-no-firebase&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Antes de mexer no Registro.br, você precisa avisar ao Firebase qual domínio deseja usar.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Acesse o &lt;strong&gt;Console do Firebase&lt;/strong&gt; e entre no seu projeto.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Como Monetizar sua Aplicação Angular com Adsterra: O Guia Completo</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-como-monetizar-sua-aplica%C3%A7%C3%A3o-angular-com-adsterra-o-guia-completo/</link>
      <pubDate>Thu, 22 Jan 2026 18:06:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-como-monetizar-sua-aplica%C3%A7%C3%A3o-angular-com-adsterra-o-guia-completo/</guid>
      <description>&lt;p&gt;Integrar anúncios em aplicações Angular exige uma abordagem diferente de sites estáticos. Como o Angular não recarrega a página inteira durante a navegação, precisamos de técnicas específicas para garantir que os anúncios sejam exibidos corretamente. Abaixo, mostramos como implementar dois dos formatos mais rentáveis: o &lt;strong&gt;Banner&lt;/strong&gt; e o &lt;strong&gt;Social Bar&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-banner-estático-vs-social-bar-qual-escolher&#34;&gt;&#xA;  1. Banner Estático vs. Social Bar: Qual escolher?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-banner-est%c3%a1tico-vs-social-bar-qual-escolher&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Para aplicações como jogos de bingo ou ferramentas interativas, a escolha do formato impacta diretamente a experiência do usuário (UX) e o faturamento (CPM).&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Aplicação Web: Transformando seu Site em um App com PWA</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-aplica%C3%A7%C3%A3o-web-transformando-seu-site-em-um-app-com-pwa/</link>
      <pubDate>Tue, 20 Jan 2026 17:48:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-aplica%C3%A7%C3%A3o-web-transformando-seu-site-em-um-app-com-pwa/</guid>
      <description>&lt;p&gt;O que diferencia uma ferramenta web comum de uma plataforma que os usuários utilizam recorrentemente? A resposta está na &lt;strong&gt;acessibilidade&lt;/strong&gt; e na &lt;strong&gt;experiência do usuário (UX)&lt;/strong&gt;. Ao implementar tecnologias de &lt;strong&gt;PWA (Progressive Web App)&lt;/strong&gt;, a sua aplicação deixa de ser apenas uma URL e passa a se comportar como um aplicativo nativo instalado no celular.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-que-é-um-pwa&#34;&gt;&#xA;  1. O que é um PWA?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-que-%c3%a9-um-pwa&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Um Progressive Web App é um conjunto de tecnologias que permitem que um site ofereça funcionalidades antes exclusivas de aplicativos baixados na App Store ou Google Play.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Maximizando o Engajamento: O Guia de Open Graph Tags para Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-maximizando-o-engajamento-o-guia-de-open-graph-tags-para-angular/</link>
      <pubDate>Tue, 20 Jan 2026 17:28:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-maximizando-o-engajamento-o-guia-de-open-graph-tags-para-angular/</guid>
      <description>&lt;p&gt;Quando compartilhamos um link no WhatsApp, Facebook ou Slack, esperamos ver uma prévia atraente com título, descrição e imagem. No entanto, sem a configuração correta das &lt;strong&gt;Open Graph Tags&lt;/strong&gt;, essas plataformas exibem apenas uma URL seca ou informações genéricas.&lt;/p&gt;&#xA;&lt;p&gt;Este artigo explica como configurar essas tags no seu projeto Angular para garantir que &lt;strong&gt;sua aplicação&lt;/strong&gt; tenha uma presença visual impecável.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-que-são-open-graph-tags&#34;&gt;&#xA;  1. O que são Open Graph Tags?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-que-s%c3%a3o-open-graph-tags&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Criadas originalmente pelo Facebook, as tags Open Graph (OG) são meta tags inseridas no &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; do HTML que permitem que qualquer página da web se torne um &amp;ldquo;objeto rico&amp;rdquo; em redes sociais. Elas dizem aos rastreadores (crawlers) exatamente o que exibir.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Guia Definitivo: Build e Deploy de Aplicações Angular no Firebase</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-guia-definitivo-build-e-deploy-de-aplica%C3%A7%C3%B5es-angular-no-firebase/</link>
      <pubDate>Tue, 20 Jan 2026 16:26:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-guia-definitivo-build-e-deploy-de-aplica%C3%A7%C3%B5es-angular-no-firebase/</guid>
      <description>&lt;p&gt;Este guia detalha o processo de transformação de um ambiente de desenvolvimento Angular em um produto de produção hospedado no Firebase, garantindo suporte a &lt;strong&gt;Single Page Applications (SPA)&lt;/strong&gt;, conformidade com arquivos de publicidade (&lt;strong&gt;ads.txt&lt;/strong&gt;) e segurança via &lt;strong&gt;HTTPS&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-preparação-da-infraestrutura&#34;&gt;&#xA;  1. Preparação da Infraestrutura&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-prepara%c3%a7%c3%a3o-da-infraestrutura&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Antes de enviar os arquivos, é necessário preparar o terreno no Firebase.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Console do Firebase:&lt;/strong&gt; Crie um novo projeto no &lt;!-- raw HTML omitted --&gt;Firebase Console&lt;!-- raw HTML omitted --&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CLI Tools:&lt;/strong&gt; Instale as ferramentas de linha de comando no seu terminal:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;npm install -g firebase-tools&#xA;firebase login&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Data Engineering com Laravel: Integrando DuckDB e MySQL via Docker</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-data-engineering-com-laravel-integrando-duckdb-e-mysql-via-docker/</link>
      <pubDate>Tue, 13 Jan 2026 15:49:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-data-engineering-com-laravel-integrando-duckdb-e-mysql-via-docker/</guid>
      <description>&lt;p&gt;O DuckDB é conhecido como o &amp;ldquo;SQLite para Analytics&amp;rdquo;. Quando integrado ao ecossistema Laravel dentro de containers, ele permite realizar consultas pesadas e exportações massivas sem degradar a performance do seu banco de dados principal.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-arquitetura-da-solução&#34;&gt;&#xA;  1. Arquitetura da Solução&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-arquitetura-da-solu%c3%a7%c3%a3o&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;A estratégia consiste em rodar o DuckDB via CLI dentro do container PHP, comunicando-se com o container MySQL através da rede interna do Docker.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Firestore TTL: Como Automatizar a Exclusão de Dados em Aplicações Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-firestore-ttl-como-automatizar-a-exclus%C3%A3o-de-dados-em-aplica%C3%A7%C3%B5es-angular/</link>
      <pubDate>Sun, 11 Jan 2026 10:42:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-firestore-ttl-como-automatizar-a-exclus%C3%A3o-de-dados-em-aplica%C3%A7%C3%B5es-angular/</guid>
      <description>&lt;p&gt;Manter dados obsoletos em seu banco de dados não é apenas uma questão de organização; é uma questão de &lt;strong&gt;custo&lt;/strong&gt; e &lt;strong&gt;performance&lt;/strong&gt;. Em aplicações como sistemas de bingo, convites de eventos ou tokens temporários, os dados perdem o valor após um curto período.&lt;/p&gt;&#xA;&lt;p&gt;O recurso de &lt;strong&gt;TTL (Time-to-Live)&lt;/strong&gt; do Firestore permite que você defina uma data de validade para um documento e deixe que o próprio Google se encarregue da &amp;ldquo;faxina&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Mantendo a Tela Acesa: Guia da Screen Wake Lock API com Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-mantendo-a-tela-acesa-guia-da-screen-wake-lock-api-com-angular/</link>
      <pubDate>Fri, 09 Jan 2026 16:51:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-mantendo-a-tela-acesa-guia-da-screen-wake-lock-api-com-angular/</guid>
      <description>&lt;p&gt;Você já utilizou um aplicativo de receitas, GPS ou um jogo no navegador e ficou frustrado porque a tela desligou bem no momento crucial? Para resolver isso, existe a &lt;strong&gt;Screen Wake Lock API&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;o-que-é-a-screen-wake-lock-api&#34;&gt;&#xA;  O que é a Screen Wake Lock API?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-que-%c3%a9-a-screen-wake-lock-api&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;É uma interface do navegador que permite solicitar que o dispositivo não escureça ou bloqueie a tela. Diferente de hacks antigos que rodavam vídeos invisíveis, esta é uma solução &lt;strong&gt;nativa&lt;/strong&gt;, eficiente em termos de consumo de bateria e suportada pelos navegadores modernos (Chrome, Edge, Opera e Safari recente).&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Arquitetura de Dados Moderna no Laravel: Transformando seu Backend em um motor de ETL com DuckDB</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-arquitetura-de-dados-moderna-no-laravel-transformando-seu-backend-em-um-motor-de-etl-com-duckdb/</link>
      <pubDate>Thu, 08 Jan 2026 18:06:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-arquitetura-de-dados-moderna-no-laravel-transformando-seu-backend-em-um-motor-de-etl-com-duckdb/</guid>
      <description>&lt;p&gt;À medida que as aplicações Laravel crescem, o banco de dados transacional (OLTP) começa a sofrer. Queries complexas de SLA e volumetria, que envolvem centenas de colunas e cálculos de aging, degradam a performance do sistema. A solução não é apenas &amp;ldquo;otimizar a query&amp;rdquo;, mas sim mudar o motor de execução para um banco analítico (OLAP).&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, exploraremos como implementar o &lt;strong&gt;DuckDB&lt;/strong&gt; dentro do Laravel para orquestrar processos de ETL (Extração, Transformação e Carga) de alta performance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Turboalimentando Relatórios no Laravel: Integrando DuckDB e MySQL para ETL de Alta Performance</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-turboalimentando-relat%C3%B3rios-no-laravel-integrando-duckdb-e-mysql-para-etl-de-alta-performance/</link>
      <pubDate>Thu, 08 Jan 2026 17:49:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-turboalimentando-relat%C3%B3rios-no-laravel-integrando-duckdb-e-mysql-para-etl-de-alta-performance/</guid>
      <description>&lt;h2 id=&#34;introdução&#34;&gt;&#xA;  Introdução&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#introdu%c3%a7%c3%a3o&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Muitas aplicações Laravel sofrem com o mesmo gargalo: à medida que o banco de dados transacional (MySQL) cresce, a geração de relatórios complexos torna-se lenta e consome recursos preciosos, muitas vezes travando tabelas vitais para a operação. Para resolver isso, surge uma combinação poderosa: &lt;strong&gt;Laravel como orquestrador e DuckDB como motor analítico&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;o-que-é-o-duckdb&#34;&gt;&#xA;  O que é o DuckDB?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-que-%c3%a9-o-duckdb&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O DuckDB é um banco de dados SQL analítico (OLAP) em processo. Diferente do MySQL, que é orientado a linhas (ideal para transações), o DuckDB é &lt;code&gt;orientado a colunas&lt;/code&gt; e utiliza execução vetorial. Isso o torna incrivelmente rápido para processar agregações (&lt;code&gt;SUM&lt;/code&gt;, &lt;code&gt;COUNT&lt;/code&gt;, &lt;code&gt;GROUP BY&lt;/code&gt;) em milhões de registros.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Dominando o Histórico do Git: Como Alternar entre Commits com Segurança</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-dominando-o-hist%C3%B3rico-do-git-como-alternar-entre-commits-com-seguran%C3%A7a/</link>
      <pubDate>Thu, 08 Jan 2026 15:55:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-dominando-o-hist%C3%B3rico-do-git-como-alternar-entre-commits-com-seguran%C3%A7a/</guid>
      <description>&lt;p&gt;No fluxo de desenvolvimento com Git, é comum surgir a necessidade de &amp;ldquo;viajar no tempo&amp;rdquo;. Seja para verificar um bug que não existia há três versões atrás ou para descartar um caminho que não deu certo, saber como alternar entre commits dentro de um branch é uma habilidade essencial.&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, exploraremos as três principais abordagens para navegar pelo histórico do seu projeto.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-modo-de-exploração-git-checkout&#34;&gt;&#xA;  1. O Modo de Exploração: &lt;code&gt;git checkout&lt;/code&gt;&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-modo-de-explora%c3%a7%c3%a3o-git-checkout&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O comando &lt;code&gt;checkout&lt;/code&gt; é a ferramenta ideal quando você precisa apenas &lt;code&gt;olhar&lt;/code&gt; o passado. Ele altera os arquivos do seu diretório de trabalho para que fiquem exatamente como estavam no momento daquele commit específico.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Extração de Dados em Mainframe: Mapeando Coordenadas com PHP e s3270</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-extra%C3%A7%C3%A3o-de-dados-em-mainframe-mapeando-coordenadas-com-php-e-s3270/</link>
      <pubDate>Thu, 08 Jan 2026 12:57:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-extra%C3%A7%C3%A3o-de-dados-em-mainframe-mapeando-coordenadas-com-php-e-s3270/</guid>
      <description>&lt;p&gt;No artigo anterior, link no estará no rodapé, aprendemos como garantir que a tela do Mainframe esteja pronta para leitura. Agora, o desafio é outro: como extrair informações específicas de uma grade de 24x80 caracteres sem transformar seu código em uma &amp;ldquo;sopa de números&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;o-sistema-de-coordenadas-3270&#34;&gt;&#xA;  O Sistema de Coordenadas 3270&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-sistema-de-coordenadas-3270&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Diferente de sistemas web onde os elementos são identificados por IDs ou Classes, no Mainframe tudo é baseado em &lt;strong&gt;posição fixa&lt;/strong&gt;. A tela é uma matriz rígida.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Automação de Mainframe com PHP: O Guia de Sobrevivência ao s3270</title>
      <link>https://tiagoscosta.tpps.com.br/posts/automa%C3%A7%C3%A3o-de-mainframe-com-php-o-guia-de-sobreviv%C3%AAncia-ao-s3270/</link>
      <pubDate>Thu, 08 Jan 2026 12:54:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/automa%C3%A7%C3%A3o-de-mainframe-com-php-o-guia-de-sobreviv%C3%AAncia-ao-s3270/</guid>
      <description>&lt;p&gt;Automatizar terminais 3270 (Mainframes) usando PHP é um desafio que mistura protocolos modernos com sistemas de décadas de existência. O segredo de uma automação que não &amp;ldquo;quebra&amp;rdquo; está na forma como você lê os dados da tela.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-problema-da-velocidade-php-vs-mainframe&#34;&gt;&#xA;  1. O Problema da Velocidade: PHP vs. Mainframe&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-problema-da-velocidade-php-vs-mainframe&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O PHP executa instruções em microssegundos. Já o Mainframe processa dados em uma arquitetura baseada em blocos e buffers de rede. Se o seu script tentar ler a tela antes do mainframe terminar de pintá-la, você obterá dados incompletos ou erros de sincronia.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Resolvendo Conflitos de Injeção e Tipagem: Angular 21 &#43; Firestore</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-resolvendo-conflitos-de-inje%C3%A7%C3%A3o-e-tipagem-angular-21-firestore/</link>
      <pubDate>Tue, 06 Jan 2026 20:10:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-resolvendo-conflitos-de-inje%C3%A7%C3%A3o-e-tipagem-angular-21-firestore/</guid>
      <description>&lt;p&gt;Ao atualizar para o Angular 21 e tentar utilizar o SDK modular do Firebase (&lt;code&gt;firebase/firestore&lt;/code&gt;), é comum se deparar com erros de &amp;ldquo;Provedor não encontrado&amp;rdquo; ou conflitos de tipos internos. Neste artigo, vamos dissecar a causa desses erros e como resolvê-los usando as melhores práticas atuais.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-o-erro-de-provedor-ng0201&#34;&gt;&#xA;  1. O Erro de Provedor: NG0201&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-erro-de-provedor-ng0201&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Mensagem:&lt;/strong&gt; &lt;code&gt;ERROR ɵNotFound: NG0201: No provider found for Firestore&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Guia de Sobrevivência WSL: Corrigindo Autenticação Git e Permissões de Arquivo</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-guia-de-sobreviv%C3%AAncia-wsl-corrigindo-autentica%C3%A7%C3%A3o-git-e-permiss%C3%B5es-de-arquivo/</link>
      <pubDate>Tue, 06 Jan 2026 16:46:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-guia-de-sobreviv%C3%AAncia-wsl-corrigindo-autentica%C3%A7%C3%A3o-git-e-permiss%C3%B5es-de-arquivo/</guid>
      <description>&lt;p&gt;Este é um guia prático para desenvolvedores que migraram suas aplicações para o diretório nativo do WSL (ex: ~/home/usuario/&amp;hellip;) e estão enfrentando os dois problemas mais comuns: falhas de autenticação com o Azure DevOps e erros de permissão de arquivos ao trocar de branch.&lt;/p&gt;&#xA;&lt;p&gt;Mover sua aplicação para dentro do sistema de arquivos do Linux (WSL) aumenta drasticamente a performance, mas pode quebrar a comunicação com o Gerenciador de Credenciais do Windows e gerar conflitos de permissão. Veja como resolver.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Desenvolvimento Ultra-Rápido com Docker, WSL2, Laravel e Vue.js</title>
      <link>https://tiagoscosta.tpps.com.br/posts/desenvolvimento-ultra-r%C3%A1pido-com-docker-wsl2-laravel-e-vue-js/</link>
      <pubDate>Mon, 05 Jan 2026 13:47:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/desenvolvimento-ultra-r%C3%A1pido-com-docker-wsl2-laravel-e-vue-js/</guid>
      <description>&lt;p&gt;Se você desenvolve usando Docker no Windows, provavelmente já sentiu aquela lentidão frustrante onde um simples &lt;code&gt;refresh&lt;/code&gt; no Laravel demora segundos ou o Hot Reload do Vue.js parece não funcionar. A solução para isso não é trocar de computador, mas sim mudar &lt;strong&gt;onde&lt;/strong&gt; seus arquivos residem e &lt;strong&gt;como&lt;/strong&gt; suas ferramentas interagem com eles.&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, vamos detalhar como configurar o ambiente perfeito de alta performance.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-o-segredo-da-performance-o-sistema-de-arquivos&#34;&gt;&#xA;  1. O Segredo da Performance: O Sistema de Arquivos&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-segredo-da-performance-o-sistema-de-arquivos&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;A mudança mais impactante que você pode fazer é mover seus projetos da partição do Windows (&lt;code&gt;C:\Users\...&lt;/code&gt;) para o sistema de arquivos nativo do Linux dentro do WSL2 (&lt;code&gt;\\wsl.localhost\Ubuntu\home\...&lt;/code&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Git Mergetool: Como Resolver Conflitos Profissionalmente no VS Code</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-git-mergetool-como-resolver-conflitos-profissionalmente-no-vs-code/</link>
      <pubDate>Tue, 30 Dec 2025 16:10:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-git-mergetool-como-resolver-conflitos-profissionalmente-no-vs-code/</guid>
      <description>&lt;p&gt;Se você já se deparou com aquelas setas e sinais de igual (&amp;laquo;&amp;laquo;&amp;laquo;&amp;lt;, =======, &amp;raquo;&amp;raquo;&amp;raquo;&amp;gt;) espalhados pelo seu código após um merge, sabe o quanto pode ser confuso e propenso a erros resolver tudo manualmente.&lt;/p&gt;&#xA;&lt;p&gt;É aqui que entra o &lt;strong&gt;Git Mergetool&lt;/strong&gt;. Neste artigo, vamos configurar o VS Code para atuar como uma interface visual de resolução de conflitos, transformando um momento de estresse em uma tarefa simples de poucos cliques.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Git Merge Conflict: Do erro à solução em poucos passos</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-git-merge-conflict-do-erro-%C3%A0-solu%C3%A7%C3%A3o-em-poucos-passos/</link>
      <pubDate>Tue, 30 Dec 2025 12:49:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-git-merge-conflict-do-erro-%C3%A0-solu%C3%A7%C3%A3o-em-poucos-passos/</guid>
      <description>&lt;p&gt;Entender conflitos de merge é o que separa os iniciantes dos desenvolvedores experientes. Um conflito acontece quando o Git não consegue decidir automaticamente qual versão de uma linha de código deve prevalecer — geralmente porque duas pessoas alteraram a mesma linha em branches diferentes.&lt;/p&gt;&#xA;&lt;p&gt;Aqui está um guia de como enfrentar e resolver isso de forma profissional.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;o-que-é-um-merge-conflict&#34;&gt;&#xA;  O que é um Merge Conflict?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-que-%c3%a9-um-merge-conflict&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Imagine que você e um colega editaram o arquivo &lt;code&gt;style.css&lt;/code&gt; na linha 10.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Guia Git: Comandos Essenciais para o Dia a Dia (com Exemplos)</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-guia-git-comandos-essenciais-para-o-dia-a-dia-com-exemplos/</link>
      <pubDate>Tue, 30 Dec 2025 10:40:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-guia-git-comandos-essenciais-para-o-dia-a-dia-com-exemplos/</guid>
      <description>&lt;p&gt;Dominar o Git é uma das habilidades mais valiosas para qualquer desenvolvedor. No início, parece apenas uma ferramenta de &amp;ldquo;salvar arquivos&amp;rdquo;, mas no dia a dia, ele se torna um verdadeiro &amp;ldquo;seguro de vida&amp;rdquo; para o seu código.&lt;/p&gt;&#xA;&lt;p&gt;Aqui está um guia prático com os comandos essenciais e como aplicá-los em situações reais.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-organização-e-fluxo-de-trabalho&#34;&gt;&#xA;  1. Organização e Fluxo de Trabalho&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-organiza%c3%a7%c3%a3o-e-fluxo-de-trabalho&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Gerenciar branches é o coração do desenvolvimento colaborativo. Aqui estão os comandos para criar, alternar e limpar suas ramificações.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Guia Completo de HTTP Status Codes: O que eles dizem sobre seu site</title>
      <link>https://tiagoscosta.tpps.com.br/posts/http-status-code-guia-completo/</link>
      <pubDate>Sun, 21 Dec 2025 23:38:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/http-status-code-guia-completo/</guid>
      <description>&lt;p&gt;Entender os &lt;strong&gt;Status Codes do HTTP&lt;/strong&gt; (comumente chamados de status codes do HTML) é fundamental para qualquer pessoa que trabalhe com desenvolvimento web, SEO ou infraestrutura. Eles são a linguagem que o servidor usa para dizer ao navegador se a requisição foi bem-sucedida ou se algo deu errado.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;o-que-são-http-status-codes&#34;&gt;&#xA;  O que são HTTP Status Codes?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-que-s%c3%a3o-http-status-codes&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Sempre que você clica em um link ou digita uma URL, seu navegador (o cliente) envia uma solicitação para um servidor. O servidor processa esse pedido e devolve uma resposta, que vem acompanhada de um código numérico de três dígitos.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 PHP: Do Caos ao Clean Code</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-php-do-caos-ao-clean-code/</link>
      <pubDate>Fri, 19 Dec 2025 09:51:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-php-do-caos-ao-clean-code/</guid>
      <description>&lt;p&gt;Escrever código é uma arte, e como toda arte, existem princípios que podem elevar a qualidade de sua obra. No mundo da programação, um desses princípios é o &lt;strong&gt;Clean Code&lt;/strong&gt;. Mas o que exatamente significa &amp;ldquo;código limpo&amp;rdquo;?&lt;/p&gt;&#xA;&lt;p&gt;Clean Code, como popularizado por Robert C. Martin (Uncle Bob), refere-se a um código que é fácil de ler, entender, manter e estender. Ele não apenas funciona, mas também é elegante e coeso, facilitando a vida de qualquer desenvolvedor que precise interagir com ele – incluindo você no futuro.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 REST ou RESTful? Pare de confundir e domine com PHP</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-rest-ou-restful-pare-de-confundir-e-domine-com-php/</link>
      <pubDate>Thu, 18 Dec 2025 10:30:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-rest-ou-restful-pare-de-confundir-e-domine-com-php/</guid>
      <description>&lt;p&gt;No mundo do desenvolvimento web, os termos &lt;strong&gt;REST&lt;/strong&gt; e &lt;strong&gt;RESTful&lt;/strong&gt; são onipresentes. Embora pareçam a mesma coisa, entender a nuance entre o conceito e a prática é o que diferencia um desenvolvedor iniciante de um profissional que domina a arquitetura de sistemas.&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, vamos desmistificar esses conceitos e construir uma API prática em PHP utilizando todos os verbos HTTP.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-o-que-é-rest&#34;&gt;&#xA;  1. O que é REST?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-que-%c3%a9-rest&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;REST&lt;/strong&gt; (Representational State Transfer) é um &lt;strong&gt;estilo de arquitetura&lt;/strong&gt; definido por Roy Fielding em 2000. Ele estabelece um conjunto de restrições que, quando seguidas, permitem a criação de sistemas web escaláveis, leves e de fácil manutenção.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Diferença entre Web Crawler e Web Scrapping</title>
      <link>https://tiagoscosta.tpps.com.br/posts/diferen%C3%A7a-entre-web-crawler-e-web-scrapping/</link>
      <pubDate>Thu, 18 Dec 2025 09:56:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/diferen%C3%A7a-entre-web-crawler-e-web-scrapping/</guid>
      <description>&lt;p&gt;Embora os termos &lt;strong&gt;Web Crawler&lt;/strong&gt; e &lt;strong&gt;Web Scraping&lt;/strong&gt; sejam frequentemente usados como sinônimos, eles desempenham papéis distintos (mas complementares) no ecossistema de coleta de dados na internet.&lt;/p&gt;&#xA;&lt;p&gt;Imagine a internet como uma imensa biblioteca: o &lt;strong&gt;Crawler&lt;/strong&gt; é o bibliotecário que percorre os corredores anotando quais livros existem, enquanto o &lt;strong&gt;Scraper&lt;/strong&gt; é o pesquisador que abre um livro específico para copiar um parágrafo importante.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-web-crawler-o-explorador&#34;&gt;&#xA;  1. Web Crawler: O Explorador&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-web-crawler-o-explorador&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O objetivo principal de um Crawler (também conhecido como spider ou bot) é a &lt;strong&gt;indexação&lt;/strong&gt;. Ele navega de link em link para descobrir novas páginas e entender a estrutura de um site.&lt;/p&gt;</description>
    </item>
    <item>
      <title>🧱 SOLID em PHP: Exemplo Prático</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-solid-em-php-exemplo-pr%C3%A1tico/</link>
      <pubDate>Wed, 17 Dec 2025 17:35:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-solid-em-php-exemplo-pr%C3%A1tico/</guid>
      <description>&lt;p&gt;Os princípios SOLID são um conjunto de cinco diretrizes de design de software orientadas a objetos, criadas por &lt;strong&gt;Robert C. Martin&lt;/strong&gt; (também conhecido como Uncle Bob), que visam tornar o código mais &lt;strong&gt;flexível&lt;/strong&gt;, &lt;strong&gt;manutenível&lt;/strong&gt; e &lt;strong&gt;extensível&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;o-que-é-solid-&#34;&gt;&#xA;  O que é SOLID? 🧱&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-que-%c3%a9-solid-&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O acrônimo &lt;strong&gt;SOLID&lt;/strong&gt; representa os cinco princípios:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;S - Single Responsibility Principle&lt;/strong&gt; (Princípio da Responsabilidade Única): Uma classe deve ter apenas uma razão para mudar, ou seja, uma única responsabilidade.&lt;/p&gt;</description>
    </item>
    <item>
      <title>🚀 Rotas Simplificadas: O Fim do AppModule no Angular Standalone</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-rotas-simplificadas-o-fim-do-appmodule-no-angular-standalone/</link>
      <pubDate>Tue, 16 Dec 2025 18:20:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-rotas-simplificadas-o-fim-do-appmodule-no-angular-standalone/</guid>
      <description>&lt;p&gt;A introdução dos &lt;strong&gt;Standalone Components&lt;/strong&gt; no Angular (a partir da versão 14 e totalmente adotada na v17+) trouxe uma transformação não apenas na estrutura dos componentes, mas também na maneira como configuramos o roteamento da aplicação.&lt;/p&gt;&#xA;&lt;p&gt;Se antes éramos obrigados a gerenciar múltiplos arquivos de módulo (&lt;code&gt;AppModule&lt;/code&gt;, &lt;code&gt;AppRoutingModule&lt;/code&gt;, &lt;em&gt;Feature Modules&lt;/em&gt;), hoje, podemos configurar todo o &lt;em&gt;routing&lt;/em&gt; diretamente no ponto de &lt;em&gt;bootstrap&lt;/em&gt; da aplicação.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-o-modelo-de-roteamento-tradicional-com-ngmodules&#34;&gt;&#xA;  🧐 O Modelo de Roteamento Tradicional (Com NgModules)&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#-o-modelo-de-roteamento-tradicional-com-ngmodules&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Historicamente, o roteamento no Angular exigia, no mínimo, três arquivos para funcionar corretamente:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Angular: A Revolução Standalone vs. a Tradição Module</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-angular-a-revolu%C3%A7%C3%A3o-standalone-vs-a-tradi%C3%A7%C3%A3o-module/</link>
      <pubDate>Tue, 16 Dec 2025 17:45:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-angular-a-revolu%C3%A7%C3%A3o-standalone-vs-a-tradi%C3%A7%C3%A3o-module/</guid>
      <description>&lt;p&gt;Desde o Angular 14, os &lt;strong&gt;Standalone Components&lt;/strong&gt; (Componentes Autônomos) têm simplificado a forma como as aplicações são estruturadas, oferecendo uma alternativa mais leve e direta aos tradicionais &lt;strong&gt;NgModules&lt;/strong&gt;. Este artigo detalha as diferenças conceituais e mostra exemplos práticos de como migrar de um componente baseado em módulo para a nova abordagem autônoma.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;-o-modelo-tradicional-ngmodules&#34;&gt;&#xA;  🧐 O Modelo Tradicional: NgModules&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#-o-modelo-tradicional-ngmodules&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O &lt;code&gt;NgModule&lt;/code&gt; é o pilar da arquitetura Angular há anos. Ele atua como um &lt;strong&gt;contêiner de metadados&lt;/strong&gt; que organiza e conecta partes coesas de sua aplicação.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 MySQL 8 no Docker: Um Guia Prático com Docker Compose</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-mysql-8-no-docker-um-guia-pr%C3%A1tico-com-docker-compose/</link>
      <pubDate>Tue, 16 Dec 2025 12:33:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-mysql-8-no-docker-um-guia-pr%C3%A1tico-com-docker-compose/</guid>
      <description>&lt;p&gt;Rodar bancos de dados em containers é uma das formas mais eficientes de manter seu ambiente de desenvolvimento limpo e organizado. Neste artigo, vou mostrar como subir uma instância do &lt;strong&gt;MySQL 8.0&lt;/strong&gt; configurada com persistência de dados, ajuste de timezone e configurações personalizadas usando o Docker Compose.&lt;/p&gt;&#xA;&lt;h2 id=&#34;por-que-essa-configuração&#34;&gt;&#xA;  Por que essa configuração?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#por-que-essa-configura%c3%a7%c3%a3o&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Muitas vezes, ao subir o MySQL 8 padrão, enfrentamos problemas de autenticação com clientes antigos ou restrições de importação de arquivos. A configuração que vamos utilizar resolve três problemas comuns:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Containers Docker &#43; Supervisor para Workers Laravel (RHEL/CentOS)</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-containers-docker-supervisor-para-workers-laravel-rhel-centos/</link>
      <pubDate>Fri, 05 Dec 2025 17:27:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-containers-docker-supervisor-para-workers-laravel-rhel-centos/</guid>
      <description>&lt;p&gt;Ao rodar aplicações Laravel em &lt;strong&gt;containers Docker&lt;/strong&gt;, o gerenciamento de processos em segundo plano, como filas e cron jobs, exige uma ferramenta robusta. O &lt;strong&gt;Supervisor&lt;/strong&gt; é a solução ideal, mas sua configuração no ambiente Docker requer atenção especial às permissões e caminhos.&lt;/p&gt;&#xA;&lt;p&gt;Este artigo apresenta um modelo de &lt;strong&gt;Dockerfile&lt;/strong&gt; e arquivos de configuração para instalar e configurar o Supervisor em uma imagem base &lt;strong&gt;RHEL/CentOS/Rocky Linux&lt;/strong&gt;, garantindo que seus &lt;em&gt;workers&lt;/em&gt; do Laravel sejam gerenciados corretamente.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Artisan: Reiniciando Workers do Supervisor no Laravel via docker</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-artisan-reiniciando-workers-do-supervisor-no-laravel/</link>
      <pubDate>Fri, 05 Dec 2025 16:51:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-artisan-reiniciando-workers-do-supervisor-no-laravel/</guid>
      <description>&lt;p&gt;Este guia detalha a criação de um comando personalizado no Laravel, que permite reiniciar workers específicos do Supervisor de forma rápida e segura, mesmo quando a aplicação roda em um container Docker. Incluímos também dicas essenciais para diagnóstico de permissões.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-passo-1-criação-do-comando-artisan&#34;&gt;&#xA;  1️⃣ Passo 1: Criação do Comando Artisan&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-passo-1-cria%c3%a7%c3%a3o-do-comando-artisan&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Vamos criar um comando que servirá como um wrapper para o utilitário de sistema &lt;code&gt;supervisorctl&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>💻 VS Code: Atalhos Essenciais para Codificação Rápida</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-vs-code-atalhos-essenciais-para-codifica%C3%A7%C3%A3o-r%C3%A1pida/</link>
      <pubDate>Fri, 05 Dec 2025 09:24:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-vs-code-atalhos-essenciais-para-codifica%C3%A7%C3%A3o-r%C3%A1pida/</guid>
      <description>&lt;p&gt;O &lt;strong&gt;Visual Studio Code (VS Code)&lt;/strong&gt;, desenvolvido pela Microsoft, consolidou-se como um dos &lt;strong&gt;editores de código-fonte&lt;/strong&gt; mais populares e amplamente utilizados na comunidade de desenvolvimento. Leve, rápido e extremamente configurável, ele oferece uma experiência de desenvolvimento moderna, rica em recursos e suporta virtualmente todas as linguagens de programação e tecnologias através de um ecossistema robusto de extensões.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;por-que-escolher-o-vs-code&#34;&gt;&#xA;  Por Que Escolher o VS Code?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#por-que-escolher-o-vs-code&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;O sucesso do VS Code deve-se a uma combinação de fatores:&lt;/p&gt;</description>
    </item>
    <item>
      <title>🐳 Docker &amp; Compose: Guia Rápido de Comandos Essenciais</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-guia-essencial-de-docker-e-docker-compose-comandos-%C3%BAteis-para-o-dia-a-dia/</link>
      <pubDate>Thu, 04 Dec 2025 09:51:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-guia-essencial-de-docker-e-docker-compose-comandos-%C3%BAteis-para-o-dia-a-dia/</guid>
      <description>&lt;p&gt;O &lt;strong&gt;Docker&lt;/strong&gt; e o &lt;strong&gt;Docker Compose&lt;/strong&gt; são ferramentas fundamentais na modernização do desenvolvimento e implantação de aplicações. Eles oferecem uma maneira eficiente e padronizada de empacotar aplicações e suas dependências em &lt;strong&gt;contêineres&lt;/strong&gt; leves e portáteis.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; É uma plataforma que permite a criação, execução e gerenciamento de contêineres. Um contêiner é uma unidade de software empacotada com tudo o que é necessário para rodar um código (bibliotecas, &lt;em&gt;runtime&lt;/em&gt;, configurações do sistema, etc.), garantindo que a aplicação rode de forma consistente em qualquer ambiente.&lt;/p&gt;</description>
    </item>
    <item>
      <title>🚀 Vscode - atalhos e comandos para mais produtividade </title>
      <link>https://tiagoscosta.tpps.com.br/posts/-vscode-atalhos-e-comandos-para-mais-produtividade/</link>
      <pubDate>Mon, 01 Dec 2025 08:37:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-vscode-atalhos-e-comandos-para-mais-produtividade/</guid>
      <description>&lt;p&gt;O Visual Studio Code (VS Code) é um dos editores mais populares entre desenvolvedores, e não é à toa: além de ser leve e altamente customizável, ele oferece uma série de &lt;strong&gt;atalhos e comandos&lt;/strong&gt; que podem transformar sua rotina de desenvolvimento, economizando tempo e tornando o fluxo de trabalho muito mais eficiente.&lt;/p&gt;&#xA;&lt;p&gt;A seguir, apresento um guia prático com os principais recursos que você pode começar a usar hoje mesmo.&lt;/p&gt;</description>
    </item>
    <item>
      <title>🛒 Mini Projeto em PHP aplicando SOLID</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-mini-projeto-em-php-aplicando-solid/</link>
      <pubDate>Sun, 30 Nov 2025 10:32:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-mini-projeto-em-php-aplicando-solid/</guid>
      <description>&lt;h2 id=&#34;introdução&#34;&gt;&#xA;  Introdução&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#introdu%c3%a7%c3%a3o&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Os princípios do &lt;strong&gt;SOLID&lt;/strong&gt; são fundamentais para quem deseja escrever código orientado a objetos de forma clara, extensível e fácil de manter. Neste artigo, vamos construir &lt;strong&gt;um mini sistema de pedidos em PHP&lt;/strong&gt; aplicando cada um desses princípios. O objetivo é mostrar como sair de uma estrutura rígida e acoplada para uma arquitetura flexível e organizada.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;estrutura-do-projeto&#34;&gt;&#xA;  Estrutura do Projeto&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#estrutura-do-projeto&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Nosso sistema terá as seguintes responsabilidades:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📘 Entendendo SOLID na prática com PHP</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-tutorial-aplicando-solid-em-php/</link>
      <pubDate>Sun, 30 Nov 2025 09:28:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-tutorial-aplicando-solid-em-php/</guid>
      <description>&lt;h2 id=&#34;introdução&#34;&gt;&#xA;  Introdução&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#introdu%c3%a7%c3%a3o&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O acrônimo &lt;strong&gt;SOLID&lt;/strong&gt; representa cinco princípios fundamentais da programação orientada a objetos que ajudam a criar sistemas mais &lt;strong&gt;manuteníveis&lt;/strong&gt;, &lt;strong&gt;escaláveis&lt;/strong&gt; e &lt;strong&gt;flexíveis&lt;/strong&gt;. Esses princípios são:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;S&lt;/strong&gt;ingle Responsibility Principle (Princípio da Responsabilidade Única)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;O&lt;/strong&gt;pen/Closed Principle (Princípio Aberto/Fechado)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;L&lt;/strong&gt;iskov Substitution Principle (Princípio da Substituição de Liskov)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;I&lt;/strong&gt;nterface Segregation Principle (Princípio da Segregação de Interfaces)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;D&lt;/strong&gt;ependency Inversion Principle (Princípio da Inversão de Dependência)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Vamos ver exemplos práticos em PHP.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Shortcodes no Hugo: Como Incorporar Jogos e Conteúdo Interativo</title>
      <link>https://tiagoscosta.tpps.com.br/posts/shortcodes-no-hugo-como-incorporar-jogos-e-conte%C3%BAdo-interativo/</link>
      <pubDate>Fri, 28 Nov 2025 18:40:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/shortcodes-no-hugo-como-incorporar-jogos-e-conte%C3%BAdo-interativo/</guid>
      <description>&lt;p&gt;O Hugo é um gerador de sites estáticos conhecido por sua velocidade e flexibilidade. Embora seja excelente para conteúdo estático, muitas vezes queremos adicionar funcionalidades dinâmicas e interativas, como jogos, formulários ou visualizações de dados.&lt;/p&gt;&#xA;&lt;p&gt;A solução mais elegante e poderosa no ecossistema Hugo para isso é o uso de &lt;strong&gt;Shortcodes&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;o-que-são-shortcodes-no-hugo&#34;&gt;&#xA;  O que são Shortcodes no Hugo?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-que-s%c3%a3o-shortcodes-no-hugo&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Shortcodes são pequenos pedaços de código que você pode chamar diretamente dentro do seu conteúdo Markdown. Eles são essencialmente &lt;strong&gt;templates&lt;/strong&gt; (arquivos &lt;code&gt;.html&lt;/code&gt; ou &lt;code&gt;.html&lt;/code&gt; com &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; inline) que o Hugo processa e injeta no lugar da chamada do Shortcode.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Desmistificando o s3270: A Ponte Invisível para o Mainframe</title>
      <link>https://tiagoscosta.tpps.com.br/posts/desmistificando-o-s3270-a-ponte-invis%C3%ADvel-para-o-mainframe/</link>
      <pubDate>Wed, 26 Nov 2025 10:06:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/desmistificando-o-s3270-a-ponte-invis%C3%ADvel-para-o-mainframe/</guid>
      <description>&lt;p&gt;No mundo da modernização de sistemas, nem sempre é possível reescrever o código legado. Muitas das maiores instituições financeiras e seguradoras do mundo ainda rodam seus núcleos em mainframes IBM. O desafio surge quando precisamos conectar uma aplicação web moderna ou um script de automação a essas telas verdes antigas.&lt;/p&gt;&#xA;&lt;p&gt;É aqui que entra o &lt;strong&gt;s3270&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;o-que-é-o-s3270&#34;&gt;&#xA;  &lt;strong&gt;O que é o s3270?&lt;/strong&gt;&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-que-%c3%a9-o-s3270&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h4&gt;&#xA;&lt;p&gt;O s3270 é um emulador de terminal &lt;strong&gt;scriptáve&lt;/strong&gt;l e &lt;strong&gt;headless&lt;/strong&gt; (sem monitor/interface gráfica) para sessões IBM 3270. Ele faz parte da suíte open-source &lt;strong&gt;x3270&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Logging robusto em Python: Rotação Diária e Rastreabilidade</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-artigo-t%C3%A9cnico-implementando-um-sistema-de-logging-robusto-em-python-com-rota%C3%A7%C3%A3o-di%C3%A1ria/</link>
      <pubDate>Mon, 24 Nov 2025 23:40:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-artigo-t%C3%A9cnico-implementando-um-sistema-de-logging-robusto-em-python-com-rota%C3%A7%C3%A3o-di%C3%A1ria/</guid>
      <description>&lt;p&gt;O logging é uma prática essencial no desenvolvimento de software, permitindo rastrear o comportamento de uma aplicação, diagnosticar problemas e monitorar o desempenho. O módulo &lt;code&gt;logging&lt;/code&gt; padrão do Python é poderoso e flexível.&lt;/p&gt;&#xA;&lt;p&gt;Este artigo detalha a estrutura completa de um sistema de logging customizado em Python, demonstrando como encapsulá-lo em um módulo dedicado e utilizá-lo em sua aplicação principal.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;strong&gt;1. Módulo de Configuração de Logging (&lt;/strong&gt;&lt;code&gt;log_config.py&lt;/code&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;A seguir, apresentamos o script completo que configura o sistema de logging, incluindo a rotação de arquivos, o registro em console e as funções auxiliares para rastreabilidade.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 PyAutoGUI: Automação Simples e Útil</title>
      <link>https://tiagoscosta.tpps.com.br/posts/pyautogui-automa%C3%A7%C3%A3o-simples-e-%C3%BAtil/</link>
      <pubDate>Thu, 20 Nov 2025 20:53:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/pyautogui-automa%C3%A7%C3%A3o-simples-e-%C3%BAtil/</guid>
      <description>&lt;p&gt;O &lt;strong&gt;PyAutoGUI&lt;/strong&gt; é uma poderosa biblioteca &lt;strong&gt;Python&lt;/strong&gt; que permite que seus scripts controlem o &lt;strong&gt;mouse&lt;/strong&gt; e o &lt;strong&gt;teclado&lt;/strong&gt; para automatizar tarefas de interface gráfica do usuário (GUI). Ele simula ações humanas, tornando-o incrivelmente útil para qualquer pessoa que precise interagir repetidamente com aplicativos de desktop, websites ou jogos. Sua maior vantagem é a &lt;strong&gt;facilidade de uso&lt;/strong&gt; e a &lt;strong&gt;portabilidade&lt;/strong&gt;, funcionando em sistemas operacionais como Windows, macOS e Linux.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;strong&gt;Por Que PyAutoGUI é Tão Fácil de Usar?&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Hugo - Integração de site com sistema de comentários</title>
      <link>https://tiagoscosta.tpps.com.br/posts/hugo-integra%C3%A7%C3%A3o-de-site-com-sistema-de-coment%C3%A1rios/</link>
      <pubDate>Sat, 14 Dec 2024 15:25:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/hugo-integra%C3%A7%C3%A3o-de-site-com-sistema-de-coment%C3%A1rios/</guid>
      <description>&lt;p&gt;Criar um site em Hugo framework é muito fácil e nesse tutorial faremos a integração do site com alguns sistemas de comentários. Isso possibilitará que os visitantes possam interagir deixando comentários nas postagens.&lt;/p&gt;&#xA;&lt;p&gt;Mostraremos como realizar a integração com o &lt;code&gt;Emote&lt;/code&gt; e o &lt;code&gt;GraphComment&lt;/code&gt;. Ambos são aplicações de comentários que possuem uma fácil integração com sites estáticos.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pré-requisitos:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Site em Hugo&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Caso não tenha o site em Hugo, nesse tutorial ensino como criar&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Hugo - Integração de site com Pagefind</title>
      <link>https://tiagoscosta.tpps.com.br/posts/hugo-integra%C3%A7%C3%A3o-de-site-com-pagefind/</link>
      <pubDate>Mon, 09 Dec 2024 12:05:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/hugo-integra%C3%A7%C3%A3o-de-site-com-pagefind/</guid>
      <description>&lt;p&gt;Criar um site em Hugo framework é muito fácil e nesse tutorial faremos a integração do site com o Pagefind. Isso deixará nosso site mais interessante e funcional através de um buscador rápido e extremamente eficiente.&lt;/p&gt;&#xA;&lt;p&gt;Pagefind é uma biblioteca de pesquisa totalmente estática, que faz baixo uso de largura de banda, não precisa de infraestrutura e que tem uma excelente performance, seja em pequenos sites, ou sites de grande porte.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Hugo - Hospedando site no Firebase</title>
      <link>https://tiagoscosta.tpps.com.br/posts/hugo-hospedando-site-no-firebase/</link>
      <pubDate>Thu, 28 Nov 2024 08:44:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/hugo-hospedando-site-no-firebase/</guid>
      <description>&lt;p&gt;Hospedar um site do Hugo framework é algo bem fácil rápido e por ser um site estático existem diversos provedores onde você consegue hospeda-lo de forma gratuita.&lt;/p&gt;&#xA;&lt;p&gt;Nesse artigo vou mostrar como hospedar no Firebase que é uma plataforma da Google e ainda vou mostrar como fazer o CI/CD usando o Git Actions do Github.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pré-requisitos:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Site em Hugo&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Caso não tenha o site em Hugo, nesse tutorial ensino como criar&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Hugo - Integração de site com o DecapCMS</title>
      <link>https://tiagoscosta.tpps.com.br/posts/hugo-integra%C3%A7%C3%A3o-de-site-com-o-decapcms/</link>
      <pubDate>Wed, 20 Nov 2024 01:07:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/hugo-integra%C3%A7%C3%A3o-de-site-com-o-decapcms/</guid>
      <description>&lt;p&gt;Criar um site com Hugo Framework é extremamente rápido e fácil, mas um site fica melhor ainda e mais funcional quando inclui um gerenciador de conteúdo (CMS), e é justamente isso que iremos fazer nesse tutorial.&lt;/p&gt;&#xA;&lt;p&gt;Faremos a integração do DecapCMS a um site feito em Hugo Framework que está hospedado no Netlify.&lt;/p&gt;&#xA;&lt;p&gt;DecapCMS é um CMS bem versátil e flexível, pois possuí diversas opções de configuração, tanto para campos, estruturação dos arquivos de postagens entre outros.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Hugo - Integração de site com o TinaCMS</title>
      <link>https://tiagoscosta.tpps.com.br/posts/hugo-integra%C3%A7%C3%A3o-de-site-com-o-tinacms/</link>
      <pubDate>Sun, 17 Nov 2024 21:44:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/hugo-integra%C3%A7%C3%A3o-de-site-com-o-tinacms/</guid>
      <description>&lt;p&gt;Criar um site com Hugo Framework é extremamente rápido e fácil, mas um site fica melhor ainda e mais funcional quando inclui um gerenciador de conteúdo (CMS), e é justamente isso que iremos fazer nesse tutorial.&lt;/p&gt;&#xA;&lt;p&gt;Faremos a integração do TinaCMS a um site feito em Hugo Framework que está hospedado no Netlify.&lt;/p&gt;&#xA;&lt;p&gt;TinaCMS é uma ótima opção, pois já traz diversos recursos prontos para uso como toda uma client para editar suas páginas e autenticação na nuvem via Tina Cloud para ser usado em produção.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Hugo - Hospedando site no Netlify</title>
      <link>https://tiagoscosta.tpps.com.br/posts/hugo-hospedando-site-no-netlify/</link>
      <pubDate>Sun, 17 Nov 2024 18:38:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/hugo-hospedando-site-no-netlify/</guid>
      <description>&lt;p&gt;Hospedar um site do Hugo framework é algo bem fácil rápido e por ser um site estático existem diversos provedores onde você consegue hospeda-lo de forma gratuita.&lt;/p&gt;&#xA;&lt;p&gt;Nesse artigo vou mostrar como hospedar na Netlify que é um plataforma com bastantes recursos legais para você hospedar, gerenciar, fazer deploys usando CI/CD e muito mais, e tudo já incluso na versão gratuita.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pré-requisitos:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Site em Hugo&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Caso não tenha o site em hugo, nesse tutorial ensino como criar&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Hugo - Criando o primeiro site</title>
      <link>https://tiagoscosta.tpps.com.br/posts/hugo-criando-o-primeiro-site/</link>
      <pubDate>Fri, 15 Nov 2024 13:38:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/hugo-criando-o-primeiro-site/</guid>
      <description>&lt;p&gt;Criar site no Hugo é algo extremamente rápido e fácil, com poucos comando você consegue criar toda um base para seu site com um código fonte bem leve e totalmente preparado para SEO.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pré-requisitos:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Hugo&lt;/li&gt;&#xA;&lt;li&gt;Git&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Presumindo que você já tenha o Hugo instalado no seu sistema operacional, caso não tenha, veja o tutorial abaixo para instalação no Windows ou linux Ubuntu.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://tiagoscosta.com.br/posts/hugo-framework-instala%c3%a7%c3%a3o-no-windows&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://tiagoscosta.com.br/posts/hugo-framework-instalação-no-windows&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://tiagoscosta.com.br/posts/hugo-framework-instala%c3%a7%c3%a3o-no-ubuntu&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://tiagoscosta.com.br/posts/hugo-framework-instalação-no-ubuntu&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;criando-o-site&#34;&gt;&#xA;  Criando o site&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#criando-o-site&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Observação:&lt;/strong&gt; Se estiver usando Windows, não use o CMD ou PowerShell, use o &lt;strong&gt;Git Bash&lt;/strong&gt;, pois assim você não terá problema de enconding de arquivo (caracteres estranho).&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Hugo - Instalação no Ubuntu</title>
      <link>https://tiagoscosta.tpps.com.br/posts/hugo-instala%C3%A7%C3%A3o-no-ubuntu/</link>
      <pubDate>Mon, 28 Oct 2024 20:15:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/hugo-instala%C3%A7%C3%A3o-no-ubuntu/</guid>
      <description>&lt;p&gt;Hugo é um framework poderoso para gerar sites estáticos, é muito leve e é bem intuitivo para que se propoe.&lt;/p&gt;&#xA;&lt;p&gt;Velocidade é o carro chefe dele, tanto na velocidade de construção, quanto na de build (compilação do site) do site, oferece diversos recursos extremamente úteis, que abordarei em tutoriais futuros, e é muito, muito flexível, o que é ótimo, pois nos dá diversas possibilidades de customização do nosso site.&lt;/p&gt;&#xA;&lt;p&gt;Isso possibilita uma curva de aprendizado bem baixa o que acaba resultando no desenvolvimento de sites, muitas vezes, em poucos minutos.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Hugo - Instalação no Windows</title>
      <link>https://tiagoscosta.tpps.com.br/posts/hugo-instala%C3%A7%C3%A3o-no-windows/</link>
      <pubDate>Sun, 27 Oct 2024 12:47:00 -0300</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/hugo-instala%C3%A7%C3%A3o-no-windows/</guid>
      <description>&lt;p&gt;Hugo é um framework poderoso para gerar sites estáticos, é muito leve e é bem intuitivo para que se propoe.&lt;/p&gt;&#xA;&lt;p&gt;Velocidade é o carro chefe dele, tanto na velocidade de construção, quanto na de build (compilação do site) do site, oferece diversos recursos extremamente úteis, que abordarei em tutoriais futuros, e é muito, muito flexível, o que é ótimo, pois nos dá diversas possibilidades de customização do nosso site.&lt;/p&gt;&#xA;&lt;p&gt;Isso possibilita uma curva de aprendizado bem baixa o que acaba resultando no desenvolvimento de sites, muitas vezes, em poucos minutos.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
