Categoria: Uncategorized

  • A Engenharia do Site Confiável – Parte 1

    Introdução

    Nesta série de 4 artigos, quero mostrar com criar um site confiável, um que você possa dormir a noite sem preocupações ou que não te faça pensar se ele está travando muito depois que você deixou ele lá no seu ex-emprego.

    Exisitem metodologias prontas para isso, como a chamada DevOPs ou a Site Reliability Engineering – SRE, do Google. Obstante a implementá-las ou dizer que elas não funcionam, só tenho a certeza de que

    Talvez quando você pense em ter um sistema confiável, à prova de falhas, logo te venha a mente coisas como Testes Unitários ou Testes Integrados, QA, e tudo mais do que está na moda na tão badalada cultura DevOps, certo?

    Porém, é verdade que muitas vezes, mesmo com esteira CI/CD toda implementada, às vezes mesmo assim não nos sentimos seguros em relação ao funcionamento confiável do nosso sistema, e isso não é por acaso. Na verdade você sabe lá no fundo que sempre vai faltar um teste, ou o cara do QA vai deixar passar algo, e quando você menos esperar um problema ocorrerá no funcionamento do seu sistema.

    E o DevOps não ajuda? Ajuda… Mas não garante tanto a confiabilidade pois é focado na integração entre entre Dev e Ops, tendo como resultado final a entrega contínua, já o SRE foca justamente em manter sistemas escaláveis e confiáveis.

    SLO, um passo antes do SRE

    Para implementar uma solução de SRE precisamos definir primeiro os Service Level Objectives (SLOs), ou Objetivo de Nível de Serviço em português. Ok, agora temos uma nova sigla, mas então o que é SLO e porque o SRE precisa dele?

    O SLO é um documento que define a qualidade e o desempenho que um serviço deve ter, como um compromisso de nível de serviço, com o cliente, ou seja, o SLO define o que é aceitável para o usuário em termos de qualidade do serviço, para então o SRE ter um guia para agir.

    Afinal, como vamos criar nossos esforços com SRE sem saber onde devemos chegar ou o que queremos alcançar? 

    Coisas como: “Garantimos o tempo de disponibilidade da aplicação em 99,97% do mês” ou “As respostas do BD devem ter tempo de resposta máximo de 500ms” são objetivos que são definidos pelos SLOs.

    SREs usam SLOs para entender se uma métrica foi alcançada, e usam isso para:

    • Detectar problemas
    • Tomar decisões (lançar uma nova versão ou fazer um rollback)
    • Priorizar tarefas de engenharia de software 

    Se ainda não está claro, SRE é a engenharia para manter serviços confiáveis e o SLO são os objetivos de qualidade do serviço que o SRE deve obdecer.

    Por fim, vale ressaltar que para além de manter seu software confiável, o SRE deve usar o SLO para priorizar tarefas que estejam violando mais a SLO, assim se você tem dois problemas, você pode ver qual está violando uma SLO (ou qual está violando mais) e resolvê-lo primeiro.

    Por que SRE?

    Este tópico é útil para responder ao seu chefe, quando ele perguntar quais vantagens implementar o SRE traria para os negócios. E resposta é a seguinte:

    • Extinguir ou reduzir tempo de indisponibilidade da aplicação, evitando desgastes para a empresa
    • Ajudar em oferer uma boa expêriencia ao cliente, oferencendo uma aplicação estável
    • Melhorar a efeciência da equipe de tecnologia, automatizando tarefas operacionais, deixando assim os profissionais com mais tempo livre para atender demandas de negócio
    • Preservar uma boa reputação para a aplicação da empresa, através do seu bom funcionamento, evitando perda de clientes
    • Redução de custos a longo prazo alcançado através de menor indisponibilidade da aplicação e maior tempo disponível para atender o negócio.

    4 pontos a serem observados pelo SRE:

    Os 4 pontos principais ou como alguns preferem os 4 “golden signals” (pontos de ouro em português),  para o SRE observar são: Latência, Tráfego, Erros e Saturação. Vamos ver um resumo de cada ponto a seguir.

    Latência:

    Mede o tempo que aplicação, leva para responder uma solicitação, verificando se o tempo de retorno é considerado aceitável. Pode ser checado aqui desde o ping para o servidor, até o tempo de resposta de uma requisição para uma API, o retorno de uma query para o BD, ou mesmo o tempo de carregamento do front-end web.

    Tráfego:

    Indica a quantidade de solicitações que o sistema está recebendo, como já dito, o intuito é verificar se os valores são considerados aceitáveis, de acordo com o estabelecido.

    Erros:

    Mede o número de solicitações que não foram processadas com sucesso. 

    Saturação:

    Indica o nível de utilização dos recursos do sistema, como CPU e memória. 

  • 6 dicas para te ajudar a programar no dia que estiver sem motivação

    1 – Compartilhar uma solução do trabalho com o mundo

    Compartilhar a solução de um problema do seu trabalho em algum fórum como o Stack Overflow, Dev.to, Quora ou fazer uma publicação em um blog pessoal, podem

    2 – Lembrar que você está ajudando as outras áreas da empresa e fazendo bem indiretamente ao trabalho de outros

    3 – Pensar que quanto mais cedo você terminar algo, mais cedo se verá livre daquilo, obtendo tempo assim para tarefas mais agradáveis

    4 – Usar a estratégia da Deliberate Practice Conceito popularizado por Anders Ericsson.
    Envolve praticar de forma intencional e focada em aspectos difíceis ou desconfortáveis para melhorar habilidades.
    A recompensa é pensar que enfrentar o que você não gosta ou onde tem mais dificuldade vai te ajudar no crescimento pessoal ou profissional

    5 – Ir além do básico monótono .

    fazer todo o básico complementando com algo que agregue valor e te agrade

    6 – Quebrar seu trabalho em partes para nao ver como ama enorme tarefa massante

  • PHP: três décadas impulsionando a web

    Em 8 de Junho de 2025, o PHP (Hypertext Preprocessor) completa 30 anos de existência, consolidando-se como uma das linguagens de programação mais influentes e duradouras da história.

    O PHP me proporcionou o primeiro cliente de desenvolvimento web ainda em 2010, uma imobiliária na cidade Maricá – RJ. Na época, como era constume, eu desenvolvi o projeto com ajuda de um livro do tipo que te guia a fazer um projeto completo, chamado “Faça um Site Orientado por Projeto Php 5. 2 Com Mysql 5. 0 – Carlos A. J. Oliviero”. Boas lembranças!

    Criado em 1995 por Rasmus Lerdorf, o PHP nasceu como um conjunto de scripts em C para suprir suas necessidades pessoais de programação. O que começou como uma ferramenta pessoal rapidamente evoluiu para uma linguagem de código aberto, usada por milhões de desenvolvedores ao redor do mundo.

    Durante esses últimos 30 anos o PHP passou por diversas melhorias, até avanços modernos como os do PHP 8.x, com suporte a tipagem estática, compilação JIT e recursos orientados a objetos mais sofisticados, a linguagem acompanhou — e em muitos casos, antecipou — as demandas da web moderna!

    Plataformas como WordPress (incluindo WooCommerce), Drupal, Joomla e Magento têm PHP como base até hoje, o PHP também conta com frameworks modernos e robustos como o Laravel e o Symfony, e isso tudo faz com que nada menos que 3/4 dos sites na internet atualmente utilizem PHP como linguagem de server-side, segundo estatísticas da W3Techs.

    Sem dúvida a longevidade do PHP é graças a sua comunidade fiel e ativa, sua documentação completa e organizada, e sua facilidade de aprendizado, o que fez dela a porta de entrada para milhares de desenvolvedores iniciantes.

    Com 30 anos de história, o PHP continua evoluindo, provando que sair na frente e manter uma base sólida, é o segredo para se manter na liderança. Parabéns ao PHP e a todos que contribuíram para sua jornada até aqui!

    <?php
    
    // Define emojis usando unicode
    $coracao = "\u{2764}\u{FE0F}";
    $cone = "\u{1F389}";
    
    echo "Parabéns pelos 30 anos proporcionados por\n todos que " . $coracao . " e usam o PHP! " . $cone\n;

    Resultado:

    Parabéns pelos 30 anos proporcionados por
    todos que ❤️ e usam o PHP! 🎉
  • textContent vs innerHTML

    label.textContent = `${option} - R$ ${parseFloat(price).toFixed(2)}`;
    
    label.innerHTML = `${option} <br><small>R$ ${parseFloat(price).toFixed(2).replace('.', ',')}</small>`;
    
    
  • Types of Scope in JavaScript

    Global Scope

    Variables declared outside any function or block belong to the global scope. They can be accessed from anywhere in the code.

    <script>var globalVar = "I am global"; 

    console.log(globalVar); // Accessible here

    function test() {

    console.log(globalVar); // Accessible inside the function

    }

    test();

  • Signin, Login and all authentication flow without third-party packages

    Today, we will understand how to create a complete logic flow for authorization and authentication of any type of application.

    First of all, let’s considerate all the steps envolved in this process, they are:

    • Database
    • External integrations
    • User origin check
    • Signin
    • Validations
    • Treath of erros
    • Sending confirmations
    • Creating Password
    • Login
    • Session
    • Password Reset
    • Oportunities

    So, now let’s get straight to the point, starting by the Database.

    Database

    The main objective of registrations are get data, it involve created it, read it, update it and when necessary delete it, and for became this processes viable, easy and trustlly we need create a database correctly.

    In summary, a good database must be designed to avoid data inconsistency. In relational databases as which we will talk here, points to be observed are:

    • Thinking about all tables that you will need to use.
    • Define all constrains to avoid inconsistency in data

    Here is a template to our database:

    +------------------+         +--------------------+
    | Users | | Orders |
    +------------------+ +--------------------+
    | id (PK) |<------->| id (PK) |
    | name | | user_id (FK) |
    | email | | product_id (FK) |
    | created_at | | order_date |
    +------------------+ +--------------------+

    +------------------+ +--------------------+
    | Products | | OrderDetails |
    +------------------+ +--------------------+
    | id (PK) |<------->| order_id (FK) |
    | name | | product_id (FK) |
    | price | | quantity |
    | stock | | total_price |
    +------------------+ +--------------------+