<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gustavo Rodrigues</title>
    <description>The latest articles on DEV Community by Gustavo Rodrigues (@gustavorodriguesdev).</description>
    <link>https://dev.to/gustavorodriguesdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F988250%2Fc6d9337e-515e-4e25-86c2-8880dc0a8dce.png</url>
      <title>DEV Community: Gustavo Rodrigues</title>
      <link>https://dev.to/gustavorodriguesdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gustavorodriguesdev"/>
    <language>en</language>
    <item>
      <title>Commits semânticos: Melhore seus commits em 5 minutos!</title>
      <dc:creator>Gustavo Rodrigues</dc:creator>
      <pubDate>Thu, 25 May 2023 17:06:10 +0000</pubDate>
      <link>https://dev.to/gustavorodriguesdev/commits-semanticos-melhore-seus-commits-em-5-minutos-1a14</link>
      <guid>https://dev.to/gustavorodriguesdev/commits-semanticos-melhore-seus-commits-em-5-minutos-1a14</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4235w3hc46vbkidnltmo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4235w3hc46vbkidnltmo.jpg" alt="#ParaTodosVerem: Imagem com histórico de Commmits mal padronizados, como: AAAAAAAA e 'Here Have Code'" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sério, eu DUVIDO que você nunca fez um commit assim:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git commit -m "force pipeline"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;ou então:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git commit -m "dessa vez vai funcionar"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;del&gt;E as vezes eles até são necessários&lt;/del&gt; HAHAHA ou mais rápidos para enviarmos nossa simples alteração ou então forçar uma pipeline por completo.&lt;/p&gt;

&lt;p&gt;Alguns dos problemas dessa prática é que acabamos sujando o histórico de commits e por consequência acaba &lt;strong&gt;dificultando o CodeReview, manutenção de código e limita extrair métricas das changes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Agora que sabemos o que não fazer com nossos commits, vamos ao assunto real. Você conhece a &lt;a href="https://www.conventionalcommits.org/en/v1.0.0" rel="noopener noreferrer"&gt;Conventional Commits&lt;/a&gt;? Ela é uma especificação para tornar nossos commits mais legíveis de acordo com algumas convenções que vamos ver.&lt;/p&gt;

&lt;h3&gt;
  
  
  Padrões de commit
&lt;/h3&gt;

&lt;p&gt;De início eles sugerem que nossos commits sejam da seguinte forma:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;tipo&amp;gt;: descrição&lt;/code&gt;&lt;br&gt;
ou&lt;br&gt;
&lt;code&gt;&amp;lt;tipo&amp;gt;(escopo opcional): descrição&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Misericórdia! O que é esse tipo!?
&lt;/h3&gt;

&lt;p&gt;Tipos são palavras reservadas para qual &lt;em&gt;tipo de alteração&lt;/em&gt; você está subindo!&lt;br&gt;
Exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;fix&lt;/strong&gt;: Nesse caso, estamos subindo uma correção de algum BUG existente na nossa aplicação. (Temos relação direta com o PATCH no versionamento semântico)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;feat&lt;/strong&gt;: Estamos subindo uma nova Feature para nosso sistema! (Temos relação direta com o MINOR no versionamento semântico)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;docs&lt;/strong&gt;: Commits que estão alterando alguma &lt;em&gt;Documentação&lt;/em&gt; do nosso projeto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;test&lt;/strong&gt;: Commits que estão alterando a camada de &lt;em&gt;Testes&lt;/em&gt; da aplicação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;build&lt;/strong&gt;: Commits que estão realizando modificações nos arquivos de Build e dependências do projeto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;perf&lt;/strong&gt;: Commits que não alteram a feature mas melhoram sua performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;style&lt;/strong&gt;: Commits que apenas mexem na formatação de código ou removem algum código não utilizado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;refactor&lt;/strong&gt;: Commits que apenas refatoram o código, não alterando a funcionalidade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ci&lt;/strong&gt;: Commits do tipo ci indicam mudanças relacionadas a integração contínua (continuous integration).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Olha quanta coisa que a gente pode fazer!&lt;/p&gt;

