<?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 Rafiul Alam</title>
    <link>https://alamrafiul.com/posts/</link>
    <description>Recent content in Posts on Rafiul Alam</description>
    <image>
      <title>Rafiul Alam</title>
      <url>https://alamrafiul.com/papermod-cover.png</url>
      <link>https://alamrafiul.com/papermod-cover.png</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Fri, 13 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://alamrafiul.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The AI Inflection Point: What&#39;s Happening, Why It Matters, and How to Prepare</title>
      <link>https://alamrafiul.com/posts/ai-news-march-2026/</link>
      <pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/ai-news-march-2026/</guid>
      <description>A deep-dive into the most important AI developments of early 2026 — from GPT-5 and agentic systems to global regulation and the skills you need to stay relevant.</description>
    </item>
    
    <item>
      <title>Advanced Data Structures: A Coffee Shop Guide</title>
      <link>https://alamrafiul.com/posts/coffee-shop-data-structures/</link>
      <pubDate>Wed, 19 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/coffee-shop-data-structures/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;Understanding data structures can be challenging when they&amp;rsquo;re presented as abstract concepts. Let&amp;rsquo;s make them tangible by exploring them through something we all know: a coffee shop. From the order queue to delivery routes, every aspect of running a coffee shop mirrors fundamental computer science concepts.&lt;/p&gt;
&lt;p&gt;In this comprehensive guide, we&amp;rsquo;ll explore 25+ data structures through the lens of coffee shop operations, complete with visualizations and Go implementations.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;part-1-the-basics-revisited&#34;&gt;Part 1: The Basics Revisited&lt;/h2&gt;
&lt;h3 id=&#34;the-order-line---queue&#34;&gt;The Order Line - Queue&lt;/h3&gt;
&lt;p&gt;Every morning at the coffee shop, customers line up in order. First in, first out (FIFO). The person who arrives first gets served first. This is a &lt;strong&gt;queue&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Best AI Research Papers: A Curated List from Foundation to Frontier</title>
      <link>https://alamrafiul.com/posts/best-ai-research-papers/</link>
      <pubDate>Wed, 19 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/best-ai-research-papers/</guid>
      <description>&lt;p&gt;The field of artificial intelligence has evolved rapidly over the past decades, driven by groundbreaking research papers that have fundamentally changed how we think about and build intelligent systems. Whether you&amp;rsquo;re a researcher, practitioner, or enthusiast, understanding these landmark papers is essential to grasping where AI is today and where it&amp;rsquo;s heading.&lt;/p&gt;
&lt;p&gt;This curated list covers the most influential AI research papers from the foundational classics to cutting-edge 2024-2025 breakthroughs. I&amp;rsquo;ve organized them chronologically and by domain to help you navigate this fascinating journey through AI&amp;rsquo;s evolution.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Complete Guide to Go Concurrency Patterns: Visual Patterns &amp; Code Examples</title>
      <link>https://alamrafiul.com/posts/go-concurrency-patterns-comprehensive/</link>
      <pubDate>Tue, 18 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-concurrency-patterns-comprehensive/</guid>
      <description>Master all essential Go concurrency patterns with mermaid visualizations and practical code examples. From basic goroutines to advanced patterns like worker pools, fan-in/out, pipelines, and more.</description>
    </item>
    
    <item>
      <title>Complete Guide to Graph Algorithms in Go</title>
      <link>https://alamrafiul.com/posts/go-graph-algorithms/</link>
      <pubDate>Sun, 16 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-graph-algorithms/</guid>
      <description>Master graph algorithms in Go with complete implementations, complexity analysis, and practical use cases. Covers BFS, DFS, Dijkstra&amp;#39;s, Bellman-Ford, Floyd-Warshall, Kruskal&amp;#39;s, Prim&amp;#39;s, topological sort, and more.</description>
    </item>
    
    <item>
      <title>Building an MCP File Operations Tool in Go: A Complete Guide</title>
      <link>https://alamrafiul.com/posts/golang-mcp-file-operations-tool/</link>
      <pubDate>Sat, 18 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/golang-mcp-file-operations-tool/</guid>
      <description>&lt;p&gt;The Model Context Protocol (MCP) is revolutionizing how AI assistants interact with tools and data sources. In this comprehensive guide, we&amp;rsquo;ll build a production-ready MCP server in Go that provides powerful file operations-think of it as the &lt;code&gt;strings&lt;/code&gt; utility package, but for files and AI assistants.&lt;/p&gt;
&lt;h2 id=&#34;what-is-mcp&#34;&gt;What is MCP?&lt;/h2&gt;
&lt;p&gt;MCP (Model Context Protocol) is a standardized way for AI assistants to interact with external tools and data sources. Instead of custom integrations for each tool, MCP provides a universal protocol that works with any compliant server.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Building Scalable Event-Driven Microservices in Go: A User and Notes Service Example</title>
      <link>https://alamrafiul.com/posts/event-driven-microservices-go/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/event-driven-microservices-go/</guid>
      <description>Learn how to build scalable, resilient event-driven microservices in Go using NATS JetStream, Watermill, Bun ORM, and PostgreSQL with practical User and Notes service examples.</description>
    </item>
    
    <item>
      <title>Building a Real-Time File Monitor with Goroutines and Channels</title>
      <link>https://alamrafiul.com/posts/golang-realtime-file-monitor/</link>
      <pubDate>Fri, 03 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/golang-realtime-file-monitor/</guid>
      <description>&lt;p&gt;File monitoring is a common requirement in many applications: watching for configuration changes, processing uploads, syncing directories, or building development tools. In this post, we&amp;rsquo;ll build a production-ready file monitoring service that tracks word counts across all files in a directory using Go&amp;rsquo;s powerful concurrency primitives.&lt;/p&gt;
&lt;h2 id=&#34;the-challenge&#34;&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;Build a service that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Monitors a directory and all its subdirectories&lt;/li&gt;
&lt;li&gt;Counts words in all files in real-time&lt;/li&gt;
&lt;li&gt;Updates counts when files are modified, created, or deleted&lt;/li&gt;
&lt;li&gt;Processes multiple files concurrently&lt;/li&gt;
&lt;li&gt;Provides current statistics on demand&lt;/li&gt;
&lt;li&gt;Handles errors gracefully&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;why-this-matters&#34;&gt;Why This Matters&lt;/h2&gt;
&lt;p&gt;Real-time file monitoring powers many production systems:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Building a Crash-Resistant Log Service in Go with Context Timeout</title>
      <link>https://alamrafiul.com/posts/golang-log-service-with-context-timeout/</link>
      <pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/golang-log-service-with-context-timeout/</guid>
      <description>&lt;p&gt;Building production-grade services requires more than just functionality-they need resilience, graceful degradation, and the ability to handle failures without crashing. In this post, we&amp;rsquo;ll build a robust logging service that demonstrates these principles using Go&amp;rsquo;s context package and proper error handling.&lt;/p&gt;
&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;
&lt;p&gt;Imagine your application sends logs to a remote logging service. What happens when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The logging service is slow or unresponsive?&lt;/li&gt;
&lt;li&gt;Network issues cause delays?&lt;/li&gt;
&lt;li&gt;The logging service crashes entirely?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without proper safeguards, your entire application could hang, crash, or become unresponsive just because logging failed. &lt;strong&gt;Logging should never bring down your application.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Option&lt;T&gt; and Result&lt;T&gt;: No More Nil Pointers</title>
      <link>https://alamrafiul.com/posts/rust-option-result/</link>
      <pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rust-option-result/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go to Rust Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/rust-string-types/&#34;&gt;← String vs &amp;amp;str&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/go-to-rust-journey/&#34;&gt;Series Overview&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-problem-nil-and-errors&#34;&gt;The Problem: Nil and Errors&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Tony Hoare&lt;/strong&gt; (inventor of null references) called it his &amp;ldquo;billion-dollar mistake.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Go&amp;rsquo;s approach:&lt;/strong&gt; &lt;code&gt;nil&lt;/code&gt; values and explicit error returns
&lt;strong&gt;Rust&amp;rsquo;s approach:&lt;/strong&gt; &lt;code&gt;Option&amp;lt;T&amp;gt;&lt;/code&gt; for absence, &lt;code&gt;Result&amp;lt;T, E&amp;gt;&lt;/code&gt; for errors&lt;/p&gt;
&lt;h2 id=&#34;go-nil-pointers&#34;&gt;Go: Nil Pointers&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Go:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;findUser&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;User&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;User&lt;/span&gt;{&lt;span style=&#34;color:#a6e22e&#34;&gt;ID&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Alice&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;findUser&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;User not found&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Easy to forget nil check:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>String vs &amp;str: Rust&#39;s Confusing String Types for Go Devs</title>
      <link>https://alamrafiul.com/posts/rust-string-types/</link>
      <pubDate>Sat, 26 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rust-string-types/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go to Rust Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/rust-mut-vs-immutable/&#34;&gt;← Mut vs Immutable&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/go-to-rust-journey/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/rust-option-result/&#34;&gt;Option and Result →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-confusion&#34;&gt;The Confusion&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Go has one string type:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Rust has two main string types:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; s1: String &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; String::from(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;);  &lt;span style=&#34;color:#75715e&#34;&gt;// Owned string
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; s2: &lt;span style=&#34;color:#66d9ef&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;str&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;;                  &lt;span style=&#34;color:#75715e&#34;&gt;// String slice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Why two types? It&amp;rsquo;s one of the most confusing aspects for Go developers learning Rust.&lt;/p&gt;
&lt;h2 id=&#34;go-one-string-type&#34;&gt;Go: One String Type&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Go:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// All of these are just &amp;#34;string&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;s1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;s2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;world&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;s3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printString&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printString&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s3&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;printString&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Simple. Everything is &lt;code&gt;string&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mut vs Immutable: Why Rust Makes You Choose</title>
      <link>https://alamrafiul.com/posts/rust-mut-vs-immutable/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rust-mut-vs-immutable/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go to Rust Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/rust-lifetimes-explained/&#34;&gt;← Lifetimes Explained&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/go-to-rust-journey/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/rust-string-types/&#34;&gt;String vs &amp;amp;str →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-default-difference&#34;&gt;The Default Difference&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Go:&lt;/strong&gt; Everything is mutable by default
&lt;strong&gt;Rust:&lt;/strong&gt; Everything is immutable by default&lt;/p&gt;
&lt;p&gt;This single difference shapes how you write code in each language.&lt;/p&gt;
&lt;h2 id=&#34;go-mutable-by-default&#34;&gt;Go: Mutable by Default&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Go:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;// No problem
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;// No problem
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;)  &lt;span style=&#34;color:#75715e&#34;&gt;// 25
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Variables are mutable unless you use &lt;code&gt;const&lt;/code&gt; (which is very limited):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PI&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;3.14&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Compile-time constant only
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;PI&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;3.14159&lt;/span&gt;     &lt;span style=&#34;color:#75715e&#34;&gt;// Error
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;rust-immutable-by-default&#34;&gt;Rust: Immutable by Default&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Rust:&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Lifetimes Explained: The Annotation Go Developers Never Needed</title>
      <link>https://alamrafiul.com/posts/rust-lifetimes-explained/</link>
      <pubDate>Thu, 24 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rust-lifetimes-explained/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go to Rust Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/rust-no-garbage-collector/&#34;&gt;← No Garbage Collector&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/go-to-rust-journey/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/rust-mut-vs-immutable/&#34;&gt;Mut vs Immutable →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-concept-go-doesnt-need&#34;&gt;The Concept Go Doesn&amp;rsquo;t Need&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Lifetimes&lt;/strong&gt; are Rust&amp;rsquo;s way of tracking how long references are valid-all at compile time.&lt;/p&gt;
