<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog on Victor Laurance - Software Engineer</title><link>https://laurance.dev/en/blog/</link><description>Recent content in Blog on Victor Laurance - Software Engineer</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 09 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://laurance.dev/en/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Apache Kafka with Java: Architecture, Idempotence, and End-to-End Resilience</title><link>https://laurance.dev/en/blog/kafka-java/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://laurance.dev/en/blog/kafka-java/</guid><description>&lt;p>What actually happens when your application executes &lt;code>kafkaTemplate.send(...)&lt;/code>?&lt;/p>
&lt;p>If your answer is simply &amp;ldquo;the message arrives in a queue and a worker processes it&amp;rdquo;, you are operating Apache Kafka under the mental model of a traditional message broker like RabbitMQ or AWS SQS. Kafka is fundamentally different: it is an &lt;strong>immutable, append-only, distributed commit log&lt;/strong>.&lt;/p>
&lt;p>This difference changes everything: how you partition workloads, how consumers scale, how you guarantee delivery order, and, most importantly, &lt;strong>how you prevent duplicate processing or data loss when networks glitch or nodes crash&lt;/strong>.&lt;/p></description></item><item><title>How Generative AIs (LLMs) Actually Work</title><link>https://laurance.dev/en/blog/funcionamento-llms/</link><pubDate>Tue, 22 Sep 2026 00:00:00 +0000</pubDate><guid>https://laurance.dev/en/blog/funcionamento-llms/</guid><description>&lt;p>Whenever someone asks me, &amp;ldquo;how does ChatGPT actually work?&amp;rdquo;, I typically encounter two ready-made answers: either &amp;ldquo;it&amp;rsquo;s magic&amp;rdquo; disguised as an explanation, or a deep dive into advanced linear algebra and calculus that loses the listener by the second sentence. It doesn&amp;rsquo;t have to be that way. It is entirely possible to explain it clearly—without simplifying to the point of falsehood, and without requiring a math degree. That is what I aim to do here.&lt;/p></description></item><item><title>Virtual Threads and Concurrency in Java 25 with Spring Boot 4</title><link>https://laurance.dev/en/blog/virtual-threads/</link><pubDate>Mon, 21 Sep 2026 00:00:00 +0000</pubDate><guid>https://laurance.dev/en/blog/virtual-threads/</guid><description>&lt;p>Every Java backend that needs to handle high concurrent traffic eventually runs into the same fundamental constraint: operating system threads are expensive. Each one reserves stack memory, and the operating system cannot sustain more than a few thousand of them without degrading. For years, the industry&amp;rsquo;s answer was migrating to reactive stacks: WebFlux, Reactor, and callbacks—trading simple imperative code for a programming model that is markedly harder to read and debug. Virtual Threads arrived specifically to eliminate that bottleneck without forcing developers to pay that complexity tax, and Java 25 has finally matured this capability far beyond its initial release in 2023.&lt;/p></description></item><item><title>Applying Hexagonal Architecture in a Spring Boot Application</title><link>https://laurance.dev/en/blog/hexagonal-architecture/</link><pubDate>Sun, 13 Sep 2026 00:00:00 +0000</pubDate><guid>https://laurance.dev/en/blog/hexagonal-architecture/</guid><description>&lt;p>If you have maintained a Spring Boot application long enough, you have probably seen business rules, controllers, and JPA entities all mixed up in the exact same place. It works—until the day you need to replace the database, write decent unit tests, or simply understand where business logic ends and the framework begins. That exact pain led me to study Hexagonal Architecture in depth, and in this article, I want to show how I applied these concepts in a real-world Spring Boot application.&lt;/p></description></item></channel></rss>