<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Building reliable, secure systems on Nerdsid.com</title><link>https://nerdsid.com/</link><description>Recent content in Building reliable, secure systems on Nerdsid.com</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 17 Aug 2026 10:00:00 +0000</lastBuildDate><atom:link href="https://nerdsid.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker networking</title><link>https://nerdsid.com/notes/docker-mastery/docker-networking/</link><pubDate>Tue, 07 Apr 2026 07:32:28 +0530</pubDate><guid>https://nerdsid.com/notes/docker-mastery/docker-networking/</guid><description>&lt;p>Docker networking is like batteries included but removable/configurable.&lt;/p>
&lt;p>Port checking&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker container port &amp;lt;container&amp;gt;&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h2 id="network-driver">Network driver&lt;/h2>
&lt;p>Built-in or 3rd party extensions that give you virtual network features.&lt;/p>
&lt;p>Default is bridge network driver.&lt;/p>
&lt;h2 id="networking-commands">Networking commands&lt;/h2>
&lt;h3 id="find-ip-of-a-container">Find IP of a container&lt;/h3>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker contianer inspect --format &lt;span class="s2">&amp;#34;{{NetworkSettings.IPAddress}}&amp;#34;&lt;/span> &amp;lt;container id&amp;gt;&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h3 id="show-networks">Show networks&lt;/h3>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker network ls&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h3 id="inspect-a-network">Inspect a network&lt;/h3>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker network inspect&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h3 id="create-a-new-network">Create a new network&lt;/h3>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker network create --driver&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h3 id="connect-a-container-to-a-network">Connect a container to a network&lt;/h3>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">docker network connect [OPTIONS] NETWORK CONTAINER&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>Connects a container to a network. You can connect a container by name or by ID. Once connected, the container can communicate with other containers in the same network.&lt;/p></description></item><item><title>Brief history of Docker</title><link>https://nerdsid.com/notes/docker-deep-dive/history/</link><pubDate>Fri, 03 Apr 2026 07:32:28 +0530</pubDate><guid>https://nerdsid.com/notes/docker-deep-dive/history/</guid><description>&lt;h2 id="the-pre-docker-era">The pre Docker era&lt;/h2>
&lt;h3 id="pre-vm-era">Pre VM era&lt;/h3>
&lt;p>Businesses bought overpowered servers which operated at 5-10% of their capacity. No one wanted unhappy customers &amp;amp; lost revenue.&lt;/p>
&lt;p>Summary: high capex, low operational efficiency.&lt;/p>
&lt;h3 id="the-vm-era">The VM era&lt;/h3>
&lt;p>VMWare, Inc created Virtual machine (VM). This allowed to run multiple applications on a server thereby increasing operational efficiency of servers&lt;/p>
&lt;p>Issues with VMs:&lt;/p>
&lt;ul>
&lt;li>Slow to boot&lt;/li>
&lt;li>Not portable&lt;/li>
&lt;li>Every VM needs OS patching&lt;/li>
&lt;li>Needs monitoring&lt;/li>
&lt;/ul>
&lt;p>What do we mean by not portable:&lt;/p></description></item><item><title>Containers</title><link>https://nerdsid.com/notes/docker-mastery/containers/</link><pubDate>Fri, 03 Apr 2026 07:32:28 +0530</pubDate><guid>https://nerdsid.com/notes/docker-mastery/containers/</guid><description>&lt;h2 id="important-principles">Important principles&lt;/h2>
&lt;p>There are two important principles of images:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Images are immutable. Once an image is created, it can&amp;rsquo;t be modified. You can only make a new image or add changes on top of it.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Container images are composed of layers. Each layer represents a set of file system changes that add, remove, or modify files.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="image-vs-container">Image vs container&lt;/h2>
&lt;p>A container is an running instance of an image.&lt;/p>
&lt;p>Just like how in OOPs an object is an instance of a class. The class defines the blueprint.
The object is an instance of the class.&lt;/p></description></item><item><title>Kubernetes DaemonSets</title><link>https://nerdsid.com/posts/kubernetes-daemonsets/</link><pubDate>Mon, 17 Aug 2026 10:00:00 +0000</pubDate><guid>https://nerdsid.com/posts/kubernetes-daemonsets/</guid><description>&lt;p>DaemonSet runs exactly one Pod per matching node, and it schedules onto new nodes automatically as they join the cluster. That&amp;rsquo;s why CNI plugins, log shippers and node exporters are almost always DaemonSets rather than Deployments.&lt;/p>
&lt;p>Five short tasks below: three about reading an existing cluster, two about building a DaemonSet from scratch. Everything assumes the usual alias:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">k&lt;/span>&lt;span class="o">=&lt;/span>kubectl&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h2 id="task-1-how-many-daemonsets-exist-cluster-wide">Task 1: How many DaemonSets exist cluster-wide?&lt;/h2>
&lt;p>The trap is the default namespace scoping — you have to ask for all namespaces explicitly:&lt;/p></description></item><item><title>Kubernetes Resource Limits</title><link>https://nerdsid.com/posts/kubernetes-resource-limits/</link><pubDate>Mon, 17 Aug 2026 09:15:00 +0000</pubDate><guid>https://nerdsid.com/posts/kubernetes-resource-limits/</guid><description>&lt;p>Resource limits look trivial on a slide and then bite you at 3 AM when a container keeps restarting with exit code 137. This lab walks through five short tasks on Pod requests and limits — reading them, diagnosing a crash caused by them, and changing them on a live cluster.&lt;/p>
&lt;p>Everything below assumes the usual alias:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">k&lt;/span>&lt;span class="o">=&lt;/span>kubectl&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h2 id="task-1-identify-the-cpu-requirements-on-the-rabbit-pod">Task 1: Identify the CPU requirements on the &lt;code>rabbit&lt;/code> Pod&lt;/h2>
&lt;p>A Pod called &lt;code>rabbit&lt;/code> is running in the &lt;code>default&lt;/code> namespace. The question asks for its &lt;strong>CPU requirement&lt;/strong> — which means the &lt;em>request&lt;/em>, not the limit.&lt;/p></description></item><item><title>Using Shell Variables to Avoid Errors</title><link>https://nerdsid.com/posts/avoiding-repetition-errors-with-shell-variables/</link><pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate><guid>https://nerdsid.com/posts/avoiding-repetition-errors-with-shell-variables/</guid><description>&lt;h2 id="task">Task&lt;/h2>
&lt;p>Create two files (&lt;code>release.txt&lt;/code>, &lt;code>owner.txt&lt;/code>) under a directory &lt;code>release-packages/northwind-api&lt;/code>. The goal is to avoid typos by storing the path once in a variable.&lt;/p>
&lt;h2 id="approach">Approach&lt;/h2>
&lt;p>Store the repeated path in a shell variable (&lt;code>TARGET_DIR&lt;/code>), then reference it for both directory creation and file writes.&lt;/p>
&lt;h2 id="solution">Solution&lt;/h2>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;code class="codeblock__filename" title="file.sh">file.sh&lt;/code>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="nb">set&lt;/span> -euo pipefail
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">TARGET_DIR&lt;/span>&lt;span class="o">=&lt;/span>release-packages/northwind-api
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir -p &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$TARGET_DIR&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;release=2026.06.09&amp;#39;&lt;/span> &amp;gt; &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$TARGET_DIR&lt;/span>&lt;span class="s2">/release.txt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;owner=platform&amp;#39;&lt;/span> &amp;gt; &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$TARGET_DIR&lt;/span>&lt;span class="s2">/owner.txt&amp;#34;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>Now run the script using &lt;code>chmod +x file.sh&lt;/code>, then &lt;code>./file.sh&lt;/code>.&lt;/p>
&lt;h2 id="verification">Verification&lt;/h2>

&lt;figure class="terminal no-copy">
 &lt;header class="terminal-header">
 &lt;div class="terminal-controls">
 &lt;span class="dot dot--red">&lt;/span>
 &lt;span class="dot dot--yellow">&lt;/span>
 &lt;span class="dot dot--green">&lt;/span>
 &lt;/div>
 
 &lt;figcaption class="terminal-title">Cat file contents&lt;/figcaption>
 
 &lt;/header>
 &lt;pre>&lt;code>$ cat release-packages/northwind-api/release.txt 
release=2026.06.09
$ cat release-packages/northwind-api/owner.txt
owner=platform&lt;/code>&lt;/pre>
&lt;/figure>

&lt;p>Verification isn&amp;rsquo;t just a formality. For example, a typo in the path or quoting can fail silently (e.g. create a wrongly named file) instead of throwing an error. So always confirm output rather than trusting the script ran correctly.&lt;/p></description></item><item><title>Container Cpu Limit Configuration</title><link>https://nerdsid.com/posts/docker-container-cpu-limits/</link><pubDate>Wed, 01 Jul 2026 13:30:50 +0000</pubDate><guid>https://nerdsid.com/posts/docker-container-cpu-limits/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>In this lab, you&amp;rsquo;ll limit the CPU usage of a Docker container that consumes excessive CPU resources.&lt;/p>
&lt;h2 id="scenario">Scenario&lt;/h2>
&lt;p>A container named &lt;code>cpu_test&lt;/code> is running from the &lt;code>myapp:cpu&lt;/code> image and performs CPU-intensive computations. When monitored with &lt;code>docker stats&lt;/code>, the container regularly consumes 150–200% CPU, utilizing multiple CPU cores and impacting other services on the host.&lt;/p>
&lt;h2 id="task">Task&lt;/h2>
&lt;p>Recreate the container with a CPU limit of 500m CPU so that &lt;code>docker stats&lt;/code> reports CPU usage consistently below 60% during validation.&lt;/p></description></item><item><title>Docker Compose Basic</title><link>https://nerdsid.com/posts/docker-compose-basic/</link><pubDate>Wed, 01 Jul 2026 11:38:29 +0000</pubDate><guid>https://nerdsid.com/posts/docker-compose-basic/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>In this lab, you&amp;rsquo;ll first deploy an application by setting up network, multiple containers individually. Then you will clean up resources, and deploy the same application using Docker Compose.&lt;/p>
&lt;h2 id="task-1-create-a-bridge-network">Task 1: Create a Bridge Network&lt;/h2>
&lt;p>Create a bridge network named &lt;code>clicknet&lt;/code>.&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker network create --driver bridge clicknet&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h3 id="verify">Verify&lt;/h3>

&lt;figure class="terminal no-copy">
 &lt;header class="terminal-header">
 &lt;div class="terminal-controls">
 &lt;span class="dot dot--red">&lt;/span>
 &lt;span class="dot dot--yellow">&lt;/span>
 &lt;span class="dot dot--green">&lt;/span>
 &lt;/div>
 
 &lt;figcaption class="terminal-title">list docker networks&lt;/figcaption>
 
 &lt;/header>
 &lt;pre>&lt;code>$ docker network ls
NETWORK ID NAME DRIVER SCOPE
5aa54ade2dcc bridge bridge local
fc40bfcbce91 clicknet bridge local
238b23f4e2a9 host host local
59b9cbf97489 none null local&lt;/code>&lt;/pre>
&lt;/figure>

&lt;h2 id="task-2-run-a-redis-container">Task 2: Run a Redis Container&lt;/h2>
&lt;p>Create a background container named &lt;code>redis&lt;/code> using the &lt;code>redis:alpine&lt;/code> image and attach it to the &lt;code>clicknet&lt;/code> network.&lt;/p></description></item><item><title>Practical Grep: Filtering Errors and Patterns in Log Files</title><link>https://nerdsid.com/posts/practical-grep-filtering-errors-and-patterns-in-log-files/</link><pubDate>Tue, 30 Jun 2026 11:41:54 +0000</pubDate><guid>https://nerdsid.com/posts/practical-grep-filtering-errors-and-patterns-in-log-files/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>This walkthrough covers using grep to search and filter log files for errors, specific requests, and multi-pattern matches.&lt;/p>
&lt;h2 id="tasks">Tasks&lt;/h2>
&lt;ol>
&lt;li>Find all &lt;code>ERROR&lt;/code> messages in &lt;code>system.log&lt;/code> and count how many there are.&lt;/li>
&lt;li>Find all lines containing &lt;code>POST&lt;/code> requests in &lt;code>access.log&lt;/code>.&lt;/li>
&lt;li>Find all lines in &lt;code>application.log&lt;/code> that contain both &lt;code>WARNING&lt;/code> and &lt;code>query&lt;/code> (case-insensitive).&lt;/li>
&lt;li>Search for all user authentications (containing &lt;code>User authenticated&lt;/code>) across all log files.&lt;/li>
&lt;/ol>
&lt;h3 id="requirements">Requirements&lt;/h3>
&lt;ul>
&lt;li>Use &lt;code>grep&lt;/code> for all searches (combining with other commands like &lt;code>wc&lt;/code> where needed).&lt;/li>
&lt;li>Save each task&amp;rsquo;s output to its own file: &lt;code>task1_output.txt&lt;/code>, &lt;code>task2_output.txt&lt;/code>, &lt;code>task3_output.txt&lt;/code>, &lt;code>task4_output.txt&lt;/code>.&lt;/li>
&lt;li>Original log files must not be modified.&lt;/li>
&lt;/ul>
&lt;h2 id="solution">Solution&lt;/h2>
&lt;h3 id="task-1">Task 1&lt;/h3>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">grep -c &lt;span class="s2">&amp;#34;ERROR&amp;#34;&lt;/span> system.log &amp;gt; task1_output.txt&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>&lt;code>grep -c&lt;/code> counts the number of matching lines instead of printing them. Redirecting the output saves the count to task1_output.txt.&lt;/p></description></item><item><title>Docker Environment Variables and Networking</title><link>https://nerdsid.com/posts/docker-environment-variables-and-networking/</link><pubDate>Tue, 16 Jun 2026 06:50:38 +0000</pubDate><guid>https://nerdsid.com/posts/docker-environment-variables-and-networking/</guid><description>&lt;p>In this lab, we&amp;rsquo;ll explore:&lt;/p>
&lt;ul>
&lt;li>Inspecting environment variables in running containers&lt;/li>
&lt;li>Passing environment variables at runtime&lt;/li>
&lt;li>Deploying MySQL containers&lt;/li>
&lt;li>Creating custom Docker networks&lt;/li>
&lt;li>Connecting applications and databases across containers&lt;/li>
&lt;/ul>
&lt;h2 id="task-1-inspect-environment-variables">Task 1: Inspect Environment Variables&lt;/h2>
&lt;p>First, identify the value configured for the &lt;code>APP_COLOR&lt;/code> environment variable in a running container.&lt;/p>
&lt;p>List the running containers:&lt;/p>