&lt;h3&gt;
  
  
  E o que é o escopo e descrição?
&lt;/h3&gt;

&lt;p&gt;Basicamente, escopo é a palavra-chave do nosso commit e é opcional. Por exemplo, se eu estou corrigindo a funcionalidade de cadastro de usuários, faço da seguinte forma:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;fix(users): Fix permission to create a user&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Também temos Corpo e Rodapés!
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Corpo do commit: priorize a descrição mais detalhada do seu commit.&lt;/li&gt;
&lt;li&gt;Rodapé: geralmente preenchemos com número do Card do Kanban ou informações mais secundárias.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agora vem a real parte boa! &lt;del&gt;eu juro&lt;/del&gt;
&lt;/h3&gt;

&lt;p&gt;Como quase tudo nessa vida pode ser automatizado, nós temos o plugin &lt;a href="https://commitizen-tools.github.io/commitizen/commit" rel="noopener noreferrer"&gt;Commitizen&lt;/a&gt;, que basicamente é utilizado via Prompt e é um Helper para as especificações do Conventional Commits, com o qual você ainda pode criar suas próprias regras!&lt;/p&gt;

&lt;p&gt;Muito legal esse assunto de Commits né!&lt;/p&gt;

&lt;p&gt;Espero ter ajudado com este post e até a próxima!&lt;/p&gt;

</description>
      <category>commit</category>
      <category>github</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>AWS Lambda: do Zero ao Deploy [Parte 1]</title>
      <dc:creator>Gustavo Rodrigues</dc:creator>
      <pubDate>Thu, 23 Mar 2023 02:19:28 +0000</pubDate>
      <link>https://dev.to/gustavorodriguesdev/aws-lambda-do-zero-ao-deploy-parte-1-2dbc</link>
      <guid>https://dev.to/gustavorodriguesdev/aws-lambda-do-zero-ao-deploy-parte-1-2dbc</guid>
      <description>&lt;p&gt;Realmente nesse mundo de tecnologia nós precisamos estar constantemente nos atualizando de novas ferramentas e hoje estou aqui para tirar (ou tentar tirar) algumas duvidas que você ainda possa ter sobre AWS Lambda, bora lá? 😬&lt;/p&gt;

&lt;p&gt;A AWS Lambda é um serviço de computação serverless, então ele permite que você execute código sem precisar se preocupar com a infraestrutura que irá executa-lo. Você simplesmente carrega seu código e a AWS executa automaticamente o código em resposta a eventos, como uma solicitação da API, uma atualização de banco de dados ou uma mensagem de fila. &lt;br&gt;
Com a Lambda, você pode criar aplicativos escaláveis e altamente disponíveis sem precisar gerenciar servidores ou provisionar capacidade. É uma solução econômica e eficiente para muitos casos de uso de computação em nuvem.&lt;/p&gt;