&lt;p&gt;Go doesn&amp;rsquo;t need lifetimes because the garbage collector tracks reference validity at runtime. Rust needs them because there&amp;rsquo;s no GC.&lt;/p&gt;
&lt;h2 id=&#34;go-references-just-work&#34;&gt;Go: References Just Work&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Go:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getFirst&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; len(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;) &amp;gt; len(&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;short&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;longer&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getFirst&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No annotations needed. GC ensures &lt;code&gt;result&lt;/code&gt; stays valid.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>No Garbage Collector: How Rust Manages Memory Without GC</title>
      <link>https://alamrafiul.com/posts/rust-no-garbage-collector/</link>
      <pubDate>Wed, 23 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rust-no-garbage-collector/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go to Rust Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/rust-ownership-borrowing/&#34;&gt;← Ownership and Borrowing&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/go-to-rust-journey/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/rust-lifetimes-explained/&#34;&gt;Lifetimes Explained →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-fundamental-trade-off&#34;&gt;The Fundamental Trade-Off&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Go:&lt;/strong&gt; Automatic memory management via garbage collection
&lt;strong&gt;Rust:&lt;/strong&gt; Compile-time memory management via ownership&lt;/p&gt;
&lt;p&gt;Both approaches have profound implications for performance, predictability, and developer experience.&lt;/p&gt;
&lt;h2 id=&#34;how-gos-gc-works&#34;&gt;How Go&amp;rsquo;s GC Works&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Go:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;allocateData&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1000000&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make([]&lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// Use data...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// No explicit free needed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Go&amp;rsquo;s GC:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Tracks all allocations&lt;/li&gt;
&lt;li&gt;Periodically stops the world (STW)&lt;/li&gt;
&lt;li&gt;Scans for reachable objects&lt;/li&gt;
&lt;li&gt;Frees unreachable memory&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;GC pause times:&lt;/strong&gt; Typically 1-10ms, but can spike higher.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Ownership and Borrowing: The Concept Go Doesn&#39;t Have</title>
      <link>https://alamrafiul.com/posts/rust-ownership-borrowing/</link>
      <pubDate>Tue, 22 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rust-ownership-borrowing/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go to Rust Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/rust-compiler-errors/&#34;&gt;← The Rust Compiler&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/go-to-rust-journey/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/rust-no-garbage-collector/&#34;&gt;No Garbage Collector →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-core-difference&#34;&gt;The Core Difference&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ownership&lt;/strong&gt; is Rust&amp;rsquo;s most important concept-and the one Go completely lacks.&lt;/p&gt;
