<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Lorbic</title><link>http://localhost:1313/posts/</link><description>Recent content in Posts on Lorbic</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 13 Aug 2026 18:00:00 +0530</lastBuildDate><atom:link href="http://localhost:1313/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>How Go Channels Actually Work</title><link>http://localhost:1313/go-channels-deep-dive/</link><pubDate>Thu, 13 Aug 2026 18:00:00 +0530</pubDate><guid>http://localhost:1313/go-channels-deep-dive/</guid><description>&lt;p>A single unbuffered channel send without an active receiver is enough to silently lock up a production worker pool, leaking memory until your service gets killed by the OS kernel.&lt;/p>
&lt;p>On the surface, Go channels look simple: they synchronize concurrent execution without manual mutex management. But under heavy load, a minor oversight in channel sizing or worker coordination blocks the scheduler, leaks memory, or crashes processes with runtime panics.&lt;/p>
&lt;p>&lt;picture class="optimized-image-container">&lt;source srcset="http://localhost:1313/go-channels-deep-dive/go-scheduler-meme_hu_524f15f4ab89fd6f.webp 480w, http://localhost:1313/go-channels-deep-dive/go-scheduler-meme_hu_50f95d885458376d.webp 646w" sizes="(max-width: 800px) 100vw, 800px" type="image/webp">&lt;img src="http://localhost:1313/go-channels-deep-dive/go-scheduler-meme_hu_50f95d885458376d.webp" width="646" height="797" alt="The Go scheduler coordinating 10,000 goroutines on a single-core CPU" loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />
 &lt;/picture>&lt;/p></description></item><item><title>Part 6: Simulating a Living Facility: Room Derivation, Sunlight Spillover, and Positional SFX</title><link>http://localhost:1313/modular-missions-floodfill-audio-raylib/</link><pubDate>Mon, 10 Aug 2026 10:00:00 +0530</pubDate><guid>http://localhost:1313/modular-missions-floodfill-audio-raylib/</guid><description>&lt;p>Generating a raw matrix of integer tiles gives you a map layout, but it doesn&amp;rsquo;t give you a living environment. When I loaded my first level into &lt;em>Derelict Facility&lt;/em>, the engine had no concept of what a &amp;ldquo;Laboratory&amp;rdquo; or a &amp;ldquo;Reactor Room&amp;rdquo; was. It just saw a flat array of walls and floors.&lt;/p>
&lt;p>If a player flipped a power terminal inside a room, I had no clean way to know which room lights or doors to toggle without scanning the whole map grid on every frame. If an alarm fired down the hall, it played at full volume regardless of where the player was standing.&lt;/p></description></item><item><title>Designing a Distributed Job Scheduler in Go: Partitioning, Locking, and Backpressure</title><link>http://localhost:1313/designing-a-distributed-job-scheduler/</link><pubDate>Sun, 09 Aug 2026 14:00:00 +0530</pubDate><guid>http://localhost:1313/designing-a-distributed-job-scheduler/</guid><description>&lt;p>Linux &lt;code>crontab&lt;/code> is one of the most elegant pieces of software ever written for single-host automation. It is simple, clear, and has kept Unix systems running reliably since 1975.&lt;/p>
&lt;p>The problem starts when we take a single-host tool and deploy it across a multi-node cloud setup.&lt;/p>
&lt;p>In &lt;a href="http://localhost:1313/how-multi-tenant-saas-works/">Relay&lt;/a>, a multi-tenant AI API gateway system design, background jobs power core operations: every top of the hour, a job rolls up raw API usage tokens into tenant billing metrics; every 15 minutes, another job scans for expired API keys and purges them from cache; every 30 seconds, a health checker pings upstream LLM provider endpoints.&lt;/p></description></item><item><title>Part 5: From Terminal Cells to Sprite Maps: Font Fallbacks and Auto-Tiling</title><link>http://localhost:1313/autotiling-sprites-font-fallbacks-raylib/</link><pubDate>Sun, 09 Aug 2026 10:00:00 +0530</pubDate><guid>http://localhost:1313/autotiling-sprites-font-fallbacks-raylib/</guid><description>&lt;p>Building a terminal-based engine in pure ASCII looks cool for about five minutes. Then you try rendering a complex facility map with corners, T-junctions, and status icons, and raw character cells start feeling incredibly limiting.&lt;/p>
&lt;p>Two specific problems hit me immediately when I tried switching to Raylib for graphics. First, drawing wall tiles manually by hand in level files meant placing 16 different corner variations by hand. Second, when I tried rendering a 🚨 warning emoji alongside FiraCode monospace text, Raylib just rendered a missing glyph box (&lt;code>?&lt;/code> or &lt;code>□&lt;/code>).&lt;/p></description></item><item><title>Part 4: Refactoring to SoA ECS: Bitmasks and Flat Component Arrays</title><link>http://localhost:1313/structure-of-arrays-ecs-bitmasks-golang/</link><pubDate>Sat, 08 Aug 2026 10:00:00 +0530</pubDate><guid>http://localhost:1313/structure-of-arrays-ecs-bitmasks-golang/</guid><description>&lt;p>When I started building &lt;em>Derelict Facility&lt;/em>, my initial instinct for game actors was standard Object-Oriented design: create an &lt;code>Entity&lt;/code> struct, add pointers for position, sprite, and stats, and store them in a slice (&lt;code>[]*Entity&lt;/code>).&lt;/p>
&lt;p>It worked fine for five entities. But as soon as I added automated doors, save terminals, and active power grids across a 1000-tile map, keeping track of separate heap pointers became a headache. My Go profiler showed GC pauses spiking while the CPU spent more time chasing heap pointers across non-contiguous memory than actually updating game state.&lt;/p></description></item><item><title>Designing a Usage-Based Billing Pipeline for SaaS</title><link>http://localhost:1313/designing-a-usage-based-billing-pipeline-for-saas/</link><pubDate>Sat, 01 Aug 2026 17:26:52 +0530</pubDate><guid>http://localhost:1313/designing-a-usage-based-billing-pipeline-for-saas/</guid><description>&lt;p>In &lt;a href="http://localhost:1313/posts/2026-07-01-how-multi-tenant-saas-works/" data-preview-title="How Multi-Tenant SaaS Actually Works" data-preview-desc="A complete system design of Relay, a multi-tenant AI API gateway. Covers multi-tenant database architecture (silo vs pool vs bridge), API key authentication, provider routing with failover, dual-layer rate limiting, token-based billing, response caching, row-level security, tenant provisioning, and observability. Full Postgres schemas, mermaid diagrams, and Go snippets included." data-preview-time="37 min read">How Multi-Tenant SaaS Actually Works&lt;/a>, I left one major promise unfulfilled at the end: &lt;em>&amp;ldquo;Billing is an entire system design on its own. The billing pipeline gets its own post.&amp;rdquo;&lt;/em>&lt;/p></description></item><item><title>Couchbase Index Best Practices and Query Performance Tuning</title><link>http://localhost:1313/couchbase-index-best-practices-performance-tuning/</link><pubDate>Fri, 31 Jul 2026 23:00:00 +0530</pubDate><guid>http://localhost:1313/couchbase-index-best-practices-performance-tuning/</guid><description>&lt;p>Most Couchbase performance tickets I have seen end the same way: someone adds more nodes, the dashboard looks a little better for a week, and the same query shows up in the slow log a month later. The node count was never the problem. The index was.&lt;/p>
&lt;p>This is a working reference, not an essay. I already wrote &lt;a href="http://localhost:1313/what-couchbase-taught-me-about-system-thinking/">the reflective version&lt;/a> of what indexing in Couchbase teaches you about systems in general. This post skips the reflection and gets straight to the decisions: which index type to reach for, how to order composite keys, how to tell if a query is actually using what you built, and which four or five mistakes account for most of the slow queries you will ever debug. Couchbase&amp;rsquo;s own documentation is the primary source for the recommendations below. Every example runs against &lt;code>travel-sample&lt;/code>, the sample bucket Couchbase ships with every install, so you can paste these into your own cluster and see the plan yourself.&lt;/p></description></item><item><title>API Design for Backend Systems</title><link>http://localhost:1313/api-design-for-backend-systems/</link><pubDate>Sun, 26 Jul 2026 19:00:00 +0530</pubDate><guid>http://localhost:1313/api-design-for-backend-systems/</guid><description>&lt;p>A few weeks ago I designed &lt;a href="http://localhost:1313/how-multi-tenant-saas-works/">Relay&lt;/a>, a multi-tenant AI API gateway, as a system design exercise. That post covered the database, the auth, the billing. It did not cover the thing every one of those systems is sitting behind: the API itself.&lt;/p>
&lt;p>Here is the question that post left open. When someone builds &lt;code>GET /v1/requests&lt;/code> to list a tenant&amp;rsquo;s API call history, what should that endpoint actually look like? Offset or cursor pagination? What does the response envelope contain? What happens when Relay needs to add a filter that does not fit in a query string? What does a webhook payload look like when Relay tells a tenant &amp;ldquo;your batch job finished&amp;rdquo;? None of that is specific to AI gateways. It is the same decisions every backend API makes, made badly often enough that &amp;ldquo;REST API&amp;rdquo; has become a phrase that means &amp;ldquo;JSON over HTTP, structure unspecified.&amp;rdquo;&lt;/p></description></item><item><title>Cache-Driven Development: Saving Your Database From Itself</title><link>http://localhost:1313/cache-driven-development/</link><pubDate>Wed, 22 Jul 2026 12:00:00 +0530</pubDate><guid>http://localhost:1313/cache-driven-development/</guid><description>&lt;p>There is a moment in every backend engineer&amp;rsquo;s life when their database starts refusing connections.&lt;/p>
&lt;p>Picture 2 a.m. on a Tuesday. The app is operating under normal traffic, nothing unusual. But the database connection pool is saturated. Queries are timing out. The monitoring dashboard shows 50,000 database operations per second, far beyond what the system should be handling.&lt;/p>
&lt;p>When someone pulls the slow-query logs, the pattern is immediately clear. The same query appears thousands of times:&lt;/p></description></item><item><title>Designing a Distributed Rate Limiter with Redis</title><link>http://localhost:1313/designing-a-rate-limiter/</link><pubDate>Tue, 07 Jul 2026 17:00:00 +0530</pubDate><guid>http://localhost:1313/designing-a-rate-limiter/</guid><description>&lt;p>There is a class of bugs that only happen at midnight.&lt;/p>
&lt;p>Your API has a rate limit: 1000 requests per minute. A client hits 999 at 11:59:59 PM, then fires another 999 at 12:00:00 AM. Two windows, two clean counters, all 1998 requests allowed. Your database gets a spike it was never designed to handle, and you spend the next hour wondering how your rate limiter let this through.&lt;/p>
&lt;p>It did let it through. You just did not know it.&lt;/p></description></item><item><title>How Multi-Tenant SaaS Actually Works</title><link>http://localhost:1313/how-multi-tenant-saas-works/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0530</pubDate><guid>http://localhost:1313/how-multi-tenant-saas-works/</guid><description>&lt;p>For the past month I have been reading about multi-tenant SaaS architecture. Not as an academic exercise. I kept running into the same questions on every project I looked at: where exactly does tenant data go, how do you stop one customer&amp;rsquo;s bug from becoming every customer&amp;rsquo;s problem, how does billing actually work at the database level. The blog posts I found were either too abstract or skipped the hard parts entirely.&lt;/p></description></item><item><title>Nobody Will Read This</title><link>http://localhost:1313/nobody-will-read-this/</link><pubDate>Mon, 22 Jun 2026 00:05:00 +0530</pubDate><guid>http://localhost:1313/nobody-will-read-this/</guid><description>&lt;p>There is a funny truth in software engineering: almost nobody reads the docs.&lt;/p>
&lt;p>We spend hours writing careful comments in our code. We build personal websites. We write plain text files and push them to live servers. But if we check the stats, we know the truth. The audience is basically zero.&lt;/p>
&lt;p>So why do we do it?&lt;/p>
&lt;p>My day is full of loud noise. It is filled with heavy backend logic, endless tasks, and the crushing weight of non-stop engineering. The pressure is always on. The systems never sleep. It is exhausting.&lt;/p></description></item><item><title>What is DRY? (And Other Things We Say at 3 AM)</title><link>http://localhost:1313/what-is-dry/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0530</pubDate><guid>http://localhost:1313/what-is-dry/</guid><description>&lt;p>There is a famous programmer joke that always gets me:&lt;/p>
&lt;p>&amp;ldquo;What is DRY? Well, at the risk of repeating myself&amp;hellip;&amp;rdquo;&lt;/p>
&lt;p>It is funny, but it also hurts a little because it is so true. We all know the rule: Don&amp;rsquo;t Repeat Yourself (DRY). We learn it from day one. You write a piece of code once, put it in a clean function, and never type it again.&lt;/p>
&lt;p>But let&amp;rsquo;s be honest. It is the middle of the night. You are staring at your screen, your eyes hurt from the light, and you just need the server to stop crashing. What really happens? You copy that block of code from another file. You paste it right where you need it. You change one variable, save the file, and quietly hope nobody looks too closely.&lt;/p></description></item><item><title>So, We Are Writing Efficient Software Again</title><link>http://localhost:1313/so-we-are-writing-efficient-software-again/</link><pubDate>Wed, 17 Jun 2026 20:00:00 +0530</pubDate><guid>http://localhost:1313/so-we-are-writing-efficient-software-again/</guid><description>&lt;p>I wanted to upgrade the RAM in my PC.&lt;/p>
&lt;p>Nothing fancy. I bought 32GB in 2024 and I wanted to double it. I opened a tab, checked the price, and closed the tab. Then I sat quietly for a moment.&lt;/p>
&lt;p>The same 32GB kit I bought in 2024 now costs more than double. DDR5 prices have gone up roughly 400% since mid-2025 [1]. DDR4 is not much better. A kit that cost $60–$90 in late 2025 now sells for $150–$180 [2].&lt;/p></description></item><item><title>Constructing Concurrent Inverted Indexes in Go</title><link>http://localhost:1313/constructing-concurrent-inverted-indexes-in-go/</link><pubDate>Tue, 16 Jun 2026 22:00:00 +0530</pubDate><guid>http://localhost:1313/constructing-concurrent-inverted-indexes-in-go/</guid><description>&lt;p>I spent a Saturday afternoon benchmarking a concurrent inverted index and discovered that a single &lt;code>sync.RWMutex&lt;/code> starts to break down at roughly 4 concurrent readers. The degradation is not linear. It is not graceful. It is a cliff.&lt;/p>
&lt;p>The inverted index is one of the oldest data structures in information retrieval. It maps terms to the documents that contain them, forming the backbone of every search engine from Elasticsearch to Lucene to Google&amp;rsquo;s earliest prototypes. The data structure itself is simple. Making it fast under concurrent load is not.&lt;/p></description></item><item><title>A Love Letter to the L1 Cache</title><link>http://localhost:1313/love-letter-to-the-l1-cache/</link><pubDate>Mon, 15 Jun 2026 19:00:00 +0530</pubDate><guid>http://localhost:1313/love-letter-to-the-l1-cache/</guid><description>&lt;p>I recently spent four hours staring at a benchmark that didn&amp;rsquo;t make sense.&lt;/p>
&lt;p>It started while working on &lt;a href="https://github.com/vikash-paf/derelict-facility" target="_blank" rel="noopener noreferrer">Derelict Facility&lt;/a>, my grid-based game engine in Go. I was trying to tighten the main update loop, specifically the part that iterates over every entity on the map each frame. I pulled out a small benchmark to isolate the cost, and something looked wrong.&lt;/p>
&lt;p>I had two Go structs. They held the exact same data: two booleans and a 64-bit integer. I was iterating over a slice of 10 million of these structs, doing a simple addition. They should have been identical in performance.&lt;/p></description></item><item><title>Why Explaining Technical Difficulty is Hard</title><link>http://localhost:1313/why-explaining-technical-difficulty-is-hard/</link><pubDate>Thu, 14 May 2026 01:00:00 +0530</pubDate><guid>http://localhost:1313/why-explaining-technical-difficulty-is-hard/</guid><description>&lt;p>&amp;ldquo;Can we just add a real-time visitor counter to the homepage? It&amp;rsquo;s just a query, right&amp;rdquo;?&lt;/p>
&lt;p>Every engineer has heard some variation of this. On the surface, the logic is sound. You have data, you have a UI, and you want to connect them. In the world of business requirements, this is a solved problem. You write a line of code, and the feature exists.&lt;/p>
&lt;p>But your database doesn&amp;rsquo;t care about business logic. It cares about &lt;strong>Infrastructure Constraints&lt;/strong>.&lt;/p></description></item><item><title>Just About Go Time</title><link>http://localhost:1313/just-about-go-time/</link><pubDate>Sun, 10 May 2026 22:00:00 +0530</pubDate><guid>http://localhost:1313/just-about-go-time/</guid><description>&lt;p>Time is an illusion. Or more accurately, time is a political consensus poorly masquerading as physics.&lt;/p>
&lt;p>&lt;picture class="optimized-image-container">&lt;source srcset="http://localhost:1313/just-about-go-time/time-theory-meme_hu_c027f9156a69cf21.webp 480w, http://localhost:1313/just-about-go-time/time-theory-meme_hu_c74845a5e28401ee.webp 800w, http://localhost:1313/just-about-go-time/time-theory-meme_hu_22fbca4a5f8175a5.webp 1200w, http://localhost:1313/just-about-go-time/time-theory-meme_hu_c495ad8b67b2bacf.webp 1222w" sizes="(max-width: 800px) 100vw, 800px" type="image/webp">&lt;img src="http://localhost:1313/just-about-go-time/time-theory-meme_hu_c495ad8b67b2bacf.webp" width="1222" height="1514" alt="Time is relative, absolute, and a scam" loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />
 &lt;/picture>&lt;/p>
