<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on DanielWS</title><link>https://daniel.ws/pt-br/posts/</link><description>Recent content in Posts on DanielWS</description><generator>Hugo</generator><language>pt-br</language><lastBuildDate>Thu, 21 May 2026 10:51:41 -0300</lastBuildDate><atom:link href="https://daniel.ws/pt-br/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Logs em produção: o custo invisível do ruído</title><link>https://daniel.ws/pt-br/posts/logs-in-production-the-invisible-cost-of-noise/</link><pubDate>Thu, 21 May 2026 10:51:41 -0300</pubDate><guid>https://daniel.ws/pt-br/posts/logs-in-production-the-invisible-cost-of-noise/</guid><description>&lt;blockquote>
&lt;p>Mais um capítulo da série &lt;a href="https://daniel.ws/pt-br/posts/genserver-the-rabbit-hole/">GenServer the &amp;ldquo;rabbit hole&amp;rdquo;&lt;/a>. Dessa vez sem GenServer — só log mesmo. Mas o mesmo princípio: a abstração parece simples, e quase ninguém percebe que está usando errado até a conta chegar.&lt;/p>&lt;/blockquote>
&lt;p>Imagina o cenário: 2h da manhã, um pod reiniciou e o alerta acordou alguém. A pessoa abre o Loki, filtra pela label do app, e a primeira tela do navegador é isso aqui:&lt;/p></description></item><item><title>GenServer the "rabbit hole" — Parte 2: A cascata silenciosa</title><link>https://daniel.ws/pt-br/posts/genserver-the-rabbit-hole-part-2-silent-cascade/</link><pubDate>Sat, 16 May 2026 14:10:51 -0300</pubDate><guid>https://daniel.ws/pt-br/posts/genserver-the-rabbit-hole-part-2-silent-cascade/</guid><description>&lt;blockquote>
&lt;p>Continuação de &lt;a href="https://daniel.ws/pt-br/posts/genserver-the-rabbit-hole/">GenServer the &amp;ldquo;rabbit hole&amp;rdquo;&lt;/a>. Se você ainda não leu, recomendo passar por lá antes — vamos partir do mesmo projeto &lt;code>genserver_study&lt;/code> e dos mesmos conceitos de mailbox, supervisor e &lt;code>max_restarts&lt;/code>.&lt;/p>&lt;/blockquote>
&lt;p>No artigo anterior nós exploramos como um GenServer &amp;ldquo;mal comportado&amp;rdquo; pode encerrar toda a árvore de supervisão quando estoura o &lt;code>max_restarts&lt;/code> do supervisor. Mostramos como mensagens são perdidas no mailbox e como o &amp;ldquo;Let it crash&amp;rdquo; não é exatamente um cheque em branco para deixar processos quebrarem aleatoriamente.&lt;/p></description></item><item><title>DORA Metrics</title><link>https://daniel.ws/pt-br/posts/dora-metrics/</link><pubDate>Thu, 30 Apr 2026 09:14:19 -0300</pubDate><guid>https://daniel.ws/pt-br/posts/dora-metrics/</guid><description>&lt;p>Toda vez que uma liderança técnica é questionada sobre performance do time, duas perguntas aparecem por baixo da conversa: &amp;ldquo;estamos entregando rápido?&amp;rdquo; e &amp;ldquo;estamos entregando bem?&amp;rdquo;. O problema é que, sem dado, a resposta vira sensação. E sensação varia conforme o humor de quem está respondendo, o último incidente que aconteceu na sexta-feira à noite, e a quantidade de café da reunião.&lt;/p>
&lt;blockquote>
&lt;h3 id="-dora-metrics">📊 &lt;strong>DORA Metrics&lt;/strong>&lt;/h3>
&lt;p>&lt;em>&amp;ldquo;Um conjunto de quatro métricas que indicam o desempenho de uma equipe de desenvolvimento de software: frequência de implantação, tempo de entrega para mudanças, taxa de falha de mudanças e tempo para restaurar o serviço. Juntas, elas proporcionam um equilíbrio entre velocidade e estabilidade.&amp;rdquo;&lt;/em>&lt;/p></description></item><item><title>GenServer — the "rabbit hole"</title><link>https://daniel.ws/pt-br/posts/genserver-the-rabbit-hole/</link><pubDate>Sat, 19 Jul 2025 13:36:37 -0300</pubDate><guid>https://daniel.ws/pt-br/posts/genserver-the-rabbit-hole/</guid><description>&lt;p>Quando exploramos os pontos fortes do Elixir como linguagem de programação, dois se destacam em frente a outras linguagens do mercado:&lt;/p>
&lt;blockquote>
&lt;h3 id="-3-concurrency-and-scalability">🚀 3. &lt;strong>Concurrency and Scalability&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>Uses &lt;strong>actors (processes)&lt;/strong> for concurrency (each with its own memory and message queue).&lt;/li>
&lt;li>Millions of processes can run concurrently with &lt;strong>low overhead&lt;/strong>.&lt;/li>
&lt;li>Built-in tools for &lt;strong>distribution across multiple nodes&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="-4-fault-tolerance-and-supervision-trees">🛠 4. &lt;strong>Fault-Tolerance and Supervision Trees&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>&amp;ldquo;Let it crash&amp;rdquo; philosophy&lt;/strong>: Failures are expected and isolated.&lt;/li>
&lt;li>&lt;strong>Supervision trees&lt;/strong>: Automatically restart failing processes, making systems &lt;strong>self-healing&lt;/strong> and resilient.&lt;/li>
&lt;/ul>&lt;/blockquote>
&lt;p>GenServer é uma abstração sobre o modelo de processos da VM do Erlang que é entregue pelo core da linguagem e se conecta diretamente aos pontos de &lt;strong>Concorrência e Árvore de Supervisão&lt;/strong> do Elixir. Por ser um pilar comum na arquitetura de sistemas construídos em Elixir, e por ser abordado &amp;ldquo;prematuramente&amp;rdquo; nas documentações oficiais (&lt;a href="https://hexdocs.pm/elixir/1.18.4/genservers.html">Client server communication&lt;/a>, &lt;a href="https://elixirschool.com/en/lessons/advanced/otp_concurrency">OTP Concurrency&lt;/a>), é comum que programadores recém-chegados comecem a modelar suas primeiras soluções em Elixir com o uso da abstração fornecida pelo módulo GenServer. Demora um pouco até a doc oficial fazer o primeiro disclaimer para os novos desavisados: &lt;a href="https://hexdocs.pm/elixir/1.18.4/GenServer.html#module-when-not-to-use-a-genserver">When (not) to use a GenServer&lt;/a>.&lt;/p></description></item><item><title>Olá Mundo</title><link>https://daniel.ws/pt-br/posts/hello-world/</link><pubDate>Fri, 16 May 2025 09:05:40 -0300</pubDate><guid>https://daniel.ws/pt-br/posts/hello-world/</guid><description>&lt;p>Este é um ritual milenar na arte de aprender novas tecnologias.
Devs ao redor do mundo conhecem a verdade: se você ousar escrever suas primeiras
linhas de código sem um &lt;code>Hello World&lt;/code>, está convidando uma maldição para sua jornada.&lt;/p>
&lt;p>Espere bugs misteriosos infestando seu código, builds falhando sem motivo,
e erros enigmáticos aparecendo na linha 23 — mesmo que essa linha não exista.&lt;/p>
&lt;p>Então, para honrar os deuses da programação, estou começando minha primeira experiência
com &lt;a href="https://gohugo.io/">Hugo&lt;/a> seguindo a tradição sagrada: um post &lt;code>Hello World&lt;/code>.&lt;/p></description></item></channel></rss>