<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Technology on Vivek&#39;s Blog</title>
    <link>https://www.codevivek.com/categories/technology/</link>
    <description>Recent content in Technology on Vivek&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <managingEditor>viveklp1995@gmail.com (Vivek Singh)</managingEditor>
    <webMaster>viveklp1995@gmail.com (Vivek Singh)</webMaster>
    <lastBuildDate>Mon, 28 Jul 2025 19:56:55 +0530</lastBuildDate>
    <atom:link href="https://www.codevivek.com/categories/technology/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Understanding DNS: The Internet&#39;s Phone Book</title>
      <link>https://www.codevivek.com/understanding-dns/</link>
      <pubDate>Mon, 28 Jul 2025 10:00:00 +0530</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/understanding-dns/</guid>
      <description>&lt;h1 id=&#34;understanding-dns-the-internets-phone-book&#34;&gt;Understanding DNS: The Internet&amp;rsquo;s Phone Book&lt;/h1&gt;&#xA;&lt;p&gt;Ever wondered what happens when you type &lt;code&gt;google.com&lt;/code&gt; into your browser? Behind that simple action lies one of the most elegant distributed systems ever created: the Domain Name System (DNS). Think of it as the internet&amp;rsquo;s phone book, but instead of looking up phone numbers, it translates human-readable domain names into IP addresses that computers can understand.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-exactly-is-dns&#34;&gt;What Exactly is DNS?&lt;/h2&gt;&#xA;&lt;p&gt;DNS is essentially a hierarchical, distributed database that maps domain names to IP addresses. When you visit a website, your computer needs to know the exact IP address of the server hosting that site. Since remembering &lt;code&gt;142.250.80.14&lt;/code&gt; is much harder than remembering &lt;code&gt;google.com&lt;/code&gt;, DNS acts as the translator.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deconstructing Kubernetes Scheduling Mechanisms</title>
      <link>https://www.codevivek.com/deconstructing-kubernetes-scheduling-mechanisms/</link>
      <pubDate>Thu, 10 Oct 2024 13:57:40 +0800</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/deconstructing-kubernetes-scheduling-mechanisms/</guid>
      <description>&lt;h3 id=&#34;deconstructing-kubernetes-scheduling&#34;&gt;Deconstructing Kubernetes Scheduling&lt;/h3&gt;&#xA;&lt;p&gt;Think of Kubernetes as a super-organized logistics manager. Its job? To ensure every Pod finds the perfect node to live on, based on its requirements, preferences, and constraints.&lt;/p&gt;&#xA;&lt;p&gt;But Kubernetes isn&amp;rsquo;t just about making sure the Pod &amp;ldquo;finds a place.&amp;rdquo; It uses sophisticated scheduling mechanisms like affinity, anti-affinity, taints, tolerations, and even direct assignments with &lt;code&gt;nodeName&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s dive into how Kubernetes works its scheduling magic. Before we start with that, lets just get a brief idea on how the api server decides which node the application should be deployed into.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deconstructing a Kubernetes Deployment</title>
      <link>https://www.codevivek.com/deconstructing-a-kubernetes-deployment/</link>
      <pubDate>Mon, 23 Sep 2024 13:57:40 +0800</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/deconstructing-a-kubernetes-deployment/</guid>
      <description>&lt;h1 id=&#34;deconstructing-a-kubernetes-deployment&#34;&gt;Deconstructing a Kubernetes Deployment&lt;/h1&gt;&#xA;&lt;p&gt;Think back to the first time you laid eyes on a Kubernetes deployment manifest. Did it make any sense to you apart from the &lt;code&gt;image&lt;/code&gt; and &lt;code&gt;container&lt;/code&gt; parameters? Wait, it did? Well, that makes one of us!&lt;/p&gt;&#xA;&lt;p&gt;When I first saw a Kubernetes deployment, I was hit with a flurry of questions. Questions that made me feel like I had opened the Matrix. Now, after some much-needed experience (and a few existential crises), I think I can finally answer some of those burning questions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Just Enough Kubernetes: Architecture</title>
      <link>https://www.codevivek.com/just-enough-kubernetes/</link>
      <pubDate>Sat, 10 Sep 2022 13:57:40 +0800</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/just-enough-kubernetes/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TLDR&lt;/h1&gt;&#xA;&lt;p&gt;Kubernetes is a container orchestration tool in which you can use multiple machines/VM’s to create a cluster. When cluster is created, application deployed on it are distributed throughout the nodes and Kubernetes makes sure they are up and available depending on the provided configuration.&lt;/p&gt;&#xA;&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Node&lt;/strong&gt;: A physical machine or VM where our applications are run when deployed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cluster&lt;/strong&gt;: A combination of nodes running together. It is best practice to have multiple nodes running at the same time to avoid a failure if any one of the nodes in the cluster stops working.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating complex objects using the Builder Pattern</title>
      <link>https://www.codevivek.com/creating-complex-objects-using-the-builder-pattern/</link>
      <pubDate>Sat, 30 Apr 2022 13:57:40 +0800</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/creating-complex-objects-using-the-builder-pattern/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;The builder creational design pattern is used to create a complex object, in a step by step manner.&lt;/p&gt;&#xA;&lt;p&gt;You might have come across the same using while using some Java Clients or any other framework, lets us now see what problem it solves.&lt;/p&gt;&#xA;&lt;p&gt;The core idea here is that if we need to send too many parameters in a constructor call,its hard to maintain the order of the call, and the constructor call itself is very difficult to read. And in most cases all the parameters are not necessary for object initialization and can be skipped instead of passing mandatory fields when object is created via a constructor.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Design Patterns Days: Observer Pattern and Publishing/Subscribing</title>
      <link>https://www.codevivek.com/design-patterns-day2/</link>
      <pubDate>Sun, 03 Oct 2021 13:57:40 +0800</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/design-patterns-day2/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;As the wikipedia definition says:&lt;/p&gt;&#xA;&lt;p&gt;The observer pattern is a software design pattern in which an object, named the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods.&lt;/p&gt;&#xA;&lt;p&gt;To someone not familiar with this pattern the first thing that would come to their mind is Polling. If we want to know about changes that are done to a central body/system we continuosly send request to the server and check for changes based on the responses  But the problem with this approach is, with a significant increase in clients that are polling the system, the continuous request going to the system will overwhelm the system. Also making huge amount of IO/Network requests is bad (Just take my word for it).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Design Patterns Days: Strategy</title>
      <link>https://www.codevivek.com/design-patterns-day1/</link>
      <pubDate>Wed, 21 Jul 2021 13:57:40 +0800</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/design-patterns-day1/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;&#xA;&lt;p&gt;As the Wikipedia definition says:&lt;/p&gt;&#xA;&lt;p&gt;The strategy pattern is useful for situations where it is necessary to dynamically swap the algorithms used in an application. The strategy pattern is intended to provide a means to define a family of algorithms, encapsulate each one as an object, and make them interchangeable. The strategy pattern lets the algorithms vary independently from clients that use them.&lt;/p&gt;&#xA;&lt;p&gt;Or in simpler terms, Instead of hardcoding an implementation that can vary according to the various classes. We on runtime inject the appropriate algorithm/behaviour that the class will need.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Gentle Introduction to Big-O notations</title>
      <link>https://www.codevivek.com/a-gentle-intro-to-big-oh-notations/</link>
      <pubDate>Sun, 01 Nov 2020 13:57:40 +0800</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/a-gentle-intro-to-big-oh-notations/</guid>
      <description>&lt;h1 id=&#34;big-o-notation&#34;&gt;Big-O Notation&lt;/h1&gt;&#xA;&lt;h2 id=&#34;section-1-what-is-it&#34;&gt;Section 1: What is it?&lt;/h2&gt;&#xA;&lt;p&gt;Big-O Notation helps us talk about the time taken by an algorithm to run given a particular input size.&lt;/p&gt;&#xA;&lt;h2 id=&#34;section-2-why-do-we-need-it&#34;&gt;Section 2: Why do we need it?&lt;/h2&gt;&#xA;&lt;p&gt;Imagine there are multiple solutions to a single problem but with different approaches/data structure, how do you know which one is better? Do you choose the solution that was the easiest to code or the solution you wrote and not the one your colleague did. Do we run both of them and decided by what is finished quicker? But what if one of the solutions is in a low-level/faster language than the other??&lt;/p&gt;</description>
    </item>
    <item>
      <title>Disk Space Analysis in Linux</title>
      <link>https://www.codevivek.com/disk-space-analysis-in-linux/</link>
      <pubDate>Sun, 02 Aug 2020 13:57:40 +0800</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/disk-space-analysis-in-linux/</guid>
      <description>&lt;h2 id=&#34;1-overview&#34;&gt;1. Overview&lt;/h2&gt;&#xA;&lt;p&gt;One of the most common administrative tasks while using Linux is finding out the disk space usage in our system. The most common command-line utilities to find the free disk space usage are the df (Disk Free) and du (Disk Usage commands).&lt;/p&gt;&#xA;&lt;p&gt;In this tutorial, we will have a look at the common scenarios and usage of the du and df commands.&lt;/p&gt;&#xA;&lt;h2 id=&#34;2-common-usage-scenarios&#34;&gt;2. Common Usage Scenarios&lt;/h2&gt;&#xA;&lt;p&gt;We will be using the df and du commands interchangeably based on the information we are seeking, to check the amount of space used and free on our filesystem and partitions the df command is used additionally to check for space usage on a directory level the command du is used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Converting Langfiles using Bash and Translate-Shell</title>
      <link>https://www.codevivek.com/automating-langfile-translation/</link>
      <pubDate>Sun, 01 Dec 2019 21:57:40 +0800</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/automating-langfile-translation/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The most mundane task a developer can be asked to do is creating new lang files (adding support for Spanish,German ) in your app. Unless you are using a library for dynamic translation in your app or browser capabilities,the whole process to convert the base language file (say English) to other languages is just time-consuming also if the software you are working on is huge, say 5k lines of text on the base language file. Converting the file manually will take you days.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Intro to Regular Expressions</title>
      <link>https://www.codevivek.com/intro-to-regular-expressions/</link>
      <pubDate>Sun, 01 Dec 2019 21:57:40 +0800</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/intro-to-regular-expressions/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Being a Linux user and not coming across Regular Expressions or regex is next to impossible. I kept seeing the cryptic little set of characters everywhere and the people who could use it looked like ninjas to me. They are everywhere text editor&#39;s, JavaScript, Python, JAVA , Bash&amp;hellip;&amp;hellip;and the list goes on.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://imgs.xkcd.com/comics/regular_expressions.png&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;h4&gt;XKCD Regex Comic&lt;/h4&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;what-exactly-is-a-regular-expression&#34;&gt;What Exactly is a Regular Expression?&lt;/h2&gt;&#xA;&lt;p&gt;A regular expression is a string containing a combination of normal characters and special meta-characters or meta-sequences. The normal characters match themselves. Meta-characters and meta-sequences are characters or sequences of characters that represent ideas such as quantity, locations,or types of characters.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a Shell in C</title>
      <link>https://www.codevivek.com/writing-a-shell-in-c/</link>
      <pubDate>Sun, 01 Dec 2019 21:57:40 +0800</pubDate><author>viveklp1995@gmail.com (Vivek Singh)</author>
      <guid>https://www.codevivek.com/writing-a-shell-in-c/</guid>
      <description>&lt;p&gt;Do you have dreams about writing C shells by the sea shore? That makes two of us.&lt;/p&gt;&#xA;&lt;p&gt;One of the many cool projects you can make while learning to program in the Linux environment is to make a command-line interpreter like the Bash shell or the command prompt in windows. In the process you will learn how to handle fork + exec calls and the various system calls associated with the working of a shell.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