&lt;figure class="terminal no-copy">
 &lt;header class="terminal-header">
 &lt;div class="terminal-controls">
 &lt;span class="dot dot--red">&lt;/span>
 &lt;span class="dot dot--yellow">&lt;/span>
 &lt;span class="dot dot--green">&lt;/span>
 &lt;/div>
 
 &lt;/header>
 &lt;pre>&lt;code>$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cdf886f902d4 kodekloud/simple-webapp "python app.py" 10 minutes ago Up 10 minutes 8080/tcp mystifying_knuth&lt;/code>&lt;/pre>
&lt;/figure>

&lt;p>Inspect the container and look for the &lt;code>Env&lt;/code> section:&lt;/p></description></item><item><title>Custom Resource Definition</title><link>https://nerdsid.com/posts/kubernetes-custom-resource-definition/</link><pubDate>Tue, 02 Jun 2026 05:54:03 +0000</pubDate><guid>https://nerdsid.com/posts/kubernetes-custom-resource-definition/</guid><description>&lt;h2 id="task-1">Task 1&lt;/h2>
&lt;p>CRD objects can be either namespaced or cluster-scoped.&lt;/p>
&lt;p>Is this statement true or false?&lt;/p>
&lt;p>Answer: True&lt;/p>
&lt;h2 id="task-2">Task 2&lt;/h2>
&lt;p>What is a custom resource?&lt;/p>
&lt;p>Answer: A custom resource is an extension of the Kubernetes API that is not necessarily available in a default Kubernetes installation.&lt;/p>
&lt;h2 id="task-3">Task 3&lt;/h2>
&lt;p>We have provided an incomplete Custom Resource Definition (CRD) manifest located at &lt;code>/root/crd.yaml&lt;/code>. Complete the file to define a namespaced CRD named &lt;code>internals.datasets.kodekloud.com&lt;/code>.&lt;/p></description></item><item><title>Docker Basic Commands</title><link>https://nerdsid.com/posts/docker-basic-commands/</link><pubDate>Mon, 01 Jun 2026 12:33:56 +0000</pubDate><guid>https://nerdsid.com/posts/docker-basic-commands/</guid><description>&lt;h2 id="task-1">Task 1&lt;/h2>
&lt;p>What is the version of the Docker Server Engine running on the host?&lt;/p>

&lt;figure class="terminal no-copy">
 &lt;header class="terminal-header">
 &lt;div class="terminal-controls">
 &lt;span class="dot dot--red">&lt;/span>
 &lt;span class="dot dot--yellow">&lt;/span>
 &lt;span class="dot dot--green">&lt;/span>
 &lt;/div>
 
 &lt;figcaption class="terminal-title">Check Docker version&lt;/figcaption>
 
 &lt;/header>
 &lt;pre>&lt;code>$ docker version

Client:
Version: 25.0.5
API version: 1.44

Server:
Engine:
Version: 25.0.5
API version: 1.44&lt;/code>&lt;/pre>
&lt;/figure>

&lt;p>&lt;strong>Answer:&lt;/strong> &lt;code>25.0.5&lt;/code>&lt;/p>
&lt;h2 id="task-2">Task 2&lt;/h2>
&lt;p>How many containers are currently running on this host?&lt;/p>

&lt;figure class="terminal no-copy">
 &lt;header class="terminal-header">
 &lt;div class="terminal-controls">
 &lt;span class="dot dot--red">&lt;/span>
 &lt;span class="dot dot--yellow">&lt;/span>
 &lt;span class="dot dot--green">&lt;/span>
 &lt;/div>
 
 &lt;figcaption class="terminal-title">List running containers&lt;/figcaption>
 
 &lt;/header>
 &lt;pre>&lt;code>$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES&lt;/code>&lt;/pre>
&lt;/figure>

&lt;p>&lt;strong>Answer:&lt;/strong> &lt;code>0&lt;/code>&lt;/p>
&lt;h2 id="task-3">Task 3&lt;/h2>
&lt;p>How many images are available on this host?&lt;/p></description></item><item><title>Deployments in Kubernetes</title><link>https://nerdsid.com/posts/deployments-in-kubernetes/</link><pubDate>Wed, 06 May 2026 15:06:12 +0000</pubDate><guid>https://nerdsid.com/posts/deployments-in-kubernetes/</guid><description>&lt;h2 id="tasks">Tasks&lt;/h2>
&lt;h3 id="task-1">Task 1&lt;/h3>
&lt;p>How many PODs exist on the system?&lt;/p>

&lt;figure class="terminal no-copy">
 &lt;header class="terminal-header">
 &lt;div class="terminal-controls">
 &lt;span class="dot dot--red">&lt;/span>
 &lt;span class="dot dot--yellow">&lt;/span>
 &lt;span class="dot dot--green">&lt;/span>
 &lt;/div>
 
 &lt;/header>
 &lt;pre>&lt;code>$ k get po
No resources found in default namespace.&lt;/code>&lt;/pre>
&lt;/figure>

&lt;p>Ans: 0&lt;/p>
&lt;h3 id="task-2">Task 2&lt;/h3>
&lt;p>How many ReplicaSets exist on the system?&lt;/p>

&lt;figure class="terminal no-copy">
 &lt;header class="terminal-header">
 &lt;div class="terminal-controls">
 &lt;span class="dot dot--red">&lt;/span>
 &lt;span class="dot dot--yellow">&lt;/span>
 &lt;span class="dot dot--green">&lt;/span>
 &lt;/div>
 
 &lt;/header>
 &lt;pre>&lt;code>$ k get rs
No resources found in default namespace.&lt;/code>&lt;/pre>
&lt;/figure>

&lt;h3 id="task-3">Task 3&lt;/h3>
&lt;p>How many Deployments exist on the system?&lt;/p>

&lt;figure class="terminal no-copy">
 &lt;header class="terminal-header">
 &lt;div class="terminal-controls">
 &lt;span class="dot dot--red">&lt;/span>
 &lt;span class="dot dot--yellow">&lt;/span>
 &lt;span class="dot dot--green">&lt;/span>
 &lt;/div>
 
 &lt;/header>
 &lt;pre>&lt;code>$ k get deploy
No resources found in default namespace.&lt;/code>&lt;/pre>
&lt;/figure>

&lt;h3 id="task-4">Task 4&lt;/h3>
&lt;p>How many Deployments exist on the system &lt;em>now&lt;/em>?&lt;/p></description></item><item><title>Pods in Kubernetes</title><link>https://nerdsid.com/posts/pods-in-kubernetes/</link><pubDate>Tue, 05 May 2026 16:46:53 +0000</pubDate><guid>https://nerdsid.com/posts/pods-in-kubernetes/</guid><description>&lt;h2 id="task">Task&lt;/h2>
&lt;p>The lab consists of a k8s master node &amp;amp; worker node. You have access to a terminal on the controlplane.&lt;/p>
&lt;h3 id="task-1">Task 1&lt;/h3>
&lt;p>How many pods exist on the system?&lt;/p>

&lt;figure class="terminal no-copy">
 &lt;header class="terminal-header">
 &lt;div class="terminal-controls">
 &lt;span class="dot dot--red">&lt;/span>
 &lt;span class="dot dot--yellow">&lt;/span>
 &lt;span class="dot dot--green">&lt;/span>
 &lt;/div>
 
 &lt;figcaption class="terminal-title">list pods&lt;/figcaption>
 
 &lt;/header>
 &lt;pre>&lt;code>$ k get po
No resources found in default namespace.&lt;/code>&lt;/pre>
&lt;/figure>

&lt;p>Ans: 0&lt;/p>
&lt;h3 id="task-2">Task 2&lt;/h3>
&lt;p>Create a new pod using the nginx image.&lt;/p>
&lt;p>Ans:&lt;/p>

&lt;figure class="terminal no-copy">
 &lt;header class="terminal-header">
 &lt;div class="terminal-controls">
 &lt;span class="dot dot--red">&lt;/span>
 &lt;span class="dot dot--yellow">&lt;/span>
 &lt;span class="dot dot--green">&lt;/span>
 &lt;/div>
 
 &lt;/header>
 &lt;pre>&lt;code>$ kubectl run nginx --image=nginx
pod/nginx created&lt;/code>&lt;/pre>
&lt;/figure>

&lt;p>The basic syntax is:&lt;/p></description></item><item><title>Publishing Ports in Docker</title><link>https://nerdsid.com/posts/publishing-ports-in-docker/</link><pubDate>Fri, 01 May 2026 14:37:01 +0000</pubDate><guid>https://nerdsid.com/posts/publishing-ports-in-docker/</guid><description>&lt;h2 id="task">Task&lt;/h2>
&lt;h2 id="solution">Solution&lt;/h2>

&lt;details
>
&lt;summary onclick="this.innerHTML = this.parentNode.open ? 'Show solution' : 'Show solution';">
 
 Show solution
 
&lt;/summary>
 &lt;p>This is the first paragraph of detailed content.