&lt;p&gt;Como nem tudo são flores 🌻 e nem balas de prata, precisamos balancear a nossa cabeça com vantagens e desvantagens do Lambda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vantagens das Lambdas na AWS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As Lambdas oferecem muitas vantagens para desenvolvedores e empresas que desejam aproveitar ao máximo a computação serverless na AWS. Algumas das vantagens mais significativas incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Escala automática&lt;/strong&gt;: As Lambdas podem escalar automaticamente para atender a demandas variáveis de tráfego (como já foi pontuado 😛).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pagamento sob demanda&lt;/strong&gt;: Você só paga pelo tempo que sua função é executada e pelo número de solicitações que ela processa. Isso significa que você não precisa pagar por capacidade ociosa ou antecipar a demanda futura.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibilidade&lt;/strong&gt;: As Lambdas são compatíveis com algumas linguagens de programação e podem ser integradas a vários serviços da AWS. Isso permite que você crie aplicativos altamente flexíveis e personalizados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fácil gerenciamento&lt;/strong&gt;: A AWS gerencia automaticamente a infraestrutura necessária para executar suas funções. Então você não precisa se preocupar com o gerenciamento de servidores ou com a instalação e configuração de software. Aqui vale um contraponto rapido que apesar da AWS cuidar de muitos pontos sobre infraestrutura ainda temos algumas configurações a fazer1.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tempo de resposta rápido&lt;/strong&gt;: As Lambdas são executadas em milissegundos e podem ser configuradas para responder rapidamente a eventos em tempo real.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens das Lambdas na AWS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Embora as Lambdas tenham muitas vantagens, elas também apresentam algumas desvantagens que os desenvolvedores precisam levar em consideração. Algumas das desvantagens mais significativas incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Limitações de tempo de execução&lt;/strong&gt;: As Lambdas têm limitações de tempo de execução que variam de acordo com a linguagem de programação utilizada. Isso pode limitar a complexidade e o tempo de execução das funções.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limitações de tamanho do pacote&lt;/strong&gt;: As Lambdas têm limitações no tamanho do pacote do deploy que pode ser carregado para sua execução. Isso pode limitar a complexidade e o tamanho dos aplicativos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cold Starts&lt;/strong&gt;: As Lambdas têm um tempo de inicialização chamado "cold start" que ocorre quando uma função é invocada pela primeira vez ou após um período de inatividade. Esse ponto eu vou precisar detalhar melhor logo abaixo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependência da AWS&lt;/strong&gt;: As Lambdas são executadas em um ambiente gerenciado pela AWS, o que pode limitar a flexibilidade e o controle do desenvolvedor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ColdStart nas Lambdas&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O Cold Start do Lambda em cada linguagem suportada pode variar bastante. Como já mencionado, esse é o tempo que leva para a função ser inicializada (tecnicamente chamamos de trigger da Lambda) e executada pela primeira vez após um período de inatividade. É importante levar em consideração o ColdStart ao projetar e implementar suas funções Lambda para garantir a melhor experiência para o usuário final. &lt;/p&gt;

&lt;p&gt;A tabela a seguir mostra o tempo médio de inicialização do ColdStart em cada linguagem suportada:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Linguagem&lt;/th&gt;
&lt;th&gt;ColdStart Médio (em segundos)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;150ms - 3000ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;200ms - 3000ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java&lt;/td&gt;
&lt;td&gt;500ms - 5000ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C#&lt;/td&gt;
&lt;td&gt;500ms - 5000ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go&lt;/td&gt;
&lt;td&gt;20ms - 1000ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ruby&lt;/td&gt;
&lt;td&gt;200ms - 3000ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;É importante lembrar que esses valores são apenas médias e podem variar dependendo de vários fatores, como tamanho do pacote da função, quantidade de dependências, complexidade do código e recursos de hardware. Além disso, a AWS está em constante evolução e pode atualizar os tempos de inicialização de suas funções Lambda ao longo do tempo.&lt;/p&gt;

&lt;p&gt;Mas um ponto é fato, as vezes escolher a linguagem com o melhor Cold Start (melhor = menor) pode ser crucial para a sua Lambda.&lt;/p&gt;

&lt;p&gt;Resumindo em um tweet: a lambda é perfeita para nanos (ou até atômicos) serviços que precisamos fazer em nossas Apps, como: envio de e-mail, atualização de registros em resposta a algum evento no fluxo do negocio, ser executada a partir do upload de um arquivo, entre muitas outras aplicações.&lt;/p&gt;

&lt;p&gt;Esse post foi bem teórico mas é uma conversa profunda que sempre precisamos ter sobre as tecnologias até mesmo para desenhar a nossa arquitetura melhor de acordo com a necessidade do produto que estamos desenvolvendo.&lt;/p&gt;

&lt;p&gt;Na próxima parte, nós vamos desbravar como podemos realizar o deploy de uma &lt;strong&gt;Lambda + Python na AWS com o Terraform&lt;/strong&gt; e também teremos a utilização da minha Stack no StackSpot. &lt;/p&gt;

&lt;p&gt;See you later!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>tutorial</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