&lt;p&gt;In Go, the garbage collector handles memory. In Rust, the &lt;strong&gt;ownership system&lt;/strong&gt; handles memory at compile time, with zero runtime cost.&lt;/p&gt;
&lt;h2 id=&#34;gos-approach-share-and-gc&#34;&gt;Go&amp;rsquo;s Approach: Share and GC&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Go:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;{&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Pass to multiple functions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printData&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;modifyData&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printData&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Still usable
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;printData&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;modifyData&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] = &lt;span style=&#34;color:#ae81ff&#34;&gt;999&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Modifies original
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>The Rust Compiler: Why It Yells at You (And Go Doesn&#39;t)</title>
      <link>https://alamrafiul.com/posts/rust-compiler-errors/</link>
      <pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rust-compiler-errors/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go to Rust Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/rust-setup-vs-go/&#34;&gt;← Setting Up Rust&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/go-to-rust-journey/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/rust-ownership-borrowing/&#34;&gt;Ownership and Borrowing →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-first-encounter&#34;&gt;The First Encounter&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Week 1 with Go:&lt;/strong&gt; I shipped features.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Week 1 with Rust:&lt;/strong&gt; I fought the compiler.&lt;/p&gt;
&lt;p&gt;This isn&amp;rsquo;t a bug-it&amp;rsquo;s Rust&amp;rsquo;s design. The compiler is strict, verbose, and often frustrating. But after fighting it for weeks, I realized: &lt;strong&gt;it&amp;rsquo;s actually trying to help me&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;compiler-philosophy&#34;&gt;Compiler Philosophy&lt;/h2&gt;
&lt;h3 id=&#34;go-trust-the-developer&#34;&gt;Go: Trust the Developer&lt;/h3&gt;
&lt;p&gt;Go&amp;rsquo;s compiler does basic checks and gets out of your way:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Setting Up Rust: Tooling Compared to Go&#39;s Simplicity</title>
      <link>https://alamrafiul.com/posts/rust-setup-vs-go/</link>
      <pubDate>Fri, 18 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rust-setup-vs-go/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go to Rust Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/rust-hello-world-complexity/&#34;&gt;← Hello World Comparison&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/go-to-rust-journey/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/rust-compiler-errors/&#34;&gt;The Rust Compiler →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;installation-first-impressions&#34;&gt;Installation: First Impressions&lt;/h2&gt;
&lt;h3 id=&#34;go-download-and-done&#34;&gt;Go: Download and Done&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to golang.org/dl&lt;/li&gt;
&lt;li&gt;Download installer for your OS&lt;/li&gt;
&lt;li&gt;Run installer&lt;/li&gt;
&lt;li&gt;Done&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Verify:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ go version
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go version go1.22.0 linux/amd64
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s it. Go is installed. One binary, one version, ready to use.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where it lives:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ which go
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/local/go/bin/go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Single installation directory. Simple.&lt;/p&gt;
&lt;h3 id=&#34;rust-the-rustup-way&#34;&gt;Rust: The Rustup Way&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl --proto &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;=https&amp;#39;&lt;/span&gt; --tlsv1.2 -sSf https://sh.rustup.rs | sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This installs &lt;strong&gt;rustup&lt;/strong&gt;, Rust&amp;rsquo;s toolchain manager (like nvm for Node or rbenv for Ruby).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Hello World in Rust: Why It&#39;s More Complex Than Go</title>
      <link>https://alamrafiul.com/posts/rust-hello-world-complexity/</link>
      <pubDate>Thu, 17 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rust-hello-world-complexity/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go to Rust Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/cargo-vs-go-modules/&#34;&gt;← Cargo vs Go Modules&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/go-to-rust-journey/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/rust-setup-vs-go/&#34;&gt;Setting Up Rust →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-simple-hello-world&#34;&gt;The &amp;ldquo;Simple&amp;rdquo; Hello World&lt;/h2&gt;
&lt;p&gt;Every programming tutorial starts with &amp;ldquo;Hello, World!&amp;rdquo; It&amp;rsquo;s supposed to be trivial. But comparing Go and Rust versions reveals fundamental philosophical differences.&lt;/p&gt;
&lt;h2 id=&#34;gos-hello-world&#34;&gt;Go&amp;rsquo;s Hello World&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;main.go:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, World!&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Compile and run:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go run main.go
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hello, World!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Done. Five lines. Zero surprises.&lt;/p&gt;
&lt;h2 id=&#34;rusts-hello-world&#34;&gt;Rust&amp;rsquo;s Hello World&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;main.rs:&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Cargo vs Go Modules: Package Management Face-Off</title>
      <link>https://alamrafiul.com/posts/cargo-vs-go-modules/</link>
      <pubDate>Wed, 16 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/cargo-vs-go-modules/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go to Rust Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/rust-day-1-gopher-impressions/&#34;&gt;← Day 1 Impressions&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/go-to-rust-journey/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/rust-hello-world-complexity/&#34;&gt;Hello World Comparison →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;first-impression-cargo-is-actually-great&#34;&gt;First Impression: Cargo is Actually Great&lt;/h2&gt;
&lt;p&gt;After struggling with Rust&amp;rsquo;s ownership system on Day 1, I expected the tooling to be equally complex. I was wrong. &lt;strong&gt;Cargo is fantastic&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Coming from Go modules (which are already pretty good), Cargo feels like a spiritual successor with better UX.&lt;/p&gt;
&lt;h2 id=&#34;project-initialization&#34;&gt;Project Initialization&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Go:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir myproject
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd myproject
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go mod init github.com/username/myproject
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Creates &lt;code&gt;go.mod&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Day 1 with Rust: A Gopher&#39;s First Impressions</title>
      <link>https://alamrafiul.com/posts/rust-day-1-gopher-impressions/</link>
      <pubDate>Tue, 15 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rust-day-1-gopher-impressions/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go to Rust Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/go-to-rust-journey/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/cargo-vs-go-modules/&#34;&gt;Cargo vs Go Modules →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-setup&#34;&gt;The Setup&lt;/h2&gt;
&lt;p&gt;After years of writing Go, I decided to spend a few months learning Rust. Everyone kept talking about &amp;ldquo;fearless concurrency,&amp;rdquo; &amp;ldquo;zero-cost abstractions,&amp;rdquo; and &amp;ldquo;memory safety without garbage collection.&amp;rdquo; As a pragmatic developer, I wanted to see what the fuss was about.&lt;/p&gt;
&lt;p&gt;Day 1 was&amp;hellip; humbling.&lt;/p&gt;
&lt;h2 id=&#34;first-shock-everything-needs-annotations&#34;&gt;First Shock: Everything Needs Annotations&lt;/h2&gt;
&lt;p&gt;Coming from Go, where types are inferred elegantly, Rust feels verbose. Here&amp;rsquo;s my first attempt at a simple function:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>HTTP/3 &amp; WebTransport in Go: Next-Generation Real-Time Communication</title>
      <link>https://alamrafiul.com/posts/http3-webtransport/</link>
      <pubDate>Wed, 19 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/http3-webtransport/</guid>
      <description>Master HTTP/3 (QUIC) and WebTransport with Go - UDP-based reliable transport, multiplexing without head-of-line blocking, unreliable datagrams, and building ultra-low-latency applications</description>
    </item>
    
    <item>
      <title>GraphQL Subscriptions in Go: Data-Driven Real-Time Updates</title>
      <link>https://alamrafiul.com/posts/graphql-subscriptions/</link>
      <pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/graphql-subscriptions/</guid>
      <description>Master GraphQL Subscriptions with Go - schema-driven subscriptions, WebSocket transport, resolver implementation, and building type-safe real-time APIs with gqlgen</description>
    </item>
    
    <item>
      <title>Building Payment Gateway Integrations in Go: A Complete Guide</title>
      <link>https://alamrafiul.com/posts/payment-gateway-integration/</link>
      <pubDate>Mon, 17 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/payment-gateway-integration/</guid>
      <description>Learn how to design and implement robust payment gateway integrations with multiple providers, handling transactions, retries, atomicity, scheduling, and data persistence in both SQL and NoSQL databases.</description>
    </item>
    
    <item>
      <title>Saga Pattern in Go: Managing Distributed Transactions</title>
      <link>https://alamrafiul.com/posts/go-saga-pattern/</link>
      <pubDate>Sun, 16 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-saga-pattern/</guid>
      <description>Learn how to implement the Saga pattern in Go to manage distributed transactions across microservices with compensating transactions and eventual consistency.</description>
    </item>
    
    <item>
      <title>MQTT in Go: IoT &amp; Low-Bandwidth Communication</title>
      <link>https://alamrafiul.com/posts/mqtt-guide/</link>
      <pubDate>Sat, 15 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/mqtt-guide/</guid>
      <description>Master MQTT protocol with Go - QoS levels, Last Will &amp;amp; Testament, retained messages, and building scalable IoT systems for millions of devices</description>
    </item>
    
    <item>
      <title>CQRS Pattern in Go: Separating Reads and Writes</title>
      <link>https://alamrafiul.com/posts/go-cqrs-pattern/</link>
      <pubDate>Fri, 14 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-cqrs-pattern/</guid>
      <description>Learn how to implement Command Query Responsibility Segregation (CQRS) pattern in Go to optimize read and write operations independently for better scalability and performance.</description>
    </item>
    
    <item>
      <title>RabbitMQ &amp; AMQP in Go: Advanced Message Queueing Protocol</title>
      <link>https://alamrafiul.com/posts/rabbitmq-amqp/</link>
      <pubDate>Thu, 13 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rabbitmq-amqp/</guid>
      <description>Master RabbitMQ with Go - exchanges, queues, bindings, routing patterns, dead letter queues, and reliable message delivery for robust async systems</description>
    </item>
    
    <item>
      <title>Event-Driven Architecture in Go: Building Reactive Systems</title>
      <link>https://alamrafiul.com/posts/go-event-driven-architecture/</link>
      <pubDate>Wed, 12 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-event-driven-architecture/</guid>
      <description>Learn how to implement Event-Driven Architecture in Go for building loosely coupled, scalable systems that react to events asynchronously using message brokers and event buses.</description>
    </item>
    
    <item>
      <title>Apache Kafka in Go: Distributed Event Streaming at Scale</title>
      <link>https://alamrafiul.com/posts/kafka-guide/</link>
      <pubDate>Tue, 11 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/kafka-guide/</guid>
      <description>Master Apache Kafka with Go - topics, partitions, consumer groups, offset management, and exactly-once semantics for building resilient event-driven systems</description>
    </item>
    
    <item>
      <title>The &#39;System 2&#39; LLM: How Models Learn to Reason (o1, R1)</title>
      <link>https://alamrafiul.com/posts/system2-llm-reasoning/</link>
      <pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/system2-llm-reasoning/</guid>
      <description>Explore how reasoning-focused LLMs like OpenAI&amp;#39;s o1 and DeepSeek&amp;#39;s R1 perform multi-step thinking, self-correction, and deliberate problem-solving through internal thought processes.</description>
    </item>
    
    <item>
      <title>Deconstructing the Mixture-of-Experts (MoE) Architecture</title>
      <link>https://alamrafiul.com/posts/moe-architecture-explained/</link>
      <pubDate>Sun, 09 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/moe-architecture-explained/</guid>
      <description>A deep dive into how Mixture-of-Experts models work, from token routing to sparse activation, with comprehensive visualizations of the architecture and data flow.</description>
    </item>
    
    <item>
      <title>From Choreography to Durable Execution: Why Temporal Changes Everything</title>
      <link>https://alamrafiul.com/posts/temporal-durable-execution/</link>
      <pubDate>Sat, 08 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/temporal-durable-execution/</guid>
      <description>Discover how Temporal&amp;#39;s durable execution model replaces hope-driven choreography with reliable, observable workflows. Learn the difference between event-driven choreography and durable execution with practical Go examples.</description>
    </item>
    
    <item>
      <title>NATS &amp; JetStream in Go: Cloud-Native Messaging at Scale</title>
      <link>https://alamrafiul.com/posts/nats-jetstream/</link>
      <pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/nats-jetstream/</guid>
      <description>Master NATS and JetStream in Go: subject-based messaging, pub/sub patterns, at-most-once vs at-least-once delivery, stream processing, and high-throughput microservices orchestration.</description>
    </item>
    
    <item>
      <title>Visualizing LLM Embeddings: The Geometry of Meaning</title>
      <link>https://alamrafiul.com/posts/llm-embeddings-visualization/</link>
      <pubDate>Thu, 06 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/llm-embeddings-visualization/</guid>
      <description>Explore how words, phrases, and documents are represented as vectors in high-dimensional space, and how their spatial relationships encode semantic meaning through clustering, analogies, and dimensionality reduction.</description>
    </item>
    
    <item>
      <title>Go Concurrency Pattern: The Ticket Seller</title>
      <link>https://alamrafiul.com/posts/go-ticket-seller/</link>
      <pubDate>Wed, 05 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-ticket-seller/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-bank-account-drama/&#34;&gt;← Bank Account Drama&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-login-counter/&#34;&gt;Login Counter →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-problem-selling-tickets-that-dont-exist&#34;&gt;The Problem: Selling Tickets That Don&amp;rsquo;t Exist&lt;/h2&gt;
&lt;p&gt;A concert has 1,000 tickets. Multiple goroutines handle sales concurrently. Each seller checks if tickets remain, and if yes, decrements the count and sells one. Sounds simple, right?&lt;/p&gt;
&lt;p&gt;Two sellers check simultaneously. Both see &amp;ldquo;1 ticket remaining.&amp;rdquo; Both sell. You&amp;rsquo;ve just sold ticket number -1. Congratulations, you&amp;rsquo;ve discovered the &lt;strong&gt;check-then-act&lt;/strong&gt; race condition, one of the most common concurrency bugs in the wild.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Profitability Metrics: Beyond &#39;Are We Making Money?&#39;</title>
      <link>https://alamrafiul.com/posts/profitability-metrics/</link>
      <pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/profitability-metrics/</guid>
      <description>Master gross margin, contribution margin, EBITDA, the Rule of 40, and learn why profitable companies can still fail while loss-making companies thrive.</description>
    </item>
    
    <item>
      <title>WebRTC in Go: Peer-to-Peer Real-Time Communication</title>
      <link>https://alamrafiul.com/posts/webrtc-guide/</link>
      <pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/webrtc-guide/</guid>
      <description>Build WebRTC applications in Go: peer-to-peer audio/video streaming, data channels, NAT traversal with STUN/TURN, signaling with WebSockets, and scaling with SFU architecture.</description>
    </item>
    
    <item>
      <title>The LLM Development Workflow: A Data-Centric View</title>
      <link>https://alamrafiul.com/posts/llm-development-workflow/</link>
      <pubDate>Mon, 03 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/llm-development-workflow/</guid>
      <description>Explore the complete lifecycle of developing large language models: data collection and curation, pre-training, fine-tuning (SFT, DPO, RLHF), evaluation, and the critical feedback loops that shape model behavior.</description>
    </item>
    
    <item>
      <title>Go Concurrency Pattern: The Sieve of Eratosthenes Pipeline</title>
      <link>https://alamrafiul.com/posts/go-sieve-eratosthenes/</link>
      <pubDate>Sun, 02 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-sieve-eratosthenes/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-monte-carlo-pi/&#34;&gt;← Monte Carlo Pi&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-mandelbrot-set/&#34;&gt;Mandelbrot Set →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-problem-finding-primes-with-filters&#34;&gt;The Problem: Finding Primes with Filters&lt;/h2&gt;
&lt;p&gt;The Sieve of Eratosthenes is an ancient algorithm for finding prime numbers. The concurrent version creates a pipeline of filters: each prime spawns a goroutine that filters out its multiples.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Algorithm:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generate sequence: 2, 3, 4, 5, 6, 7, 8, 9, 10, &amp;hellip;&lt;/li&gt;
&lt;li&gt;Take first number (2), it&amp;rsquo;s prime, filter all multiples of 2&lt;/li&gt;
&lt;li&gt;Take next number (3), it&amp;rsquo;s prime, filter all multiples of 3&lt;/li&gt;
&lt;li&gt;Take next number (5), it&amp;rsquo;s prime, filter all multiples of 5&lt;/li&gt;
&lt;li&gt;Repeat until desired count&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;The Beauty:&lt;/strong&gt; Each prime creates its own filter. Numbers flow through a pipeline of increasingly selective filters. What passes through all filters must be prime.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Customer Economics: The LTV/CAC Framework That Predicts Success</title>
      <link>https://alamrafiul.com/posts/customer-economics-ltv-cac/</link>
      <pubDate>Sat, 01 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/customer-economics-ltv-cac/</guid>
      <description>Master the critical metrics of customer acquisition cost, lifetime value, and retention analysis to predict business success and avoid the $100M mistake that kills startups.</description>
    </item>
    
    <item>
      <title>gRPC Streaming in Go: High-Performance Inter-Service Communication</title>
      <link>https://alamrafiul.com/posts/grpc-streaming/</link>
      <pubDate>Sat, 01 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/grpc-streaming/</guid>
      <description>Master gRPC streaming in Go: server, client, and bidirectional streaming over HTTP/2 with protobuf. Build typed microservices communication with gRPC-Web for browsers.</description>
    </item>
    
    <item>
      <title>Unpacking KV Cache Optimization: MLA and GQA Explained</title>
      <link>https://alamrafiul.com/posts/kv-cache-optimization/</link>
      <pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/kv-cache-optimization/</guid>
      <description>Deep dive into how Multi-Head Latent Attention (MLA) and Grouped Query Attention (GQA) reduce memory and computation for long context windows by optimizing the KV cache.</description>
    </item>
    
    <item>
      <title>Go Concurrency Pattern: Monte Carlo Pi Estimation</title>
      <link>https://alamrafiul.com/posts/go-monte-carlo-pi/</link>
      <pubDate>Thu, 30 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-monte-carlo-pi/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-login-counter/&#34;&gt;← Login Counter&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-sieve-eratosthenes/&#34;&gt;Sieve of Eratosthenes →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-problem-computing-pi-by-throwing-darts&#34;&gt;The Problem: Computing Pi by Throwing Darts&lt;/h2&gt;
&lt;p&gt;Imagine a square dartboard with a circle inscribed inside it. Throw random darts at the square. The ratio of darts landing inside the circle to total darts thrown approaches π/4.&lt;/p&gt;
&lt;p&gt;Why? &lt;strong&gt;Mathematics:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Square side length: 2 (from -1 to 1)&lt;/li&gt;
&lt;li&gt;Square area: 4&lt;/li&gt;
&lt;li&gt;Circle radius: 1&lt;/li&gt;
&lt;li&gt;Circle area: π × 1² = π&lt;/li&gt;
&lt;li&gt;Ratio: π/4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Throw 1 million darts, multiply by 4, and you&amp;rsquo;ve estimated π. More darts = better estimate. This is &lt;strong&gt;Monte Carlo simulation&lt;/strong&gt;: using randomness to solve deterministic problems.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>WebSockets in Go: Building Real-Time Bidirectional Communication</title>
      <link>https://alamrafiul.com/posts/websockets-guide/</link>
      <pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/websockets-guide/</guid>
      <description>Master WebSocket implementation in Go: connection pooling with Hub pattern, JWT authentication, ping/pong heartbeats, rate limiting, and horizontal scaling with Redis/NATS.</description>
    </item>
    
    <item>
      <title>Hybrid Architectures: Marrying Transformers with Mamba (SSMs)</title>
      <link>https://alamrafiul.com/posts/hybrid-transformer-mamba/</link>
      <pubDate>Tue, 28 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/hybrid-transformer-mamba/</guid>
      <description>Explore how State Space Models like Mamba are being integrated with Transformers to overcome quadratic scaling and improve long-context handling through linear-time sequence processing.</description>
    </item>
    
    <item>
      <title>Go Concurrency Pattern: The Mandelbrot Set</title>
      <link>https://alamrafiul.com/posts/go-mandelbrot-set/</link>
      <pubDate>Mon, 27 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-mandelbrot-set/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-sieve-eratosthenes/&#34;&gt;← Sieve of Eratosthenes&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-collatz-explorer/&#34;&gt;Collatz Explorer →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-problem-rendering-fractals-in-parallel&#34;&gt;The Problem: Rendering Fractals in Parallel&lt;/h2&gt;
&lt;p&gt;The Mandelbrot set is defined by a simple iterative formula:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start with &lt;code&gt;z = 0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Repeatedly compute &lt;code&gt;z = z² + c&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;|z|&lt;/code&gt; exceeds 2, the point escapes (not in the set)&lt;/li&gt;
&lt;li&gt;Color each pixel by iteration count&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The beauty:&lt;/strong&gt; Each pixel is completely independent. Perfect for parallelism!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The challenge:&lt;/strong&gt; Some pixels escape in 5 iterations, others take 1000+. This creates &lt;strong&gt;load imbalance&lt;/strong&gt;-some workers finish instantly while others grind away.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Server-Sent Events (SSE) in Go: Real-Time Server-to-Client Streaming</title>
      <link>https://alamrafiul.com/posts/server-sent-events/</link>
      <pubDate>Sun, 26 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/server-sent-events/</guid>
      <description>Build production-ready Server-Sent Events with Go: automatic reconnection, event types, Last-Event-ID handling, and horizontal scaling with Redis Pub/Sub.</description>
    </item>
    
    <item>
      <title>Microservices Architecture in Go: Building Distributed Systems</title>
      <link>https://alamrafiul.com/posts/go-microservices-architecture/</link>
      <pubDate>Sat, 25 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-microservices-architecture/</guid>
      <description>Learn how to implement Microservices Architecture in Go for building scalable, independently deployable services with clear boundaries and distributed communication patterns.</description>
    </item>
    
    <item>
      <title>Go Concurrency Pattern: The Login Counter</title>
      <link>https://alamrafiul.com/posts/go-login-counter/</link>
      <pubDate>Fri, 24 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-login-counter/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-ticket-seller/&#34;&gt;← Ticket Seller&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-monte-carlo-pi/&#34;&gt;Monte Carlo Pi →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-problem-counting-what-you-cant-see&#34;&gt;The Problem: Counting What You Can&amp;rsquo;t See&lt;/h2&gt;
&lt;p&gt;Count concurrent users. On login: increment. On logout: decrement. Simple, right?&lt;/p&gt;
&lt;p&gt;Now add reality:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The counter is distributed across multiple servers&lt;/li&gt;
&lt;li&gt;A user&amp;rsquo;s session times out on one server but they&amp;rsquo;re active on another&lt;/li&gt;
&lt;li&gt;The increment message arrives after the decrement message&lt;/li&gt;
&lt;li&gt;Network partitions split your cluster&lt;/li&gt;
&lt;li&gt;Servers crash mid-operation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Suddenly, this &amp;ldquo;simple&amp;rdquo; counter becomes a distributed systems nightmare. Welcome to &lt;strong&gt;distributed counting&lt;/strong&gt;, where even addition is hard.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Release Management: From Semantic Versioning to Production Deployment</title>
      <link>https://alamrafiul.com/posts/release-management/</link>
      <pubDate>Fri, 24 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/release-management/</guid>
      <description>A comprehensive visual guide to release management practices including semantic versioning decisions, release trains, hotfix processes, deployment checklists, and environment promotion strategies with Mermaid diagrams.</description>
    </item>
    
    <item>
      <title>CI/CD Pipeline: Git Push to Production Deployment</title>
      <link>https://alamrafiul.com/posts/cicd-pipeline-flow/</link>
      <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/cicd-pipeline-flow/</guid>
      <description>A comprehensive visual guide to CI/CD pipelines from code commit to production deployment, with Mermaid diagrams showing automated testing, building, and deployment stages.</description>
    </item>
    
    <item>
      <title>Deployment Strategies: Blue-Green, Canary, Rolling Updates</title>
      <link>https://alamrafiul.com/posts/deployment-strategies/</link>
      <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/deployment-strategies/</guid>
      <description>A comprehensive visual guide to modern deployment strategies including blue-green deployments, canary releases, and rolling updates with Mermaid diagrams showing traffic flow and rollback procedures.</description>
    </item>
    
    <item>
      <title>Docker Build Process: Dockerfile to Image to Container</title>
      <link>https://alamrafiul.com/posts/docker-build-process/</link>
      <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/docker-build-process/</guid>
      <description>A comprehensive visual guide to understanding the Docker build process from Dockerfile creation to running containers, with interactive Mermaid diagrams showing each transformation step.</description>
    </item>
    
    <item>
      <title>GitOps Workflow: Git as Single Source of Truth</title>
      <link>https://alamrafiul.com/posts/gitops-workflow/</link>
      <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/gitops-workflow/</guid>
      <description>A comprehensive visual guide to GitOps methodology where Git repositories serve as the single source of truth for declarative infrastructure and application configuration, with automated sync and drift detection.</description>
    </item>
    
    <item>
      <title>HTTP Polling Patterns in Go: From Simple Polling to Server Push</title>
      <link>https://alamrafiul.com/posts/http-polling-patterns/</link>
      <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/http-polling-patterns/</guid>
      <description>Master HTTP-based communication patterns in Go: polling, long polling, HTTP/2 Server Push, and chunked transfer encoding. Build real-time features without WebSockets.</description>
    </item>
    
    <item>
      <title>Kubernetes Pod Lifecycle: Pending → Running → Succeeded</title>
      <link>https://alamrafiul.com/posts/kubernetes-pod-lifecycle/</link>
      <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/kubernetes-pod-lifecycle/</guid>
      <description>A visual guide to understanding Kubernetes Pod lifecycle states from creation to termination, with Mermaid diagrams showing state transitions, init containers, and container restart policies.</description>
    </item>
    
    <item>
      <title>Monitoring &amp; Alerting: Metrics to Action Flow</title>
      <link>https://alamrafiul.com/posts/monitoring-alerting-flow/</link>
      <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/monitoring-alerting-flow/</guid>
      <description>A comprehensive visual guide to monitoring and alerting systems, showing the complete flow from metrics collection to incident response with Prometheus, Grafana, and Alertmanager examples.</description>
    </item>
    
    <item>
      <title>Multi-Environment Pipeline: Dev → Staging → Production</title>
      <link>https://alamrafiul.com/posts/multi-environment-pipeline/</link>
      <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/multi-environment-pipeline/</guid>
      <description>A visual guide to multi-environment deployment pipelines showing progressive promotion from development through staging to production with environment-specific configurations and approval gates.</description>
    </item>
    
    <item>
      <title>Rollback &amp; Recovery: Detection to Previous Version</title>
      <link>https://alamrafiul.com/posts/rollback-recovery-flow/</link>
      <pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/rollback-recovery-flow/</guid>
      <description>A comprehensive visual guide to rollback and recovery strategies in production deployments, from detecting issues to restoring previous versions with minimal downtime and data loss prevention.</description>
    </item>
    
    <item>
      <title>Domain-Driven Design in Go: Building Complex Business Systems</title>
      <link>https://alamrafiul.com/posts/go-domain-driven-design/</link>
      <pubDate>Wed, 22 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-domain-driven-design/</guid>
      <description>Master Domain-Driven Design (DDD) in Go with bounded contexts, aggregates, entities, value objects, and domain events for tackling complex business domains.</description>
    </item>
    
    <item>
      <title>Attention is All You Need: Visualized and Explained</title>
      <link>https://alamrafiul.com/posts/attention-is-all-you-need-visualized/</link>
      <pubDate>Tue, 21 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/attention-is-all-you-need-visualized/</guid>
      <description>A comprehensive visual breakdown of the groundbreaking Transformer paper that revolutionized deep learning: understanding self-attention, multi-head attention, positional encoding, and the complete architecture.</description>
    </item>
    
    <item>
      <title>Go Concurrency Pattern: The Collatz Explorer</title>
      <link>https://alamrafiul.com/posts/go-collatz-explorer/</link>
      <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-collatz-explorer/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-mandelbrot-set/&#34;&gt;← Mandelbrot Set&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-problem-the-simplest-unsolved-math-problem&#34;&gt;The Problem: The Simplest Unsolved Math Problem&lt;/h2&gt;
&lt;p&gt;The Collatz conjecture (3n+1 problem) is deceptively simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start with any positive integer n&lt;/li&gt;
&lt;li&gt;If n is even: divide by 2&lt;/li&gt;
&lt;li&gt;If n is odd: multiply by 3 and add 1&lt;/li&gt;
&lt;li&gt;Repeat until you reach 1&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;The conjecture:&lt;/strong&gt; Every positive integer eventually reaches 1.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example (n=12):&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12 → 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;The mystery:&lt;/strong&gt; This has been verified for numbers up to 2^68, but never proven. It&amp;rsquo;s one of mathematics&amp;rsquo; most famous unsolved problems.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Modular Monolith Architecture in Go: Scaling Without Microservices</title>
      <link>https://alamrafiul.com/posts/go-modular-monolith/</link>
      <pubDate>Sun, 19 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-modular-monolith/</guid>
      <description>Learn how to implement Modular Monolith Architecture in Go to build scalable, maintainable applications with clear module boundaries while avoiding microservices complexity.</description>
    </item>
    
    <item>
      <title>Go Concurrency Pattern: The Bank Account Drama</title>
      <link>https://alamrafiul.com/posts/go-bank-account-drama/</link>
      <pubDate>Sat, 18 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-bank-account-drama/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-login-counter/&#34;&gt;← Login Counter&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-ticket-seller/&#34;&gt;Ticket Seller →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;the-problem-money-vanishing-into-thin-air&#34;&gt;The Problem: Money Vanishing Into Thin Air&lt;/h2&gt;
&lt;p&gt;Two people share a bank account with $100. Both check the balance at the same time, see $100, and both withdraw $100. The bank just lost $100. This isn&amp;rsquo;t a hypothetical-race conditions in financial systems have caused real monetary losses.&lt;/p&gt;
&lt;p&gt;The bank account drama illustrates the fundamental challenge of concurrent programming: &lt;strong&gt;read-modify-write operations are not atomic&lt;/strong&gt;. What seems like a simple operation actually involves multiple steps, and when multiple goroutines execute these steps concurrently, chaos ensues.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Visual Guide to Distributed Systems Patterns</title>
      <link>https://alamrafiul.com/posts/distributed-systems-visual-guide/</link>
      <pubDate>Fri, 17 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/distributed-systems-visual-guide/</guid>
      <description>A comprehensive visual guide to distributed systems patterns including Raft consensus, circuit breakers, load balancing algorithms, and message queue patterns with interactive Mermaid diagrams.</description>
    </item>
    
    <item>
      <title>Event Sourcing in Go: Building Audit-Trail Applications</title>
      <link>https://alamrafiul.com/posts/go-event-sourcing/</link>
      <pubDate>Thu, 16 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-event-sourcing/</guid>
      <description>Learn how to implement Event Sourcing in Go to store state changes as immutable events, enabling complete audit trails, time travel, and event replay capabilities.</description>
    </item>
    
    <item>
      <title>ConnectRPC: Why Smart Teams Are Betting on ConnectRPC Over Standard gRPC</title>
      <link>https://alamrafiul.com/posts/connectrpc-vs-grpc/</link>
      <pubDate>Wed, 15 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/connectrpc-vs-grpc/</guid>
      <description>Discover why ConnectRPC is gaining traction as a modern alternative to gRPC. Learn the key advantages, implementation differences, and see practical Go examples of building efficient APIs with ConnectRPC.</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Chain of Responsibility</title>
      <link>https://alamrafiul.com/posts/go-chain-of-responsibility/</link>
      <pubDate>Wed, 15 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-chain-of-responsibility/</guid>
      <description>&lt;div class=&#34;design-pattern-nav&#34;&gt;
  &lt;div class=&#34;pattern-info&#34;&gt;
    &lt;span class=&#34;pattern-series&#34;&gt;📚 Go Design Patterns&lt;/span&gt;
    &lt;span class=&#34;pattern-type pattern-type-behavioral&#34;&gt;🎯Behavioral Pattern
    &lt;/span&gt;
  &lt;/div&gt;
  
  &lt;div class=&#34;nav-links&#34;&gt;
    &lt;div class=&#34;nav-left&#34;&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-command/&#34; class=&#34;nav-link prev-link&#34;&gt;
          ← Command Pattern
        &lt;/a&gt;&lt;/div&gt;
    
    &lt;div class=&#34;nav-center&#34;&gt;
      &lt;a href=&#34;https://alamrafiul.com/design-patterns/&#34; class=&#34;nav-link overview-link&#34;&gt;
        📋 All Patterns
      &lt;/a&gt;
    &lt;/div&gt;
    
    &lt;div class=&#34;nav-right&#34;&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-observer/&#34; class=&#34;nav-link next-link&#34;&gt;
          Observer Pattern →
        &lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.design-pattern-nav {
  background: var(--theme, #f8f9fa);
  border: 1px solid var(--border, #e9ecef);
  border-radius: 8px;
  padding: 1rem;
  margin: 1.5rem 0;
  font-size: 0.9rem;
}

.pattern-info {
  display: flex;
  gap: 1rem;
  margin-bottom: 1rem;
  flex-wrap: wrap;
}

.pattern-series {
  background: #e3f2fd;
  color: #1565c0;
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-weight: 500;
}

.pattern-type {
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-weight: 500;
}

.pattern-type-structural {
  background: #e8f5e8;
  color: #2e7d32;
}

.pattern-type-behavioral {
  background: #fff3e0;
  color: #f57c00;
}

.pattern-type-creational {
  background: #fce4ec;
  color: #c2185b;
}

.nav-links {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 1rem;
  align-items: center;
}

.nav-left {
  text-align: left;
}

.nav-center {
  text-align: center;
}

.nav-right {
  text-align: right;
}

.nav-link {
  display: inline-block;
  padding: 0.5rem 1rem;
  background: var(--primary, #007bff);
  color: white;
  text-decoration: none;
  border-radius: 4px;
  transition: background-color 0.2s;
  font-size: 0.85rem;
}

.nav-link:hover {
  background: var(--primary-dark, #0056b3);
  color: white;
}

.overview-link {
  background: #6c757d;
}

.overview-link:hover {
  background: #545b62;
}

@media (max-width: 768px) {
  .nav-links {
    grid-template-columns: 1fr;
    gap: 0.5rem;
  }
  
  .nav-left, .nav-center, .nav-right {
    text-align: center;
  }
  
  .pattern-info {
    justify-content: center;
  }
}
&lt;/style&gt;
&lt;h2 id=&#34;what-is-chain-of-responsibility&#34;&gt;What is Chain of Responsibility?&lt;/h2&gt;
&lt;p&gt;The Chain of Responsibility pattern is a behavioral design pattern that allows you to pass requests along a chain of handlers. Each handler decides whether to process the request or pass it to the next handler in the chain. This pattern decouples the sender of a request from its receivers by giving multiple objects a chance to handle the request.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Layered Architecture in Go: Building Maintainable Applications</title>
      <link>https://alamrafiul.com/posts/go-layered-architecture/</link>
      <pubDate>Tue, 14 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-layered-architecture/</guid>
      <description>Learn how to implement Layered Architecture in Go for separation of concerns, maintainable codebases, and clear architectural boundaries in your applications.</description>
    </item>
    
    <item>
      <title>Clean Architecture in Go: Building Independent and Testable Systems</title>
      <link>https://alamrafiul.com/posts/go-clean-architecture/</link>
      <pubDate>Mon, 13 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-clean-architecture/</guid>
      <description>Master Clean Architecture in Go with dependency inversion, use cases, and entity-driven design for building highly testable and maintainable applications.</description>
    </item>
    
    <item>
      <title>The Reliable Data Layer in Go: Mastering Ent &amp; Bun</title>
      <link>https://alamrafiul.com/posts/go-ent-bun-data-layer/</link>
      <pubDate>Sun, 12 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-ent-bun-data-layer/</guid>
      <description>Build robust, type-safe data layers in Go using Ent and Bun. Compare both ORMs, learn when to use each, and see practical examples of schemas, queries, transactions, and migrations.</description>
    </item>
    
    <item>
      <title>Hexagonal Architecture in Go: Ports and Adapters Pattern</title>
      <link>https://alamrafiul.com/posts/go-hexagonal-architecture/</link>
      <pubDate>Sat, 11 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-hexagonal-architecture/</guid>
      <description>Master Hexagonal Architecture (Ports and Adapters) in Go for building adaptable, testable systems with clear boundaries between business logic and external dependencies.</description>
    </item>
    
    <item>
      <title>The Two-Tier API Strategy: Why You Need Both REST and RPC (and How to Manage It)</title>
      <link>https://alamrafiul.com/posts/two-tier-api-strategy/</link>
      <pubDate>Fri, 10 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/two-tier-api-strategy/</guid>
      <description>Learn why modern applications benefit from combining REST and RPC in a two-tier API architecture. Discover practical patterns, implementation strategies, and real Go examples for building flexible, performant APIs.</description>
    </item>
    
    <item>
      <title>Redis Streams in Go: Lightweight Event Streaming</title>
      <link>https://alamrafiul.com/posts/redis-streams/</link>
      <pubDate>Thu, 09 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/redis-streams/</guid>
      <description>Master Redis Streams with Go - consumer groups, pending entry lists, activity feeds, and real-time data pipelines with minimal infrastructure</description>
    </item>
    
    <item>
      <title>Ebiten Game Development: First Steps</title>
      <link>https://alamrafiul.com/posts/ebiten-first-steps/</link>
      <pubDate>Sun, 15 Dec 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/ebiten-first-steps/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Ebiten Game Development Series:&lt;/strong&gt;
Part 1: First Steps | &lt;a href=&#34;https://alamrafiul.com/&#34;&gt;Part 2: Core Concepts →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-ebiten&#34;&gt;What is Ebiten?&lt;/h2&gt;
&lt;p&gt;Ebiten is a dead-simple 2D game engine for Go. Unlike heavyweight engines with complex editors and asset pipelines, Ebiten gives you a minimalist foundation: a game loop, a way to draw pixels, and input handling. Everything else? You build it yourself.&lt;/p&gt;
&lt;p&gt;This simplicity is Ebiten&amp;rsquo;s superpower. You&amp;rsquo;re not fighting an editor or memorizing a sprawling API. You write Go code that runs 60 times per second and draws rectangles. From those humble beginnings, you can build anything from Pong to procedurally generated roguelikes.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mastering Go Concurrency: The Coffee Shop Guide to Goroutines</title>
      <link>https://alamrafiul.com/posts/go-goroutines-coffee-shop/</link>
      <pubDate>Sun, 15 Dec 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-goroutines-coffee-shop/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go Concurrency Patterns Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-goroutine-basics/&#34;&gt;Goroutine Basics&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-channel-fundamentals/&#34;&gt;Channel Fundamentals&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;introduction-welcome-to-go-coffee-shop&#34;&gt;Introduction: Welcome to Go Coffee Shop&lt;/h2&gt;
&lt;p&gt;Imagine running a busy coffee shop. You have customers placing orders, baristas making drinks, shared equipment like espresso machines and milk steamers, and the constant challenge of managing it all efficiently. This is exactly what concurrent programming in Go is like - and goroutines are your baristas!&lt;/p&gt;
&lt;p&gt;In this comprehensive guide, we&amp;rsquo;ll explore Go&amp;rsquo;s concurrency patterns through the lens of running a coffee shop. By the end, you&amp;rsquo;ll understand not just how to write concurrent Go code, but why these patterns work and when to use them.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Iterator</title>
      <link>https://alamrafiul.com/posts/go-iterator/</link>
      <pubDate>Wed, 13 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-iterator/</guid>
      <description>&lt;div class=&#34;design-pattern-nav&#34;&gt;
  &lt;div class=&#34;pattern-info&#34;&gt;
    &lt;span class=&#34;pattern-series&#34;&gt;📚 Go Design Patterns&lt;/span&gt;
    &lt;span class=&#34;pattern-type pattern-type-behavioral&#34;&gt;🎯Behavioral Pattern
    &lt;/span&gt;
  &lt;/div&gt;
  
  &lt;div class=&#34;nav-links&#34;&gt;
    &lt;div class=&#34;nav-left&#34;&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-observer/&#34; class=&#34;nav-link prev-link&#34;&gt;
          ← Observer Pattern
        &lt;/a&gt;&lt;/div&gt;
    
    &lt;div class=&#34;nav-center&#34;&gt;
      &lt;a href=&#34;https://alamrafiul.com/design-patterns/&#34; class=&#34;nav-link overview-link&#34;&gt;
        📋 All Patterns
      &lt;/a&gt;
    &lt;/div&gt;
    
    &lt;div class=&#34;nav-right&#34;&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-state/&#34; class=&#34;nav-link next-link&#34;&gt;
          State Pattern →
        &lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.design-pattern-nav {
  background: var(--theme, #f8f9fa);
  border: 1px solid var(--border, #e9ecef);
  border-radius: 8px;
  padding: 1rem;
  margin: 1.5rem 0;
  font-size: 0.9rem;
}

.pattern-info {
  display: flex;
  gap: 1rem;
  margin-bottom: 1rem;
  flex-wrap: wrap;
}

.pattern-series {
  background: #e3f2fd;
  color: #1565c0;
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-weight: 500;
}

.pattern-type {
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-weight: 500;
}

.pattern-type-structural {
  background: #e8f5e8;
  color: #2e7d32;
}

.pattern-type-behavioral {
  background: #fff3e0;
  color: #f57c00;
}

.pattern-type-creational {
  background: #fce4ec;
  color: #c2185b;
}

.nav-links {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 1rem;
  align-items: center;
}

.nav-left {
  text-align: left;
}

.nav-center {
  text-align: center;
}

.nav-right {
  text-align: right;
}

.nav-link {
  display: inline-block;
  padding: 0.5rem 1rem;
  background: var(--primary, #007bff);
  color: white;
  text-decoration: none;
  border-radius: 4px;
  transition: background-color 0.2s;
  font-size: 0.85rem;
}

.nav-link:hover {
  background: var(--primary-dark, #0056b3);
  color: white;
}

.overview-link {
  background: #6c757d;
}

.overview-link:hover {
  background: #545b62;
}

@media (max-width: 768px) {
  .nav-links {
    grid-template-columns: 1fr;
    gap: 0.5rem;
  }
  
  .nav-left, .nav-center, .nav-right {
    text-align: center;
  }
  
  .pattern-info {
    justify-content: center;
  }
}
&lt;/style&gt;
&lt;h2 id=&#34;what-is-iterator-pattern&#34;&gt;What is Iterator Pattern?&lt;/h2&gt;
&lt;p&gt;The Iterator pattern provides a way to access elements of a collection sequentially without exposing the underlying representation. It&amp;rsquo;s like having a remote control for your TV - you don&amp;rsquo;t need to know how the channels are stored internally, you just press &amp;ldquo;next&amp;rdquo; to move through them.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Managing UI Navigation with Pushdown Automata in Ebitengine</title>
      <link>https://alamrafiul.com/posts/go-pushdown-automata-ui/</link>
      <pubDate>Sun, 03 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-pushdown-automata-ui/</guid>
      <description>&lt;h2 id=&#34;the-ui-navigation-problem&#34;&gt;The UI Navigation Problem&lt;/h2&gt;
&lt;p&gt;Game UI often involves stacked screens: you open a pause menu, then settings, then graphics options, then a confirmation dialog. Each screen needs to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pause the screen beneath it&lt;/li&gt;
&lt;li&gt;Handle input independently&lt;/li&gt;
&lt;li&gt;Resume the previous screen when closed&lt;/li&gt;
&lt;li&gt;Maintain state across transitions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Simple state machines fall short here. You need something that can track a &lt;em&gt;stack&lt;/em&gt; of states. Enter the pushdown automaton.&lt;/p&gt;
&lt;h3 id=&#34;what-is-a-pushdown-automaton&#34;&gt;What is a Pushdown Automaton?&lt;/h3&gt;
&lt;p&gt;A pushdown automaton is a state machine with a stack. Instead of just transitioning between states, you can:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Saving Game State: Implementing the Memento Pattern with encoding/gob</title>
      <link>https://alamrafiul.com/posts/go-memento-pattern/</link>
      <pubDate>Sat, 12 Oct 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-memento-pattern/</guid>
      <description>&lt;h2 id=&#34;the-saveload-problem&#34;&gt;The Save/Load Problem&lt;/h2&gt;
&lt;p&gt;Every game needs to save player progress. But how do you capture the entire game state without exposing internal implementation details? How do you support undo/redo, time travel debugging, or replay systems?&lt;/p&gt;
&lt;p&gt;The Memento pattern solves this by capturing and externalizing an object&amp;rsquo;s internal state without violating encapsulation. Combined with Go&amp;rsquo;s &lt;code&gt;encoding/gob&lt;/code&gt; package, you get powerful, type-safe serialization for game saves, undo systems, and more.&lt;/p&gt;
&lt;h3 id=&#34;the-naive-approach&#34;&gt;The Naive Approach&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s what not to do:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Goal-Oriented Action Planning (GOAP): Writing Smarter NPCs in Go</title>
      <link>https://alamrafiul.com/posts/go-goap-pattern/</link>
      <pubDate>Thu, 19 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-goap-pattern/</guid>
      <description>&lt;h2 id=&#34;beyond-scripted-ai&#34;&gt;Beyond Scripted AI&lt;/h2&gt;
&lt;p&gt;Most game NPCs follow scripted behaviors or state machines: &amp;ldquo;If enemy seen, attack. If health low, flee.&amp;rdquo; While predictable and easy to implement, these approaches lack the intelligence to adapt to changing circumstances. What if your NPC could plan their own actions based on goals?&lt;/p&gt;
&lt;p&gt;Goal-Oriented Action Planning (GOAP) empowers NPCs to dynamically create plans to achieve their goals. Used in games like F.E.A.R. and The Sims, GOAP creates emergent, intelligent behaviors that feel surprisingly alive.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Pipeline Patterns: Streaming Data Processing with Goroutines</title>
      <link>https://alamrafiul.com/posts/go-pipeline-streaming/</link>
      <pubDate>Fri, 30 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-pipeline-streaming/</guid>
      <description>&lt;h2 id=&#34;the-power-of-streaming-pipelines&#34;&gt;The Power of Streaming Pipelines&lt;/h2&gt;
&lt;p&gt;Imagine processing a million log entries. The naive approach loads everything into memory, processes it, then outputs results. But what if you don&amp;rsquo;t have enough RAM? What if you want results streaming in real-time?&lt;/p&gt;
&lt;p&gt;Pipeline patterns break complex processing into stages connected by channels. Data flows through the pipeline, with each stage transforming it concurrently. It&amp;rsquo;s Unix pipes meets goroutines-and it&amp;rsquo;s beautiful.&lt;/p&gt;
&lt;h3 id=&#34;the-sequential-approach&#34;&gt;The Sequential Approach&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s what we&amp;rsquo;re moving away from:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Worker Pool Pattern in Go</title>
      <link>https://alamrafiul.com/posts/go-worker-pool/</link>
      <pubDate>Wed, 21 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-worker-pool/</guid>
      <description>Learn how to implement the Worker Pool pattern in Go for efficient resource management and bounded concurrency with practical examples.</description>
    </item>
    
    <item>
      <title>WaitGroup Pattern in Go</title>
      <link>https://alamrafiul.com/posts/go-waitgroup/</link>
      <pubDate>Wed, 14 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-waitgroup/</guid>
      <description>Master the WaitGroup pattern in Go for coordinating goroutine completion, implementing barriers, and managing parallel task execution.</description>
    </item>
    
    <item>
      <title>Semaphore Pattern in Go</title>
      <link>https://alamrafiul.com/posts/go-semaphore/</link>
      <pubDate>Wed, 07 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-semaphore/</guid>
      <description>Master the Semaphore pattern in Go for resource counting, limiting concurrent access, and implementing weighted semaphores for resource management.</description>
    </item>
    
    <item>
      <title>Go Design Pattern: State</title>
      <link>https://alamrafiul.com/posts/go-state/</link>
      <pubDate>Mon, 05 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-state/</guid>
      <description>&lt;h2 id=&#34;what-is-state-pattern&#34;&gt;What is State Pattern?&lt;/h2&gt;
&lt;p&gt;The State pattern is a behavioral design pattern that allows an object to alter its behavior when its internal state changes. It appears as if the object changed its class. Think of it like a vending machine - it behaves differently when it&amp;rsquo;s waiting for coins, has coins inserted, is dispensing a product, or is out of stock. Each state has its own set of valid operations and transitions.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Request/Response Pattern in Go</title>
      <link>https://alamrafiul.com/posts/go-request-response/</link>
      <pubDate>Wed, 31 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-request-response/</guid>
      <description>Learn how to implement synchronous Request/Response patterns in Go using channels for RPC-style communication and future/promise patterns.</description>
    </item>
    
    <item>
      <title>Rate Limiter Pattern in Go</title>
      <link>https://alamrafiul.com/posts/go-rate-limiter/</link>
      <pubDate>Wed, 24 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-rate-limiter/</guid>
      <description>Implement rate limiting patterns in Go using token bucket, sliding window, and fixed window algorithms for controlling request rates and preventing system overload.</description>
    </item>
    
    <item>
      <title>Pub/Sub Pattern in Go</title>
      <link>https://alamrafiul.com/posts/go-pub-sub/</link>
      <pubDate>Wed, 17 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-pub-sub/</guid>
      <description>Learn how to implement the Publisher/Subscriber pattern in Go for event-driven communication and decoupled messaging systems.</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Template Method</title>
      <link>https://alamrafiul.com/posts/go-template-method/</link>
      <pubDate>Wed, 10 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-template-method/</guid>
      <description>&lt;h2 id=&#34;what-is-template-method-pattern&#34;&gt;What is Template Method Pattern?&lt;/h2&gt;
&lt;p&gt;The Template Method pattern is a behavioral design pattern that defines the skeleton of an algorithm in a base class and lets subclasses override specific steps without changing the algorithm&amp;rsquo;s structure. Think of it like a recipe - the overall cooking process is the same (prepare ingredients, cook, serve), but the specific steps can vary depending on what you&amp;rsquo;re making.&lt;/p&gt;
&lt;p&gt;In Go, since we don&amp;rsquo;t have traditional inheritance, we implement this pattern using composition and interfaces, which actually makes it more flexible and idiomatic.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Once Pattern in Go</title>
      <link>https://alamrafiul.com/posts/go-once-pattern/</link>
      <pubDate>Wed, 10 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-once-pattern/</guid>
      <description>Master the Once pattern in Go using sync.Once for thread-safe initialization, singleton implementation, and ensuring code executes exactly once.</description>
    </item>
    
    <item>
      <title>Data-Oriented Design: Implementing ECS (Entity Component System) with Go Generics</title>
      <link>https://alamrafiul.com/posts/go-ecs-pattern/</link>
      <pubDate>Mon, 08 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-ecs-pattern/</guid>
      <description>&lt;h2 id=&#34;from-object-oriented-to-data-oriented&#34;&gt;From Object-Oriented to Data-Oriented&lt;/h2&gt;
&lt;p&gt;Traditional object-oriented programming (OOP) encourages you to model game entities as objects with inheritance hierarchies. While intuitive, this approach leads to poor cache locality, rigid hierarchies, and performance bottlenecks. Data-oriented design, particularly the Entity Component System (ECS) pattern, flips this on its head.&lt;/p&gt;
&lt;p&gt;With Go 1.18+ generics, we can now build type-safe ECS architectures that deliver both performance and flexibility. Let me show you how.&lt;/p&gt;
&lt;h3 id=&#34;the-oop-problem&#34;&gt;The OOP Problem&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s the typical OOP approach to game entities:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Concurrency Pattern: Pipeline</title>
      <link>https://alamrafiul.com/posts/go-pipeline/</link>
      <pubDate>Wed, 03 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-pipeline/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go Concurrency Patterns Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/go-select-statement/&#34;&gt;← Select Statement&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-fan-out-fan-in/&#34;&gt;Fan-Out/Fan-In →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-the-pipeline-pattern&#34;&gt;What is the Pipeline Pattern?&lt;/h2&gt;
&lt;p&gt;The Pipeline pattern is a powerful way to structure concurrent data processing by breaking work into stages connected by channels. Each stage runs in its own goroutine, receives data from an input channel, processes it, and sends results to an output channel. This creates a chain of processing stages that can run concurrently, dramatically improving throughput.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mutex Patterns in Go</title>
      <link>https://alamrafiul.com/posts/go-mutex-patterns/</link>
      <pubDate>Wed, 03 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-mutex-patterns/</guid>
      <description>Learn essential mutex patterns in Go for protecting shared resources, including RWMutex, lock-free alternatives, and best practices for concurrent programming.</description>
    </item>
    
    <item>
      <title>Distributed Tracing in Go</title>
      <link>https://alamrafiul.com/posts/go-distributed-tracing/</link>
      <pubDate>Sat, 29 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-distributed-tracing/</guid>
      <description>Complete guide to implementing distributed tracing in Go with OpenTelemetry: instrumentation, span management, context propagation, and observability.</description>
    </item>
    
    <item>
      <title>Go Generics Design Patterns</title>
      <link>https://alamrafiul.com/posts/go-generics-patterns/</link>
      <pubDate>Fri, 28 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-generics-patterns/</guid>
      <description>Adapting classic design patterns for Go 1.18&#43; with generics: type-safe implementations of common patterns using type parameters and constraints.</description>
    </item>
    
    <item>
      <title>Graceful Shutdown Patterns in Go</title>
      <link>https://alamrafiul.com/posts/go-graceful-shutdown/</link>
      <pubDate>Thu, 27 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-graceful-shutdown/</guid>
      <description>Master graceful shutdown patterns for production Go services: handle SIGTERM, drain connections, close resources, and ensure zero-downtime deployments.</description>
    </item>
    
    <item>
      <title>Fan-Out/Fan-In Pattern in Go</title>
      <link>https://alamrafiul.com/posts/go-fan-out-fan-in/</link>
      <pubDate>Wed, 26 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-fan-out-fan-in/</guid>
      <description>Learn how to implement the Fan-Out/Fan-In pattern in Go for distributing work across multiple goroutines and collecting results efficiently.</description>
    </item>
    
    <item>
      <title>Go Concurrency Pattern: Select Statement</title>
      <link>https://alamrafiul.com/posts/go-select-statement/</link>
      <pubDate>Wed, 26 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-select-statement/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go Concurrency Patterns Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/go-channel-fundamentals/&#34;&gt;← Channel Fundamentals&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-pipeline/&#34;&gt;Pipeline Pattern →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-the-select-statement&#34;&gt;What is the Select Statement?&lt;/h2&gt;
&lt;p&gt;The select statement is Go&amp;rsquo;s powerful tool for handling multiple channel operations simultaneously. It&amp;rsquo;s like a switch statement, but for channels - it allows a goroutine to wait on multiple communication operations and proceed with whichever one becomes ready first.&lt;/p&gt;
&lt;p&gt;Think of select as a traffic controller at an intersection, managing multiple lanes of traffic (channels) and allowing the first available lane to proceed. This enables non-blocking communication, timeouts, and elegant multiplexing patterns that are essential for robust concurrent programs.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Memory Model Explained</title>
      <link>https://alamrafiul.com/posts/go-memory-model/</link>
      <pubDate>Tue, 25 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-memory-model/</guid>
      <description>Deep dive into Go&amp;#39;s memory model, happens-before relationships, memory visibility guarantees, and what really happens with goroutines and shared memory.</description>
    </item>
    
    <item>
      <title>Context Propagation Patterns in Go</title>
      <link>https://alamrafiul.com/posts/go-context-propagation/</link>
      <pubDate>Mon, 24 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-context-propagation/</guid>
      <description>Master context propagation for tracing, cancellation, and deadlines across service boundaries in distributed Go applications.</description>
    </item>
    
    <item>
      <title>Context Pattern in Go</title>
      <link>https://alamrafiul.com/posts/go-context-pattern/</link>
      <pubDate>Wed, 19 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-context-pattern/</guid>
      <description>Master the Context pattern in Go for cancellation, timeouts, deadlines, and request-scoped values in concurrent applications.</description>
    </item>
    
    <item>
      <title>Go Concurrency Pattern: Channel Fundamentals</title>
      <link>https://alamrafiul.com/posts/go-channel-fundamentals/</link>
      <pubDate>Wed, 19 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-channel-fundamentals/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go Concurrency Patterns Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/posts/go-goroutine-basics/&#34;&gt;← Goroutine Basics&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-select-statement/&#34;&gt;Select Statement →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-are-channels&#34;&gt;What are Channels?&lt;/h2&gt;
&lt;p&gt;Channels are Go&amp;rsquo;s primary mechanism for communication between goroutines. They embody Go&amp;rsquo;s concurrency philosophy: &amp;ldquo;Don&amp;rsquo;t communicate by sharing memory; share memory by communicating.&amp;rdquo; Think of channels as typed pipes that allow goroutines to safely pass data back and forth.&lt;/p&gt;
&lt;p&gt;Channels provide both communication and synchronization, making them incredibly powerful for building concurrent applications. They&amp;rsquo;re type-safe, can be buffered or unbuffered, and support directional constraints for better API design.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Swapping Logic at Runtime: The Strategy Pattern using First-Class Functions</title>
      <link>https://alamrafiul.com/posts/go-strategy-first-class-functions/</link>
      <pubDate>Mon, 17 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-strategy-first-class-functions/</guid>
      <description>&lt;h2 id=&#34;beyond-rigid-if-else-logic&#34;&gt;Beyond Rigid If-Else Logic&lt;/h2&gt;
&lt;p&gt;Traditional approaches to varying behavior use conditional statements scattered throughout code. Need different sorting algorithms? Different pricing strategies? Different attack behaviors in a game? You end up with messy switch statements and tightly coupled code.&lt;/p&gt;
&lt;p&gt;The Strategy pattern lets you encapsulate algorithms and swap them at runtime. In Go, first-class functions make this pattern beautifully simple-no heavyweight class hierarchies required.&lt;/p&gt;
&lt;h3 id=&#34;the-traditional-approach-conditionals-everywhere&#34;&gt;The Traditional Approach: Conditionals Everywhere&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s what happens without the Strategy pattern:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Command</title>
      <link>https://alamrafiul.com/posts/go-command/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-command/</guid>
      <description>&lt;h2 id=&#34;what-is-command-pattern&#34;&gt;What is Command Pattern?&lt;/h2&gt;
&lt;p&gt;The Command pattern is a behavioral design pattern that turns a request into a stand-alone object containing all information about the request. This transformation allows you to parameterize methods with different requests, delay or queue a request&amp;rsquo;s execution, and support undoable operations. Think of it like a remote control - each button is a command that encapsulates the action to be performed on a device.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll demonstrate how this pattern can help you build flexible, undoable, and queueable operations in Go applications.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Circuit Breaker Pattern in Go</title>
      <link>https://alamrafiul.com/posts/go-circuit-breaker/</link>
      <pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-circuit-breaker/</guid>
      <description>Implement the Circuit Breaker pattern in Go for fault tolerance, preventing cascading failures, and building resilient distributed systems.</description>
    </item>
    
    <item>
      <title>Go Concurrency Pattern: Goroutine Basics</title>
      <link>https://alamrafiul.com/posts/go-goroutine-basics/</link>
      <pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-goroutine-basics/</guid>
      <description>&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Go Concurrency Patterns Series:&lt;/strong&gt;
&lt;a href=&#34;https://alamrafiul.com/concurrency-patterns/&#34;&gt;Series Overview&lt;/a&gt; | &lt;a href=&#34;https://alamrafiul.com/posts/go-channel-fundamentals/&#34;&gt;Channel Fundamentals →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-are-goroutines&#34;&gt;What are Goroutines?&lt;/h2&gt;
&lt;p&gt;Goroutines are lightweight threads managed by the Go runtime. They&amp;rsquo;re one of Go&amp;rsquo;s most powerful features, allowing you to write concurrent programs that can handle thousands of simultaneous operations with minimal overhead. Think of goroutines as extremely efficient workers that can run independently while sharing the same memory space.&lt;/p&gt;
&lt;p&gt;Unlike traditional threads that typically consume 1-2MB of memory each, goroutines start with just 2KB of stack space and grow as needed. This efficiency allows Go programs to spawn millions of goroutines without overwhelming system resources.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Actor Model Pattern in Go</title>
      <link>https://alamrafiul.com/posts/go-actor-model/</link>
      <pubDate>Wed, 05 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-actor-model/</guid>
      <description>Implement the Actor Model pattern in Go for message-passing concurrency, isolated state management, and building fault-tolerant distributed systems.</description>
    </item>
    
    <item>
      <title>Building Modular Game AI: Implementing Behavior Trees with Go Interfaces</title>
      <link>https://alamrafiul.com/posts/go-behavior-trees/</link>
      <pubDate>Wed, 22 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-behavior-trees/</guid>
      <description>&lt;h2 id=&#34;why-behavior-trees-for-game-ai&#34;&gt;Why Behavior Trees for Game AI?&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;ve ever built game AI using finite state machines, you&amp;rsquo;ve likely hit their limitations: rigid transitions, difficulty composing behaviors, and maintenance nightmares. Behavior trees offer a more flexible, modular approach that&amp;rsquo;s become the industry standard for game AI.&lt;/p&gt;
&lt;p&gt;In this post, I&amp;rsquo;ll show you how to implement behavior trees in Go using interfaces, creating reusable AI components that can power everything from enemy NPCs to complex AI companions.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Proxy</title>
      <link>https://alamrafiul.com/posts/go-proxy/</link>
      <pubDate>Mon, 20 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-proxy/</guid>
      <description>&lt;h2 id=&#34;what-is-proxy-pattern&#34;&gt;What is Proxy Pattern?&lt;/h2&gt;
&lt;p&gt;The Proxy pattern is a structural design pattern that provides a placeholder or surrogate for another object to control access to it. Think of it like a security guard at a building entrance - they control who can enter, when they can enter, and might even log who visited. The proxy acts as an intermediary that can add functionality like caching, logging, access control, or lazy loading without changing the original object.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Facade</title>
      <link>https://alamrafiul.com/posts/go-facade/</link>
      <pubDate>Sun, 05 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-facade/</guid>
      <description>&lt;h2 id=&#34;what-is-facade-pattern&#34;&gt;What is Facade Pattern?&lt;/h2&gt;
&lt;p&gt;The Facade pattern is a structural design pattern that provides a simplified interface to a complex subsystem. It acts like a friendly receptionist at a large corporation - instead of navigating through multiple departments and complex procedures, you just tell the receptionist what you need, and they handle all the complexity behind the scenes.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll demonstrate how this pattern can dramatically simplify client code and hide the complexity of intricate systems in Go applications.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Decoupling Logic: The Observer Pattern and Event Buses in Go</title>
      <link>https://alamrafiul.com/posts/go-event-bus-pattern/</link>
      <pubDate>Thu, 25 Apr 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-event-bus-pattern/</guid>
      <description>&lt;h2 id=&#34;the-tight-coupling-problem&#34;&gt;The Tight Coupling Problem&lt;/h2&gt;
&lt;p&gt;Imagine your game needs to handle player damage. The naive approach couples everything together:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TakeDamage&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;player&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Player&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;damage&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;player&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Health&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;damage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Tightly coupled to UI
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ui&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;UpdateHealthBar&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;player&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Health&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Tightly coupled to audio
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;audio&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PlaySound&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hurt.wav&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Tightly coupled to achievements
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;player&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Health&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;achievements&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Unlock&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NEAR_DEATH&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Tightly coupled to analytics
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;analytics&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;TrackEvent&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;player_damaged&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;damage&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Problem: Adding any system requires modifying this function
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Problem: Testing becomes nightmare
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Problem: Can&amp;#39;t disable/enable systems easily
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The Observer pattern and Event Buses solve this by decoupling event producers from consumers.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Decorator</title>
      <link>https://alamrafiul.com/posts/go-decorator/</link>
      <pubDate>Wed, 10 Apr 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-decorator/</guid>
      <description>&lt;h2 id=&#34;what-is-decorator-pattern&#34;&gt;What is Decorator Pattern?&lt;/h2&gt;
&lt;p&gt;The Decorator pattern is a structural design pattern that allows you to add new functionality to objects dynamically without altering their structure. It provides a flexible alternative to subclassing for extending functionality. Think of it like adding layers of clothing - each layer adds functionality (warmth, style, protection) while keeping the core person unchanged.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll show you how this pattern can help you build flexible, composable systems in Go that follow the open/closed principle.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Introducing Scribe Menu</title>
      <link>https://alamrafiul.com/posts/introducing-scribe-menu/</link>
      <pubDate>Sat, 16 Mar 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/introducing-scribe-menu/</guid>
      <description>&lt;h2 id=&#34;why-and-how-the-idea-of-scribe-menu-came-to-my-mind&#34;&gt;Why and how the idea of Scribe Menu came to my mind?&lt;/h2&gt;
&lt;p&gt;One of my new year resolutions was to write a blog post every month
on coding and productivity tips.
Each blog post should be
short enough for learners to go through all the topics quickly but also long enough to
contain essential information.&lt;/p&gt;
&lt;p&gt;English not being my native language, I needed a tool to proofread my works.
I used ChatGPT for the purpose.
But switching between ChatGPT and my blog required context switching.
Then the idea of a context-menu-based AI tool came to mind that would help me
access AI proofreading tools in one click.
So, I created an extension called &amp;ldquo;Scribe Menu.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Function-State Machines: A Cleaner Alternative to Switch Statements in Go</title>
      <link>https://alamrafiul.com/posts/go-function-state-machines/</link>
      <pubDate>Fri, 15 Mar 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-function-state-machines/</guid>
      <description>&lt;h2 id=&#34;the-problem-with-switch-based-state-machines&#34;&gt;The Problem with Switch-Based State Machines&lt;/h2&gt;
&lt;p&gt;When building state machines in Go, many developers reach for switch statements. While this works for simple cases, it quickly becomes unwieldy as your state machine grows. Each state transition requires scanning through multiple case blocks, and adding new states means touching existing code in multiple places.&lt;/p&gt;
&lt;p&gt;Let me show you a cleaner approach: using functions as first-class values to represent states. This pattern leverages Go&amp;rsquo;s ability to treat functions as data, creating elegant, extensible state machines.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Prototype</title>
      <link>https://alamrafiul.com/posts/go-prototype/</link>
      <pubDate>Fri, 15 Mar 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-prototype/</guid>
      <description>&lt;h2 id=&#34;what-is-prototype-pattern&#34;&gt;What is Prototype Pattern?&lt;/h2&gt;
&lt;p&gt;The Prototype pattern is a creational design pattern that allows you to create new objects by cloning existing instances rather than creating them from scratch. It&amp;rsquo;s particularly useful when object creation is expensive or complex, and you want to avoid the overhead of initializing objects repeatedly. Think of it like having a template or blueprint that you can copy and modify as needed.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll demonstrate how this pattern can significantly improve performance and simplify object creation in Go applications.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Builder</title>
      <link>https://alamrafiul.com/posts/go-builder/</link>
      <pubDate>Tue, 27 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-builder/</guid>
      <description>&lt;div class=&#34;design-pattern-nav&#34;&gt;
  &lt;div class=&#34;pattern-info&#34;&gt;
    &lt;span class=&#34;pattern-series&#34;&gt;📚 Go Design Patterns&lt;/span&gt;
    &lt;span class=&#34;pattern-type pattern-type-creational&#34;&gt;🔨Creational Pattern
    &lt;/span&gt;
  &lt;/div&gt;
  
  &lt;div class=&#34;nav-links&#34;&gt;
    &lt;div class=&#34;nav-left&#34;&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-adapter/&#34; class=&#34;nav-link prev-link&#34;&gt;
          ← Adapter Pattern
        &lt;/a&gt;&lt;/div&gt;
    
    &lt;div class=&#34;nav-center&#34;&gt;
      &lt;a href=&#34;https://alamrafiul.com/design-patterns/&#34; class=&#34;nav-link overview-link&#34;&gt;
        📋 All Patterns
      &lt;/a&gt;
    &lt;/div&gt;
    
    &lt;div class=&#34;nav-right&#34;&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-strategy/&#34; class=&#34;nav-link next-link&#34;&gt;
          Strategy Pattern →
        &lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.design-pattern-nav {
  background: var(--theme, #f8f9fa);
  border: 1px solid var(--border, #e9ecef);
  border-radius: 8px;
  padding: 1rem;
  margin: 1.5rem 0;
  font-size: 0.9rem;
}

.pattern-info {
  display: flex;
  gap: 1rem;
  margin-bottom: 1rem;
  flex-wrap: wrap;
}

.pattern-series {
  background: #e3f2fd;
  color: #1565c0;
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-weight: 500;
}

.pattern-type {
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-weight: 500;
}

.pattern-type-structural {
  background: #e8f5e8;
  color: #2e7d32;
}

.pattern-type-behavioral {
  background: #fff3e0;
  color: #f57c00;
}

.pattern-type-creational {
  background: #fce4ec;
  color: #c2185b;
}

.nav-links {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 1rem;
  align-items: center;
}

.nav-left {
  text-align: left;
}

.nav-center {
  text-align: center;
}

.nav-right {
  text-align: right;
}

.nav-link {
  display: inline-block;
  padding: 0.5rem 1rem;
  background: var(--primary, #007bff);
  color: white;
  text-decoration: none;
  border-radius: 4px;
  transition: background-color 0.2s;
  font-size: 0.85rem;
}

.nav-link:hover {
  background: var(--primary-dark, #0056b3);
  color: white;
}

.overview-link {
  background: #6c757d;
}

.overview-link:hover {
  background: #545b62;
}

@media (max-width: 768px) {
  .nav-links {
    grid-template-columns: 1fr;
    gap: 0.5rem;
  }
  
  .nav-left, .nav-center, .nav-right {
    text-align: center;
  }
  
  .pattern-info {
    justify-content: center;
  }
}
&lt;/style&gt;
&lt;h2 id=&#34;what-is-builder-pattern&#34;&gt;What is Builder Pattern?&lt;/h2&gt;
&lt;p&gt;The Builder pattern is a creational design pattern that constructs complex objects step by step. It allows you to produce different types and representations of an object using the same construction code. Think of it like assembling a custom computer - you choose the CPU, RAM, storage, and graphics card piece by piece to build exactly what you need.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>The Select Loop: Creating Event-Driven State Machines with Go Channels</title>
      <link>https://alamrafiul.com/posts/go-select-state-machines/</link>
      <pubDate>Wed, 14 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-select-state-machines/</guid>
      <description>&lt;h2 id=&#34;beyond-traditional-state-machines&#34;&gt;Beyond Traditional State Machines&lt;/h2&gt;
&lt;p&gt;Most state machines are synchronous: you call a method, the state transitions, and you get a result. But what if your state machine needs to react to multiple concurrent events? What if state transitions should happen asynchronously based on timeouts, external signals, or user input?&lt;/p&gt;
&lt;p&gt;Enter the select-based state machine: a pattern that combines Go&amp;rsquo;s channels and select statements to create responsive, event-driven state machines that can handle multiple inputs simultaneously.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Strategy</title>
      <link>https://alamrafiul.com/posts/go-strategy/</link>
      <pubDate>Tue, 13 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-strategy/</guid>
      <description>&lt;div class=&#34;design-pattern-nav&#34;&gt;
  &lt;div class=&#34;pattern-info&#34;&gt;
    &lt;span class=&#34;pattern-series&#34;&gt;📚 Go Design Patterns&lt;/span&gt;
    &lt;span class=&#34;pattern-type pattern-type-behavioral&#34;&gt;🎯Behavioral Pattern
    &lt;/span&gt;
  &lt;/div&gt;
  
  &lt;div class=&#34;nav-links&#34;&gt;
    &lt;div class=&#34;nav-left&#34;&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-builder/&#34; class=&#34;nav-link prev-link&#34;&gt;
          ← Builder Pattern
        &lt;/a&gt;&lt;/div&gt;
    
    &lt;div class=&#34;nav-center&#34;&gt;
      &lt;a href=&#34;https://alamrafiul.com/design-patterns/&#34; class=&#34;nav-link overview-link&#34;&gt;
        📋 All Patterns
      &lt;/a&gt;
    &lt;/div&gt;
    
    &lt;div class=&#34;nav-right&#34;&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-decorator/&#34; class=&#34;nav-link next-link&#34;&gt;
          Decorator Pattern →
        &lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.design-pattern-nav {
  background: var(--theme, #f8f9fa);
  border: 1px solid var(--border, #e9ecef);
  border-radius: 8px;
  padding: 1rem;
  margin: 1.5rem 0;
  font-size: 0.9rem;
}

.pattern-info {
  display: flex;
  gap: 1rem;
  margin-bottom: 1rem;
  flex-wrap: wrap;
}

.pattern-series {
  background: #e3f2fd;
  color: #1565c0;
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-weight: 500;
}

.pattern-type {
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-weight: 500;
}

.pattern-type-structural {
  background: #e8f5e8;
  color: #2e7d32;
}

.pattern-type-behavioral {
  background: #fff3e0;
  color: #f57c00;
}

.pattern-type-creational {
  background: #fce4ec;
  color: #c2185b;
}

.nav-links {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 1rem;
  align-items: center;
}

.nav-left {
  text-align: left;
}

.nav-center {
  text-align: center;
}

.nav-right {
  text-align: right;
}

.nav-link {
  display: inline-block;
  padding: 0.5rem 1rem;
  background: var(--primary, #007bff);
  color: white;
  text-decoration: none;
  border-radius: 4px;
  transition: background-color 0.2s;
  font-size: 0.85rem;
}

.nav-link:hover {
  background: var(--primary-dark, #0056b3);
  color: white;
}

.overview-link {
  background: #6c757d;
}

.overview-link:hover {
  background: #545b62;
}

@media (max-width: 768px) {
  .nav-links {
    grid-template-columns: 1fr;
    gap: 0.5rem;
  }
  
  .nav-left, .nav-center, .nav-right {
    text-align: center;
  }
  
  .pattern-info {
    justify-content: center;
  }
}
&lt;/style&gt;
&lt;h2 id=&#34;what-is-strategy-pattern&#34;&gt;What is Strategy Pattern?&lt;/h2&gt;
&lt;p&gt;The Strategy pattern is a behavioral design pattern that defines a family of algorithms, encapsulates each one, and makes them interchangeable. It lets you select algorithms at runtime without altering the code that uses them. Think of it like choosing different routes to reach the same destination - each route (strategy) gets you there, but some might be faster, cheaper, or more scenic.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Observer</title>
      <link>https://alamrafiul.com/posts/go-observer/</link>
      <pubDate>Tue, 30 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-observer/</guid>
      <description>&lt;h2 id=&#34;what-is-observer-pattern&#34;&gt;What is Observer Pattern?&lt;/h2&gt;
&lt;p&gt;The Observer pattern is a behavioral design pattern that defines a one-to-many dependency between objects. When one object (the subject) changes state, all its dependents (observers) are notified and updated automatically. Think of it like a newsletter subscription - when new content is published, all subscribers get notified.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll demonstrate this pattern with a practical scenario that shows how powerful it can be in Go applications.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Factory</title>
      <link>https://alamrafiul.com/posts/go-factory/</link>
      <pubDate>Tue, 16 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-factory/</guid>
      <description>&lt;h2 id=&#34;what-is-factory-pattern&#34;&gt;What is Factory Pattern?&lt;/h2&gt;
&lt;p&gt;The Factory pattern is a creational design pattern that provides an interface for creating objects without specifying their exact classes. It&amp;rsquo;s like having a factory that produces different types of products based on what you request, but you don&amp;rsquo;t need to know the intricate details of how each product is made.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll walk you through a practical scenario that demonstrates the power of the Factory pattern in Go.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Adapter</title>
      <link>https://alamrafiul.com/posts/go-adapter/</link>
      <pubDate>Tue, 02 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-adapter/</guid>
      <description>&lt;div class=&#34;design-pattern-nav&#34;&gt;
  &lt;div class=&#34;pattern-info&#34;&gt;
    &lt;span class=&#34;pattern-series&#34;&gt;📚 Go Design Patterns&lt;/span&gt;
    &lt;span class=&#34;pattern-type pattern-type-structural&#34;&gt;🏗️Structural Pattern
    &lt;/span&gt;
  &lt;/div&gt;
  
  &lt;div class=&#34;nav-links&#34;&gt;
    &lt;div class=&#34;nav-left&#34;&gt;&lt;/div&gt;
    
    &lt;div class=&#34;nav-center&#34;&gt;
      &lt;a href=&#34;https://alamrafiul.com/design-patterns/&#34; class=&#34;nav-link overview-link&#34;&gt;
        📋 All Patterns
      &lt;/a&gt;
    &lt;/div&gt;
    
    &lt;div class=&#34;nav-right&#34;&gt;&lt;a href=&#34;https://alamrafiul.com/posts/go-decorator/&#34; class=&#34;nav-link next-link&#34;&gt;
          Decorator Pattern →
        &lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
.design-pattern-nav {
  background: var(--theme, #f8f9fa);
  border: 1px solid var(--border, #e9ecef);
  border-radius: 8px;
  padding: 1rem;
  margin: 1.5rem 0;
  font-size: 0.9rem;
}

.pattern-info {
  display: flex;
  gap: 1rem;
  margin-bottom: 1rem;
  flex-wrap: wrap;
}

.pattern-series {
  background: #e3f2fd;
  color: #1565c0;
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-weight: 500;
}

.pattern-type {
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  font-weight: 500;
}

.pattern-type-structural {
  background: #e8f5e8;
  color: #2e7d32;
}

.pattern-type-behavioral {
  background: #fff3e0;
  color: #f57c00;
}

.pattern-type-creational {
  background: #fce4ec;
  color: #c2185b;
}

.nav-links {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 1rem;
  align-items: center;
}

.nav-left {
  text-align: left;
}

.nav-center {
  text-align: center;
}

.nav-right {
  text-align: right;
}

.nav-link {
  display: inline-block;
  padding: 0.5rem 1rem;
  background: var(--primary, #007bff);
  color: white;
  text-decoration: none;
  border-radius: 4px;
  transition: background-color 0.2s;
  font-size: 0.85rem;
}

.nav-link:hover {
  background: var(--primary-dark, #0056b3);
  color: white;
}

.overview-link {
  background: #6c757d;
}

.overview-link:hover {
  background: #545b62;
}

@media (max-width: 768px) {
  .nav-links {
    grid-template-columns: 1fr;
    gap: 0.5rem;
  }
  
  .nav-left, .nav-center, .nav-right {
    text-align: center;
  }
  
  .pattern-info {
    justify-content: center;
  }
}
&lt;/style&gt;
&lt;h2 id=&#34;what-is-adapter&#34;&gt;What is Adapter?&lt;/h2&gt;
&lt;p&gt;The Adapter pattern is probably the most used design pattern in software engineering.
It allows objects/classes of different abstracts/signatures/blueprints to collaborate. &lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go Design Pattern: Singleton</title>
      <link>https://alamrafiul.com/posts/go-singleton/</link>
      <pubDate>Fri, 29 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/go-singleton/</guid>
      <description>&lt;h2 id=&#34;what-is-singleton&#34;&gt;What is Singleton?&lt;/h2&gt;
&lt;p&gt;The Singleton pattern is a design pattern
that ensures a class has only one instance and provides a global access point to that instance. &lt;/p&gt;
I will keep the post as simple as possible as our brain can process a little at a time (don&amp;rsquo;t know about yours, mine can&amp;rsquo;t).&lt;/p&gt;
&lt;h3 id=&#34;lets-start-with-a-scenario-database-connection&#34;&gt;Let&amp;rsquo;s start with a scenario: Database connection&lt;/h3&gt;
&lt;p&gt;You want to connect to the database of a service to fetch some information. You have to do the following:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Tech Trends in 2024</title>
      <link>https://alamrafiul.com/posts/tech-trends-2024/</link>
      <pubDate>Wed, 27 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://alamrafiul.com/posts/tech-trends-2024/</guid>
      <description>&lt;p&gt;Congratulations! You&amp;rsquo;ve made it to 2024. If you&amp;rsquo;ve navigated it successfully, take a bow. If not, it&amp;rsquo;s time to prepare yourself for the challenges of 2024. Here are some of my personal suggestions on which technologies you should take note of this year.&lt;/p&gt;
&lt;h3 id=&#34;generative-ai&#34;&gt;Generative AI&lt;/h3&gt;
&lt;p&gt;The dominant tech trend will be using Generative Artificial Intelligence (AI) in 2024. A study by PwC estimates AI could add up to $15.7 trillion to the global economy by 2030. A big part of this spend will come from generative technologies.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