This is the second paragraph of even more detailed content.&lt;/p>
&lt;ul>
&lt;li>You can also include lists&lt;/li>
&lt;li>Or other markdown elements&lt;/li>
&lt;/ul>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;code class="codeblock__filename" title="service/networking/network-policy-default-deny-egress.yaml">&lt;span class="codeblock__filename-dir">service/networking/&lt;/span>network-policy-default-deny-egress.yaml&lt;/code>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">apiVersion&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">networking.k8s.io/v1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">NetworkPolicy&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">default-deny-ingress&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">podSelector&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>{}&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">policyTypes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">Ingress&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ls -R /etc/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">grep &lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span> file.txt&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Python&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;God&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">greeting&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Hello &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">greeting&lt;/span>&lt;span class="p">)&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h3 id="terminal-output">Terminal output&lt;/h3>
&lt;p>Before&lt;/p></description></item><item><title>Links Worth Your Time</title><link>https://nerdsid.com/worth-your-time/</link><pubDate>Fri, 24 Apr 2026 07:32:28 +0530</pubDate><guid>https://nerdsid.com/worth-your-time/</guid><description>&lt;p>Handpicked links I&amp;rsquo;d actually send a friend. No fluff. Newest first.&lt;/p>
&lt;h2 id="2026">2026&lt;/h2>
&lt;h3 id="jun">Jun&lt;/h3>
&lt;p>&lt;a href="https://blog.memoryrepository.com/69326/large-language-model-ais-are-tools-not-thinkers">LLM AIs Are Tools, Not Thinkers&lt;/a>&lt;/p>
&lt;p>&lt;em>A lot of people are completely offloading thinking and common sense to LLMs and deriving frankly nonsensical answers without first checking, verifying, or simply using their brain to think.&lt;/em>&lt;/p>
&lt;h3 id="may">May&lt;/h3>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=5hYg3rUfLiQ">Creating Art With The Mind | Neuralink&lt;/a>&lt;/p>
&lt;p>&lt;em>Neuralink - a brain-computer interface, helps to create art with mind.&lt;/em>&lt;/p>
&lt;p>&lt;a href="https://www.youtube.com/watch?v=pZNzfQLgGsA">Reimagining the mouse pointer with AI&lt;/a>&lt;/p></description></item><item><title>Shell Form vs Exec Form</title><link>https://nerdsid.com/notes/docker-mastery/shell-form-vs-exec-form/</link><pubDate>Mon, 20 Apr 2026 23:02:53 +0000</pubDate><guid>https://nerdsid.com/notes/docker-mastery/shell-form-vs-exec-form/</guid><description>&lt;p>Shell form is just a string.&lt;/p>
&lt;p>Exec form - JSON array syntax.&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Term&lt;/th>
 &lt;th>What it really means&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Shell form&lt;/td>
 &lt;td>String → runs via a shell (&lt;code>/bin/sh -c&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Exec form&lt;/td>
 &lt;td>JSON array → runs directly (no shell)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Shell form:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Docker&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-docker" data-lang="docker">&lt;span class="line">&lt;span class="cl">&lt;span class="k">CMD&lt;/span> node app.js&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>Is equivalent to:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">/bin/sh -c &lt;span class="s2">&amp;#34;node app.js&amp;#34;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>The bourn shell is default for Linux containers. Windows containers have cmd.exe as default.&lt;/p>
&lt;p>People also use powershell rather than the default.&lt;/p></description></item><item><title>Linux Journalctl Command Cheat Sheet</title><link>https://nerdsid.com/posts/linux-journalctl-cheatsheet/</link><pubDate>Wed, 15 Apr 2026 06:39:17 +0000</pubDate><guid>https://nerdsid.com/posts/linux-journalctl-cheatsheet/</guid><description>&lt;p>I recently needed to free up disk space by removing old system logs, so I collected the command I used and other useful journalctl commands for future reference.&lt;/p>
&lt;h2 id="disk-usage--vacuum-remove-old-logs">Disk usage &amp;amp; vacuum (remove old logs)&lt;/h2>
&lt;p>Show journal disk usage:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo journalctl --disk-usage&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>Remove archived journal files until total size is below X:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo journalctl --vacuum-size&lt;span class="o">=&lt;/span>500M&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>Remove archived journal files older than a time:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo journalctl --vacuum-time&lt;span class="o">=&lt;/span>3d&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>Remove archived journal files, keeping only the most recent N files:&lt;/p></description></item><item><title>Kill Any Process Using a Port in Powershell</title><link>https://nerdsid.com/posts/kill-any-process-using-a-port-in-powershell/</link><pubDate>Wed, 08 Apr 2026 05:17:46 +0000</pubDate><guid>https://nerdsid.com/posts/kill-any-process-using-a-port-in-powershell/</guid><description>&lt;p>Recently I wanted to start a server in port 8899 &amp;amp; I got an error telling that some other process is using it.&lt;/p>
&lt;p>Here is a one-liner you can use to kill an existing process bound to a port.&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">PowerShell&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Stop-Process&lt;/span> &lt;span class="n">-Id&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">Get-NetTCPConnection&lt;/span> &lt;span class="n">-LocalPort&lt;/span> &lt;span class="mf">8899&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="py">OwningProcess&lt;/span> &lt;span class="n">-Force&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure></description></item><item><title>Ultimate Vi Shortcuts Cheat Sheet</title><link>https://nerdsid.com/posts/vi-shortcuts-cheatsheet/</link><pubDate>Tue, 07 Apr 2026 20:43:00 +0000</pubDate><guid>https://nerdsid.com/posts/vi-shortcuts-cheatsheet/</guid><description>&lt;h2 id="big-picture-of-vim-commands">Big picture of Vim commands&lt;/h2>
&lt;ol>
&lt;li>Normal mode (default)&lt;/li>
&lt;/ol>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ├── Navigation (h, j, k, l, G)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Editing (d, c, x)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Insert triggers (i, a, o, O, A)&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;ol start="2">
&lt;li>
&lt;p>Insert mode
→ typing text&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Visual mode
→ selecting text&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Command mode (:)
→ commands like :w, :q, :10,20d&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="navigation-movement-commands">Navigation (movement commands)&lt;/h2>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Text&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">G&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;ul>
&lt;li>&lt;code>G&lt;/code> → go to last line&lt;/li>
&lt;/ul>
&lt;h2 id="2-editing--insertion-commands">2. Editing / insertion commands&lt;/h2>
&lt;p>&lt;code>o&lt;/code>, &lt;code>O&lt;/code>, &lt;code>A&lt;/code> : These change the file and switch you to insert mode.&lt;/p></description></item><item><title>How to Fix the Apostrophe (') Key Not Working in VirtualBox Ubuntu</title><link>https://nerdsid.com/posts/virtualbox-apostrophe-key-not-working/</link><pubDate>Tue, 07 Apr 2026 07:32:28 +0530</pubDate><guid>https://nerdsid.com/posts/virtualbox-apostrophe-key-not-working/</guid><description>&lt;p>If you’re running Ubuntu inside Oracle VM VirtualBox and notice that pressing the apostrophe (&amp;rsquo;) or tildae (`) key doesn’t show anything until you hit space, you’re not alone.&lt;/p>
&lt;p>This issue is caused by “dead keys” in keyboard layouts, where keys are designed to combine with others to create accented characters.&lt;/p>
&lt;p>In this guide, I’ll show you two simple fixes to make your apostrophe key work.&lt;/p>
&lt;h2 id="root-cause">Root cause&lt;/h2>
&lt;p>What you’re seeing is a keyboard layout / “dead key” behavior, not a VirtualBox bug.&lt;/p></description></item><item><title>Docker assignment 1</title><link>https://nerdsid.com/notes/docker-mastery/assignments/assignment-1/</link><pubDate>Mon, 06 Apr 2026 07:32:28 +0530</pubDate><guid>https://nerdsid.com/notes/docker-mastery/assignments/assignment-1/</guid><description>&lt;h2 id="questionassignment">Question/assignment&lt;/h2>
&lt;p>• Run a nginx, a mysql, and a httpd (apache) server&lt;br>
• Run all of them &amp;ndash;detach (or -d), name them with &amp;ndash;name&lt;br>
• nginx should listen on 80:80, httpd on 8080:80, mysql on 3306:3306&lt;br>
• When running mysql, use the &amp;ndash;env option (or -e) to pass in MYSQL_RANDOM_ROOT_PASSWORD=yes&lt;br>
• Use docker container logs on mysql to find the random password it created on startup&lt;br>
• Clean it all up with docker container stop and docker container rm (both can accept multiple names or ID&amp;rsquo;s)&lt;br>
• Use docker container ls to ensure everything is correct before and after cleanup&lt;/p></description></item><item><title>Linux Commands Cheat Sheet (Most Used Commands)</title><link>https://nerdsid.com/posts/linux-commands-cheatsheet/</link><pubDate>Fri, 03 Apr 2026 07:32:28 +0530</pubDate><guid>https://nerdsid.com/posts/linux-commands-cheatsheet/</guid><description>&lt;h2 id="table-of-contents">Table of Contents&lt;/h2>
&lt;ul>
&lt;li>Disk Usage / File Analysis&lt;/li>
&lt;li>AWS S3 commands&lt;/li>
&lt;/ul>
&lt;h2 id="disk-usage--file-analysis">Disk Usage / File Analysis&lt;/h2>
&lt;h3 id="find-out-space-taken-by-files-older-than-5-days">Find out space taken by files older than 5 days&lt;/h3>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">find . -type f -mtime +5 -print0 &lt;span class="p">|&lt;/span> du --files0-from&lt;span class="o">=&lt;/span>- -ch &lt;span class="p">|&lt;/span> grep total&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h3 id="keep-last-100d-fies">Keep last 100d fies&lt;/h3>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ls -t &lt;span class="p">|&lt;/span> sed -e &lt;span class="s1">&amp;#39;1,100d&amp;#39;&lt;/span> &lt;span class="p">|&lt;/span> xargs -d &lt;span class="s1">&amp;#39;\n&amp;#39;&lt;/span> rm -f --&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">truncate -s 50M catalina.out&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ls -d */&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h3 id="find-out-year-month-of-files">Find out Year month of files&lt;/h3>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">stat -c &lt;span class="s1">&amp;#39;%y&amp;#39;&lt;/span> * &lt;span class="p">|&lt;/span> awk &lt;span class="s1">&amp;#39;{print $1}&amp;#39;&lt;/span> &lt;span class="p">|&lt;/span> xargs -I&lt;span class="o">{}&lt;/span> date -d &lt;span class="o">{}&lt;/span> &lt;span class="s2">&amp;#34;+%b %Y&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> sort -u&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h3 id="list-all-files-other-than-gz">List all files other than &lt;code>.gz&lt;/code>&lt;/h3>
&lt;p>If you want this to do recursively:&lt;/p></description></item><item><title>Docker failed to resolve</title><link>https://nerdsid.com/posts/docker-failed-to-resolve-metadata/</link><pubDate>Tue, 31 Mar 2026 05:27:57 +0000</pubDate><guid>https://nerdsid.com/posts/docker-failed-to-resolve-metadata/</guid><description>&lt;p>I recently enountered this error.&lt;/p></description></item><item><title>Grep Failing on Hyphen Patterns? Try This Fix</title><link>https://nerdsid.com/posts/grep-failing-on-hyphen-patterns-try-this-fix/</link><pubDate>Fri, 05 Dec 2025 18:48:38 +0530</pubDate><guid>https://nerdsid.com/posts/grep-failing-on-hyphen-patterns-try-this-fix/</guid><description>&lt;p>Today I was searching for &lt;code>--debug&lt;/code> in a log file.&lt;/p>
&lt;p>So, I ran &lt;code>grep &amp;quot;--debug&amp;quot; file.log&lt;/code>.&lt;/p>
&lt;p>To my utter surprise, instead of seeing a match, I got this error:&lt;/p>

&lt;figure class="terminal no-copy">
 &lt;header class="terminal-header">
 &lt;div class="terminal-controls">
 &lt;span class="dot dot--red">&lt;/span>
 &lt;span class="dot dot--yellow">&lt;/span>
 &lt;span class="dot dot--green">&lt;/span>
 &lt;/div>
 
 &lt;figcaption class="terminal-title">grep output&lt;/figcaption>
 
 &lt;/header>
 &lt;pre>&lt;code>grep: unrecognized option '--debug'
Usage: grep [OPTION]... PATTERNS [FILE]...&lt;/code>&lt;/pre>
&lt;/figure>

&lt;p>I didn&amp;rsquo;t expect to see any error because I had quoted the pattern (&lt;code>&amp;quot;--debug&amp;quot;&lt;/code>).&lt;/p>
&lt;p>After few minutes of searching, I found the fix:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">grep -- --debug file.log&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>This is where the humble double hyphen &lt;code>--&lt;/code> steps in.&lt;/p></description></item><item><title>Style Guide</title><link>https://nerdsid.com/style-guide/</link><pubDate>Fri, 05 Dec 2025 11:17:11 +0530</pubDate><guid>https://nerdsid.com/style-guide/</guid><description>&lt;p>This page serves as a quick visual reference showcasing all elements on this website.&lt;/p>
&lt;h1 id="h1-heading">H1 Heading&lt;/h1>
&lt;h2 id="h2-heading">H2 Heading&lt;/h2>
&lt;h3 id="h3-heading">H3 Heading&lt;/h3>
&lt;h4 id="h4-heading">H4 Heading&lt;/h4>
&lt;h5 id="h5-heading">H5 Heading&lt;/h5>
&lt;h6 id="h6-heading">H6 Heading&lt;/h6>
&lt;h2 id="paragraphs">Paragraphs&lt;/h2>
&lt;p>This is a regular paragraph of text.
You can write multiple sentences to show flow and readability.&lt;/p>
&lt;h2 id="line-breaks">Line Breaks&lt;/h2>
&lt;p>Line one.&lt;br>
Line two (break created with two spaces at end of previous line).&lt;/p>
&lt;h2 id="emphasis">Emphasis&lt;/h2>
&lt;p>&lt;em>Italic text&lt;/em>&lt;/p>
&lt;p>&lt;strong>Bold text&lt;/strong>&lt;/p>
&lt;p>&lt;em>&lt;strong>Bold and italic text&lt;/strong>&lt;/em>&lt;/p>
&lt;p>&lt;del>Strikethrough&lt;/del>&lt;/p></description></item><item><title>11 Essential OpenSSH Components</title><link>https://nerdsid.com/posts/11-essential-openssh-components/</link><pubDate>Sat, 29 Nov 2025 20:05:20 +0530</pubDate><guid>https://nerdsid.com/posts/11-essential-openssh-components/</guid><description>&lt;p>You might have SSHed into servers hundreds of times.&lt;/p>
&lt;p>You might have used &lt;code>ssh-add&lt;/code> to load keys into your agent.&lt;/p>
&lt;p>You might have used &lt;code>scp&lt;/code> to copy files back and forth between your machine and server.&lt;/p>
&lt;p>But have you ever paused and looked at the bigger picture?&lt;/p>
&lt;p>All these commands come from one place — the OpenSSH suite. It’s much more than just &lt;code>ssh&lt;/code> and &lt;code>scp&lt;/code>.&lt;/p>
&lt;img
 class="spotlight"
 src="https://nerdsid.com/images/11-essential-open-ssh-components/OpenSSH-components.svg"
 alt="OpenSSH components breakdown"
 loading="lazy"
 >
&lt;h1 id="openssh-components">OpenSSH components&lt;/h1>
&lt;p>OpenSSH has &lt;strong>11 major&lt;/strong> components.&lt;/p></description></item><item><title>7 Skills I Wish Were Taught in School</title><link>https://nerdsid.com/skill-that-should-be-taught-at-school/</link><pubDate>Sat, 15 Nov 2025 07:32:28 +0530</pubDate><guid>https://nerdsid.com/skill-that-should-be-taught-at-school/</guid><description>&lt;p>Written by Jade Bonacolta&lt;/p>
&lt;h2 id="1-sales-without-being-salesy">1. Sales (without being salesy)&lt;/h2>
&lt;ul>
&lt;li>How to listen for real problems, not just pitch&lt;/li>
&lt;li>How to handle objections with confidence&lt;/li>
&lt;li>How to build trust before asking for the sale&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Recommended reading:&lt;/strong>
&lt;em>To Sell Is Human&lt;/em> — Daniel Pink&lt;/p>
&lt;h2 id="2-difficult-conversations">2. Difficult conversations&lt;/h2>
&lt;ul>
&lt;li>How to say no to clients without burning bridges&lt;/li>
&lt;li>How to negotiate contracts that protect you&lt;/li>
&lt;li>How to give feedback to new hires who aren’t performing&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Recommended reading:&lt;/strong>
&lt;em>Crucial Conversations&lt;/em> — Kerry Patterson&lt;/p></description></item><item><title>Career tips</title><link>https://nerdsid.com/career-tips/</link><pubDate>Sat, 15 Nov 2025 07:32:28 +0530</pubDate><guid>https://nerdsid.com/career-tips/</guid><description>&lt;h1 id="9-soft-skills-to-accelerate-your-career">9 Soft Skills to Accelerate Your Career&lt;/h1>
&lt;h2 id="1-make-people-feel-important-shr-method">1. Make People Feel Important (SHR Method)&lt;/h2>
&lt;p>Your formula to be charismatic:&lt;/p>
&lt;p>&lt;strong>Seen&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Give eye contact&lt;/li>
&lt;li>Offer a specific compliment&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Heard&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Ask good questions&lt;/li>
&lt;li>Be interested, not interesting&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Remembered&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Follow up&lt;/li>
&lt;li>Remember names&lt;/li>
&lt;li>Recall something you discussed&lt;/li>
&lt;/ul>
&lt;p>&lt;em>Written by Ben Meer&lt;/em>&lt;/p>
&lt;h2 id="2-hone-your-body-language-7-38-55-rule">2. Hone Your Body Language (7-38-55 Rule)&lt;/h2>
&lt;p>People will like/dislike your communication based on:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>7%&lt;/strong> words&lt;/li>
&lt;li>&lt;strong>38%&lt;/strong> tonality and face&lt;/li>
&lt;li>&lt;strong>55%&lt;/strong> body language&lt;/li>
&lt;/ul>
&lt;p>Stand up straight, pull your shoulders back, make eye contact, smile, give a firm handshake&amp;hellip;
&lt;strong>You will be dangerous.&lt;/strong>&lt;/p></description></item><item><title>Favourite English lines/phrases</title><link>https://nerdsid.com/english-favs/</link><pubDate>Sat, 15 Nov 2025 07:32:28 +0530</pubDate><guid>https://nerdsid.com/english-favs/</guid><description>&lt;ul>
&lt;li>I don&amp;rsquo;t want to go all the way back to the Big Bang, but I&amp;rsquo;m going to go back &amp;hellip;&lt;/li>
&lt;li>He said that &amp;hellip; I&amp;rsquo;m paraphrasing it bcoz I don&amp;rsquo;t remember the exact lines.&lt;/li>
&lt;li>This is not intended to be a deep technical &amp;hellip; on any of the topics mentioned - rather just enough material to wrap your mind around the progress that has been made over time and how we&amp;rsquo;ve ended up where we are today.&lt;/li>
&lt;li>This is AWSome Santhosh NC 👏 Thanks a lot for your AWSome wishes 😍&lt;/li>
&lt;li>That&amp;rsquo;s a clear example of the cobbler&amp;rsquo;s children going barefoot.&lt;/li>
&lt;li>Designing tech that works for people. Not the other way around.&lt;/li>
&lt;li>Fit the traditional mold.&lt;/li>
&lt;li>I know this might sound like far fetched.&lt;/li>
&lt;li>I’ve spent the last few years doing so many different things - &lt;strong>excelling at some, failing at others&lt;/strong>.&lt;/li>
&lt;li>By way of due diligence as an intermediary we also take this opportunity to remind our users to comply with the Indian Information Technology (Intermediary Guidelines and Digital Media Ethics Code) Rules, 2021 (as amended).&lt;/li>
&lt;li>Please adhere to these terms to maintain continued use of and access to YouTube. Violation of these terms and guidelines may result in warnings or further action including loss of access or termination of all or part of your account.&lt;/li>
&lt;li>Artists by their very nature are more sensitive than the average bear – which is why we flourish in artistic fields. We FEEL things much deeper; We laugh louder, cry harder … and bitch the loudest – particularly when someone takes a dig at our music.&lt;/li>
&lt;li>Widespread acclaim&lt;/li>
&lt;li>But what about the process of application development? Does Kubernetes bring anything to their table? It definitely does.&lt;/li>
&lt;li>It’s not as bad as it sounds. The benefits usually outweigh the disadvantages.&lt;/li>
&lt;li>It’s difficult to provide an exact number when the scales tip over, since other factors also influence the decision.&lt;/li>
&lt;li>Share with you the learnings that I&amp;rsquo;ve had. I&amp;rsquo;ve not had so much fun&amp;hellip;&lt;/li>
&lt;li>Sometimes in science a lot of your experiments don’t work, but this prize says that what I am doing is important and gives me a new injection of motivation. - Urbashi Sinha on receiving Gates CAmbridge scholarship.&lt;/li>
&lt;li>This book will help you better diagnose latency problems and master the low-latency techniques that have been predominantly “tribal knowledge” until now. You’ll learn a holistic approach, with techniques that intersect many areas of software engineering, distributed systems, databases, and operating systems.&lt;/li>
&lt;li>What did you see in the pipelines that perhaps others didn&amp;rsquo;t?&lt;/li>
&lt;li>You are one of the wealthiest people in America, but you keep a fairly low profile. I know that you are a known entity in Houston, but outside of Houston there may not be a lot of people who know who Rich Kinder is. &lt;strong>Is that by design?&lt;/strong>&lt;/li>
&lt;li>I&amp;rsquo;m wondering what led you to leave these corporate jobs, these safe and steady corporate jobs, and decide to become owner-operators. It&amp;rsquo;s a pretty big leap.
We had really successful long-standing careers in the corporate world. I was in finance, Dana was in marketing. Entrepreneurship was always a really big goal of ours.&lt;/li>
&lt;li>Does that idea feel true to your life experience right now?&lt;/li>
&lt;li>Concentration - a skill that is becoming increasingly important in an environment of constant stimuli.&lt;/li>
&lt;li>In the Kubernetes community, the terms “resource” and “object” are used interchangeably, but there are subtle differences that warrant an explanation.&lt;/li>
&lt;li>Engineers who deploy applications into the cluster therefore influence the configuration by manipulating these objects.&lt;/li>
&lt;li>The fields are listed alphabetically instead of being organized into coherent groups.&lt;/li>
&lt;li>As for the rest, you’ll just have to accept this unfortunate aspect of dealing with Kubernetes manifests.&lt;/li>
&lt;li>The relentless dedication of the Netdata team has birthed significant advancements across all facets of our platform. The extensive rework of the dbengine, our time-series database, stands testament to this progress, ensuring enhanced performance and resilience. As we further innovated, the introduction of advanced ML capabilities, the use of more sophisticated compression algorithms, a revamped SSL layer, and a notably reduced memory footprint have added to Netdata’s prowess. Our commitment to the community shines through in our new UI, equipped with innovative features that simplify monitoring and boost its clarity.&lt;/li>
&lt;/ul>
&lt;p>Netdata’s open-source nature isn’t just a technical classification; it’s a philosophy. We view our software as a gift to the global community, underscoring our commitment to democratizing advanced monitoring solutions.&lt;/p></description></item><item><title>Links to spcl articles</title><link>https://nerdsid.com/reading-list/</link><pubDate>Sat, 15 Nov 2025 07:32:28 +0530</pubDate><guid>https://nerdsid.com/reading-list/</guid><description/></item><item><title>Systems Aren’t Predictable - 3 Lessons From a DR activity</title><link>https://nerdsid.com/posts/systems-arent-predictable-3-lessons-from-a-dr-drill/</link><pubDate>Fri, 14 Nov 2025 23:43:47 +0530</pubDate><guid>https://nerdsid.com/posts/systems-arent-predictable-3-lessons-from-a-dr-drill/</guid><description>&lt;p>&lt;strong>Lessons from a DR activity that didn’t go as planned&lt;/strong>&lt;/p>
&lt;h2 id="what-is-a-disaster-recovery-dr-activity">What is a Disaster Recovery (DR) activity?&lt;/h2>
&lt;p>A DR activity is a planned exercise, where you intentionally flip your workloads to a secondary setup. It may be a new region, a new cluster, or a new infrastructure environment.&lt;/p>
&lt;p>The goal is to ensure that everything works the way it should when your primary environment is unavailable.&lt;/p>
&lt;h2 id="lessons-from-dr-activity">Lessons from DR activity&lt;/h2>
&lt;p>This week, we ran a DR activity. Everything looked perfect on paper.&lt;/p></description></item><item><title>A Podcast That’s Changing the Way I Think (and Grow)</title><link>https://nerdsid.com/journal/a-podcast-thats-changing-the-way-i-think-and-grow/</link><pubDate>Sat, 08 Nov 2025 11:31:47 +0000</pubDate><guid>https://nerdsid.com/journal/a-podcast-thats-changing-the-way-i-think-and-grow/</guid><description>&lt;p>I came across this amazing self-improvement podcast episode recently. If you’re into personal growth, mindset shifts, or just want something inspiring to listen to on your commute, this one’s worth checking out.&lt;/p>
&lt;p>🎧 Give it a listen here:&lt;/p>
&lt;p>&lt;a href="https://www.trishblackwell.com/669-self-confidence-vs-self-belief-why-you-need-both/">Self-confidence vs. Self-belief (why you need both)&lt;/a>&lt;/p></description></item><item><title>Why git add Wildcard Won’t Stage Your Nested Files (And How to Fix It)</title><link>https://nerdsid.com/posts/why-git-add-wildcard-wont-stage-nested-files/</link><pubDate>Sun, 26 Oct 2025 14:54:48 +0530</pubDate><guid>https://nerdsid.com/posts/why-git-add-wildcard-wont-stage-nested-files/</guid><description>&lt;p>I recently ran into an issue while working with Git. I had a bunch of Markdown files spread across multiple nested folders and wanted to stage them all at once. So I ran:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git add *.md&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>But only the &lt;code>.md&lt;/code> files in the current directory got added (to the staging area). The &lt;code>.md&lt;/code> files in the nested directories didn&amp;rsquo;t get added.&lt;/p>
&lt;p>The root casue: the &lt;code>*&lt;/code> wildcard isn’t processed by Git, but by the shell. So the shell was only matching them in the current folder. What a revelation!&lt;/p></description></item><item><title>Authoring</title><link>https://nerdsid.com/authoring/</link><pubDate>Thu, 23 Oct 2025 07:32:28 +0530</pubDate><guid>https://nerdsid.com/authoring/</guid><description>&lt;p>rewrite this using the terminal shortcode with appropriate titles, wherever existing yaml is given, highlight the lines that have been chnaged, format the question and answers appropriately in md.&lt;/p></description></item><item><title>10 Steps to Secure a New Linux VM</title><link>https://nerdsid.com/posts/10-steps-to-make-a-new-linux-vm-safe/</link><pubDate>Wed, 22 Oct 2025 07:09:42 +0000</pubDate><guid>https://nerdsid.com/posts/10-steps-to-make-a-new-linux-vm-safe/</guid><description>&lt;p>When you launch a new Linux VM, the level of security you really need depends on your use case. That said, there are some basic steps you can take right after provisioning a new VM, to improve it&amp;rsquo;s baseline security. Following these steps won’t make your server invincible, but it will make it safe and reduce exposure to common attacks.&lt;/p>
&lt;h2 id="1-update-your-system">1. Update your system&lt;/h2>
&lt;p>Newly deployed images can contain outdated packages with known vulnerabilities. Start by updating everything:&lt;/p></description></item><item><title>4 Ways to Watch Logs Live in Linux</title><link>https://nerdsid.com/posts/watch-logs-live-in-linux/</link><pubDate>Wed, 15 Oct 2025 12:49:55 +0530</pubDate><guid>https://nerdsid.com/posts/watch-logs-live-in-linux/</guid><description>&lt;h2 id="1-tail--f">1. &lt;code>tail -f&lt;/code>&lt;/h2>
&lt;p>&lt;strong>Use when:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>You want to quickly stream a log file.&lt;/li>
&lt;li>You want to perform short, one-off checks on a single log file.&lt;/li>
&lt;/ul>
&lt;!-- - Great for one-off checks, ad-hoc debugging (like checking `nginx/access.log` or `app.log`). -->
&lt;p>&lt;strong>Availibility&lt;/strong>: available on all Linux/Unix systems.&lt;/p>
&lt;p>&lt;strong>Example:&lt;/strong>&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">tail -f /var/log/syslog&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h2 id="2-tail--f">2. &lt;code>tail -F&lt;/code>&lt;/h2>
&lt;p>Some services (like Nginx, Apache) &lt;strong>rotate logs&lt;/strong> i.e. they stop writing logs to an old file and instead write to a new file (named sequentially).
&lt;code>tail -f&lt;/code> stops following when that happens, but &lt;code>tail -F&lt;/code> automatically switches to the new file. In other words, it handles log rotation gracefully.&lt;/p></description></item><item><title>The Hard Truth About Courage &amp; Compassion</title><link>https://nerdsid.com/journal/the-hard-truth-about-courage-compassion/</link><pubDate>Sun, 21 Sep 2025 00:31:47 +0000</pubDate><guid>https://nerdsid.com/journal/the-hard-truth-about-courage-compassion/</guid><description>&lt;p>Courage, compassion they sound inspiring, even easy, when we talk about them. But living them? That’s uncomfortable, and often scary. Courage means risking judgment. Compassion means saying no.&lt;/p>
&lt;p>The following excerpt from the book &lt;a href="https://brenebrown.com/book/the-gifts-of-imperfection/">The gifts of imperfection&lt;/a> dives into that raw, real side of these values.&lt;/p>
&lt;p>&amp;ldquo;Courage sounds great, but we need to talk about how it requires vulnerability and the willingness to let go of what other people think, and for most of us, that&amp;rsquo;s scary.&lt;/p></description></item><item><title>Use Social Media Like a Gym, Not a Couch</title><link>https://nerdsid.com/journal/use-social-media-like-a-gym-not-a-couch/</link><pubDate>Fri, 29 Aug 2025 11:35:47 +0000</pubDate><guid>https://nerdsid.com/journal/use-social-media-like-a-gym-not-a-couch/</guid><description>&lt;p>Social media builds you or breaks you. It can be like gym or a couch - depending on your usage, feed. Watch the following video by &lt;a href="https://www.drjulie.uk/about">Dr. Julie&lt;/a> (a renowned clinical psychologist &amp;amp; author) to know more.&lt;/p>
&lt;div style="position: relative; padding-top: 56.25%;">
 &lt;iframe src="https://iframe.mediadelivery.net/embed/349433/ee08330b-2f08-4405-98b2-006efb71c4af" 
 loading="lazy" style="border: none; position: absolute; top: 0; height: 100%; width: 100%;" 
 allow="accelerometer; gyroscope; encrypted-media; picture-in-picture;" allowfullscreen="true">
 &lt;/iframe>
&lt;/div>

&lt;br>

&lt;h3 id="key-takeaways">Key takeaways&lt;/h3>
&lt;p>Let’s be real: every time you open social media, it&amp;rsquo;s difficult to stop comparing yourself.&lt;/p>
&lt;p>You compare because you’re human. It’s hardwired. If you never checked where you stand next to others in skills, values, effort — you’d be a terrible community member.&lt;/p></description></item><item><title>Life is a DIY project</title><link>https://nerdsid.com/journal/life-is-a-diy-project/</link><pubDate>Sun, 03 Aug 2025 11:35:47 +0000</pubDate><guid>https://nerdsid.com/journal/life-is-a-diy-project/</guid><description>&lt;p>Of late, I&amp;rsquo;ve understood that life is a DIY (Do It Yourself) project. The sooner you realise this, the better it is. The following excerpt from Sahil Bloom&amp;rsquo;s blog &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup> reinforced my belief in the same:&lt;/p>
&lt;p>&amp;ldquo;You’re going to fail.&lt;br>
It’s going to hurt.&lt;br>
You’ll feel lost.&lt;br>
You’ll feel confused.&lt;br>
You’ll feel betrayed.&lt;/p>
&lt;p>Complaining, blaming, pointing fingers—none of it will get you anywhere worth going.&lt;/p>
&lt;p>You are in control.&lt;br>
Of everything.&lt;br>
It’s all on you.&lt;br>
Nobody is coming to save you.&lt;/p></description></item><item><title>Grep Was Built in a Day - No Jira No Sprints</title><link>https://nerdsid.com/journal/grep-built-in-a-day-no-jira-no-sprints/</link><pubDate>Thu, 10 Jul 2025 11:35:47 +0000</pubDate><guid>https://nerdsid.com/journal/grep-built-in-a-day-no-jira-no-sprints/</guid><description>&lt;p>I recently learnt that Ken Thompson developed the Linux &lt;code>grep&lt;/code> utility in just &lt;strong>one day&lt;/strong>. One single day! And ever since, I’ve been sitting and wondering&amp;hellip; &lt;em>how&lt;/em>?&lt;/p>
&lt;p>For the uninitiated:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Ken_Thompson">Ken Thompson&lt;/a> is a pioneer of computer science who designed and implemented Unix, B, C, and Plan 9 operating systems. He also invented regular expressions, UTF-8, and Go, and won the Turing Award in 1983.&lt;/li>
&lt;li>Writing a program like &lt;code>grep&lt;/code> is no ordinary feat. It&amp;rsquo;s implementation is complex due to the intricacies of regular expressions, performance optimizations, and file handling capabilities.&lt;/li>
&lt;/ul>
&lt;p>How did Ken Thompson pull off the unthinkable? That too &lt;em>without&lt;/em> Jira tickets, story points, or a bi-weekly sprint review?&lt;/p></description></item><item><title>The Real Beauty, The Real Fragrance</title><link>https://nerdsid.com/journal/the-real-beauty-the-real-fragrance/</link><pubDate>Wed, 16 Apr 2025 11:35:47 +0000</pubDate><guid>https://nerdsid.com/journal/the-real-beauty-the-real-fragrance/</guid><description>&lt;p>We live in a world where beauty is often associated with appearances (face, body, skin etc.). Similarly, fragnance is associated with perfumes, deodrants etc.&lt;/p>
&lt;p>In this blog post, I would like to offer a different perspective to these existing beliefs. I want to take you beyond the surface definition and offer a humane perspective on what I believe real beauty and real fragrance truly are. Feel free to disagree with me, if you wish.&lt;/p></description></item><item><title>Differnece Between X Window System and a Desktop Environment</title><link>https://nerdsid.com/posts/x-window-system-vs-desktop-environment/</link><pubDate>Tue, 14 Jan 2025 11:31:46 +0000</pubDate><guid>https://nerdsid.com/posts/x-window-system-vs-desktop-environment/</guid><description>&lt;p>The &lt;strong>X Window System&lt;/strong> and a &lt;strong>desktop environment&lt;/strong> are related but serve different purposes in a graphical user interface (GUI) on Linux.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>X Window System (X11)&lt;/strong>: It is the foundational framework that provides the basic functionality for displaying graphical applications. X manages windows, handles input devices (like the mouse and keyboard), and allows graphical applications to display their content. However, X alone does not provide a full, user-friendly interface; it merely acts as the underlying protocol for graphical communication.&lt;/p></description></item><item><title>Understanding Bootloader With a Toy Robot Example</title><link>https://nerdsid.com/posts/understanding-bootloader-with-a-toy-robot-example/</link><pubDate>Tue, 14 Jan 2025 10:47:04 +0000</pubDate><guid>https://nerdsid.com/posts/understanding-bootloader-with-a-toy-robot-example/</guid><description>&lt;p>Imagine you have a toy robot that needs to be turned on before it can start moving and talking. When you press the power button, the robot goes through a quick check to make sure its batteries are working, its wheels can spin, and its voice box is ready. It makes sure all components are connected and are in a working state.&lt;/p>
&lt;p>This initial check is like a bootloader. The bootloader performs similar checks on your computer or device. It ensures the system’s hardware (like memory, storage, and CPU) is functioning correctly before anything else happens.&lt;/p></description></item><item><title>Understanding the Kernel and Distribution With a Restaurant Example</title><link>https://nerdsid.com/posts/kernel-vs-distribution-a-restaurant-example/</link><pubDate>Tue, 14 Jan 2025 09:28:28 +0000</pubDate><guid>https://nerdsid.com/posts/kernel-vs-distribution-a-restaurant-example/</guid><description>&lt;p>Let’s use the example of a restaurant to illustrate the concepts of a &lt;strong>kernel&lt;/strong> and a &lt;strong>distribution&lt;/strong>.&lt;/p>
&lt;h2 id="kernel-the-chef">Kernel: The Chef&lt;/h2>
&lt;p>Think of the kernel as the &lt;strong>head chef&lt;/strong> in a restaurant. The chef is responsible for managing the kitchen, ensuring that all the ingredients are prepared correctly, and that the cooking processes are followed. The chef makes sure that everything runs smoothly in the kitchen, coordinating the cooking of different dishes and managing the kitchen staff. Without the chef, the kitchen would be chaotic, and the food wouldn’t be prepared properly.&lt;/p></description></item><item><title>Key Linux Terms Explained: Kernel, Bootloader, Filesystem &amp; More</title><link>https://nerdsid.com/posts/key-linux-terms-explained-kernel-bootloader-file-system-more/</link><pubDate>Tue, 14 Jan 2025 08:26:23 +0000</pubDate><guid>https://nerdsid.com/posts/key-linux-terms-explained-kernel-bootloader-file-system-more/</guid><description>&lt;p>Before you begin to use Linux, you need to be aware of certain terms like: Kernel, Bootlader, Window system, service etc.&lt;/p>
&lt;h2 id="kernel">Kernel&lt;/h2>
&lt;p>Kernel is the glue between hardware and applications. It controls hardware and allows applications to make use of the hardware.&lt;/p>
&lt;p>Examples: Linux kernel&lt;/p>
&lt;h2 id="distribution">Distribution&lt;/h2>
&lt;p>A Linux distribution (or distro) is essentially the same as an operating system (OS) in the context of Linux.&lt;/p>
&lt;p>Linux distro includes not only the Linux kernel (the core part of the OS) but also additional software, tools, libraries, and user interfaces that together form a complete, functional system.&lt;/p></description></item><item><title>How to Clone a Git Repository Along With Its Submodules</title><link>https://nerdsid.com/posts/how-to-clone-a-git-repository-along-with-its-submodules/</link><pubDate>Wed, 01 Jan 2025 05:20:44 +0000</pubDate><guid>https://nerdsid.com/posts/how-to-clone-a-git-repository-along-with-its-submodules/</guid><description>&lt;p>When you clone a Git repository with submodule(s) in it, by default you get the directories that contain submodule(s), but none of the files within them.&lt;/p>
&lt;h2 id="clone-with-submodules-in-one-command">Clone with Submodules in One Command&lt;/h2>
&lt;p>If you pass &lt;code>--recurse-submodules&lt;/code> option to the git clone command, it automatically initializes and updates all submodules in the repository, including nested ones if they exist.&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git clone --recurse-submodules &amp;lt;repository_url&amp;gt;&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>For example:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git clone --recurse-submodules https://github.com/example/repo.git&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h2 id="another-way-to-initialize-and-update-submodules">Another Way to Initialize and Update Submodules&lt;/h2>
&lt;p>If you&amp;rsquo;ve already cloned a repository but forgot to use &lt;code>--recurse-submodules&lt;/code>, you can run &lt;code>git submodule update --init&lt;/code> to initialize and update the submodules. To make sure all submodules, including nested ones, are initialized, fetched, and checked out, use &lt;code>git submodule update --init --recursive&lt;/code>.&lt;/p></description></item><item><title>Do you want to be happy?</title><link>https://nerdsid.com/journal/do-you-want-to-be-happy/</link><pubDate>Fri, 27 Dec 2024 03:35:47 +0000</pubDate><guid>https://nerdsid.com/journal/do-you-want-to-be-happy/</guid><description>&lt;p>So, you want to be happy? Who does not?&lt;/p>
&lt;p>I think I have understood (to some extent at least) what constitutes happiness &amp;amp; what doesn&amp;rsquo;t.&lt;/p>
&lt;p>I have realized that happiness is a state of being. Most importantly, &lt;strong>it&amp;rsquo;s a choice&lt;/strong> that you have to make. You might have come across people who always have a smile on their face. It doesn&amp;rsquo;t mean that they have no problems in life. It simply means that they have chosen to be happy in spite of the ups and downs of life that they are going through.&lt;/p></description></item><item><title>Meet Qubits: The Tiny Tots Powering Mighty Computing</title><link>https://nerdsid.com/posts/meet-qubits-the-tiny-tots-powering-mighty-computing/</link><pubDate>Thu, 26 Dec 2024 07:08:42 +0000</pubDate><guid>https://nerdsid.com/posts/meet-qubits-the-tiny-tots-powering-mighty-computing/</guid><description>&lt;p>Unless you’ve been living under a rock, you’ve likely heard of &lt;a href="https://en.wikipedia.org/wiki/Quantum_computing">quantum computing&lt;/a> — the groundbreaking technology set to redefine our species&amp;rsquo; computational prowess. It has the potential to dwarf even the fastest supercomputer operating today. At the heart of this technology lies the humble qubit.&lt;/p>
&lt;p>A bit (here onwards referred to as classical bit) refers to the fundamental unit of information in a computing device. It&amp;rsquo;s quantum counterpart is known as quantum bit (qubit).&lt;/p></description></item><item><title>Handling failure in your 20s</title><link>https://nerdsid.com/journal/handling-failure-in-your-20s/</link><pubDate>Wed, 25 Dec 2024 11:35:47 +0000</pubDate><guid>https://nerdsid.com/journal/handling-failure-in-your-20s/</guid><description>&lt;p>While you are in your 20s, there are so many times you may feel that you have failed at something or something didn’t work out as you expected it to. In these times, it can be easy to feel like it’s the end of the world. This can also bring in additional feelings like:&lt;/p>
&lt;ul>
&lt;li>You aren’t good enough.&lt;/li>
&lt;li>You are good for nothing.&lt;/li>
&lt;li>Nothing else you try will work out.&lt;/li>
&lt;li>You should give up altogether and stick to what you know.&lt;/li>
&lt;/ul>
&lt;p>This mindset can make it difficult to bounce back whenever things don’t go as planned. Often you might be paralyzed by the fear of:&lt;/p></description></item><item><title>Facing Fear with Courage: a Lesson from Vivekananda</title><link>https://nerdsid.com/posts/facing-fear-with-courage-vivekananda/</link><pubDate>Sat, 14 Dec 2024 11:24:24 +0000</pubDate><guid>https://nerdsid.com/posts/facing-fear-with-courage-vivekananda/</guid><description>&lt;p>In this post, I share a powerful lesson from &lt;a href="https://en.wikipedia.org/wiki/Swami_Vivekananda">Swami Vivekananda&lt;/a> on overcoming fear and adversity. It illustrates how facing challenges head-on, rather than running from them, leads to true freedom and growth. The incident took place when he was in &lt;a href="https://en.wikipedia.org/wiki/Varanasi">Varanasi&lt;/a> (a sacred city on the banks of the Ganges, known for its spiritual significance).&lt;/p>
&lt;p>&amp;ldquo;Once when I was in Varanasi, I was passing through a place where there was a large tank of water on one side and a high wall on the other. It was in the grounds where there were many monkeys. The monkeys of Varanasi are huge brutes and are sometimes surly.&lt;/p></description></item><item><title>Git terms explained in simple words</title><link>https://nerdsid.com/posts/git-terms-explained-in-simple-words/</link><pubDate>Wed, 11 Dec 2024 07:32:28 +0530</pubDate><guid>https://nerdsid.com/posts/git-terms-explained-in-simple-words/</guid><description>&lt;h3 id="branches">Branches&lt;/h3>
&lt;p>Branches are copies of the main project where you can make changes without affecting the production project until you&amp;rsquo;re ready to integrate the changes. They allow developers to work on new features, bug fixes, or experiment in isolation. When the changes are complete and reviewed, you merge the branch back into the main project.&lt;/p>
&lt;p>Examples:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Feature branches&lt;/strong>: Used for developing new features. For example, if you&amp;rsquo;re adding a login page to a website, you would create a feature branch like &lt;code>feature/login-page&lt;/code> to make all the necessary changes.&lt;/li>
&lt;li>&lt;strong>Bugfix branches&lt;/strong>: Created to fix specific bugs. For instance, if there&amp;rsquo;s an issue with the checkout process, a branch like &lt;code>bugfix/checkout-error&lt;/code> could be used.&lt;/li>
&lt;li>&lt;strong>Release branches&lt;/strong>: Prepared when you&amp;rsquo;re close to releasing a version of the project. A release branch might be named &lt;code>release/v1.0&lt;/code> to finalize new features before they go live.&lt;/li>
&lt;li>&lt;strong>Hotfix branches&lt;/strong>: These are for urgent fixes that need to be addressed in production immediately. An example could be &lt;code>hotfix/critical-bug&lt;/code> to address a security vulnerability found after release.&lt;/li>
&lt;/ul>
&lt;h3 id="commit">Commit&lt;/h3>
&lt;p>A commit is a snapshot of the changes made to files in a branch. It records the specific modifications made at a particular point in time, so that developers can track the history of changes and revert to previous versions if necessary. A commit typically includes a message describing what was changed.&lt;/p></description></item><item><title>When Technology Moves Faster Than the Law</title><link>https://nerdsid.com/journal/when-technology-moves-faster-than-the-law/</link><pubDate>Mon, 09 Dec 2024 11:35:47 +0000</pubDate><guid>https://nerdsid.com/journal/when-technology-moves-faster-than-the-law/</guid><description>&lt;blockquote>
&lt;p>In this case, Biesk’s son had seemingly performed what is known as a soft rug pull, whereby somebody creates a new crypto token, promotes it online, then sells off their entire holdings either swiftly or over time, sinking its price. These maneuvers occupy something of a legal gray area, lawyers say, but are roundly condemned in the cryptosphere as ethically dubious at the least. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>&lt;/blockquote>
&lt;p>The rise of cryptocurrency has introduced groundbreaking opportunities, but it has also posed significant challenges, particularly in the realm of regulation.&lt;/p></description></item><item><title>Protect Your Email: Share It Safely on Websites With ROT47 Encryption</title><link>https://nerdsid.com/posts/protect-your-email-with-rot47-encryption/</link><pubDate>Fri, 06 Dec 2024 08:28:20 +0000</pubDate><guid>https://nerdsid.com/posts/protect-your-email-with-rot47-encryption/</guid><description>&lt;h2 id="potential-risks-with-sharing-email-in-plaintext">Potential risks with sharing email in plaintext&lt;/h2>
&lt;p>So, you want to share your email on your website, but you&amp;rsquo;re worried about spam?&lt;/p>
&lt;p>Sharing your email address in plaintext (without any encryption) can be risky. When you post your email openly on a website or blog, it becomes visible to web crawlers and spambots. These bots scour the internet, collecting email addresses to send spam and unwanted marketing emails. Over time, this can lead to your inbox being flooded with irrelevant messages.&lt;/p></description></item><item><title>The Forbidden Fruit of Apple's Walled Garden</title><link>https://nerdsid.com/journal/the-forbidden-fruit-of-apples-walled-garden/</link><pubDate>Fri, 06 Dec 2024 07:32:28 +0530</pubDate><guid>https://nerdsid.com/journal/the-forbidden-fruit-of-apples-walled-garden/</guid><description>&lt;p>&lt;strong>The Forbidden Fruit of Apple&amp;rsquo;s Walled Garden&lt;/strong>&lt;/p>
&lt;p>&lt;em>&amp;ldquo;But that&amp;rsquo;s my fault for taking a bite of the forbidden fruit inside of Apple&amp;rsquo;s walled garden.&amp;rdquo;&lt;/em>&lt;/p>
&lt;p>These words from a fellow developer really stuck with me. They perfectly capture the feeling many of us experience when we dive into Apple’s ecosystem. On the surface, it’s easy to get caught up in the sleek design, the smooth integration, and the overall polished experience that Apple offers. But for developers, there’s always a trade-off. What seems like a perfect, closed system can quickly start to feel like a cage—one where freedom, flexibility, and customization come with a cost.&lt;/p></description></item><item><title>Glossary of terms for Quantum computing</title><link>https://nerdsid.com/posts/quantum-computing-glossary/</link><pubDate>Thu, 05 Dec 2024 07:32:28 +0530</pubDate><guid>https://nerdsid.com/posts/quantum-computing-glossary/</guid><description/></item><item><title>Superposition</title><link>https://nerdsid.com/posts/quantum-superposition/</link><pubDate>Thu, 05 Dec 2024 07:32:28 +0530</pubDate><guid>https://nerdsid.com/posts/quantum-superposition/</guid><description>&lt;p>Superposition is a principle where something can exist in multiple states at the same time until it is observed or measured.&lt;/p></description></item><item><title>Favourite quotes</title><link>https://nerdsid.com/quotes/</link><pubDate>Wed, 04 Dec 2024 07:32:28 +0530</pubDate><guid>https://nerdsid.com/quotes/</guid><description>&lt;p>Welcome! Here you&amp;rsquo;ll find inspiring quotes to motivate and guide you. Browse by topics like writing, success, and more to find some inspirational words for your day.&lt;/p>
&lt;h2 id="tech-for-good">Tech for good&lt;/h2>
&lt;ul>
&lt;li>The ultimate goal should be to improve the quality of human life through digital innovation. - &lt;em>Pony Ma Huateng&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="life">Life&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>If you want something in your life that you&amp;rsquo;ve never had, you will have to do something, you&amp;rsquo;ve never done. - &lt;em>JD Houston&lt;/em>&lt;/p></description></item><item><title>Update Git Submodule to the Latest Commit</title><link>https://nerdsid.com/posts/update-git-submodule-to-the-latest-commit/</link><pubDate>Thu, 26 Sep 2024 15:39:06 +0530</pubDate><guid>https://nerdsid.com/posts/update-git-submodule-to-the-latest-commit/</guid><description>&lt;p>When working with Git submodules, it&amp;rsquo;s common to update them to incorporate changes from their upstream repositories. To do this you can run the following command:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git submodule update --remote --merge&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>This process, in Git&amp;rsquo;s parlance, is known as &lt;em>updating and merging submodules&lt;/em>. It ensures that your submodules are synchronized with the latest changes from their upstream repositories.&lt;/p>

 &lt;link rel="stylesheet" href="https://nerdsid.com/css/vendors/admonitions.4bf07b8db9b3f53c757ff23d01e06b5ed8c6ec5aba206f8e5ea403d5d4c8f44a.css" integrity="sha256-S/B7jbmz9Tx1f/I9AeBrXtjG7Fq6IG&amp;#43;OXqQD1dTI9Eo=" crossorigin="anonymous">
 &lt;div class="admonition important">
 &lt;div class="admonition-header">
 &lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/>&lt;/svg>
 &lt;span>Important&lt;/span>
 &lt;/div>
 &lt;div class="admonition-content">
 &lt;p>After updating and merging the submodule, don&amp;rsquo;t forget to commit the change in your main repository. This ensures the new submodule state is recorded and shared with others working on the project. Here&amp;rsquo;s how to do that:&lt;/p></description></item><item><title>How to Set Git Username and Email Using Environment Variables</title><link>https://nerdsid.com/posts/git-username-and-email-from-environment-variables/</link><pubDate>Wed, 11 Sep 2024 15:39:06 +0530</pubDate><guid>https://nerdsid.com/posts/git-username-and-email-from-environment-variables/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Git associates a username and email with every commit. The username and email are retrieved from Git&amp;rsquo;s configuration, which can be set globally (for all repositories) or locally (for a specific repository). For example to set the username globally, you can run the command &lt;code>git config --global user.name &amp;quot;Your Name&amp;quot;&lt;/code>.&lt;/p>
&lt;p>However, an alternative way to achieve this is by using environment variables. This can be useful for several reasons, such as:&lt;/p></description></item><item><title>Delayed gratification &amp; success</title><link>https://nerdsid.com/journal/delayed-gratification-and-success/</link><pubDate>Thu, 15 Aug 2024 11:35:47 +0000</pubDate><guid>https://nerdsid.com/journal/delayed-gratification-and-success/</guid><description>&lt;p>Success depends on numerous factors. I believe one of them is delayed gratification. Unfortunately, we are living in an age where instant gratification is easily accessible. The mobile phone and internet promote instant gratification.&lt;/p>
&lt;blockquote>
&lt;p>Your success depends on your ability to postpone immediate rewards (delayed gratification).&lt;/p>&lt;/blockquote></description></item><item><title>Blogroll</title><link>https://nerdsid.com/blogroll/</link><pubDate>Thu, 23 Nov 2023 07:32:28 +0530</pubDate><guid>https://nerdsid.com/blogroll/</guid><description>&lt;p>Here’s a (growing) list of hyperlinks to other blogs I enjoy reading, in no particular order.&lt;/p>
&lt;p>&lt;a href="https://calebporzio.com/">https://calebporzio.com/&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://pawelgrzybek.com/">https://pawelgrzybek.com/&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://rusingh.com/">https://rusingh.com/&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://samkapila.com/">https://samkapila.com/&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://andy-bell.co.uk/">https://andy-bell.co.uk/&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://arne.me/">https://arne.me/&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://hacdias.com/">https://hacdias.com/&lt;/a>&lt;/p></description></item><item><title>What is upsert ?</title><link>https://nerdsid.com/journal/what-is-upsert/</link><pubDate>Sun, 29 Oct 2023 19:36:22 +0530</pubDate><guid>https://nerdsid.com/journal/what-is-upsert/</guid><description>&lt;p>Today I came across a new word &amp;lsquo;upsert&amp;rsquo;. Here is what it means.&lt;/p>
&lt;blockquote>
&lt;p>The term upsert is a portmanteau – a combination of the words “update” and “insert.” In the context of relational databases, an upsert is a database operation that will update an existing row if a specified value already exists in a table, and insert a new row if the specified value doesn’t already exist.&lt;/p>&lt;/blockquote>
&lt;h2 id="references">References&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://www.cockroachlabs.com/blog/sql-upsert/">https://www.cockroachlabs.com/blog/sql-upsert/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://joaomagfreitas.link/micro-libraries/">Micro Libraries&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Committing to Better Technical Writing</title><link>https://nerdsid.com/journal/committing-to-better-technical-writing/</link><pubDate>Thu, 26 Oct 2023 19:36:22 +0530</pubDate><guid>https://nerdsid.com/journal/committing-to-better-technical-writing/</guid><description>&lt;p>Today, I stumbled upon &lt;a href="https://www.digitalocean.com/community/tutorials/digitalocean-s-technical-writing-guidelines">DigitalOcean&amp;rsquo;s Technical Writing Guidelines&lt;/a>. Some of their guidelines really struck a chord with me, reminding me of the importance of clear, concise writing.&lt;/p>
&lt;p>I&amp;rsquo;ll be honest, I might not have followed all these guidelines in the past. But from now on, I&amp;rsquo;ve decided to keep a close eye on these. When I write new posts, I&amp;rsquo;ll make a conscious effort to incorporate these guidelines. I have listed them below.&lt;/p></description></item><item><title>Figuring Out Life, Career</title><link>https://nerdsid.com/journal/figuring-out-life-career/</link><pubDate>Wed, 25 Oct 2023 07:32:28 +0530</pubDate><guid>https://nerdsid.com/journal/figuring-out-life-career/</guid><description>&lt;p>Today, I came across a post that talked about how interets &amp;amp; career can change over time.
The post mentions something interesting - they found out more about what they didn&amp;rsquo;t like from their old jobs than what they really wanted to do. So, by eliminating what they didn&amp;rsquo;t like, they found what they love.&lt;/p>
&lt;p>This post made me think about how I should be open to change, look for what I&amp;rsquo;m truly passionate about, and keep improving myself on the journey of life.&lt;/p></description></item><item><title>Keyboard testing website</title><link>https://nerdsid.com/journal/keyboard-testing-website/</link><pubDate>Tue, 24 Oct 2023 07:32:28 +0530</pubDate><guid>https://nerdsid.com/journal/keyboard-testing-website/</guid><description>&lt;h2 id="exploring-keyboard-testing">Exploring keyboard testing&lt;/h2>
&lt;p>Today, I purchased a brand-new keyboard and set out to find a suitable online platform for testing it. The keyborad has a full size layout (comes with 104 keys). After trying out several websites, I stumbled upon a noteworthy website:&lt;/p>
&lt;p>&lt;a href="https://www.keyboardtest.org/">https://www.keyboardtest.org&lt;/a>&lt;/p>
&lt;p>I like this website for a couple of reasons:&lt;/p>
&lt;ul>
&lt;li>It accommodates full-size keyboards.&lt;/li>
&lt;li>It distinguishes between the right and left Ctrl and Alt keys, an essential feature for a thorough evaluation.&lt;/li>
&lt;/ul>
&lt;p>Another useful website:&lt;/p></description></item><item><title>A Heartwarming GitHub Discovery</title><link>https://nerdsid.com/journal/a-heartwarming-github-discovery/</link><pubDate>Mon, 23 Oct 2023 07:32:28 +0530</pubDate><guid>https://nerdsid.com/journal/a-heartwarming-github-discovery/</guid><description>&lt;p>Today, while exploring GitHub, I stumbled upon a touching &lt;a href="https://github.com/atom/atom/issues/25755">comment&lt;/a> on the Atom Text Editor repository. It said:&lt;/p>
&lt;blockquote>
&lt;p>Seriously, to any devs that lovingly worked on this project thank you! Every single one of the contributors to this project, you are appreciated.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Every single one of the contributors to this project, you are appreciated.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>Even if things didn&amp;rsquo;t go out as we may have hoped, this editor has made a mark on the landscape of text editors, and from every +1|-1 contributor to the top, you are appreciated and did fantastic work.&lt;/p></description></item><item><title>About</title><link>https://nerdsid.com/about/</link><pubDate>Mon, 23 Oct 2023 07:32:28 +0530</pubDate><guid>https://nerdsid.com/about/</guid><description>&lt;p>Tech nerd is the word I&amp;rsquo;d pick for myself.&lt;/p>
&lt;p>I&amp;rsquo;ve been one for as long as I can remember. I just want to know how things work, and I&amp;rsquo;ve never been able to stop.&lt;/p>
&lt;p>It&amp;rsquo;s why friends, neighbours, and teachers ended up calling me when their laptop was slow or the phone had some issue.&lt;/p>
&lt;p>Now I work in DevOps, which is more or less the same job with better tooling.&lt;/p></description></item><item><title>Contact</title><link>https://nerdsid.com/contact/</link><pubDate>Mon, 23 Oct 2023 07:32:28 +0530</pubDate><guid>https://nerdsid.com/contact/</guid><description>&lt;p>You can get in touch with me on Fosstodon here: &lt;a href="https://fosstodon.org/@sidh">fosstodon.org/@sidh&lt;/a>. To follow me you&amp;rsquo;ve to use &lt;code>@sidh@fosstodon.org&lt;/code>.&lt;/p>
&lt;p>Fosstodon is a decentralized social media powered by Mastodon. You can also contact me using my e-mail: 
 &lt;noscript>
 &lt;p>You need JavaScript enabled to see my email.&lt;/p>
 &lt;/noscript>

 
 &lt;p id="encrypted-email" style="display:none;">yxk.xhhiy@jzayepx.zjv&lt;/p>

 
 &lt;button id="reveal-email" style="color: black; font-weight: 700; background-color: #b4befe; border: none; border-radius: 5px; padding: .3rem .7rem; transition: 0.5s; cursor: pointer; font-family: 'JetBrains', monospace;">Click to see my email&lt;/button>
 &lt;style>
 #reveal-email:hover {
 background-color: #94e2d5;
 transition: 0.5s;
 box-shadow: rgb(40, 159, 237) 5px 5px 0px 0px,
 rgb(95, 184, 255) 10px 10px 0px 0px,
 rgb(161, 216, 255) 15px 15px 0px 0px,
 rgb(202, 230, 255) 20px 20px 0px 0px,
 rgb(225, 238, 255) 25px 25px 0px 0px,
 5px 5px 15px 5px rgba(0, 0, 0, 0);
 }

 &lt;/style>
 
 &lt;p id="email" style="display:none;">&lt;/p></description></item><item><title>Shortcuts to Navigate in a Terminal</title><link>https://nerdsid.com/posts/shortcuts-to-navigate-in-a-terminal/</link><pubDate>Wed, 13 Sep 2023 16:51:56 +0530</pubDate><guid>https://nerdsid.com/posts/shortcuts-to-navigate-in-a-terminal/</guid><description>&lt;p>Like in any other text based program, linux terminals also support usage of arrow keys, backspace to navigate and edit text. But there are some shortcuts which can replace multiple use of arrow keys and simplify user experience. Following table lists some shortcuts.&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Shortcut&lt;/th>
 &lt;th>Action&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Ctrl+A&lt;/td>
 &lt;td>Jump to the beginning of the command line.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ctrl+E&lt;/td>
 &lt;td>Jump to the end of the command line.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ctrl+U&lt;/td>
 &lt;td>Clear from the cursor to the beginning of the command line.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ctrl+K&lt;/td>
 &lt;td>Clear from the cursor to the end of the command line.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ctrl+LeftArrow&lt;/td>
 &lt;td>Jump to the beginning of the previous word on the command line.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ctrl+RightArrow&lt;/td>
 &lt;td>Jump to the end of the next word on the command line.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ctrl+R&lt;/td>
 &lt;td>Search the history list of commands for a pattern.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>More such shortcuts can be found in the bash man page.&lt;/p></description></item><item><title>Edit Last Commit Message in Git</title><link>https://nerdsid.com/posts/git-edit-last-commit-message/</link><pubDate>Wed, 13 Sep 2023 15:39:06 +0530</pubDate><guid>https://nerdsid.com/posts/git-edit-last-commit-message/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Picture this: you&amp;rsquo;re on a coding spree, rushing to fulfill a project deadline. You&amp;rsquo;ve just committed your changes to Git. All of a sudden, you notice a typo in your last commit message! But don&amp;rsquo;t worry, you have the ability to correct it in the realm of Git.&lt;/p>
&lt;h2 id="modify-the-last-commit-message">Modify the last commit message&lt;/h2>
&lt;p>To update the last commit message in Git, you can use the &lt;code>--amend&lt;/code> option with the &lt;code>git commit&lt;/code> command. The following command illustrates it.&lt;/p></description></item><item><title>Managing Multiple Python Installations on Windows</title><link>https://nerdsid.com/posts/managing-multiple-python-installations-on-windows/</link><pubDate>Mon, 05 Jun 2023 07:32:28 +0530</pubDate><guid>https://nerdsid.com/posts/managing-multiple-python-installations-on-windows/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Managing multiple Python installations on Windows can be a challenging task. With the help of pyenv, it becomes much easier and efficient. In this article, we will explore how to set up and use pyenv to effectively manage multiple Python versions on your Windows system.&lt;/p>
&lt;h2 id="why-have-multiple-python-installations">Why have multiple Python installations?&lt;/h2>
&lt;p>Here is a non-exhaustive list of reasons why you might want to have multiple Python installations on your system:&lt;/p></description></item><item><title>Chocolatey - List Installed Packages</title><link>https://nerdsid.com/posts/chocolatey-list-installed-packages/</link><pubDate>Thu, 01 Jun 2023 07:32:28 +0530</pubDate><guid>https://nerdsid.com/posts/chocolatey-list-installed-packages/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Chocolatey is a package manager for Windows. It is a command-line tool that allows you to install, upgrade, and uninstall software packages on your system. I have been using Chocolatey for a while now, and I find it to be a great tool for managing software packages on Windows.&lt;/p>
&lt;h2 id="list-installed-packages">List Installed Packages&lt;/h2>
&lt;p>If you wish to list all the Chocolatey packages installed on your system, you can use the following command:&lt;/p></description></item><item><title>How to Fix Common Git Mistakes</title><link>https://nerdsid.com/posts/avoiding-disaster-how-to-fix-common-git-mistakes-like-a-pro/</link><pubDate>Wed, 03 May 2023 05:27:57 +0000</pubDate><guid>https://nerdsid.com/posts/avoiding-disaster-how-to-fix-common-git-mistakes-like-a-pro/</guid><description>&lt;p>Git is a version control system that allows developers to manage and track changes to their codebase over time. It is easy to make mistakes, while working with Git. This can result in confusion, lost effort, and even data loss. In this post, we&amp;rsquo;ll go over some common Git problems and their solutions. Whether you&amp;rsquo;re new to Git or want to enhance your Git skills, these tips will help you become a more efficient and productive developer.&lt;/p></description></item><item><title>Demystifying PowerShell Versions and Editions</title><link>https://nerdsid.com/posts/demystifying-powershell-versions-and-editions/</link><pubDate>Sun, 30 Apr 2023 05:27:57 +0000</pubDate><guid>https://nerdsid.com/posts/demystifying-powershell-versions-and-editions/</guid><description>&lt;h2 id="what-does-the-name-powershell-refer-to">What does the name PowerShell refer to?&lt;/h2>
&lt;p>PowerShell is a command-line shell and scripting language that is built on top of the .NET Framework. It can be used to automate tasks, deal with structured data (e.g. JSON, CSV, XML, etc.), interact with REST APIs, and more.&lt;/p>
&lt;p>Powershell is available in two editions: Desktop and Core. The Desktop edition is available on Windows 7/8/10/11, Windows Server 2019/2022, and in later versions of Windows. The Core edition is cross-platform and is available on Windows, macOS, and Linux. &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p></description></item><item><title>Command to Get a Count of Python Dependencies</title><link>https://nerdsid.com/posts/single-command-to-get-count-of-python-dependencies/</link><pubDate>Sat, 22 Apr 2023 00:00:00 +0530</pubDate><guid>https://nerdsid.com/posts/single-command-to-get-count-of-python-dependencies/</guid><description>&lt;p>From the root of your project run:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip freeze --all &lt;span class="p">|&lt;/span> wc -l&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>This will return a number which indicates the total no. of dependencies of your Python project.&lt;/p></description></item><item><title>One Line Command to Create an SSH Key</title><link>https://nerdsid.com/posts/one-line-command-to-create-ssh-key/</link><pubDate>Thu, 30 Mar 2023 00:00:00 -0800</pubDate><guid>https://nerdsid.com/posts/one-line-command-to-create-ssh-key/</guid><description>&lt;p>Of late, I have been creating a lot of SSH keys. I am tired of answering each question that one gets asked during such a process. So, I thought of looking up all the switches (options) for the &lt;code>ssh-keygen&lt;/code> command so that I can specify everything at once.&lt;/p>
&lt;p>Here is the command:&lt;/p>
&lt;p>For bash:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">PowerShell&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">ssh-keygen&lt;/span> &lt;span class="n">-t&lt;/span> &lt;span class="n">ed25519&lt;/span> &lt;span class="n">-b&lt;/span> &lt;span class="mf">4096&lt;/span> &lt;span class="n">-C&lt;/span> &lt;span class="s2">&amp;#34;Gitlab&amp;#34;&lt;/span> &lt;span class="n">-N&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span> &lt;span class="o">-f&lt;/span> &lt;span class="p">~/.&lt;/span>&lt;span class="n">ssh&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">gitlab&lt;/span> &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>For powershell:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">PowerShell&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">ssh-keygen&lt;/span> &lt;span class="n">-t&lt;/span> &lt;span class="n">ed25519&lt;/span> &lt;span class="n">-b&lt;/span> &lt;span class="mf">4096&lt;/span> &lt;span class="n">-C&lt;/span> &lt;span class="s2">&amp;#34;you@mail.com for Gitlab&amp;#34;&lt;/span> &lt;span class="n">-N&lt;/span> &lt;span class="s1">&amp;#39;&amp;#34;&amp;#34;&amp;#39;&lt;/span> &lt;span class="o">-f&lt;/span> &lt;span class="s2">&amp;#34;C:\Users\uname\.ssh\keyname&amp;#34;&lt;/span> &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>The above command generates an SSH key pair using the &lt;code>ed25519&lt;/code> algorithm with a 4096-bit key length, and saves the private and public keys with the specified name (and location).&lt;/p></description></item><item><title>View Files Changed in Git Commits</title><link>https://nerdsid.com/posts/view-details-of-files-in-git-commits/</link><pubDate>Thu, 16 Mar 2023 00:00:00 +0530</pubDate><guid>https://nerdsid.com/posts/view-details-of-files-in-git-commits/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>I recently got into a situation, where changes made to a file was committed, but I was not sure which commit captured those changes. So, I wanted to know the files changed in past commits. One of the easiest way to do this is to simply check the history of your repo on GitHub or GitLab etc. But I didn&amp;rsquo;t push my local commits, since I wanted to ensure that things are perfect before I push. I found the following commands to be useful in this regard.&lt;/p></description></item><item><title>Setup SSH Authentication for Git on Windows</title><link>https://nerdsid.com/posts/setup-ssh-authentication-for-git-in-windows/</link><pubDate>Mon, 13 Mar 2023 00:00:00 -0800</pubDate><guid>https://nerdsid.com/posts/setup-ssh-authentication-for-git-in-windows/</guid><description>&lt;h2 id="ssh-auth-vs-password-based-auth">SSH auth vs password based auth&lt;/h2>
&lt;p>SSH authentication is generally preferred over password-based authentication for several reasons:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Security&lt;/strong>: Passwords are easily guessed or hacked, whereas SSH authentication relies on cryptographic keys, which are much more difficult to crack.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Convenience&lt;/strong>: Once you&amp;rsquo;ve configured SSH authentication, logging in to a remote system becomes much easier. You don&amp;rsquo;t need to remember or type in a password every time you log in; instead, you just need to have your SSH key handy.&lt;/p></description></item><item><title>How to Uninstall the NuGet Package Provider: PowerShell Guide</title><link>https://nerdsid.com/posts/uninstall-nuget-package-provider-powershell/</link><pubDate>Mon, 20 Feb 2023 08:01:00 +0000</pubDate><guid>https://nerdsid.com/posts/uninstall-nuget-package-provider-powershell/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>I happened to install the NuGet Package Provider on my Windows 10 machine. I was prompted to install it when I tried to install the &lt;code>Tree&lt;/code> module (using the &lt;code>Install-Module&lt;/code> cmdlet). But later I realised that I didn’t need the Tree module. So I wanted to uninstall it. I couldn&amp;rsquo;t find any documentation on how to uninstall it. So I decided to write this article to help others who might be facing the same problem.&lt;/p></description></item><item><title>How to Fix SSH Error: Could not open a connection to your authentication agent</title><link>https://nerdsid.com/posts/fix-ssh-could-not-open-connection-to-auth-agent/</link><pubDate>Sat, 07 Jan 2023 07:32:28 +0530</pubDate><guid>https://nerdsid.com/posts/fix-ssh-could-not-open-connection-to-auth-agent/</guid><description>&lt;h2 id="the-problem">The problem&lt;/h2>
&lt;p>Recently, I was trying to add a SSH key to the &lt;code>ssh-agent&lt;/code>. So, I ran the following command:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ssh-add ~/.ssh/&amp;lt;key_name&amp;gt;&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>This resulted in the following error:&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">Could not open a connection to your authentication agent.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h2 id="the-solution">The solution&lt;/h2>
&lt;p>The error message is pretty clear. Since a connection to the &lt;code>ssh-agent&lt;/code> could not be opened, first let&amp;rsquo;s check if the &lt;code>ssh-agent&lt;/code> is running or not.&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ps -e &lt;span class="p">|&lt;/span> grep &lt;span class="o">[&lt;/span>s&lt;span class="o">]&lt;/span>sh-agent&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>If the &lt;code>ssh-agent&lt;/code> is not running, you will not see any output. This is exactly what happened in my case. So, the solution is simple: you need to start the &lt;code>ssh-agent&lt;/code>.&lt;/p></description></item><item><title>3 Ways to Disable Search Engine Indexing for Your Netlify Website</title><link>https://nerdsid.com/posts/disable-search-engine-indexing-on-netlify/</link><pubDate>Fri, 30 Dec 2022 23:33:25 +0530</pubDate><guid>https://nerdsid.com/posts/disable-search-engine-indexing-on-netlify/</guid><description>&lt;p>If you have a website hosted on Netlify, you may want to disable search engine indexing for various reasons. For example, if you are starting to design your website, you may not want Google to index your unfinished website.&lt;/p>
&lt;p>There are 3 ways to disable search engine indexing for a Netlify site. Let&amp;rsquo;s discuss them one by one.&lt;/p>
&lt;ol>
&lt;li>Using meta tags&lt;/li>
&lt;li>Using robots.txt&lt;/li>
&lt;li>Using headers.&lt;/li>
&lt;/ol>
&lt;p>If you are wondering which method to use, don&amp;rsquo;t worry since we will discuss the pros and cons of these methods.&lt;/p></description></item><item><title>The Role of __init__.py File in Python</title><link>https://nerdsid.com/posts/the-role-of-the-init-py-file-in-python/</link><pubDate>Fri, 25 Nov 2022 00:00:00 +0530</pubDate><guid>https://nerdsid.com/posts/the-role-of-the-init-py-file-in-python/</guid><description>&lt;p>If you are a Python developer, chances are high that you may have come across the &lt;code>__init__.py&lt;/code> file. It has several roles in a Python project.&lt;/p>
&lt;ol>
&lt;li>To show that a directory is a Python package. This allows importing modules contained in that directory as top-level modules.&lt;/li>
&lt;li>To define variables and functions that should be available when the package is imported.&lt;/li>
&lt;li>To specify any initialization code that should be run when the package is imported.&lt;/li>
&lt;li>Organize code and make it easier to import modules&lt;/li>
&lt;/ol>
&lt;p>Let&amp;rsquo;s see all these use cases in detail now.&lt;/p></description></item><item><title>How to Exclude Files When Using git add</title><link>https://nerdsid.com/posts/optimizing-your-git-workflow-excluding-files-during-git-add/</link><pubDate>Tue, 22 Nov 2022 23:33:25 +0530</pubDate><guid>https://nerdsid.com/posts/optimizing-your-git-workflow-excluding-files-during-git-add/</guid><description>&lt;h2 id="problem">Problem&lt;/h2>
&lt;p>Sometimes you want to add all files to git except some files or folders.&lt;/p>
&lt;h2 id="solution">Solution&lt;/h2>
&lt;p>You can use the &lt;code>:(exclude)&lt;/code> syntax to exclude files or folders from the &lt;code>git add&lt;/code> command. The &lt;code>:(exclude)&lt;/code> pathspec modifier is a special syntax that allows you to exclude files or folders. A pathspec is a way to specify files in Git. It is a string that describes a set of files. You can use wildcards to match multiple files. For example, &lt;code>*.html&lt;/code> matches all html files. &lt;code>**/*.html&lt;/code> matches all html files in all subfolders.&lt;/p></description></item><item><title>Detecting OS and Platform Using Python</title><link>https://nerdsid.com/posts/detecting-os-and-platform-using-python/</link><pubDate>Fri, 28 Oct 2022 23:33:25 +0530</pubDate><guid>https://nerdsid.com/posts/detecting-os-and-platform-using-python/</guid><description>&lt;p>There are some circumstances where developing platform-specific code is simply unavoidable, either because a high-level library is not available or because the actions that must be taken are fundamentally different.&lt;/p>
&lt;p>In this situation, it is essential to detect the platform.&lt;/p>
&lt;p>There are a few ways of doing this in Python, including &lt;code>os.system()&lt;/code> and &lt;code>sys.platform&lt;/code>, but the &lt;code>platform&lt;/code> module contains the best set of functionality for determining the OS details most useful in making decisions.&lt;/p></description></item><item><title>How to Delete Git Local and Remote Tags</title><link>https://nerdsid.com/posts/how-to-delete-git-local-and-remote-tags/</link><pubDate>Fri, 28 Oct 2022 07:32:28 +0530</pubDate><guid>https://nerdsid.com/posts/how-to-delete-git-local-and-remote-tags/</guid><description>&lt;p>You can safely delete a git tag if you created one unintentionally.&lt;/p>
&lt;h2 id="delete-git-tag-from-local-repository">Delete git tag from local repository&lt;/h2>
&lt;p>Use the &lt;code>git tag&lt;/code> command with the &amp;ldquo;-d&amp;rdquo; option to remove a tag from the local repository.&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git tag -d &amp;lt;tag_name&amp;gt;&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>Let&amp;rsquo;s say you want to delete tag &lt;code>v1.2.3&lt;/code>, then the following command can be used.&lt;/p>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">Bash&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git tag -d v1.2.3&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;p>After executing this command, you should see a similar output as below.&lt;/p></description></item><item><title>Equivalent of Linux Commands in Powershell</title><link>https://nerdsid.com/posts/equivalent-of-linux-commands-in-powershell/</link><pubDate>Wed, 26 Oct 2022 17:54:30 +0530</pubDate><guid>https://nerdsid.com/posts/equivalent-of-linux-commands-in-powershell/</guid><description>&lt;p>Being an avid linux user, I am used to the linux commands. But I often work on a windows machine, which is when I look for powershell equivalent of linux commands.&lt;/p>
&lt;p>I created this post to keep a track of the commands that I use often.&lt;/p>
&lt;h2 id="well-known-linux-commands-and-their-powershell-equivalents">Well-known linux commands and their powershell equivalents&lt;/h2>
&lt;p>The PowerShell commands for working with the file system are same as that of linux ones. You navigate around the file system with the &lt;code>cd&lt;/code> (alias for &lt;code>Set-Location&lt;/code>) command.&lt;/p></description></item><item><title>Powershell - Get Hashes of All Files in a Directory</title><link>https://nerdsid.com/posts/powershell-get-hashes-of-all-files-in-a-directory/</link><pubDate>Tue, 25 Oct 2022 00:00:00 +0530</pubDate><guid>https://nerdsid.com/posts/powershell-get-hashes-of-all-files-in-a-directory/</guid><description>&lt;h2 id="code">Code&lt;/h2>
&lt;figure class="codeblock">
 &lt;figcaption class="codeblock__header">&lt;span class="codeblock__filename codeblock__filename--lang">PowerShell&lt;/span>

 &lt;span class="codeblock__actions">&lt;/span>
&lt;/figcaption>

 &lt;div class="codeblock__body">
 &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="k">param&lt;/span> &lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">$folders&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">@&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;D:\hash\&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c">#case sensitive&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$allFiles&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">foreach&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$folder&lt;/span> &lt;span class="k">in&lt;/span> &lt;span class="nv">$folders&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">Get-Childitem&lt;/span> &lt;span class="n">-path&lt;/span> &lt;span class="nv">$folder&lt;/span> &lt;span class="n">-recurse&lt;/span> &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">Select-Object&lt;/span> &lt;span class="n">FullName&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">Name&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">Length&lt;/span> &lt;span class="p">|&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">ForEach-Object&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">$hash_SHA384&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-FileHash&lt;/span> &lt;span class="n">-Algorithm&lt;/span> &lt;span class="n">SHA384&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">FullName&lt;/span> &lt;span class="c"># compute sha384 hash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">$hash_SHA256&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-FileHash&lt;/span> &lt;span class="n">-Algorithm&lt;/span> &lt;span class="n">SHA256&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">FullName&lt;/span> &lt;span class="c"># compute sha256 hash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">$hash_MD5&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-FileHash&lt;/span> &lt;span class="n">-Algorithm&lt;/span> &lt;span class="n">MD5&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">FullName&lt;/span> &lt;span class="c"># compute md5 hash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">add-member&lt;/span> &lt;span class="n">-InputObject&lt;/span> &lt;span class="nv">$_&lt;/span> &lt;span class="n">-NotePropertyName&lt;/span> &lt;span class="n">SHA384&lt;/span> &lt;span class="n">-NotePropertyValue&lt;/span> &lt;span class="nv">$hash_SHA384&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Hash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">add-member&lt;/span> &lt;span class="n">-InputObject&lt;/span> &lt;span class="nv">$_&lt;/span> &lt;span class="n">-NotePropertyName&lt;/span> &lt;span class="n">SHA256&lt;/span> &lt;span class="n">-NotePropertyValue&lt;/span> &lt;span class="nv">$hash_SHA256&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Hash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">add-member&lt;/span> &lt;span class="n">-InputObject&lt;/span> &lt;span class="nv">$_&lt;/span> &lt;span class="n">-NotePropertyName&lt;/span> &lt;span class="n">MD5&lt;/span> &lt;span class="n">-NotePropertyValue&lt;/span> &lt;span class="nv">$hash_MD5&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Hash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">add-member&lt;/span> &lt;span class="n">-InputObject&lt;/span> &lt;span class="nv">$_&lt;/span> &lt;span class="n">-NotePropertyName&lt;/span> &lt;span class="n">File&lt;/span> &lt;span class="n">-NotePropertyValue&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">FullName&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Replace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$folder&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">-PassThru&lt;/span> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/figure>
&lt;h2 id="description-in-3-lines">Description in 3 lines&lt;/h2>
&lt;p>The above code does the following:&lt;/p>
&lt;ol>
&lt;li>For each folder in the variable &lt;code>$folders&lt;/code>, get all files and folders in that folder and its subfolders.&lt;/li>
&lt;li>For each file, compute its SHA384, SHA256 and MD5 hashes.&lt;/li>
&lt;li>Output the results to a file called process.txt&lt;/li>
&lt;/ol>
&lt;h2 id="description-in-10-lines">Description in 10 lines&lt;/h2>
&lt;p>Here is a short explanation for the above code:&lt;/p></description></item><item><title>How to Edit Multiple Git Commit Messages</title><link>https://nerdsid.com/posts/git-edit-multiple-commit-messages/</link><pubDate>Fri, 16 Sep 2022 00:00:00 +0530</pubDate><guid>https://nerdsid.com/posts/git-edit-multiple-commit-messages/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>I recently got into a situation, where I had to edit multiple git commit messages. I was contributing to a project and had already added my commits. But, I had to change the commit messages to follow the project&amp;rsquo;s commit message guidelines.&lt;/p>
&lt;h2 id="using-git-rebase-to-edit-commit-history">Using git rebase to edit commit history&lt;/h2>
&lt;p>&lt;code>git rebase&lt;/code> is a powerful command that can be used to edit commit history. It can be used to edit commit messages, squash commits, reorder commits, and much more.&lt;/p></description></item><item><title>How to undo a Git Commit in Your Local and Remote Repository</title><link>https://nerdsid.com/posts/undo-a-git-commit-locally-and-remotely/</link><pubDate>Tue, 13 Sep 2022 17:54:30 +0530</pubDate><guid>https://nerdsid.com/posts/undo-a-git-commit-locally-and-remotely/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>It is very common to make mistakes while working on a project. Sometimes, you may have made a commit with the wrong changes. In such cases, you may want to undo the commit and make a new commit with the correct changes. In this post, we will see how to undo a commit in your local and remote repositories.&lt;/p>
&lt;h2 id="undo-a-commit-in-your-local-repository">Undo a commit in your local repository&lt;/h2>
&lt;p>The word &amp;lsquo;undo&amp;rsquo; here means that:&lt;/p></description></item><item><title>Demystifying DKIM Records: How They Safeguard Your Email Communications</title><link>https://nerdsid.com/posts/demystifying-dkim-records/</link><pubDate>Thu, 01 Sep 2022 05:27:57 +0000</pubDate><guid>https://nerdsid.com/posts/demystifying-dkim-records/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Email has become a crucial way of communication in today&amp;rsquo;s digital world. However, it&amp;rsquo;s also a target for scammers and impersonators. Thus it is essential to have methods to verify that the messages we receive are genuine and have not been tampered with. That&amp;rsquo;s where DKIM (DomainKeys Identified Mail) records come into play. In this article, we will understand how DKIM records assist in safeguarding emails against tampering.&lt;/p>
&lt;h2 id="what-is-dkim">What is DKIM?&lt;/h2>
&lt;p>DKIM is an email security standard designed to make sure that an email that claims to have come from a specific domain was indeed authorized by the owner of that domain.&lt;/p></description></item><item><title>Angular</title><link>https://nerdsid.com/projects/angular/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nerdsid.com/projects/angular/</guid><description/></item><item><title>Buho CMS</title><link>https://nerdsid.com/projects/buho-cms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nerdsid.com/projects/buho-cms/</guid><description>&lt;h2 id="contribution-in-brief">Contribution in brief&lt;/h2>
&lt;p>I created a GitHub action workflow that utilizes both Windows and Ubuntu runners. The workflow creates installers for both Windows and Linux. Additionally, it simplifies the release process by automatically including these installers as assets in the final release.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/iakmds/buhocms/pull/21">Link to Pull request&lt;/a>&lt;/li>
&lt;li>Tools used: Git, GitHub action, PowerShell, Bash &amp;amp; Innosetup.&lt;/li>
&lt;/ul>
&lt;h2 id="what-is-buho-cms">What is Buho CMS?&lt;/h2>
&lt;p>Buho CMS is a local content management system for static sites. In simple terms it provides a beautiful UI to edit Markdown files (it has more features than that). As of Jun 2023, it supports Hugo, Jkeyll &amp;amp; X static site generators.&lt;/p></description></item><item><title>HTTPie</title><link>https://nerdsid.com/projects/httpie/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nerdsid.com/projects/httpie/</guid><description>&lt;h2 id="contribution-in-brief">Contribution in brief&lt;/h2>
&lt;p>Recognizing the significance of well-crafted documentation for software, I focused on improving the documentation for HTTPie, a developer-focused tool. I noticed several areas that could benefit from clarification, reorganization, and consistent terminology usage. Keeping in mind the Google developer documentation guidelines, I took the initiative to rephrase and rearrange sections of the documentation, aiming to enhance clarity, simplicity, and accuracy. By addressing these aspects, my goal was to improve the overall quality of the HTTPie documentation and make life of developers easy.&lt;/p></description></item><item><title>Hugo Blog Awesome</title><link>https://nerdsid.com/projects/hugo-blog-awesome/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nerdsid.com/projects/hugo-blog-awesome/</guid><description>&lt;h2 id="what-is-hugo-blog-awesome">What is Hugo blog awesome?&lt;/h2>
&lt;p>It is a Hugo theme to create a blog/website using the Hugo static site generator.&lt;/p>
&lt;ul>
&lt;li>Link to GitHub repo: &lt;a href="https://github.com/hugo-sid/hugo-blog-awesome">hugo-sid/hugo-blog-awesome&lt;/a>&lt;/li>
&lt;li>Tech stack: Hugo (Go templating), HTML, SCSS, and JavaScript.&lt;/li>
&lt;/ul>
&lt;h2 id="why-did-i-create-this-project">Why did I create this project?&lt;/h2>
&lt;p>I felt the need to create a blog which is:&lt;/p>
&lt;ul>
&lt;li>Fast - since the final output is static HTML (usually deployed to a CDN) &amp;amp; no external libraries are included&lt;/li>
&lt;li>Minimal - because less is more&lt;/li>
&lt;li>Responsive - mobile devices can&amp;rsquo;t be ignored&lt;/li>
&lt;li>Light and dark modes - reading content should be less stressful on eyes&lt;/li>
&lt;li>Syntax highlighting - code should look like code&lt;/li>
&lt;li>RSS feed - support for the old fashioned&lt;/li>
&lt;li>No jQuery, Bootstrap, Fontawesome &amp;amp; Google fonts - we don&amp;rsquo;t need libraries for simple menu toggle, theme toggle, responsive design etc. Saves around 100-200 KB of data transfer on each page load.&lt;/li>
&lt;li>100/100 Google PageSpeed Insights &lt;a href="https://pagespeed.web.dev/report?url=https%3A%2F%2Fhba.sid.one%2F">score&lt;/a> on all 4 metrics - because performance, accessibility, best Practices &amp;amp; SEO matters.&lt;/li>
&lt;/ul>
&lt;h2 id="tools-used">Tools used&lt;/h2>
&lt;p>Tech: Hugo (Go templating), HTML, SCSS, and JavaScript.&lt;/p></description></item></channel></rss>