&lt;p>If you&amp;rsquo;ve ever seen Dylan Beattie&amp;rsquo;s &amp;ldquo;Plain Text&amp;rdquo; &lt;a href="https://www.youtube.com/watch?v=gd5uJ7Nlvvo" target="_blank" rel="noopener noreferrer">talk&lt;/a>, you know that humans have spent centuries making data storage as complicated as possible. But text encoding has nothing on time zones.&lt;/p>
&lt;p>As engineers, we like to pretend that &lt;code>time.Now()&lt;/code> returns an objective truth. It doesn&amp;rsquo;t. It returns a snapshot of a highly contested, historically unstable set of political boundaries. In 2011, the island nation of Samoa decided they wanted to align their workweek with Australia rather than the United States. To do this, they didn&amp;rsquo;t just change their clocks; they completely skipped Friday, December 30th. At 11:59 PM on Thursday, the clock ticked over, and it was suddenly Saturday.&lt;/p></description></item><item><title>Building a Poor Document Store inside PostgreSQL</title><link>http://localhost:1313/building-a-poor-document-store-inside-postgresql/</link><pubDate>Sat, 09 May 2026 22:00:00 +0530</pubDate><guid>http://localhost:1313/building-a-poor-document-store-inside-postgresql/</guid><description>&lt;p>The marketing for &amp;ldquo;schemaless&amp;rdquo; architecture was brilliant. It promised speed, agility, and a life free from the tyranny of &lt;code>ALTER TABLE&lt;/code> migrations. When PostgreSQL introduced &lt;code>JSONB&lt;/code> in version 9.4, many developers saw it as a green light to treat Postgres like MongoDB.&lt;/p>
&lt;p>I’ve seen this pattern in dozens of codebases. It starts with a single &lt;code>metadata&lt;/code> column, but within months, the entire business logic is buried inside a 2MB JSON blob.&lt;/p></description></item><item><title>PostgreSQL Migrations in Go: Production Schema Patterns with Goose</title><link>http://localhost:1313/postgresql-migrations-in-go-production-schema-patterns-with-goose/</link><pubDate>Fri, 08 May 2026 22:00:00 +0530</pubDate><guid>http://localhost:1313/postgresql-migrations-in-go-production-schema-patterns-with-goose/</guid><description>&lt;p>Application code is stateless. You can tear down a container and spin up a new one in milliseconds without losing data. Databases are stateful. When you deploy new application logic that requires a new column, an index, or a table, you must transition the physical storage schema from state A to state B without destroying the underlying data or locking the system.&lt;/p>
&lt;p>This process is a database migration. Working with databases is the kind of thing I will gladly skip dinner for (:&lt;/p></description></item><item><title>Migrating Cloudflare to Terraform</title><link>http://localhost:1313/cloudflare-management-with-terraform/</link><pubDate>Tue, 28 Apr 2026 14:00:00 +0530</pubDate><guid>http://localhost:1313/cloudflare-management-with-terraform/</guid><description>&lt;p>A while back, I was tinkering in the Cloudflare dashboard and accidentally fat-fingered a DNS configuration. I didn&amp;rsquo;t realize the impact immediately, but I ended up taking down &lt;code>lorbic.com&lt;/code> for an hour.&lt;/p>
&lt;p>When I scrambled to fix it, I hit a wall: there was no &amp;ldquo;undo&amp;rdquo; button. There was no Git history to tell me what the record &lt;em>used&lt;/em> to point to, and no review to catch the mistake before I blew it.&lt;/p></description></item><item><title>Internet Graveyard</title><link>http://localhost:1313/internet-graveyard/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><guid>http://localhost:1313/internet-graveyard/</guid><description>&lt;div class="archive-resource-explorer graveyard-explorer">
 &lt;div class="graveyard-header-controls">
 &lt;div class="graveyard-search-wrapper">
 &lt;div class="graveyard-search-frame">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->&lt;path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"/>&lt;/svg>
 &lt;input type="text" id="graveyard-filter" placeholder="SEARCH THE ARCHIVES..." aria-label="Filter casualties">
 &lt;/div>
 &lt;/div>
 
 &lt;div class="graveyard-category-nav" id="graveyard-filters">
 &lt;div class="nav-label">Filter by Era/Domain:&lt;/div>
 &lt;div class="nav-options">
 &lt;button class="tombstone-nav-item active" data-category="all">All Records&lt;/button>&lt;button class="tombstone-nav-item" data-category="Frameworks">Frameworks&lt;/button>&lt;button class="tombstone-nav-item" data-category="Hardware">Hardware&lt;/button>&lt;button class="tombstone-nav-item" data-category="Infrastructure">Infrastructure&lt;/button>&lt;button class="tombstone-nav-item" data-category="Protocols &amp;amp; Standards">Protocols &amp;amp; Standards&lt;/button>&lt;button class="tombstone-nav-item" data-category="Services">Services&lt;/button>&lt;button class="tombstone-nav-item" data-category="Social">Social&lt;/button>&lt;/div>
 &lt;/div>
 &lt;/div>

 &lt;div class="resource-grid graveyard-grid" id="graveyard-grid">&lt;div class="resource-item graveyard-tombstone" data-category="Services">
 &lt;h3 class="tombstone-name">&lt;a href="https://en.wikipedia.org/wiki/Google_Reader" target="_blank" rel="noopener noreferrer">Google Reader&lt;/a>&lt;/h3>
 &lt;span class="tombstone-epitaph">2005 - 2013&lt;/span>
 &lt;span class="tombstone-category">Services&lt;/span>
 
 &lt;div class="tombstone-cause">
 &lt;span class="cod-label">Cause of Death&lt;/span>
 &lt;p class="resource-note">Strategic shift towards Google&amp;#43;; lack of direct monetization. Proved that RSS was for power users, not the masses.&lt;/p></description></item><item><title>Critical Rendering Path Optimization: 8 Proven Strategies to Boost Web Performance</title><link>http://localhost:1313/critical-rendering-path-optimization-8-proven-strategies-to-boost-web-performance/</link><pubDate>Sat, 11 Apr 2026 16:00:00 +0530</pubDate><guid>http://localhost:1313/critical-rendering-path-optimization-8-proven-strategies-to-boost-web-performance/</guid><description>&lt;p>&lt;strong>TL;DR:&lt;/strong> The Critical Rendering Path (CRP) is how browsers convert code into pixels. Optimizing it means reducing bottlenecks at five stages: Network, Parsing, Tree Building, Layout, and Paint. Use this guide to reduce First Contentful Paint by 40-60%, improve Lighthouse scores, and master the eight optimization strategies that separate fast sites from slow ones.&lt;/p>
&lt;p>To master web performance, stop guessing and start engineering. View the browser as a single-threaded virtual machine that must convert raw text into pixels 60 times per second. Every performance delay is a bottleneck in the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Performance/Critical_rendering_path" target="_blank" rel="noopener noreferrer">&lt;strong>Critical Rendering Path (CRP)&lt;/strong>&lt;/a>.&lt;/p></description></item><item><title>A Tale of Web Vitals</title><link>http://localhost:1313/a-tale-of-web-vitals/</link><pubDate>Sat, 11 Apr 2026 14:30:00 +0530</pubDate><guid>http://localhost:1313/a-tale-of-web-vitals/</guid><description>&lt;p>&lt;strong>TL;DR:&lt;/strong> I achieved 95+ Lighthouse scores by removing abstractions and automating browser fundamentals. This guide details how to solve &lt;strong>LCP network discovery&lt;/strong>, &lt;strong>main thread congestion&lt;/strong>, and &lt;strong>third-party accessibility traps&lt;/strong> using Hugo pipelines and vanilla JavaScript.&lt;/p>
&lt;hr>
&lt;p>&amp;ldquo;Why is the LCP 4.2 seconds? It&amp;rsquo;s just a static site&amp;rdquo;.&lt;/p>
&lt;p>I was staring at a Lighthouse report that felt like an insult. &lt;strong>Lorbic.com is a zero-dependency Hugo site.&lt;/strong> No React, no heavy frameworks, just vanilla CSS and minimal JS. Yet, the mobile performance was tanking.&lt;/p></description></item><item><title>Why Your Goroutines Need a Speed Limit: Bounded Concurrency in Go</title><link>http://localhost:1313/bounded-concurrency-in-go/</link><pubDate>Fri, 10 Apr 2026 10:00:00 +0530</pubDate><guid>http://localhost:1313/bounded-concurrency-in-go/</guid><description>&lt;p>&lt;strong>TL;DR:&lt;/strong> Spawning &lt;code>go func()&lt;/code> without a limiter is a recipe for system collapse. This guide details how to use &lt;strong>Semaphores&lt;/strong> and &lt;strong>Worker Pools&lt;/strong> to prioritize predictable stability over absolute speed, protecting downstream dependencies from the thundering herd.&lt;/p>
&lt;hr>
&lt;p>It&amp;rsquo;s a rite of passage for every Go developer. You receive a list of 10,000 URLs to fetch or 50,000 rows to process. You wrap the workload in an unbounded &lt;code>go func()&lt;/code> loop, achieving maximum throughput in milliseconds.&lt;/p></description></item><item><title>Part 3: Casting Shadows Without Trigonometry: The Beauty of Integer Math</title><link>http://localhost:1313/casting-shadows-bresenham-integer-math/</link><pubDate>Tue, 07 Apr 2026 10:00:00 +0530</pubDate><guid>http://localhost:1313/casting-shadows-bresenham-integer-math/</guid><description>&lt;p>At the end of generating a procedural map for the &lt;em>&lt;a href="https://github.com/vikash-paf/derelict-facility" target="_blank" rel="noopener noreferrer">Derelict Facility&lt;/a>&lt;/em> engine, I had a sprawling interconnected maze of rooms and corridors. But there was a devastating problem: I could see everything.&lt;/p>
&lt;p>The entire map was rendered at once. It looked like a top-down blueprint, not a dark, atmospheric facility. I needed to implement Fog of War. I needed to treat the player character like a lighthouse in the dark.&lt;/p></description></item><item><title>Part 2: Decoupling the Renderer: Terminal to Raylib in One Interface</title><link>http://localhost:1313/decoupling-game-engine-renderer-raylib/</link><pubDate>Mon, 06 Apr 2026 10:00:00 +0530</pubDate><guid>http://localhost:1313/decoupling-game-engine-renderer-raylib/</guid><description>&lt;p>The biggest architectural mistake you can make when building a game engine is letting the game know how it is being drawn.&lt;/p>
&lt;p>When I started building the &lt;em>Derelict Facility&lt;/em> engine, the output target was a raw ANSI terminal. The engine calculated A* paths, resolved line-of-sight, and then spewed escape codes (&lt;code>\033[31m&lt;/code>) to &lt;code>os.Stdout&lt;/code>.&lt;/p>
&lt;p>Eventually, I hit the physical limits of terminal emulators: inconsistent character widths (especially for emojis), slow double-buffering, and a hard cap on frame rates. I needed to move to a real, hardware-accelerated graphics library like Raylib.&lt;/p></description></item><item><title>Part 1: Data-Oriented Design in Go: Why [][]Tile Destroyed My Game Engine</title><link>http://localhost:1313/data-oriented-design-go-contiguous-memory/</link><pubDate>Sun, 05 Apr 2026 10:00:00 +0530</pubDate><guid>http://localhost:1313/data-oriented-design-go-contiguous-memory/</guid><description>&lt;p>Most game development stories start the same way: install Unity, drag some sprites onto a canvas, and press Play.&lt;/p>
&lt;p>I wanted to understand the metal. I set out to build &lt;em>&lt;a href="https://github.com/vikash-paf/derelict-facility" target="_blank" rel="noopener noreferrer">Derelict Facility&lt;/a>&lt;/em>, a systems-level game engine from scratch in pure Go. No SDL, no OpenGL wrappers, no Ebiten. The goal wasn&amp;rsquo;t just to ship a game; the goal was to learn the memory layouts and I/O pipelines that modern engines hide behind friendly APIs.&lt;/p></description></item><item><title>10 years of lorbic.com architecture</title><link>http://localhost:1313/10-years-of-lorbic.com-architecture/</link><pubDate>Thu, 02 Apr 2026 12:00:00 +0530</pubDate><guid>http://localhost:1313/10-years-of-lorbic.com-architecture/</guid><description>&lt;p>&lt;picture class="optimized-image-container">&lt;source srcset="http://localhost:1313/10-years-of-lorbic.com-architecture/evolution_hu_c3df73cc291f2d3a.webp 480w, http://localhost:1313/10-years-of-lorbic.com-architecture/evolution_hu_d6eb9db6213c4dc9.webp 800w, http://localhost:1313/10-years-of-lorbic.com-architecture/evolution_hu_156b083258cf7313.webp 1200w, http://localhost:1313/10-years-of-lorbic.com-architecture/evolution_hu_abf66fd5579991cd.webp 3068w" sizes="(max-width: 800px) 100vw, 800px" type="image/webp">&lt;img src="http://localhost:1313/10-years-of-lorbic.com-architecture/evolution_hu_abf66fd5579991cd.webp" width="3068" height="800" alt="Lorbic Evolution: 2017 vs 2026" loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />
 &lt;/picture>&lt;/p>
&lt;p>This post tracks four architectural rewrites of my personal site over ten years: moving from managed platforms (Blogger) to dynamic backends (Django), static site generators (Jekyll/Hugo), and finally to a custom, zero-dependency architecture built for absolute control and performance.&lt;/p>
&lt;hr>
&lt;h2 id="technical-context">Technical Context&lt;a class="anchorjs-link" href="#technical-context" aria-label="Link to section: Technical Context">&lt;/a>&lt;/h2>&lt;p>For an engineer, a personal site is the only project where you have absolute authority over the stack. There are no product managers, no legacy constraints, and no enterprise technical debt: you own the metal.&lt;/p></description></item><item><title>My Reading List</title><link>http://localhost:1313/reading-list/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><guid>http://localhost:1313/reading-list/</guid><description>&lt;div class="archive-resource-explorer">
 &lt;div class="archive-controls">
 &lt;div class="archive-search-box">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->&lt;path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"/>&lt;/svg>
 &lt;input type="text" id="resource-filter" placeholder="Filter reading list by title, domain, or note..." aria-label="Filter resources">
 &lt;/div>
 &lt;div class="archive-domain-filters" id="domain-filters">
 &lt;button class="filter-chip active" data-domain="all">All&lt;/button>&lt;button class="filter-chip" data-domain="Analytics">Analytics&lt;/button>&lt;button class="filter-chip" data-domain="Backend">Backend&lt;/button>&lt;button class="filter-chip" data-domain="Database">Database&lt;/button>&lt;button class="filter-chip" data-domain="Design">Design&lt;/button>&lt;button class="filter-chip" data-domain="DevOps">DevOps&lt;/button>&lt;button class="filter-chip" data-domain="General">General&lt;/button>&lt;button class="filter-chip" data-domain="Hacking">Hacking&lt;/button>&lt;button class="filter-chip" data-domain="Hardcore Linux">Hardcore Linux&lt;/button>&lt;/div>
 &lt;/div>

 &lt;div class="resource-grid" id="resource-grid">&lt;div class="resource-item" data-domain="Design">
 &lt;div class="resource-header">
 &lt;span class="resource-domain">Design&lt;/span>
 &lt;a href="https://katedaviesdesigns.com/2026/04/29/knitting-bullshit/" target="_blank" rel="noopener noreferrer" class="resource-link-icon">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->&lt;path d="M352 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9L370.7 96 201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L416 141.3l41.4 41.4c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V32c0-17.7-14.3-32-32-32H352zM80 32C35.8 32 0 67.8 0 112V432c0 44.2 35.8 80 80 80H400c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32V432c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z"/>&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;h3 class="resource-title">&lt;a href="https://katedaviesdesigns.com/2026/04/29/knitting-bullshit/" target="_blank" rel="noopener noreferrer">Knitting Bullshit by Kate Davies&lt;/a>&lt;/h3>
 &lt;p class="resource-note">Kate Davies&amp;#39; blog.&lt;/p></description></item><item><title>Kubernetes on WSL2 and the macOS tunnel</title><link>http://localhost:1313/kubernetes-on-wsl2-macos-access/</link><pubDate>Wed, 01 Apr 2026 22:00:00 +0530</pubDate><guid>http://localhost:1313/kubernetes-on-wsl2-macos-access/</guid><description>&lt;p>&lt;strong>TL;DR:&lt;/strong> I run &lt;strong>k3s&lt;/strong> on a Windows gaming PC via &lt;strong>WSL2&lt;/strong> to master Kubernetes networking without cloud costs. This guide details a secure access model using &lt;strong>SSH&lt;/strong> and &lt;strong>kubectl port-forward&lt;/strong> to bypass NAT boundaries and maintain technical sovereignty.&lt;/p>
&lt;hr>
&lt;p>This guide omits Kubernetes feature tutorials. Instead, it details how to architect an environment where Kubernetes can exist without auxiliary hardware, idle cloud bills, or hidden networking realities.&lt;/p>
&lt;p>I wanted to learn Kubernetes properly, which meant understanding how &lt;strong>scheduling&lt;/strong>, &lt;strong>access paths&lt;/strong>, and &lt;strong>network boundaries&lt;/strong> behave under real constraints. The problem was simple: I lacked a reasonable execution environment.&lt;/p></description></item><item><title>ClickHouse data masking with regex</title><link>http://localhost:1313/clickhouse-regex-data-masking/</link><pubDate>Tue, 31 Mar 2026 22:30:00 +0530</pubDate><guid>http://localhost:1313/clickhouse-regex-data-masking/</guid><description>&lt;p>If you&amp;rsquo;re running a production observability stack, you&amp;rsquo;ve already leaked PII. An engineer forgot to redact an email in a log line, or a JWT token ended up in a stack trace.&lt;/p>
&lt;p>In most databases, the only fix is to &lt;code>DELETE&lt;/code> the data—killing your metrics along with the sensitive info. But ClickHouse has a more elegant approach: &lt;strong>Data Masking Policies&lt;/strong>.&lt;/p>
&lt;p>By defining a policy at the role level, you can use regex to swap sensitive patterns with &lt;code>[REDACTED]&lt;/code> in real-time, before the query results even leave the server.&lt;/p></description></item><item><title>Understanding CPU Caches in Go</title><link>http://localhost:1313/cpu-caches-in-go/</link><pubDate>Tue, 31 Mar 2026 22:15:00 +0530</pubDate><guid>http://localhost:1313/cpu-caches-in-go/</guid><description>&lt;p>When you&amp;rsquo;re building Go services that handle millions of operations per second, the hardware beneath your abstractions starts to matter. Specifically, the CPU cache hierarchy, and whether your data fits in it.&lt;/p>
&lt;hr>
&lt;h4 id="the-hardware-context-its-not-just-ram">The Hardware Context: It&amp;rsquo;s Not Just &amp;ldquo;RAM&amp;rdquo;&lt;a class="anchorjs-link" href="#the-hardware-context-its-not-just-ram" aria-label="Link to section: The Hardware Context: It&amp;rsquo;s Not Just &amp;ldquo;RAM&amp;rdquo;">&lt;/a>&lt;/h4>&lt;p>Your server has 32GB or 64GB of RAM, but the CPU avoids touching it whenever possible. Instead, it works through a chain of caches:&lt;/p></description></item><item><title>ClickHouse vs. Postgres: When to Move Your Logs Out of a Relational DB</title><link>http://localhost:1313/clickhouse-vs-postgres-log-storage/</link><pubDate>Mon, 30 Mar 2026 22:45:00 +0530</pubDate><guid>http://localhost:1313/clickhouse-vs-postgres-log-storage/</guid><description>&lt;p>Postgres is the most reliable tool in my stack. It handles users, configurations, and complex relations without breaking a sweat. But databases, like any physical system, have a &amp;ldquo;design limit&amp;rdquo;. For Postgres, that limit usually appears when you try to use it as a dumping ground for high-velocity logs and metrics.&lt;/p>
&lt;p>When your &lt;code>ANALYZE&lt;/code> commands start taking minutes and your indexes consume more RAM than your data, you aren&amp;rsquo;t facing a Postgres bug; you&amp;rsquo;re facing an architectural mismatch.&lt;/p></description></item><item><title>WSL2 Is Slow? Fix /mnt/c/ File System Performance &amp; Go Latency</title><link>http://localhost:1313/wsl2-performance-tax-go-windows/</link><pubDate>Sun, 29 Mar 2026 22:30:00 +0530</pubDate><guid>http://localhost:1313/wsl2-performance-tax-go-windows/</guid><description>&lt;p>WSL2 (Windows Subsystem for Linux) has been a godsend for developers who love Linux tools but need/have a Windows environment. But for Go developers, WSL2 isn&amp;rsquo;t just a &amp;ldquo;transparent layer&amp;rdquo;. If configured incorrectly, it becomes the bottleneck that can slow down builds by 3x and introduce mysterious latency in networked services.&lt;/p>
&lt;p>This isn&amp;rsquo;t a failure of WSL2; it&amp;rsquo;s a failure of understanding the &lt;strong>9p boundary&lt;/strong>.&lt;/p>
&lt;div class="details-block reveal-item">
 &lt;details>
 &lt;summary>
 &lt;div class="summary-inner">
 &lt;span class="details-label">Glossary //&lt;/span>
 &lt;span class="details-title">What is the 9P Boundary?&lt;/span>
 &lt;svg class="svg-icon icon-plus" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">&lt;path d="M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z"/>&lt;/svg>
 &lt;svg class="svg-icon icon-minus" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">&lt;path d="M432 256c0 17.7-14.3 32-32 32H48c-17.7 0-32-14.3-32-32s14.3-32 32-32H400c17.7 0 32 14.3 32 32z"/>&lt;/svg>
 &lt;/div>
 &lt;/summary>
 &lt;div class="details-content">
 &lt;p>WSL2 is a Virtual Machine. To let that VM see your Windows files, Microsoft uses the &lt;strong>9P protocol&lt;/strong> (Plan 9).&lt;/p></description></item><item><title>AI Coding in 2026: Productivity Multipliers vs. Skill Replacements</title><link>http://localhost:1313/ai-coding-productivity-vs-skill/</link><pubDate>Sat, 28 Mar 2026 23:00:00 +0530</pubDate><guid>http://localhost:1313/ai-coding-productivity-vs-skill/</guid><description>&lt;p>&amp;ldquo;Write a REST API with authentication&amp;rdquo;.&lt;/p>
&lt;p>I hit enter. Thirty seconds later, Claude spat out 400 lines of perfectly formatted Go code. JWT middleware, password hashing, error handling, even rate limiting. It looked professional. It looked production-ready.&lt;/p>
&lt;p>It took me three hours to figure out why the token refresh logic had a race condition.&lt;/p>
&lt;p>This is AI-assisted coding in 2026. It&amp;rsquo;s not magic. It&amp;rsquo;s not a replacement. It&amp;rsquo;s a very fast junior developer that never gets tired, never complains, and confidently makes mistakes you won&amp;rsquo;t catch unless you actually understand the &lt;strong>architectural nuances&lt;/strong> of what you&amp;rsquo;re building.&lt;/p></description></item><item><title>Fast Docker CI: Stop Rebuilding Container Images on Every Commit</title><link>http://localhost:1313/stop-rebuilding-docker-images-runtime-containers/</link><pubDate>Sun, 15 Feb 2026 02:30:00 +0530</pubDate><guid>http://localhost:1313/stop-rebuilding-docker-images-runtime-containers/</guid><description>&lt;p>I used to rebuild my Docker image every time I fixed a typo. A one-line change meant waiting 2-3 minutes for Docker to rebuild layers, reinstall dependencies, and restart the container. I thought this was just the cost of containerized development.&lt;/p>
&lt;p>Then I discovered runtime containers. Same isolated environment, same reproducibility, but code changes reflect instantly. No rebuilds. No waiting. The runtime lives in the container, the code lives on the host.&lt;/p></description></item><item><title>Python Background Workers: Architecture, Queues, and Retry Strategies</title><link>http://localhost:1313/building-production-ready-background-workers-in-python/</link><pubDate>Sun, 01 Feb 2026 13:00:00 +0530</pubDate><guid>http://localhost:1313/building-production-ready-background-workers-in-python/</guid><description>&lt;p>I thought processing audio in the background was simple: spawn a thread, run the script, save the file. Then I hit 200 concurrent requests, and it failed epically.&lt;/p>
&lt;p>The CPU spiked to full usage because of pydub&amp;rsquo;s processing. The TTS API didn&amp;rsquo;t rate-limit me but, it was horribly slow. Then the jobs started failing. Half the jobs died silently. The other half wrote corrupted files because of race conditions I didn&amp;rsquo;t know existed. And when I deployed a little fix? The deployment killed in-flight jobs, leaving orphaned audio segments scattered across cloud storage directory.&lt;/p></description></item><item><title>Go Struct Field Alignment: How Memory Padding Wastes Your RAM</title><link>http://localhost:1313/go-struct-field-alignment/</link><pubDate>Sat, 24 Jan 2026 10:00:00 +0530</pubDate><guid>http://localhost:1313/go-struct-field-alignment/</guid><description>&lt;p>You write a struct to represent a database entity. Maybe 10 fields, maybe 20. What could possibly go wrong?&lt;/p>
&lt;p>Nothing, according to your tests. But somewhere in production, your heap is 30% larger than it should be, your Garbage Collector is working overtime, and your L1 cache is not used properly. The reason? &lt;strong>Invisible padding bytes&lt;/strong> silently inflating every instance of your struct.&lt;/p>
&lt;p>This is the story of struct field alignment: a memory optimization that costs nothing to implement but can significantly improve performance.&lt;/p></description></item><item><title>I Added Session Management to Aider</title><link>http://localhost:1313/aider-session-management/</link><pubDate>Thu, 15 Jan 2026 20:30:00 +0530</pubDate><guid>http://localhost:1313/aider-session-management/</guid><description>&lt;p>I&amp;rsquo;ve been using &lt;a href="https://aider.chat" target="_blank" rel="noopener noreferrer">aider&lt;/a> as my primary AI coding assistant for a while now. It&amp;rsquo;s the one tool that actually fits my workflow: terminal-based, Git-native, and it works directly on my local files. No copy-pasting into web forms. No context windows that forget everything. And not waiting for agents to keep thinking.&lt;/p>
&lt;p>But it was missing one thing that drove me crazy.&lt;/p>
&lt;h2 id="the-problem-context-evaporates">The Problem: Context Evaporates&lt;a class="anchorjs-link" href="#the-problem-context-evaporates" aria-label="Link to section: The Problem: Context Evaporates">&lt;/a>&lt;/h2>&lt;p>Here&amp;rsquo;s the scenario. I&amp;rsquo;m deep into a complex refactor. I&amp;rsquo;ve added 15 files to the chat, built up tons of context with the model, and we&amp;rsquo;re making real progress.&lt;/p></description></item><item><title>Can ClickHouse Replace Vector Databases? HNSW, Benchmarks &amp; SQL Setup</title><link>http://localhost:1313/clickhouse-as-a-vector-database/</link><pubDate>Wed, 14 Jan 2026 20:00:00 +0530</pubDate><guid>http://localhost:1313/clickhouse-as-a-vector-database/</guid><description>&lt;p>Everyone&amp;rsquo;s building AI apps now. And every AI app needs a place to stash embeddings. The instant your data grows beyond &amp;ldquo;fits in memory&amp;rdquo;, you need a vector database. Or do you?&lt;/p>
&lt;p>If you&amp;rsquo;re already running ClickHouse for analytics, here&amp;rsquo;s some good news: you might not need another database. ClickHouse can hold its own as a vector store. Not because it was built for it, but because it&amp;rsquo;s built to be fast at everything.&lt;/p></description></item><item><title>Memory Mechanics In Go - Stack vs Heap</title><link>http://localhost:1313/memory-mechanics-stack-vs-heap-in-go/</link><pubDate>Mon, 12 Jan 2026 00:10:00 +0530</pubDate><guid>http://localhost:1313/memory-mechanics-stack-vs-heap-in-go/</guid><description>&lt;p>We often talk about &amp;ldquo;fast&amp;rdquo; code in terms of Big O notation or algorithmic complexity. But in systems programming languages like Go, &amp;ldquo;fast&amp;rdquo; is often a function of &lt;em>where&lt;/em> your data lives in memory.&lt;/p>
&lt;p>When optimizing for high throughput, efficient loops and database indexes are only part of the story. Eventually, you have to talk about the Stack and the Heap.&lt;/p>
&lt;p>Understanding the difference isn&amp;rsquo;t just trivia. It is the difference between a service that hums along at 100k OPS with flat latency, and one that chokes on Garbage Collection (GC) pauses every few seconds.&lt;/p></description></item><item><title>OLTP vs OLAP - Why You Need Two Databases</title><link>http://localhost:1313/oltp-vs-olap-why-you-need-two-databases/</link><pubDate>Sun, 11 Jan 2026 21:00:00 +0530</pubDate><guid>http://localhost:1313/oltp-vs-olap-why-you-need-two-databases/</guid><description>&lt;p>At a recent ClickHouse conference in New Delhi, I attended this Saturday. There were many interesting sessions, but one that stood out was a talk on multi-tenant analytics at scale. I was reminded of a fundamental truth in backend engineering: &amp;ldquo;The database that runs your app cannot be the database that analyzes your app&amp;rdquo;.&lt;/p>
&lt;p>Early in a startup&amp;rsquo;s life, we shove everything into one database. User profiles, session data, logs, and analytics events all live in the same Postgres, Mongo, or Couchbase instance. It works, until it throttles.&lt;/p></description></item><item><title>Go Garbage Collector Mechanics: Pacer, GOGC, and Allocation Latency</title><link>http://localhost:1313/dont-take-out-the-garbage-go-gc-deep-dive/</link><pubDate>Wed, 07 Jan 2026 00:21:12 +0530</pubDate><guid>http://localhost:1313/dont-take-out-the-garbage-go-gc-deep-dive/</guid><description>&lt;p>In the world of high-throughput backend services, we often obsess over the usual suspects of performance: database indexing, network latency, and algorithmic complexity. But recently, while debugging our core gateway service (&lt;code>backend-gw&lt;/code>), I encountered a bottleneck that defied standard logic.&lt;/p>
&lt;p>The service was &lt;strong>CPU-bound&lt;/strong>, yet active heap usage was surprisingly low (~200MB). P99 latency was spiking at random intervals, but database queries were returning in milliseconds.&lt;/p>
&lt;p>The culprit was not the business logic. It was &lt;strong>memory management&lt;/strong>. I was effectively running a Denial-of-Service attack on my own runtime.&lt;/p></description></item><item><title>Introducing CouchLens: A Query Analysis Tool for Couchbase</title><link>http://localhost:1313/couchlens-couchbase-query-analysis-tool/</link><pubDate>Sun, 28 Dec 2025 20:00:00 +0530</pubDate><guid>http://localhost:1313/couchlens-couchbase-query-analysis-tool/</guid><description>&lt;p>CouchLens is a client-side web application for analyzing Couchbase N1QL query performance. You feed it JSON exports from &lt;code>system:completed_requests&lt;/code>, &lt;code>system:indexes&lt;/code>, and schema inference results. It parses execution plans, computes metrics, detects inefficiencies, and generates a report showing where your queries are slow.&lt;/p>
&lt;p>Everything runs in the browser. No data leaves your machine. The tool is a Progressive Web App, so you can install it and use it offline. The goal is to give database administrators and developers a way to understand query behavior without writing custom scripts or debugging raw JSON.&lt;/p></description></item><item><title>What Couchbase Taught Me About System Thinking</title><link>http://localhost:1313/what-couchbase-taught-me-about-system-thinking/</link><pubDate>Tue, 18 Nov 2025 02:20:06 +0530</pubDate><guid>http://localhost:1313/what-couchbase-taught-me-about-system-thinking/</guid><description>&lt;h2 id="couchbase-internals-indexes-queries-consistency-and-performance">Couchbase Internals: Indexes, Queries, Consistency, and Performance&lt;a class="anchorjs-link" href="#couchbase-internals-indexes-queries-consistency-and-performance" aria-label="Link to section: Couchbase Internals: Indexes, Queries, Consistency, and Performance">&lt;/a>&lt;/h2>&lt;h3 id="introduction">Introduction&lt;a class="anchorjs-link" href="#introduction" aria-label="Link to section: Introduction">&lt;/a>&lt;/h3>&lt;p>Over the last few years I&amp;rsquo;ve lived deep inside backend systems, and for the past year and a half Couchbase has been my daily companion. Working with Go services that depend on Couchbase taught me that the real lessons aren&amp;rsquo;t in the marketing slides or quick‑start guides. They&amp;rsquo;re in the internals: how indexes are built, how queries are planned, how consistency flags change the story, and how durability levels quietly decide whether your system survives a failure or not.&lt;/p></description></item><item><title>Understanding Private-Public Key Encryption</title><link>http://localhost:1313/private-public-key-encryption/</link><pubDate>Thu, 06 Nov 2025 22:01:23 +0530</pubDate><guid>http://localhost:1313/private-public-key-encryption/</guid><description>&lt;p>In today&amp;rsquo;s digital world, where secure communication, authentication, and data integrity are non-negotiable, &lt;strong>private-public key encryption&lt;/strong> (also called &lt;em>asymmetric cryptography&lt;/em>) plays a foundational role. From HTTPS in your browser to SSH logins, cryptocurrency wallets, and email encryption, this elegant cryptographic system enables trust without prior shared secrets.&lt;/p>
&lt;p>In this blog, we&amp;rsquo;ll dive into:&lt;/p>
&lt;ul>
&lt;li>The core concepts behind asymmetric encryption&lt;/li>
&lt;li>How it differs from symmetric encryption&lt;/li>
&lt;li>The mathematics (intuitively explained) behind popular algorithms like RSA and ECC&lt;/li>
&lt;li>Real-world examples and code snippets&lt;/li>
&lt;li>Common use cases and pitfalls&lt;/li>
&lt;/ul>
&lt;p>Whether you&amp;rsquo;re a curious beginner or a seasoned developer brushing up on fundamentals, you&amp;rsquo;ll find something valuable here.&lt;/p></description></item><item><title>The 5-Minute Refactor</title><link>http://localhost:1313/the-5-minute-refactor/</link><pubDate>Tue, 28 Oct 2025 02:01:23 +0530</pubDate><guid>http://localhost:1313/the-5-minute-refactor/</guid><description>&lt;h2 id="the-5-minute-refactoring-guide">The 5-Minute Refactoring Guide&lt;a class="anchorjs-link" href="#the-5-minute-refactoring-guide" aria-label="Link to section: The 5-Minute Refactoring Guide">&lt;/a>&lt;/h2>&lt;p>As experienced software engineers, we often face a dilemma: our codebases, like all physical systems, trend toward entropy. The gap between &amp;ldquo;getting it done&amp;rdquo; and &amp;ldquo;getting it right&amp;rdquo; grows, leading to sluggish feature delivery and inevitable technical debt. The solution isn&amp;rsquo;t a massive, heroic rewrite; it&amp;rsquo;s the disciplined, humble practice of &lt;strong>Kaizen&lt;/strong>, or continuous improvement.&lt;/p>
&lt;p>For Golang engineers, this translates to the &lt;strong>5-Minute Refactor&lt;/strong>: a daily commitment to making &lt;strong>one tiny, tangible, quality improvement&lt;/strong> to any code you touch. This practice leverages Go&amp;rsquo;s philosophy of simplicity to prevent decay and sharpen your engineering judgment, all in less time than it takes to make coffee.&lt;/p></description></item><item><title>I Built My Own Google Drive</title><link>http://localhost:1313/i-built-my-own-google-drive/</link><pubDate>Wed, 01 Oct 2025 02:02:23 +0530</pubDate><guid>http://localhost:1313/i-built-my-own-google-drive/</guid><description>&lt;h2 id="why-bother">Why Bother?&lt;a class="anchorjs-link" href="#why-bother" aria-label="Link to section: Why Bother?">&lt;/a>&lt;/h2>&lt;p>Whenever I want to download a folder from Google Drive, it starts zipping it for what feels like minutes, and then it downloads the whole zip. There&amp;rsquo;s no incremental download, and I can&amp;rsquo;t add it as a network drive for obvious reasons. These limitations are frustrating, but they also got me thinking: what if I could have a solution that&amp;rsquo;s more flexible, more customizable, and truly mine?&lt;/p></description></item><item><title>Introducing Quark</title><link>http://localhost:1313/introducing-quark/</link><pubDate>Tue, 23 Sep 2025 02:02:23 +0530</pubDate><guid>http://localhost:1313/introducing-quark/</guid><description>&lt;h2 id="quark-a-minimal-note-taking-system">Quark: A Minimal Note-Taking System&lt;a class="anchorjs-link" href="#quark-a-minimal-note-taking-system" aria-label="Link to section: Quark: A Minimal Note-Taking System">&lt;/a>&lt;/h2>&lt;p>A few months ago, I was in a meeting where the conversation was moving at lightning speed. Updates, critical decisions, all flying around the room. I opened my laptop, ready to take notes in Notion, but within minutes I was lost. Too many clicks, too much formatting, and many annoying boxes. By the time I found the right template. I had already missed half of the discussion.&lt;/p></description></item><item><title>Why Your Password Habits Will Get You Hacked</title><link>http://localhost:1313/password-security-habits/</link><pubDate>Wed, 13 Aug 2025 00:00:00 +0000</pubDate><guid>http://localhost:1313/password-security-habits/</guid><description>&lt;h1 id="the-real-cost-of-digital-laziness">The Real Cost of Digital Laziness&lt;a class="anchorjs-link" href="#the-real-cost-of-digital-laziness" aria-label="Link to section: The Real Cost of Digital Laziness">&lt;/a>&lt;/h1>&lt;p>We&amp;rsquo;ve built our entire lives on top of fragile passwords.&lt;br>
Most people treat them like they treat dental checkups, ignore it until something hurts. By then, it&amp;rsquo;s too late.&lt;/p>
&lt;p>The numbers are not on your side. Every password you&amp;rsquo;ve ever created has probably been leaked in some breach you&amp;rsquo;ve never heard about. It doesn&amp;rsquo;t matter that the breach was from a forgotten forum you joined in 2012; attackers don&amp;rsquo;t forget. They run automated &amp;ldquo;credential stuffing&amp;rdquo; attacks across every major platform, testing your old passwords against your bank, your email, your cloud storage. One lazy reuse, and they&amp;rsquo;re in.&lt;/p></description></item><item><title>Stealth VPN with Outline over HTTPS</title><link>http://localhost:1313/outline-vpn-over-https/</link><pubDate>Tue, 12 Aug 2025 00:00:00 +0000</pubDate><guid>http://localhost:1313/outline-vpn-over-https/</guid><description>&lt;h2 id="what-we-are-doing">What We Are Doing&lt;a class="anchorjs-link" href="#what-we-are-doing" aria-label="Link to section: What We Are Doing">&lt;/a>&lt;/h2>&lt;p>If you are somewhere that blocks VPNs through deep packet inspection (DPI), SNI filtering, or crude port blocking, the goal is to make your VPN traffic look as boring as possible.&lt;br>
The quick win is to put it on port 443, the same port used by HTTPS. That is the lifeline of the modern web, so most firewalls are reluctant to block it.&lt;/p></description></item><item><title>How to Resolve Huge Git Merge Conflicts Without Losing Your Mind</title><link>http://localhost:1313/resolving-huge-merge-conflicts/</link><pubDate>Thu, 17 Jul 2025 20:56:00 +0000</pubDate><guid>http://localhost:1313/resolving-huge-merge-conflicts/</guid><description>&lt;p>&lt;strong>How to Resolve Huge Git Merge Conflicts Without Losing Your Mind&lt;/strong>&lt;/p>
&lt;p>If you&amp;rsquo;ve ever been knee-deep in a long-lived branch merge and thought, &lt;em>&amp;ldquo;this can&amp;rsquo;t be what version control was meant for&amp;rdquo;&lt;/em>, you&amp;rsquo;re not alone. Git gives us powerful tools, but resolving large merge conflicts, especially during major migrations or rewrites can feel like surgery without anesthesia.&lt;/p>
&lt;p>In this post, we&amp;rsquo;ll walk through how to approach and resolve massive merge conflicts systematically. Not with hand-wavy advice, but with actual steps, real mental models, and clear visual understanding.&lt;/p></description></item><item><title>What Facebook's Memcache Taught Me About Systems Thinking</title><link>http://localhost:1313/scaling-memcache-facebook/</link><pubDate>Mon, 07 Jul 2025 14:03:00 +0000</pubDate><guid>http://localhost:1313/scaling-memcache-facebook/</guid><description>&lt;p>What Facebook&amp;rsquo;s Memcache Taught Me About Systems Thinking&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;The probability of reading transient stale data is a tunable parameter&amp;rdquo;. - Scaling Memcache at Facebook (NSDI, 2013)&lt;/p>&lt;/blockquote>
&lt;p>There&amp;rsquo;s a moment in every engineer&amp;rsquo;s life when a seemingly simple component like a cache, suddenly becomes the most complex piece in the stack. For me, that moment arrived reading Facebook&amp;rsquo;s paper on scaling Memcache.
I didn&amp;rsquo;t expect a key-value store to challenge my understanding of systems architecture. But this paper wasn&amp;rsquo;t about cache keys or TTLs. It was about what happens when infrastructure hits the limits of scale, physics, and human reliability.&lt;br>
What follows isn&amp;rsquo;t a summary. It&amp;rsquo;s a set of systems insights that stayed with me, principles that go deeper than code and that I now see everywhere.&lt;/p></description></item><item><title>Bitmasking In Go</title><link>http://localhost:1313/bitmasking/</link><pubDate>Thu, 17 Apr 2025 02:20:00 +0000</pubDate><guid>http://localhost:1313/bitmasking/</guid><description>&lt;h1 id="bitmasking-in-go">Bitmasking in Go&lt;a class="anchorjs-link" href="#bitmasking-in-go" aria-label="Link to section: Bitmasking in Go">&lt;/a>&lt;/h1>&lt;p>Bitmasking is one of those computer science tricks that feels like wizardry, until you realize it&amp;rsquo;s just some clever shifting and binary math. This blog explores the idea, shows how we use it in Go, and why it&amp;rsquo;s surprisingly useful when working with databases like Couchbase.&lt;/p>
&lt;hr>
&lt;h2 id="whats-bitmasking">What&amp;rsquo;s Bitmasking?&lt;a class="anchorjs-link" href="#whats-bitmasking" aria-label="Link to section: What&amp;rsquo;s Bitmasking?">&lt;/a>&lt;/h2>&lt;p>A &lt;strong>bitmask&lt;/strong> is just an integer where each &lt;strong>bit&lt;/strong> (0 or 1) represents a flag or state. Instead of storing multiple booleans in a slice or map, you cram them into a single &lt;code>int&lt;/code>. Fast to compute, fast to store, and great for indexing.&lt;/p></description></item><item><title>Docker Volume Backup: The 1-Line Command You Should Be Using (Instead of tar)</title><link>http://localhost:1313/how-to-backup-and-restore-docker-volumes/</link><pubDate>Sun, 13 Apr 2025 07:14:00 +0000</pubDate><guid>http://localhost:1313/how-to-backup-and-restore-docker-volumes/</guid><description>&lt;h1 id="how-to-backup-and-restore-docker-volumes-between-machines">How to Backup and Restore Docker Volumes Between Machines&lt;a class="anchorjs-link" href="#how-to-backup-and-restore-docker-volumes-between-machines" aria-label="Link to section: How to Backup and Restore Docker Volumes Between Machines">&lt;/a>&lt;/h1>&lt;p>When working with Docker, persistent data is often stored in volumes. Unlike container filesystems, volumes survive restarts and recreations. But what if you need to move this data from one machine to another?&lt;br>
Here&amp;rsquo;s a quick and reliable way to back up a Docker volume on one computer and restore it on another.&lt;/p></description></item><item><title>Testing Types</title><link>http://localhost:1313/testing-types/</link><pubDate>Tue, 11 Mar 2025 09:32:00 +0000</pubDate><guid>http://localhost:1313/testing-types/</guid><description>&lt;p>Understanding different types of software testing is crucial for delivering a reliable application. Smoke Testing checks basic stability after a new build, while Sanity Testing verifies specific bug fixes or minor updates. Functional Testing ensures that features work as expected based on business requirements. Regression Testing prevents new changes from breaking existing functionality. End-to-End (E2E) Testing simulates real-world user workflows, and Performance Testing checks system speed, load handling capacity, and responsiveness. Implementing these (some or all) test types helps maintain software quality and prevent critical failures.&lt;/p></description></item><item><title>Tools I Use on My Mac</title><link>http://localhost:1313/tools-i-use-on-my-mac/</link><pubDate>Mon, 10 Mar 2025 16:44:00 +0000</pubDate><guid>http://localhost:1313/tools-i-use-on-my-mac/</guid><description>&lt;h1 id="tools-i-use-on-my-mac">Tools I Use on My Mac&lt;a class="anchorjs-link" href="#tools-i-use-on-my-mac" aria-label="Link to section: Tools I Use on My Mac">&lt;/a>&lt;/h1>&lt;p>As a new Mac user, it has been a tough journey getting used to limitations of macOS compare to linux based os. I rely on a set of carefully chosen tools to improve productivity, streamline workflows, and make my overall experience less frustrating. Here&amp;rsquo;s a look at top 20 essential apps I use daily:&lt;/p>
&lt;h2 id="system--ui-enhancements">System &amp;amp; UI Enhancements&lt;a class="anchorjs-link" href="#system--ui-enhancements" aria-label="Link to section: System &amp;amp; UI Enhancements">&lt;/a>&lt;/h2>&lt;h3 id="1-scroll-reverser">1. Scroll Reverser&lt;a class="anchorjs-link" href="#1-scroll-reverser" aria-label="Link to section: 1. Scroll Reverser">&lt;/a>&lt;/h3>&lt;p>Allows me to reverse the scrolling direction for trackpads and mice independently, making navigation more intuitive.&lt;/p></description></item><item><title>Understanding T and *T method receivers in Go</title><link>http://localhost:1313/method-receivers-in-go/</link><pubDate>Sun, 23 Feb 2025 04:33:00 +0000</pubDate><guid>http://localhost:1313/method-receivers-in-go/</guid><description>&lt;p>In Go, method receivers determine whether a method acts on a copy of a value or a reference to it. This choice isn&amp;rsquo;t just about performance; it affects correctness and behavior, especially when dealing with synchronization primitives (mutex, wait group, etc), slices, and embedded types.&lt;/p>
&lt;p>In this post I explore when to use T (a value receiver) vs. *T (a pointer receiver) and why, in most cases, pointer receivers should be the default and preferred.&lt;/p></description></item><item><title>Analysis Paralysis in Engineering Teams</title><link>http://localhost:1313/analysis-paralysis/</link><pubDate>Mon, 10 Feb 2025 22:54:00 +0000</pubDate><guid>http://localhost:1313/analysis-paralysis/</guid><description>&lt;p>Analysis Paralysis in Engineering&lt;/p>
&lt;p>&lt;picture class="optimized-image-container">&lt;source srcset="http://localhost:1313/images/uploads/image_hu_18794c65f591ea13.webp 480w, http://localhost:1313/images/uploads/image_hu_e1ef0973d1a9f0c4.webp 800w, http://localhost:1313/images/uploads/image_hu_9814cb843775db78.webp 1024w" sizes="(max-width: 800px) 100vw, 800px" type="image/webp">&lt;img src="http://localhost:1313/images/uploads/image_hu_9814cb843775db78.webp" width="1024" height="1024" alt="An image representing &amp;ldquo;Analysis Paralysis&amp;rdquo; in engineering. It shows a team stuck in decision-making and hesitant to take action." loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />
 &lt;/picture>&lt;/p>
&lt;p>In engineering, progress is key. However, sometimes teams get stuck in endless discussions, over-planning, and constant changes, delaying actual work. This situation is called &amp;ldquo;Analysis Paralysis.&amp;rdquo; It happens when people focus too much on making perfect decisions instead of moving forward with practical solutions.&lt;/p></description></item><item><title>Go Clean Code Guidelines</title><link>http://localhost:1313/go-clean-code-guidelines/</link><pubDate>Sun, 22 Sep 2024 15:22:00 +0000</pubDate><guid>http://localhost:1313/go-clean-code-guidelines/</guid><description>&lt;h3 id="go-clean-code-guidelines-for-code-quality-and-maintainability">Go Clean Code Guidelines for Code Quality and Maintainability.&lt;a class="anchorjs-link" href="#go-clean-code-guidelines-for-code-quality-and-maintainability" aria-label="Link to section: Go Clean Code Guidelines for Code Quality and Maintainability.">&lt;/a>&lt;/h3>&lt;p>When it comes to writing clean, maintainable code, there are a few fundamental rules that can help improve the overall structure and quality of your codebase. As engineers, our goal should be to keep things simple, clear, and scalable. With this in mind, here are some guidelines which prioritize code readability, functional clarity, and the overall maintainability of a project.
These guidelines are based on principles from clean code, SOLID, and functional programming while emphasizing simplicity over unnecessary complexity.&lt;/p></description></item><item><title>SOLID and Functional Programming Principles in Go</title><link>http://localhost:1313/solid-and-functional-programming-principles-in-go/</link><pubDate>Sun, 22 Sep 2024 00:03:00 +0000</pubDate><guid>http://localhost:1313/solid-and-functional-programming-principles-in-go/</guid><description>&lt;p>Let&amp;rsquo;s go through the &lt;strong>SOLID principles&lt;/strong> and &lt;strong>functional programming principles&lt;/strong> that can apply to your Go codebase. I&amp;rsquo;ll provide simple Go examples along with brief explanations to show how each principle can improve code quality.&lt;/p>
&lt;hr>
&lt;h3 id="solid-principles">&lt;strong>SOLID Principles&lt;/strong>&lt;a class="anchorjs-link" href="#solid-principles" aria-label="Link to section: SOLID Principles">&lt;/a>&lt;/h3>&lt;ol>
&lt;li>
&lt;p>&lt;strong>S&lt;/strong>ingle Responsibility Principle (SRP)&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Description:&lt;/strong> A class or function should have only one reason to change, meaning it should only have one job or responsibility.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Example:&lt;/strong>&lt;/p>
&lt;div class="code-block">
 &lt;div class="code-header">
 &lt;div class="header-left">
 &lt;span class="code-lang">go&lt;/span>
 &lt;/div>
 &lt;div class="header-right">
 &lt;button class="wrap-code-button" title="Toggle line wrap" aria-label="Toggle line wrap">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M448 256c0-53-43-96-96-96H96c-17.7 0-32 14.3-32 32s14.3 32 32 32h256c17.7 0 32 14.3 32 32s-14.3 32-32 32H165.5l37.3-37.3c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L165.5 352H352c53 0 96-43 96-96zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="download-code-button" data-lang="go" title="Download Code" aria-label="Download Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="copy-code-button" title="Copy Code" aria-label="Copy Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">&lt;!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->&lt;path d="M384 336H192c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16l140.1 0L400 115.9V320c0 8.8-7.2 16-16 16zM192 384H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H192c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H256c35.3 0 64-28.7 64-64V416H272v32c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H96V128H64z"/>&lt;/svg>
 &lt;/button>
 &lt;/div>
 &lt;/div>
 &lt;div class="code-body">&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 1&lt;/span>&lt;span>&lt;span style="color:#8b949e;font-style:italic">// Good: Separate responsibilities into two functions&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 2&lt;/span>&lt;span>&lt;span style="color:#ff7b72">type&lt;/span> EmailSender &lt;span style="color:#ff7b72">struct&lt;/span>{}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 3&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 4&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 5&lt;/span>&lt;span>&lt;span style="color:#ff7b72">func&lt;/span> (e &lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span>EmailSender) &lt;span style="color:#d2a8ff;font-weight:bold">SendEmail&lt;/span>(to, subject, body &lt;span style="color:#ff7b72">string&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 6&lt;/span>&lt;span> &lt;span style="color:#8b949e;font-style:italic">// logic for sending email&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 7&lt;/span>&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 8&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 9&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">10&lt;/span>&lt;span>&lt;span style="color:#ff7b72">func&lt;/span> &lt;span style="color:#d2a8ff;font-weight:bold">formatEmailBody&lt;/span>(template &lt;span style="color:#ff7b72">string&lt;/span>, data &lt;span style="color:#ff7b72">map&lt;/span>[&lt;span style="color:#ff7b72">string&lt;/span>]&lt;span style="color:#ff7b72">string&lt;/span>) &lt;span style="color:#ff7b72">string&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">11&lt;/span>&lt;span> &lt;span style="color:#8b949e;font-style:italic">// logic for formatting the email body&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">12&lt;/span>&lt;span> &lt;span style="color:#ff7b72">return&lt;/span> &lt;span style="color:#a5d6ff">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">13&lt;/span>&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">14&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">15&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">16&lt;/span>&lt;span>&lt;span style="color:#8b949e;font-style:italic">// Avoid: Single function doing multiple jobs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">17&lt;/span>&lt;span>&lt;span style="color:#ff7b72">func&lt;/span> &lt;span style="color:#d2a8ff;font-weight:bold">sendFormattedEmail&lt;/span>(to, subject, template &lt;span style="color:#ff7b72">string&lt;/span>, data &lt;span style="color:#ff7b72">map&lt;/span>[&lt;span style="color:#ff7b72">string&lt;/span>]&lt;span style="color:#ff7b72">string&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">18&lt;/span>&lt;span> body &lt;span style="color:#ff7b72;font-weight:bold">:=&lt;/span> &lt;span style="color:#d2a8ff;font-weight:bold">formatEmailBody&lt;/span>(template, data)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">19&lt;/span>&lt;span> &lt;span style="color:#8b949e;font-style:italic">// email sending logic mixed with formatting&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">20&lt;/span>&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;/div>&lt;/li>
&lt;/ol>
&lt;hr>
&lt;ol start="2">
&lt;li>
&lt;p>&lt;strong>O&lt;/strong>pen/Closed Principle (OCP)&lt;/p></description></item><item><title>10 Essential Tips for Beginners Starting in IT</title><link>http://localhost:1313/essential-tips-for-beginners-starting-in-it/</link><pubDate>Fri, 23 Feb 2024 18:59:55 +0000</pubDate><guid>http://localhost:1313/essential-tips-for-beginners-starting-in-it/</guid><description>&lt;p>&lt;picture class="optimized-image-container">&lt;source srcset="http://localhost:1313/images/uploads/10-essential-tips-for-beginners-starting-in-it_hu_7efbf52520b823da.webp 480w, http://localhost:1313/images/uploads/10-essential-tips-for-beginners-starting-in-it_hu_5c580e1fda26c939.webp 800w, http://localhost:1313/images/uploads/10-essential-tips-for-beginners-starting-in-it_hu_5f75c2c570b17c57.webp 1200w, http://localhost:1313/images/uploads/10-essential-tips-for-beginners-starting-in-it_hu_42d2c6dd64b095a.webp 2048w" sizes="(max-width: 800px) 100vw, 800px" type="image/webp">&lt;img src="http://localhost:1313/images/uploads/10-essential-tips-for-beginners-starting-in-it_hu_42d2c6dd64b095a.webp" width="2048" height="2048" alt="A girl sitting in a room studying and thinking. Generated with AI by Vikash from Lorbic.com" loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />
 &lt;/picture>&lt;/p>
&lt;p>Are you new to IT? Feeling a bit overwhelmed? Don&amp;rsquo;t worry, I&amp;rsquo;ve got you covered! In this article, I&amp;rsquo;ll share 10 essential tips to help you get started on your journey in Information Technology. From mastering the basics to gaining hands-on experience and staying curious, these tips will set you on the right path. Let&amp;rsquo;s dive in and start the IT adventure!&lt;/p></description></item><item><title>NGINX: Building from Source and Installation on Linux (Updated)</title><link>http://localhost:1313/build-nginx-from-source/</link><pubDate>Fri, 02 Feb 2024 18:28:00 +0000</pubDate><guid>http://localhost:1313/build-nginx-from-source/</guid><description>&lt;p>&lt;a href="https://en.wikipedia.org/wiki/Nginx" target="_blank" rel="noopener noreferrer">NGINX&lt;/a> is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. NGINX is a free and open source software licensed under &lt;em>2-clause BSD&lt;/em>.&lt;br>
You can easily download and use NGINX in Windows, macOS, Linux and other operating systems &lt;a href="https://nginx.org/en/download.html" target="_blank" rel="noopener noreferrer">link&lt;/a> read NGINX installation instructions from the &lt;a href="https://nginx.org/en/docs/install.html" target="_blank" rel="noopener noreferrer">official docs&lt;/a> and install on your operating system for free.&lt;/p>
&lt;p>But, in this blog we are going to build NGINX from source code. And we will configure NGINX&amp;rsquo;s settings, paths, and add or remove modules.&lt;/p></description></item><item><title>How to Install Docker Desktop on Another Drive in Windows</title><link>http://localhost:1313/docker-custom-installation-location-windows/</link><pubDate>Sat, 27 Jan 2024 13:11:47 +0000</pubDate><guid>http://localhost:1313/docker-custom-installation-location-windows/</guid><description>&lt;p>Docker Desktop on Windows installs to your C: drive by default. When you pull large images (often 1.5GB each), add build layers, and stack containers, the ext4.vhdx file that holds all your container data bloats fast. This guide shows you how to route Docker to a secondary drive entirely, using CLI flags instead of the GUI.&lt;/p>
&lt;h2 id="quick-start">Quick Start&lt;a class="anchorjs-link" href="#quick-start" aria-label="Link to section: Quick Start">&lt;/a>&lt;/h2>&lt;p>Uninstall any existing Docker first. Then open PowerShell as admin and navigate to your Downloads folder where the installer is. Run:&lt;/p></description></item><item><title>Build a URL redirector application with Cloudflare Workers and Cloudflare D1</title><link>http://localhost:1313/build-a-url-redirector-application-with-cloudflare-workers-and-cloudflare-d1/</link><pubDate>Sun, 07 Jan 2024 09:04:43 +0000</pubDate><guid>http://localhost:1313/build-a-url-redirector-application-with-cloudflare-workers-and-cloudflare-d1/</guid><description>&lt;p>&lt;picture class="optimized-image-container">&lt;source srcset="http://localhost:1313/images/uploads/lorbic.com-cloudflare-workers-d1-featured-image-2x_hu_724983aba1c7fc5e.webp 480w, http://localhost:1313/images/uploads/lorbic.com-cloudflare-workers-d1-featured-image-2x_hu_2e568611c693105d.webp 800w, http://localhost:1313/images/uploads/lorbic.com-cloudflare-workers-d1-featured-image-2x_hu_8e0003d5c7298866.webp 1200w, http://localhost:1313/images/uploads/lorbic.com-cloudflare-workers-d1-featured-image-2x_hu_3efefac0ffbbe37b.webp 1280w" sizes="(max-width: 800px) 100vw, 800px" type="image/webp">&lt;img src="http://localhost:1313/images/uploads/lorbic.com-cloudflare-workers-d1-featured-image-2x_hu_3efefac0ffbbe37b.webp" width="1280" height="720" alt="Lorbic.com - Cloudflare Workers and D1 database used to build a simple url redirector app." title="Clopudflare Workers and D1 database - lorbic.com" loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />
 &lt;/picture>&lt;/p>
&lt;p>In today&amp;rsquo;s fast-paced digital world, where attention spans are short, optimizing website performance and user experience is crucial. Imagine asking someone to visit a lengthy URL (&lt;a href="https://lorbic.com/setting-up-llama-2-with-docker-on-your-gaming-laptop-using-ollama/" target="_blank" rel="noopener noreferrer">https://lorbic.com/setting-up-llama-2-with-docker-on-your-gaming-laptop-using-ollama/&lt;/a>) – their reaction might be a disappointed face (🙁). Typing such URLs can lead to errors, resulting in users landing on a dreaded 404 page.&lt;/p></description></item><item><title>Setting Up Llama 2 with Docker on Your Gaming Laptop Using Ollama</title><link>http://localhost:1313/setting-up-llama-2-with-docker-on-your-gaming-laptop-using-ollama/</link><pubDate>Sat, 02 Dec 2023 13:40:01 +0000</pubDate><guid>http://localhost:1313/setting-up-llama-2-with-docker-on-your-gaming-laptop-using-ollama/</guid><description>&lt;p>This article is simple guide on setting up Llama 2, a powerful large language model, on your gaming laptop using Docker and the Ollama platform. Ollama makes it very easy to run many LLMs locally. In this detailed article, I&amp;rsquo;ll cover each step, such as Ollama installation and ease of interaction through a Chat GPT-like UI. Before we go into the technical details, let&amp;rsquo;s understand what a large language model is.&lt;/p></description></item><item><title>AWS - Host Static Website With S3 + Cloudfront + Route53</title><link>http://localhost:1313/aws-host-static-website-with-s3--cloudfront--route53/</link><pubDate>Sun, 07 May 2023 15:14:24 +0000</pubDate><guid>http://localhost:1313/aws-host-static-website-with-s3--cloudfront--route53/</guid><description>&lt;p>I﻿n this blog I&amp;rsquo;ll discuss how to host a static website on AWS with S3, CloudFront and Route 53. We will secure our website with SSL certificate generated from Certificate Manger, enable HTTP/2 and HTTP/3 and redirect insecure http traffic to https version of the website. We will also make our bucket private and add policy to allow access from CloudFront.&lt;/p>
&lt;p>&lt;picture class="optimized-image-container">&lt;source srcset="http://localhost:1313/images/uploads/museums-victoria-zg0if6dcns0-unsplash_2_hu_fc8c2be84e68ff4.webp 480w, http://localhost:1313/images/uploads/museums-victoria-zg0if6dcns0-unsplash_2_hu_c4681b425210465f.webp 800w, http://localhost:1313/images/uploads/museums-victoria-zg0if6dcns0-unsplash_2_hu_bf3e51c8d21beb27.webp 1200w, http://localhost:1313/images/uploads/museums-victoria-zg0if6dcns0-unsplash_2_hu_2d6015b35c249888.webp 1632w" sizes="(max-width: 800px) 100vw, 800px" type="image/webp">&lt;img src="http://localhost:1313/images/uploads/museums-victoria-zg0if6dcns0-unsplash_2_hu_2d6015b35c249888.webp" width="1632" height="1206" alt="Picture of a Motor Buggy" title="Picture of a Motor Buggy" loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />
 &lt;/picture>&lt;/p></description></item><item><title>Simplifying Search Activation: A Quick Guide with JavaScript</title><link>http://localhost:1313/simplifying-search-activation-a-quick-guide-with-javascript/</link><pubDate>Sat, 01 Apr 2023 08:28:39 +0000</pubDate><guid>http://localhost:1313/simplifying-search-activation-a-quick-guide-with-javascript/</guid><description>&lt;p>Learn how to enhance user experience by activating the search input field with a simple key press on your website. This quick guide provides a code snippet and easy-to-follow steps.&lt;/p>
&lt;h3 id="1-html-markup-for-search-input">1. HTML Markup for Search Input:&lt;a class="anchorjs-link" href="#1-html-markup-for-search-input" aria-label="Link to section: 1. HTML Markup for Search Input:">&lt;/a>&lt;/h3>&lt;div class="code-block">
 &lt;div class="code-header">
 &lt;div class="header-left">
 &lt;span class="code-lang">html&lt;/span>
 &lt;/div>
 &lt;div class="header-right">
 &lt;button class="wrap-code-button" title="Toggle line wrap" aria-label="Toggle line wrap">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M448 256c0-53-43-96-96-96H96c-17.7 0-32 14.3-32 32s14.3 32 32 32h256c17.7 0 32 14.3 32 32s-14.3 32-32 32H165.5l37.3-37.3c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L165.5 352H352c53 0 96-43 96-96zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="download-code-button" data-lang="html" title="Download Code" aria-label="Download Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="copy-code-button" title="Copy Code" aria-label="Copy Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">&lt;!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->&lt;path d="M384 336H192c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16l140.1 0L400 115.9V320c0 8.8-7.2 16-16 16zM192 384H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H192c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H256c35.3 0 64-28.7 64-64V416H272v32c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H96V128H64z"/>&lt;/svg>
 &lt;/button>
 &lt;/div>
 &lt;/div>
 &lt;div class="code-body">&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-html" data-lang="html">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 1&lt;/span>&lt;span>&amp;lt;&lt;span style="color:#7ee787">form&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 2&lt;/span>&lt;span> &amp;lt;&lt;span style="color:#7ee787">input&lt;/span> type&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;text&amp;#34;&lt;/span> id&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;search-input&amp;#34;&lt;/span> placeholder&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;$ grep...&amp;#34;&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 3&lt;/span>&lt;span>&amp;lt;/&lt;span style="color:#7ee787">form&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 4&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 5&lt;/span>&lt;span>&lt;span style="color:#8b949e;font-style:italic">&amp;lt;!-- If you have a button to activate the search field like in this website --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 6&lt;/span>&lt;span>&amp;lt;&lt;span style="color:#7ee787">li&lt;/span> class&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;search-icon&amp;#34;&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 7&lt;/span>&lt;span> &amp;lt;&lt;span style="color:#7ee787">a&lt;/span> href&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;javascript:void(0)&amp;#34;&lt;/span> id&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;search-button&amp;#34;&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 8&lt;/span>&lt;span> &amp;lt;&lt;span style="color:#7ee787">i&lt;/span> class&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>&lt;span style="color:#a5d6ff">&amp;#34;fa fa-search&amp;#34;&lt;/span>&amp;gt;&amp;lt;/&lt;span style="color:#7ee787">i&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"> 9&lt;/span>&lt;span> &amp;lt;/&lt;span style="color:#7ee787">a&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">10&lt;/span>&lt;span>&amp;lt;/&lt;span style="color:#7ee787">li&lt;/span>&amp;gt;&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;/div>&lt;h3 id="2-javascript-functionality">2. JavaScript Functionality:&lt;a class="anchorjs-link" href="#2-javascript-functionality" aria-label="Link to section: 2. JavaScript Functionality:">&lt;/a>&lt;/h3>&lt;p>Activate the search input field by pressing a key (in this example, the &amp;lsquo;/&amp;rsquo; key). Modify the key binding according to your preferences.&lt;/p></description></item><item><title>Setting Up a PostgreSQL Container: A Quick Guide</title><link>http://localhost:1313/setting-up-a-postgresql-container-a-quick-guide/</link><pubDate>Sat, 01 Apr 2023 06:41:46 +0000</pubDate><guid>http://localhost:1313/setting-up-a-postgresql-container-a-quick-guide/</guid><description>&lt;p>Learn the simple and fast process of creating a PostgreSQL container using Docker. This guide provides both the command and a detailed explanation of the container and PostgreSQL database configuration.&lt;/p>
&lt;h2 id="1-create-the-postgresql-container">1. Create the PostgreSQL Container:&lt;a class="anchorjs-link" href="#1-create-the-postgresql-container" aria-label="Link to section: 1. Create the PostgreSQL Container:">&lt;/a>&lt;/h2>&lt;div class="code-block">
 &lt;div class="code-header">
 &lt;div class="header-left">
 &lt;span class="code-lang">shell&lt;/span>
 &lt;/div>
 &lt;div class="header-right">
 &lt;button class="wrap-code-button" title="Toggle line wrap" aria-label="Toggle line wrap">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M448 256c0-53-43-96-96-96H96c-17.7 0-32 14.3-32 32s14.3 32 32 32h256c17.7 0 32 14.3 32 32s-14.3 32-32 32H165.5l37.3-37.3c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L165.5 352H352c53 0 96-43 96-96zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="download-code-button" data-lang="shell" title="Download Code" aria-label="Download Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="copy-code-button" title="Copy Code" aria-label="Copy Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">&lt;!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->&lt;path d="M384 336H192c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16l140.1 0L400 115.9V320c0 8.8-7.2 16-16 16zM192 384H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H192c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H256c35.3 0 64-28.7 64-64V416H272v32c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H96V128H64z"/>&lt;/svg>
 &lt;/button>
 &lt;/div>
 &lt;/div>
 &lt;div class="code-body">&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">1&lt;/span>&lt;span>docker run -d --name postgres &lt;span style="color:#79c0ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">2&lt;/span>&lt;span>&lt;span style="color:#79c0ff">&lt;/span> -e &lt;span style="color:#79c0ff">POSTGRES_PASSWORD&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>RunningFlying2 &lt;span style="color:#79c0ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">3&lt;/span>&lt;span>&lt;span style="color:#79c0ff">&lt;/span> -e &lt;span style="color:#79c0ff">PGDATA&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span>/var/lib/postgresql/data/pgdata &lt;span style="color:#79c0ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">4&lt;/span>&lt;span>&lt;span style="color:#79c0ff">&lt;/span> -v postgres_data:/var/lib/postgresql/data &lt;span style="color:#79c0ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">5&lt;/span>&lt;span>&lt;span style="color:#79c0ff">&lt;/span> -p 5432:5432 &lt;span style="color:#79c0ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">6&lt;/span>&lt;span>&lt;span style="color:#79c0ff">&lt;/span> postgres:latest
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">7&lt;/span>&lt;span> &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;/div>&lt;h2 id="2-explanation">&lt;strong>2. Explanation:&lt;/strong>&lt;a class="anchorjs-link" href="#2-explanation" aria-label="Link to section: 2. Explanation:">&lt;/a>&lt;/h2>&lt;p>The above command initiates the creation of a container with the latest version of PostgreSQL. Here&amp;rsquo;s a breakdown of the parameters used:&lt;/p></description></item><item><title>Learn Dart Programming</title><link>http://localhost:1313/learn-dart-programming/</link><pubDate>Wed, 12 May 2021 16:28:00 +0530</pubDate><guid>http://localhost:1313/learn-dart-programming/</guid><description>&lt;p>Good Evening,
Here are the Hands-on notes for Dart Programming Language.
I created these notes when I was learning Dart Language. So, these notes might help you too.
You can use these notes as a quick reference to Syntax and Demo.
I&amp;rsquo;ve covered almost every fundamental concept of Dart in this article.&lt;/p>
&lt;p>&lt;img src="https://images.unsplash.com/photo-1576504164753-8fd338cd450b?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&amp;amp;ixlib=rb-1.2.1&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=727&amp;amp;q=80" alt="" loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />&lt;/p>
&lt;h2 id="photo-by-birmingham-museums-trust">Photo by Birmingham Museums Trust&lt;a class="anchorjs-link" href="#photo-by-birmingham-museums-trust" aria-label="Link to section: Photo by Birmingham Museums Trust">&lt;/a>&lt;/h2>&lt;h1 id="1-basics">1. Basics&lt;a class="anchorjs-link" href="#1-basics" aria-label="Link to section: 1. Basics">&lt;/a>&lt;/h1>&lt;h2 id="11-the-main-function">1.1 The Main Function&lt;a class="anchorjs-link" href="#11-the-main-function" aria-label="Link to section: 1.1 The Main Function">&lt;/a>&lt;/h2>&lt;p>Every Dart program starts execution from &lt;code>main()&lt;/code> functions.&lt;/p></description></item><item><title>Types of Pointers in C/C++</title><link>http://localhost:1313/types-of-pointers-in-c/c-/</link><pubDate>Wed, 12 May 2021 16:16:41 +0530</pubDate><guid>http://localhost:1313/types-of-pointers-in-c/c-/</guid><description>&lt;p>&lt;img src="https://images.unsplash.com/photo-1509116453669-0baa67ef9073?ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8aHlhY2ludGglMjBtYWNhd3xlbnwwfHwwfHw%3D&amp;amp;ixlib=rb-1.2.1&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=500&amp;amp;q=60" alt="Photo of Hyacinth macaw on Unsplash - Village Programmer" loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />&lt;br>
Photo of &lt;em>Hyacinth macaw by&lt;/em> Roi Dimor on &lt;a href="https://unsplash.com/photos/AEQ-166CWY8" target="_blank" rel="noopener noreferrer">Unsplash&lt;/a>&lt;/p>
&lt;hr>
&lt;h1 id="types-of-pointers-in-c--c">Types of Pointers in C / C++&lt;a class="anchorjs-link" href="#types-of-pointers-in-c--c" aria-label="Link to section: Types of Pointers in C / C&amp;#43;&amp;#43;">&lt;/a>&lt;/h1>&lt;h2 id="1-null-pointer">1. Null Pointer&lt;a class="anchorjs-link" href="#1-null-pointer" aria-label="Link to section: 1. Null Pointer">&lt;/a>&lt;/h2>&lt;p>It is a pointer pointing to nothing. &lt;strong>NULL&lt;/strong> pointer points to the base address of the segment.&lt;/p>
&lt;p>&lt;code>-EXAMPLE-&lt;/code>&lt;/p>
&lt;div class="code-block">
 &lt;div class="code-header">
 &lt;div class="header-left">
 &lt;span class="code-lang">c&lt;/span>
 &lt;/div>
 &lt;div class="header-right">
 &lt;button class="wrap-code-button" title="Toggle line wrap" aria-label="Toggle line wrap">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M448 256c0-53-43-96-96-96H96c-17.7 0-32 14.3-32 32s14.3 32 32 32h256c17.7 0 32 14.3 32 32s-14.3 32-32 32H165.5l37.3-37.3c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L165.5 352H352c53 0 96-43 96-96zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="download-code-button" data-lang="c" title="Download Code" aria-label="Download Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="copy-code-button" title="Copy Code" aria-label="Copy Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">&lt;!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->&lt;path d="M384 336H192c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16l140.1 0L400 115.9V320c0 8.8-7.2 16-16 16zM192 384H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H192c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H256c35.3 0 64-28.7 64-64V416H272v32c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H96V128H64z"/>&lt;/svg>
 &lt;/button>
 &lt;/div>
 &lt;/div>
 &lt;div class="code-body">&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">1&lt;/span>&lt;span>&lt;span style="color:#ff7b72">int&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span> ptr &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> (&lt;span style="color:#ff7b72">int&lt;/span>) &lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span> &lt;span style="color:#a5d6ff">0&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">2&lt;/span>&lt;span>&lt;span style="color:#ff7b72">float&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span> fptr &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> (&lt;span style="color:#ff7b72">float&lt;/span>) &lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span> &lt;span style="color:#a5d6ff">0&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">3&lt;/span>&lt;span>&lt;span style="color:#ff7b72">double&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span> dptr &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> (&lt;span style="color:#ff7b72">double&lt;/span>) &lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span> &lt;span style="color:#a5d6ff">0&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">4&lt;/span>&lt;span>&lt;span style="color:#ff7b72">char&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span> chptr &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> (&lt;span style="color:#ff7b72">char&lt;/span>) &lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span> &lt;span style="color:#a5d6ff">0&lt;/span>;&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;/div>&lt;h5 id="other-ways-of-initializing-null-pointer">Other ways of initializing NULL pointer&lt;a class="anchorjs-link" href="#other-ways-of-initializing-null-pointer" aria-label="Link to section: Other ways of initializing NULL pointer">&lt;/a>&lt;/h5>&lt;div class="code-block">
 &lt;div class="code-header">
 &lt;div class="header-left">
 &lt;span class="code-lang">c&lt;/span>
 &lt;/div>
 &lt;div class="header-right">
 &lt;button class="wrap-code-button" title="Toggle line wrap" aria-label="Toggle line wrap">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M448 256c0-53-43-96-96-96H96c-17.7 0-32 14.3-32 32s14.3 32 32 32h256c17.7 0 32 14.3 32 32s-14.3 32-32 32H165.5l37.3-37.3c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L165.5 352H352c53 0 96-43 96-96zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="download-code-button" data-lang="c" title="Download Code" aria-label="Download Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="copy-code-button" title="Copy Code" aria-label="Copy Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">&lt;!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->&lt;path d="M384 336H192c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16l140.1 0L400 115.9V320c0 8.8-7.2 16-16 16zM192 384H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H192c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H256c35.3 0 64-28.7 64-64V416H272v32c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H96V128H64z"/>&lt;/svg>
 &lt;/button>
 &lt;/div>
 &lt;/div>
 &lt;div class="code-body">&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">1&lt;/span>&lt;span>&lt;span style="color:#ff7b72">int&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span> ptr &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> NULL;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">2&lt;/span>&lt;span>&lt;span style="color:#ff7b72">char&lt;/span> &lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span> chptr &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#a5d6ff">&amp;#39;\0&amp;#39;&lt;/span>;&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;/div>&lt;blockquote>
&lt;h4 id="null-also-means-0-in-macro">NULL also means 0 in macro&lt;a class="anchorjs-link" href="#null-also-means-0-in-macro" aria-label="Link to section: NULL also means 0 in macro">&lt;/a>&lt;/h4>&lt;div class="code-block">
 &lt;div class="code-header">
 &lt;div class="header-left">
 &lt;span class="code-lang">c&lt;/span>
 &lt;/div>
 &lt;div class="header-right">
 &lt;button class="wrap-code-button" title="Toggle line wrap" aria-label="Toggle line wrap">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M448 256c0-53-43-96-96-96H96c-17.7 0-32 14.3-32 32s14.3 32 32 32h256c17.7 0 32 14.3 32 32s-14.3 32-32 32H165.5l37.3-37.3c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L165.5 352H352c53 0 96-43 96-96zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="download-code-button" data-lang="c" title="Download Code" aria-label="Download Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="copy-code-button" title="Copy Code" aria-label="Copy Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">&lt;!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->&lt;path d="M384 336H192c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16l140.1 0L400 115.9V320c0 8.8-7.2 16-16 16zM192 384H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H192c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H256c35.3 0 64-28.7 64-64V416H272v32c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H96V128H64z"/>&lt;/svg>
 &lt;/button>
 &lt;/div>
 &lt;/div>
 &lt;div class="code-body">&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">1&lt;/span>&lt;span>&lt;span style="color:#8b949e;font-weight:bold;font-style:italic">#define NULL 0&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;/div>&lt;/blockquote>
&lt;hr>
&lt;h2 id="2-dangling-pointer">2. Dangling Pointer&lt;a class="anchorjs-link" href="#2-dangling-pointer" aria-label="Link to section: 2. Dangling Pointer">&lt;/a>&lt;/h2>&lt;p>A pointer pointing to the memory address of any variable (or object) which has been deleted from memory.&lt;br>
When a pointer points to a deleted memory address, the pointer is called as a &lt;em>dangling pointer&lt;/em>.&lt;/p></description></item><item><title>Avoid Memory Leaks In C++</title><link>http://localhost:1313/avoid-memory-leaks-in-c-/</link><pubDate>Tue, 04 May 2021 01:24:39 +0530</pubDate><guid>http://localhost:1313/avoid-memory-leaks-in-c-/</guid><description>&lt;p>&lt;strong>Instructions&lt;/strong>&lt;/p>
&lt;p>Things You&amp;rsquo;ll Need&lt;/p>
&lt;ul>
&lt;li>Proficiency in C++&lt;/li>
&lt;li>C++ compiler&lt;/li>
&lt;li>Debugger and other investigative software tools&lt;/li>
&lt;/ul>
&lt;h1 id="part-1">Part 1&lt;a class="anchorjs-link" href="#part-1" aria-label="Link to section: Part 1">&lt;/a>&lt;/h1>&lt;p>Understand the operator basics. The C++ operator &lt;code>new&lt;/code> allocates heap memory. The &lt;code>delete&lt;/code> operator frees heap memory. For every &lt;code>new&lt;/code>, you should use a &lt;code>delete&lt;/code> so that you free the same memory you allocated:&lt;/p>
&lt;div class="code-block">
 &lt;div class="code-header">
 &lt;div class="header-left">
 &lt;span class="code-lang">cpp&lt;/span>
 &lt;/div>
 &lt;div class="header-right">
 &lt;button class="wrap-code-button" title="Toggle line wrap" aria-label="Toggle line wrap">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M448 256c0-53-43-96-96-96H96c-17.7 0-32 14.3-32 32s14.3 32 32 32h256c17.7 0 32 14.3 32 32s-14.3 32-32 32H165.5l37.3-37.3c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L165.5 352H352c53 0 96-43 96-96zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="download-code-button" data-lang="cpp" title="Download Code" aria-label="Download Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/>&lt;/svg>

 &lt;/button>
 &lt;button class="copy-code-button" title="Copy Code" aria-label="Copy Code">
 &lt;svg class="svg-icon " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">&lt;!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->&lt;path d="M384 336H192c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16l140.1 0L400 115.9V320c0 8.8-7.2 16-16 16zM192 384H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H192c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H256c35.3 0 64-28.7 64-64V416H272v32c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H96V128H64z"/>&lt;/svg>
 &lt;/button>
 &lt;/div>
 &lt;/div>
 &lt;div class="code-body">&lt;div class="highlight">&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-cpp" data-lang="cpp">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">1&lt;/span>&lt;span>&lt;span style="color:#ff7b72">char&lt;/span>&lt;span style="color:#ff7b72;font-weight:bold">*&lt;/span> str &lt;span style="color:#ff7b72;font-weight:bold">=&lt;/span> &lt;span style="color:#ff7b72">new&lt;/span> &lt;span style="color:#ff7b72">char&lt;/span> [&lt;span style="color:#a5d6ff">30&lt;/span>]; &lt;span style="color:#8b949e;font-style:italic">// Allocate 30 bytes to house a string.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681">2&lt;/span>&lt;span>&lt;span style="color:#8b949e;font-style:italic">&lt;/span>&lt;span style="color:#ff7b72">delete&lt;/span> [] str; &lt;span style="color:#8b949e;font-style:italic">// Clear those 30 bytes and make str point nowhere.
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>
&lt;/div>&lt;h1 id="part-2">Part 2&lt;a class="anchorjs-link" href="#part-2" aria-label="Link to section: Part 2">&lt;/a>&lt;/h1>&lt;p>Reallocate memory only if you&amp;rsquo;ve deleted. In the code below, &lt;code>str&lt;/code> acquires a new address with the second allocation. The first address is lost irretrievably, and so are the 30 bytes that it pointed to. Now they&amp;rsquo;re impossible to free, and you have a memory leak:&lt;/p></description></item><item><title>Operators in Bash Shell Programming</title><link>http://localhost:1313/operators-in-bash-shell-programming/</link><pubDate>Tue, 04 May 2021 01:16:10 +0530</pubDate><guid>http://localhost:1313/operators-in-bash-shell-programming/</guid><description>&lt;p>&lt;img src="https://images.unsplash.com/photo-1614314107768-6018061b5b72?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&amp;amp;ixlib=rb-1.2.1&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=1334&amp;amp;q=80" alt="A Picture of Pluto by NASA featured on Village Programmer" loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />
Photo by &lt;a href="https://unsplash.com/photos/-5V6VZxSQRo" target="_blank" rel="noopener noreferrer">NASA&lt;/a> on Unsplash&lt;/p>
&lt;hr>
&lt;p>If you want to learn bash bash scripting please read this article.&lt;br>
&lt;a href="http://localhost:1313/post/learn-complete-linux-bash-scripting-in-one-article/">Learn complete Linux bash (shell) scripting in one article&lt;/a>&lt;/p>
&lt;p>Operators help us perform various types of operations such as addition, multiplication etc.&lt;br>
There are following types of operators present in bash:&lt;/p>
&lt;ul>
&lt;li>Arithmetic,&lt;/li>
&lt;li>Relational,&lt;/li>
&lt;li>Boolean,&lt;/li>
&lt;li>File Test,&lt;/li>
&lt;li>String Test&lt;/li>
&lt;/ul>
&lt;h2 id="1-arithmetic-operators">1. Arithmetic Operators&lt;a class="anchorjs-link" href="#1-arithmetic-operators" aria-label="Link to section: 1. Arithmetic Operators">&lt;/a>&lt;/h2>&lt;p>All the arithmetic operators present in bash are discussed below with examples.&lt;br>
These operators work with integers.&lt;/p></description></item><item><title>Learn Complete Linux Bash Scripting in One Article</title><link>http://localhost:1313/learn-complete-linux-bash-scripting-in-one-article/</link><pubDate>Tue, 04 May 2021 00:59:14 +0530</pubDate><guid>http://localhost:1313/learn-complete-linux-bash-scripting-in-one-article/</guid><description>&lt;p>&lt;img src="https://images.pexels.com/photos/745266/pexels-photo-745266.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;dpr=2&amp;amp;h=650&amp;amp;w=940" alt="" loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />
&amp;ndash; Photo by &lt;strong>&lt;a href="https://www.pexels.com/@osho?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels" target="_blank" rel="noopener noreferrer">Iván Rivero&lt;/a>&lt;/strong> from &lt;strong>&lt;a href="https://www.pexels.com/photo/tractor-with-trailer-under-cloudy-skies-during-day-745266/?utm_content=attributionCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=pexels" target="_blank" rel="noopener noreferrer">Pexels&lt;/a>&lt;/strong>&lt;/p>
&lt;p>In this article I&amp;rsquo;ll be discussing about linux bash scripting (shell scripting) and I will cover every fundamental concept that you need to get started with bash scripting under linux environment.&lt;br>
Bash scripting is a critical skill for every programmer.&lt;/p>
&lt;p>First of all you will need a &lt;strong>linux machine&lt;/strong> to execute these scripts.&lt;br>
You can use any of the below techniques to get a linux machine:&lt;/p></description></item><item><title>Access Wsl Filesystem From Windows 10 File Explorer</title><link>http://localhost:1313/access-wsl-filesystem-from-windows-10-file-explorer/</link><pubDate>Tue, 04 May 2021 00:52:26 +0530</pubDate><guid>http://localhost:1313/access-wsl-filesystem-from-windows-10-file-explorer/</guid><description>&lt;p>&lt;img src="https://images.unsplash.com/photo-1442120108414-42e7ea50d0b5?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw=&amp;amp;ixlib=rb-1.2.1&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=818&amp;amp;q=80" alt="" loading="eager" decoding="async" fetchpriority="high" class="img-fluid" />&lt;/p>
&lt;p>If you want to get Linux environment in your Windows system there are some solutions that provide the opportunity.&lt;br>
For example MYSYS, CYGWIN and a Virtual Machine (If you want complete linux machine) or Multiple Boot.&lt;br>
But some of them aren&amp;rsquo;t much powerful and some are resources hungry like Virtual Machine.&lt;br>
So, the solution is &lt;strong>WSL (Windows Subsystem for Linux)&lt;/strong>.&lt;br>
You can learn how to setup WSL from &lt;a href="https://docs.microsoft.com/en-us/windows/wsl/install-win10#manual-installation-steps" target="_blank" rel="noopener noreferrer">here&lt;/a>.&lt;/p></description></item></channel></rss>