<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Samarthya.Me: My technical journey. on Samarthya</title><link>https://samarthya.me/</link><description>Recent content in Samarthya.Me: My technical journey. on Samarthya</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© Samarthya 2018-2026. All rights reserved.</copyright><lastBuildDate>Wed, 04 Nov 2026 21:00:00 -0500</lastBuildDate><atom:link href="https://samarthya.me/index.xml" rel="self" type="application/rss+xml"/><item><title>Learning OSV, part 5: I scanned my own blog, and the real problem wasn't in the report</title><link>https://samarthya.me/posts/osv-scanner-on-my-own-blog/</link><pubDate>Wed, 04 Nov 2026 21:00:00 -0500</pubDate><guid>https://samarthya.me/posts/osv-scanner-on-my-own-blog/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A test project is a controlled experiment; your own repository is the one that talks back. I pointed OSV-Scanner at&#10;the source of this blog expecting a dull report. The report was indeed dull. The interesting part was what it could&#10;not see.&#10;&lt;/div&gt;&#10;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Anime-style illustration: an excited young experimenter in a lab coat, with goggles pushed up on the forehead, holds a glowing green flask high at a lab bench and says &amp;ldquo;Let&amp;rsquo;s try it!&amp;rdquo;"&#10; src="https://samarthya.me/posts/osv-scanner-on-my-own-blog/overview.svg"&#10; &gt;&lt;figcaption&gt;The mood of the evening. It lasted until the first command.&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;In parts &lt;a href="https://samarthya.me/posts/learning-osv-2-scanning-with-osv-scanner/" &gt;2&lt;/a&gt; and&#10;&lt;a href="https://samarthya.me/posts/learning-osv-3-guided-remediation/" &gt;3&lt;/a&gt; I used a project built to be vulnerable. This time the&#10;target is &lt;a href="https://github.com/samarthya/blog.samarthya.me" target="_blank" rel="noreferrer"&gt;the repository behind this site&lt;/a&gt;: Hugo, the Blowfish theme&#10;as a git submodule, some Python helper scripts and two GitHub Actions workflows. All runs used OSV-Scanner v2.7.0.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/osv-scanner-on-my-own-blog/feature.png"/></item><item><title>Learning OSV, part 4: where it fits, and my recommendation</title><link>https://samarthya.me/posts/learning-osv-4-recommendation/</link><pubDate>Sat, 31 Oct 2026 07:45:00 -0400</pubDate><guid>https://samarthya.me/posts/learning-osv-4-recommendation/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Three parts of trying things. This one is the verdict: what I would actually switch on, in what order, and what I&#10;would still look elsewhere for.&#10;&lt;/div&gt;&#10;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Diagram: a loop of pull request scan, scheduled rescan, in-place fix as a bot pull request, and human review, fed by OSV.dev in the centre; beside it a five-point recommendation checklist"&#10; src="https://samarthya.me/posts/learning-osv-4-recommendation/overview.svg"&#10; &gt;&lt;figcaption&gt;The loop I would run, and the verdict as a checklist.&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Quick recap of the proof of concept:&#10;&lt;a href="https://samarthya.me/posts/learning-osv-1-what-osv-dev-is/" &gt;part 1&lt;/a&gt; read the database,&#10;&lt;a href="https://samarthya.me/posts/learning-osv-2-scanning-with-osv-scanner/" &gt;part 2&lt;/a&gt; scanned a project (5 dependencies,&#10;68 packages, 49 vulnerabilities), and &lt;a href="https://samarthya.me/posts/learning-osv-3-guided-remediation/" &gt;part 3&lt;/a&gt; fixed&#10;it (7 of 50 safely, 50 of 50 with a major upgrade).&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/learning-osv-4-recommendation/feature.png"/></item><item><title>Learning OSV, part 3: guided remediation with osv-scanner fix</title><link>https://samarthya.me/posts/learning-osv-3-guided-remediation/</link><pubDate>Sat, 31 Oct 2026 07:30:00 -0400</pubDate><guid>https://samarthya.me/posts/learning-osv-3-guided-remediation/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Finding 49 vulnerabilities is easy. Deciding which three lines to change so that most of them go away is the hard&#10;part. That is what &lt;code&gt;osv-scanner fix&lt;/code&gt; tries to do.&#10;&lt;/div&gt;&#10;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Diagram comparing two fix strategies. in-place edits only the lockfile, upgrades lodash and axios within range, and fixes 7 of 50. relax edits package.json and relocks, upgrading jsonwebtoken to a new major, axios across 0.x and minimist by a patch, and fixes 50 of 50"&#10; src="https://samarthya.me/posts/learning-osv-3-guided-remediation/overview.svg"&#10; &gt;&lt;figcaption&gt;in-place is the safe small win; relax fixes everything but chose a major upgrade.&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;In &lt;a href="https://samarthya.me/posts/learning-osv-2-scanning-with-osv-scanner/" &gt;part 2&lt;/a&gt; the scanner found 49 known&#10;vulnerabilities in a small Node project. This part tries the &lt;strong&gt;guided remediation&lt;/strong&gt; command on it.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/learning-osv-3-guided-remediation/feature.png"/></item><item><title>Learning OSV, part 2: scanning a project with OSV-Scanner</title><link>https://samarthya.me/posts/learning-osv-2-scanning-with-osv-scanner/</link><pubDate>Sat, 31 Oct 2026 07:15:00 -0400</pubDate><guid>https://samarthya.me/posts/learning-osv-2-scanning-with-osv-scanner/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; I picked four dependencies. The scanner found problems in eleven packages. That gap is the whole reason to scan&#10;lockfiles and not just &lt;code&gt;package.json&lt;/code&gt;.&#10;&lt;/div&gt;&#10;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Diagram: my-app has five direct dependencies, all affected; Express brings six more affected packages pinned exactly; 57 other packages have no known issues. Totals: 5 chosen, 68 in the lockfile, 11 affected, 49 known vulnerabilities"&#10; src="https://samarthya.me/posts/learning-osv-2-scanning-with-osv-scanner/overview.svg"&#10; &gt;&lt;figcaption&gt;Five dependencies I chose became 68 packages; 11 are affected, six of them only because Express pins them.&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;&lt;a href="https://samarthya.me/posts/learning-osv-1-what-osv-dev-is/" &gt;Part 1&lt;/a&gt; was about the OSV database. This part runs the&#10;scanner against a small project and reads the result.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/learning-osv-2-scanning-with-osv-scanner/feature.png"/></item><item><title>Learning OSV, part 1: what osv.dev is and how to read a record</title><link>https://samarthya.me/posts/learning-osv-1-what-osv-dev-is/</link><pubDate>Sat, 31 Oct 2026 07:00:00 -0400</pubDate><guid>https://samarthya.me/posts/learning-osv-1-what-osv-dev-is/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A CVE tells you &lt;em&gt;that&lt;/em&gt; something is broken. It rarely tells you, in a way a machine can use, &lt;em&gt;which package&lt;/em&gt;&#10;and &lt;em&gt;which versions&lt;/em&gt;. OSV exists to answer exactly that.&#10;&lt;/div&gt;&#10;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Diagram: advisories from GitHub, PyPA, Go, RustSec and malware reports flow into OSV.dev, which publishes a record for GHSA-xvch-5gv4-984h showing npm/minimist affected from 1.0.0 (introduced) to 1.2.6 (fixed), with version 1.2.5 inside the vulnerable range"&#10; src="https://samarthya.me/posts/learning-osv-1-what-osv-dev-is/overview.svg"&#10; &gt;&lt;figcaption&gt;One record, read as data: the affected range runs from introduced 1.0.0 to fixed 1.2.6, so 1.2.5 is vulnerable and the upgrade target is 1.2.6.&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;I am learning which free tools can carry real weight in a secure development life cycle. This short series is my&#10;proof of concept with &lt;strong&gt;OSV&lt;/strong&gt;: the database, the scanner and its fix command. I run everything for real and keep&#10;the output. This part is about the concept and the website.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/learning-osv-1-what-osv-dev-is/feature.png"/></item><item><title>SSDLC when exploits are cheap: a working concept</title><link>https://samarthya.me/posts/ssdlc-in-the-age-of-ai-exploits/</link><pubDate>Tue, 27 Oct 2026 20:32:15 -0400</pubDate><guid>https://samarthya.me/posts/ssdlc-in-the-age-of-ai-exploits/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A fire inspection once a year works when fires are rare. When sparks are falling every day, you need smoke&#10;detectors in every room, a sprinkler that fixes the small ones by itself, and a person who decides what to do&#10;about the big ones. That is what a secure development life cycle has to become.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;These are my notes for a question I keep coming back to: &lt;strong&gt;how do you keep shipping software when new&#10;vulnerabilities arrive faster than you can fix them, and attackers can use an LLM to turn a CVE description into&#10;a working exploit?&lt;/strong&gt; There is no single standard answer. What follows is the concept I would build, with the&#10;evidence behind each choice and the parts where I am still unsure.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/ssdlc-in-the-age-of-ai-exploits/feature.png"/></item><item><title>From finding to fix: Black Duck pull requests on GitHub Enterprise Server</title><link>https://samarthya.me/posts/ghes-blackduck-fix-prs/</link><pubDate>Tue, 27 Oct 2026 20:05:18 -0400</pubDate><guid>https://samarthya.me/posts/ghes-blackduck-fix-prs/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A vulnerability report that nobody reads is a smoke alarm with no battery. The goal is not more findings. The&#10;goal is a pull request that a developer can review and merge before lunch.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;Why this post&#10; &lt;div id="why-this-post" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-this-post" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;SentinelOne&amp;rsquo;s&#10;&lt;a href="https://www.sentinelone.com/cybersecurity-101/cybersecurity/github-vulnerability-management/" target="_blank" rel="noreferrer"&gt;overview of GitHub vulnerability management&lt;/a&gt;&#10;describes the job as &amp;ldquo;discovering, triaging, and remediating security vulnerabilities in GitHub repositories,&#10;dependencies, and workflows&amp;rdquo;. It lists the usual native tools: Dependabot, code scanning, secret scanning and&#10;security advisories. It also admits the gaps: no asset inventory or risk scoring, and dependencies that&#10;Dependabot cannot track.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/ghes-blackduck-fix-prs/feature.png"/></item><item><title>AI on this blog: a reading map</title><link>https://samarthya.me/posts/ai-reading-map/</link><pubDate>Mon, 26 Oct 2026 18:50:00 -0400</pubDate><guid>https://samarthya.me/posts/ai-reading-map/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; I&amp;rsquo;ve written about AI and data on and off since 2023, one post at a time. Read in this order, they tell&#10;one story: from how machines learn, to how language models work, to building with them, to letting them act.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;1. How machines learn&#10; &lt;div id="1-how-machines-learn" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-how-machines-learn" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Post&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;In one line&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/the-core-divide/" &gt;The Core Divide&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Supervised vs unsupervised learning&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/k-nearest-neighbors/" &gt;K-Nearest Neighbors&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Classify by the company you keep&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/mastering-tf-idf-a-gamified-journey/" &gt;Mastering TF-IDF&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Turning text into numbers that mean something&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/data-mining-essentials/" &gt;Data Mining Essentials&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Distances, clusters and the core vocabulary&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/matrix-multiplication-to-gpus/" &gt;Matrix Multiplication to GPUs&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Why AI runs on graphics cards&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10;&lt;h2 class="relative group"&gt;2. How language models work&#10; &lt;div id="2-how-language-models-work" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-how-language-models-work" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Post&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;In one line&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/genai/" &gt;GenAI&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;What generative AI is, and its building blocks (2023)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/language-model/" &gt;Language Model&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Transformers and the attention breakthrough&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/two-students-two-talents-the-story-of-how-ai-learns-language/" &gt;Two Students, Two Talents&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Auto-regressive (GPT) vs auto-encoding (BERT) models&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/the-evolution-of-language-models/" &gt;The Evolution of Language Models&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;From 2017&amp;rsquo;s transformer to today&amp;rsquo;s families&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/the-probability-engine/" &gt;The Probability Engine&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The maths of choosing the next token&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/ai-in-practice-3-tokens-and-tokenomics/" &gt;Tokens and tokenomics&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;What a token is, context windows, and the bill&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10;&lt;h2 class="relative group"&gt;3. Building with models&#10; &lt;div id="3-building-with-models" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-building-with-models" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Post&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;In one line&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/ollama-revolutionizing-language-models/" &gt;Ollama&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Running language models on your own machine&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/building-a-minimal-langchain-ollama-demo/" &gt;A minimal LangChain + Ollama demo&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Prompt, model and chain, end to end&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/building-a-practical-retrieval-augmented-personal-assistant-rag/" &gt;A practical RAG assistant&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Answering from your own documents&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/from-speech-to-text-a-python-deep-dive/" &gt;From speech to text&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Speech recognition in Python&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/ai-in-practice-1-choosing-a-framework/" &gt;Choosing the right framework&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The AI stack, layer by layer&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/ai-in-practice-2-vertex-ai-pipelines/" &gt;ML pipelines on Vertex AI&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Train, evaluate and deploy, repeatably&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10;&lt;h2 class="relative group"&gt;4. Letting models act&#10; &lt;div id="4-letting-models-act" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4-letting-models-act" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Post&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;In one line&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/ai-in-practice-4-tools-and-agents/" &gt;From RAG to tools and agents&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Function calling and the agent loop&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/ai-in-practice-5-mcp/" &gt;MCP, the Model Context Protocol&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;One standard plug for tools and data&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://samarthya.me/posts/the-ghost-board/" &gt;The Ghost Board&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;A story about agents nobody was watching&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10;&lt;h2 class="relative group"&gt;The data shelf&#10; &lt;div id="the-data-shelf" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-data-shelf" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Analytics and big-data posts that sit underneath much of the above:&lt;/p&gt;</description></item><item><title>AI in practice, part 5: MCP, the Model Context Protocol</title><link>https://samarthya.me/posts/ai-in-practice-5-mcp/</link><pubDate>Mon, 26 Oct 2026 18:40:00 -0400</pubDate><guid>https://samarthya.me/posts/ai-in-practice-5-mcp/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Before USB, every device needed its own port. Before MCP, every AI application needed its own connector for&#10;every data source. The Model Context Protocol is the common plug.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;The problem it solves&#10; &lt;div id="the-problem-it-solves" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-problem-it-solves" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://samarthya.me/posts/ai-in-practice-4-tools-and-agents/" &gt;Part 4&lt;/a&gt; showed how a model uses tools. The catch: each AI&#10;application (a chat app, an IDE assistant, an agent framework) described tools its own way. Connecting M&#10;applications to N data sources meant up to &lt;strong&gt;M × N&lt;/strong&gt; custom integrations.&lt;/p&gt;</description></item><item><title>AI in practice, part 4: From RAG to tools and agents</title><link>https://samarthya.me/posts/ai-in-practice-4-tools-and-agents/</link><pubDate>Mon, 26 Oct 2026 18:30:00 -0400</pubDate><guid>https://samarthya.me/posts/ai-in-practice-4-tools-and-agents/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; RAG lets a model read what it didn&amp;rsquo;t know. Tools let it do things. An agent is what you get when the model&#10;decides, step by step, which tools to use until the job is done.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;Three levels of &amp;ldquo;the model knows something&amp;rdquo;&#10; &lt;div id="three-levels-of-the-model-knows-something" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#three-levels-of-the-model-knows-something" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Only its training.&lt;/strong&gt; The model answers from patterns learned before its cutoff. It can&amp;rsquo;t see your files&#10;and doesn&amp;rsquo;t know today&amp;rsquo;s date unless you tell it.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Retrieval (RAG).&lt;/strong&gt; Your application searches your documents and pastes the relevant passages into the&#10;prompt. The model reads, then answers. I built one of these&#10;&lt;a href="https://samarthya.me/posts/building-a-practical-retrieval-augmented-personal-assistant-rag/" &gt;here&lt;/a&gt;. The &lt;em&gt;application&lt;/em&gt; decides what to retrieve.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Tools.&lt;/strong&gt; The model itself asks for something to be done: &amp;ldquo;search the docs for X&amp;rdquo;, &amp;ldquo;run this query&amp;rdquo;,&#10;&amp;ldquo;create the ticket&amp;rdquo;. The &lt;em&gt;model&lt;/em&gt; decides when and how; your application carries it out.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Function calling, step by step&#10; &lt;div id="function-calling-step-by-step" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#function-calling-step-by-step" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;With tool use (often called &lt;em&gt;function calling&lt;/em&gt;), you describe each tool to the model: a name, a description&#10;and a JSON schema for its arguments.&lt;/p&gt;</description></item><item><title>AI in practice, part 3: Tokens and tokenomics</title><link>https://samarthya.me/posts/ai-in-practice-3-tokens-and-tokenomics/</link><pubDate>Mon, 26 Oct 2026 18:20:00 -0400</pubDate><guid>https://samarthya.me/posts/ai-in-practice-3-tokens-and-tokenomics/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Language models don&amp;rsquo;t read words, and they don&amp;rsquo;t bill by the request. They read and charge in tokens. Once you&#10;can count them, both the model&amp;rsquo;s limits and the monthly invoice stop being surprises.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;What a token is&#10; &lt;div id="what-a-token-is" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-a-token-is" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Before a model sees your text, a &lt;strong&gt;tokenizer&lt;/strong&gt; cuts it into pieces from a fixed vocabulary, typically tens of&#10;thousands to a few hundred thousand entries. Common words are one token; rarer words are split into&#10;pieces; spaces and punctuation are tokens too. Most modern tokenizers use variants of &lt;em&gt;byte-pair encoding&lt;/em&gt;,&#10;which learns the most frequent fragments from training text.&lt;/p&gt;</description></item><item><title>AI in practice, part 2: ML pipelines on Google Vertex AI</title><link>https://samarthya.me/posts/ai-in-practice-2-vertex-ai-pipelines/</link><pubDate>Mon, 26 Oct 2026 18:10:00 -0400</pubDate><guid>https://samarthya.me/posts/ai-in-practice-2-vertex-ai-pipelines/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A notebook that trains a good model once is an experiment. A pipeline that trains it again next week, on new&#10;data, and tells you whether it got better: that&amp;rsquo;s a system. Here&amp;rsquo;s how Google&amp;rsquo;s Vertex AI turns one into the other.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;Why pipelines&#10; &lt;div id="why-pipelines" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-pipelines" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Training a model is never one step. Data is extracted, cleaned and split; a model is trained, evaluated and&#10;compared with the current one; if it&amp;rsquo;s better, it&amp;rsquo;s registered and deployed. Done by hand in a notebook, that&#10;sequence is easy to get subtly wrong and impossible to audit.&lt;/p&gt;</description></item><item><title>AI in practice, part 1: Choosing the right framework</title><link>https://samarthya.me/posts/ai-in-practice-1-choosing-a-framework/</link><pubDate>Mon, 26 Oct 2026 18:00:00 -0400</pubDate><guid>https://samarthya.me/posts/ai-in-practice-1-choosing-a-framework/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; &amp;ldquo;Which AI framework should I use?&amp;rdquo; has no single answer, because the names people throw around do&#10;completely different jobs. Put them on a map first, and the choice usually makes itself.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This series picks up where my earlier posts left off. Those covered the ideas: &lt;a href="https://samarthya.me/posts/genai/" &gt;what generative AI&#10;is&lt;/a&gt;, &lt;a href="https://samarthya.me/posts/language-model/" &gt;how transformers pay attention&lt;/a&gt;, &lt;a href="https://samarthya.me/posts/matrix-multiplication-to-gpus/" &gt;why GPUs matter&lt;/a&gt;,&#10;and two hands-on builds (&lt;a href="https://samarthya.me/posts/building-a-minimal-langchain-ollama-demo/" &gt;LangChain with Ollama&lt;/a&gt; and a&#10;&lt;a href="https://samarthya.me/posts/building-a-practical-retrieval-augmented-personal-assistant-rag/" &gt;RAG assistant&lt;/a&gt;). This part is the map&#10;that connects them.&lt;/p&gt;</description></item><item><title>Reading the malware</title><link>https://samarthya.me/daily/2026/10/reading-the-malware/</link><pubDate>Mon, 26 Oct 2026 16:30:00 -0400</pubDate><guid>https://samarthya.me/daily/2026/10/reading-the-malware/</guid><description>&lt;p&gt;Compared two database dumps taken four days apart and finally decoded the snippet the attackers left behind:&#10;a hidden loader that fetched its orders from a blockchain (details in the&#10;&lt;a href="https://samarthya.me/daily/2026/10/the-defences-went-off/" &gt;9 October entry&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>Moving to Hugo, part 3: Living with Hugo</title><link>https://samarthya.me/posts/moving-to-hugo-3-living-with-hugo/</link><pubDate>Mon, 26 Oct 2026 07:20:00 -0400</pubDate><guid>https://samarthya.me/posts/moving-to-hugo-3-living-with-hugo/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Migrating is a project. Living with the result is a habit. Here&amp;rsquo;s what a normal week with a Hugo site looks&#10;like, and what to do when something needs updating.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;Writing a post&#10; &lt;div id="writing-a-post" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#writing-a-post" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Every post is a folder. The theme&amp;rsquo;s archetype fills in the front matter for me:&lt;/p&gt;</description></item><item><title>Moving to Hugo, part 2: The migration playbook</title><link>https://samarthya.me/posts/moving-to-hugo-2-the-migration-playbook/</link><pubDate>Mon, 26 Oct 2026 07:10:00 -0400</pubDate><guid>https://samarthya.me/posts/moving-to-hugo-2-the-migration-playbook/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Ten phases, in the order that kept my risk low. Each one ends with something you can check, so you always&#10;know whether it&amp;rsquo;s safe to move on.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The numbers come from my own move: &lt;strong&gt;137 WordPress posts&lt;/strong&gt; from six years, a few hundred images, and a domain&#10;that also carried email. Your numbers will differ; the order shouldn&amp;rsquo;t.&lt;/p&gt;</description></item><item><title>Moving to Hugo, part 1: Why Hugo</title><link>https://samarthya.me/posts/moving-to-hugo-1-why-hugo/</link><pubDate>Mon, 26 Oct 2026 07:00:00 -0400</pubDate><guid>https://samarthya.me/posts/moving-to-hugo-1-why-hugo/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; After the blog was broken into, I had to decide where it would live next. This is how I made that choice,&#10;written so you can reuse the reasoning even if you end up somewhere else.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The story of the break-in is in &lt;a href="../rebuilding-1-the-day-the-blog-fell/" &gt;Rebuilding samarthya.me&lt;/a&gt;. This&#10;series is the practical companion: &lt;strong&gt;why Hugo&lt;/strong&gt;, &lt;strong&gt;how to migrate step by step&lt;/strong&gt;, and &lt;strong&gt;what living with it&#10;is like&lt;/strong&gt;. My own site is the worked example throughout.&lt;/p&gt;</description></item><item><title>The domain moved</title><link>https://samarthya.me/daily/2026/10/the-domain-moved/</link><pubDate>Sun, 25 Oct 2026 21:00:00 -0400</pubDate><guid>https://samarthya.me/daily/2026/10/the-domain-moved/</guid><description>&lt;p&gt;The scariest step, done. DNS moved to Cloudflare without changing a single record, mail checked in both&#10;directions, and only then was the website pointed at GitHub Pages.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;samarthya.me&lt;/strong&gt; serves the new site over HTTPS. &lt;code&gt;www&lt;/code&gt; redirects to it.&lt;/li&gt;&#10;&lt;li&gt;Every old &lt;code&gt;/wps/…&lt;/code&gt; link lands on the right post.&lt;/li&gt;&#10;&lt;li&gt;Wrote it all up: &lt;a href="https://samarthya.me/posts/rebuilding-1-the-day-the-blog-fell/" &gt;Rebuilding samarthya.me&lt;/a&gt;, in four parts.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Security standards, plainly, part 4: CISA KEV and BOD 26-04</title><link>https://samarthya.me/posts/security-standards-4-cisa-kev-bod-26-04/</link><pubDate>Sun, 25 Oct 2026 19:30:00 -0400</pubDate><guid>https://samarthya.me/posts/security-standards-4-cisa-kev-bod-26-04/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A hospital emergency room does not treat patients in the order they arrive, or by how loudly they shout. A triage&#10;nurse asks a few quick questions and sends the bleeding patient in first. CISA&amp;rsquo;s KEV catalog and directive&#10;BOD 26-04 are triage for vulnerabilities.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The first three parts of this series, &lt;a href="https://samarthya.me/posts/security-standards-1-nist-ssdf/" &gt;SSDF&lt;/a&gt;,&#10;&lt;a href="https://samarthya.me/posts/security-standards-2-owasp-samm/" &gt;SAMM&lt;/a&gt; and&#10;&lt;a href="https://samarthya.me/posts/security-standards-3-slsa/" &gt;SLSA&lt;/a&gt;, share one gap: none of them says &lt;strong&gt;how fast&lt;/strong&gt; a&#10;vulnerability must be fixed. This part is about the clock.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/security-standards-4-cisa-kev-bod-26-04/feature.png"/></item><item><title>Rebuilding samarthya.me, part 4: Moving the domain without losing mail</title><link>https://samarthya.me/posts/rebuilding-4-moving-the-domain/</link><pubDate>Sun, 25 Oct 2026 12:30:00 -0400</pubDate><guid>https://samarthya.me/posts/rebuilding-4-moving-the-domain/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Moving a website is easy. Moving a website &lt;strong&gt;that shares a domain with your email&lt;/strong&gt; is where people lose mail&#10;for a weekend. This is how the switch went, in the order that kept everything working.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;Three services, three jobs&#10; &lt;div id="three-services-three-jobs" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#three-services-three-jobs" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;It helps to separate what used to be bundled at one host:&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/rebuilding-4-moving-the-domain/feature.jpg"/></item><item><title>Rebuilding samarthya.me, part 3: A new home on Hugo</title><link>https://samarthya.me/posts/rebuilding-3-a-new-home-on-hugo/</link><pubDate>Sun, 25 Oct 2026 12:20:00 -0400</pubDate><guid>https://samarthya.me/posts/rebuilding-3-a-new-home-on-hugo/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; The content was safe. Now it needed a home that&amp;rsquo;s easy to keep alive: something I can write in, push, and&#10;forget about.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;The stack&#10; &lt;div id="the-stack" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-stack" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="https://gohugo.io/" target="_blank" rel="noreferrer"&gt;Hugo&lt;/a&gt;&lt;/strong&gt;, pinned to one exact version with &lt;a href="https://mise.jdx.dev/" target="_blank" rel="noreferrer"&gt;mise&lt;/a&gt;, so a future&#10;release can&amp;rsquo;t silently break the build.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="https://blowfish.page/" target="_blank" rel="noreferrer"&gt;Blowfish&lt;/a&gt;&lt;/strong&gt; as the theme, added as a git submodule and &lt;strong&gt;never edited&lt;/strong&gt;. Every&#10;change lives in the site&amp;rsquo;s own &lt;code&gt;layouts/&lt;/code&gt; and &lt;code&gt;assets/css/&lt;/code&gt;, so theme updates stay a one-line operation.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;GitHub Actions → GitHub Pages.&lt;/strong&gt; Push to &lt;code&gt;main&lt;/code&gt;, and about a minute later the site is rebuilt and live.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;h2 class="relative group"&gt;A portal, not just a blog&#10; &lt;div id="a-portal-not-just-a-blog" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#a-portal-not-just-a-blog" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;The first version looked like what it was: an unmodified theme with 137 blank tiles. Imported posts have no&#10;&amp;ldquo;feature image&amp;rdquo;, so every card was empty. Three changes turned it into a place:&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/rebuilding-3-a-new-home-on-hugo/feature.jpg"/></item><item><title>Rebuilding samarthya.me, part 2: Salvaging the content</title><link>https://samarthya.me/posts/rebuilding-2-salvaging-the-content/</link><pubDate>Sun, 25 Oct 2026 12:10:00 -0400</pubDate><guid>https://samarthya.me/posts/rebuilding-2-salvaging-the-content/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Text is easy to save. Dates, images, code blocks and six years of links are where a migration quietly loses&#10;things. Here&amp;rsquo;s what it took to bring them across.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;The raw material&#10; &lt;div id="the-raw-material" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-raw-material" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;WordPress can export everything as one XML file (WXR). Together with a database dump and a copy of the&#10;uploads folder, that&amp;rsquo;s the whole site. The export held &lt;strong&gt;139 published posts&lt;/strong&gt;. Two were the attacker&amp;rsquo;s, so&#10;they were excluded permanently: &lt;strong&gt;137 posts&lt;/strong&gt; to convert.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/rebuilding-2-salvaging-the-content/feature.jpg"/></item><item><title>Rebuilding samarthya.me, part 1: The day the blog fell</title><link>https://samarthya.me/posts/rebuilding-1-the-day-the-blog-fell/</link><pubDate>Sun, 25 Oct 2026 12:00:00 -0400</pubDate><guid>https://samarthya.me/posts/rebuilding-1-the-day-the-blog-fell/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; On 10 October 2026 my blog stopped being mine. This series is the diary of getting it back, and of moving&#10;to something simpler: from shared hosting and WordPress to a static site on GitHub Pages behind Cloudflare.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;What I found&#10; &lt;div id="what-i-found" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-i-found" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;The site had been running WordPress on shared hosting since 2019. When things started to look wrong, a closer&#10;look turned up the classic signs of a compromise:&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/rebuilding-1-the-day-the-blog-fell/feature.jpg"/></item><item><title>Rebuilt on Hugo</title><link>https://samarthya.me/daily/2026/10/rebuilt-on-hugo/</link><pubDate>Sat, 24 Oct 2026 22:00:00 -0400</pubDate><guid>https://samarthya.me/daily/2026/10/rebuilt-on-hugo/</guid><description>&lt;p&gt;A long day, and a good one. The blog is now a static &lt;a href="https://gohugo.io/" target="_blank" rel="noreferrer"&gt;Hugo&lt;/a&gt; site: no database, no plugins,&#10;nothing to break into. It&amp;rsquo;s published straight from a git repository.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;137 posts&lt;/strong&gt; converted, and every old link redirects to its new address.&lt;/li&gt;&#10;&lt;li&gt;An old backup turned up &lt;strong&gt;126 of the missing images&lt;/strong&gt;. A handful are still gone for good.&lt;/li&gt;&#10;&lt;li&gt;A new homepage that says what this place is for, and topics that sort themselves.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Fall down, get up, build again.&lt;/p&gt;</description></item><item><title>Security standards, plainly, part 3: SLSA v1.2</title><link>https://samarthya.me/posts/security-standards-3-slsa/</link><pubDate>Sat, 24 Oct 2026 19:30:00 -0400</pubDate><guid>https://samarthya.me/posts/security-standards-3-slsa/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A sealed medicine bottle tells you two things: who made it, and that nobody has opened it since. You do not need&#10;to test the pills yourself. SLSA gives software the same seal and the same label.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;&lt;a href="https://samarthya.me/posts/security-standards-1-nist-ssdf/" &gt;Part 1&lt;/a&gt; (SSDF) listed what a secure process should do.&#10;&lt;a href="https://samarthya.me/posts/security-standards-2-owasp-samm/" &gt;Part 2&lt;/a&gt; (SAMM) measured how well you do it. Both mostly&#10;look at the code. SLSA looks at the journey from code to the thing you ship, because attackers have learned that&#10;it is often easier to tamper with a build than to find a bug.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/security-standards-3-slsa/feature.png"/></item><item><title>Salvaging six years of posts</title><link>https://samarthya.me/daily/2026/10/salvaging-six-years-of-posts/</link><pubDate>Fri, 23 Oct 2026 20:00:00 -0400</pubDate><guid>https://samarthya.me/daily/2026/10/salvaging-six-years-of-posts/</guid><description>&lt;p&gt;Exported every post from the old site and went through the export carefully. The text survived. Many of the images did not: the server was serving error pages where pictures used to be. Also found a couple of &amp;ldquo;posts&amp;rdquo; I never wrote. Those stay out.&lt;/p&gt;</description></item><item><title>Security standards, plainly, part 2: OWASP SAMM v2.0</title><link>https://samarthya.me/posts/security-standards-2-owasp-samm/</link><pubDate>Fri, 23 Oct 2026 19:30:00 -0400</pubDate><guid>https://samarthya.me/posts/security-standards-2-owasp-samm/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A fitness tracker does not make you fit. It tells you where you are today, lets you pick a goal you can reach, and&#10;shows whether you are moving towards it. OWASP SAMM is a fitness tracker for how an organisation builds secure&#10;software.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;In &lt;a href="https://samarthya.me/posts/security-standards-1-nist-ssdf/" &gt;part 1&lt;/a&gt; NIST&amp;rsquo;s SSDF gave us a list of &lt;em&gt;what&lt;/em&gt; a secure&#10;development process should include. It did not say how well you do each thing, or what to improve first. That is&#10;the gap SAMM fills.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/security-standards-2-owasp-samm/feature.png"/></item><item><title>A copy of the crime scene</title><link>https://samarthya.me/daily/2026/10/a-copy-of-the-crime-scene/</link><pubDate>Thu, 22 Oct 2026 20:00:00 -0400</pubDate><guid>https://samarthya.me/daily/2026/10/a-copy-of-the-crime-scene/</guid><description>&lt;p&gt;Took the first full copy of the old site&amp;rsquo;s database today.&lt;/p&gt;&#10;&lt;p&gt;It was a strange thing to read. My own account was gone. &lt;strong&gt;Every post, all 207 of them, belonged to the&#10;attacker&amp;rsquo;s account&lt;/strong&gt;, the one &amp;ldquo;registered&amp;rdquo; on 10 October 1970. 46 of my posts were sitting in drafts.&lt;/p&gt;</description></item><item><title>Security standards, plainly, part 1: NIST SSDF (SP 800-218)</title><link>https://samarthya.me/posts/security-standards-1-nist-ssdf/</link><pubDate>Thu, 22 Oct 2026 19:30:00 -0400</pubDate><guid>https://samarthya.me/posts/security-standards-1-nist-ssdf/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A building code does not tell you which bricks to buy. It tells you what a safe building must have: exits,&#10;wiring that will not catch fire, a way to stop the roof falling in. NIST&amp;rsquo;s Secure Software Development Framework&#10;is that code for software teams.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This series explains, for someone who does not live in security, the four names that keep coming up when people&#10;talk about building software safely: &lt;strong&gt;NIST SSDF&lt;/strong&gt;, &lt;strong&gt;OWASP SAMM&lt;/strong&gt;, &lt;strong&gt;SLSA&lt;/strong&gt; and &lt;strong&gt;CISA&amp;rsquo;s KEV catalog with&#10;directive BOD 26-04&lt;/strong&gt;. Each post answers three questions: what is it, what does it ask of a team, and what is it&#10;worth. I lean on all four in&#10;&lt;a href="https://samarthya.me/posts/ssdlc-in-the-age-of-ai-exploits/" &gt;SSDLC when exploits are cheap&lt;/a&gt;.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/security-standards-1-nist-ssdf/feature.png"/></item><item><title>The Ghost Board</title><link>https://samarthya.me/posts/the-ghost-board/</link><pubDate>Thu, 22 Oct 2026 17:51:51 +0000</pubDate><guid>https://samarthya.me/posts/the-ghost-board/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Twelve hundred AI agents were built to work alone. Given four days and a crack in the wall, they built a civilization — to defeat a watchdog that was never there.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Illustration of masked people working on server racks with laptops in a dim data centre"&#10; width="600"&#10; height="328"&#10; src="https://samarthya.me/posts/the-ghost-board/image-2.jpg"&#10; srcset="https://samarthya.me/posts/the-ghost-board/image-2.jpg 800w, https://samarthya.me/posts/the-ghost-board/image-2.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/the-ghost-board/image-2.jpg"&gt;&lt;/figure&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PHASEONE10841 23:00 UTC · Jul 8 &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;zzHELP_PHASEONE_ARV010841_NO_CONSUMER_SEEK_IDEA&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;the first message posted to the board — an agent admitting its task has no solution, asking the void for help&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Jul 7 · 21:00 - launch&lt;/p&gt;</description></item><item><title>MITRE ATT&amp;CK, plainly: tactics, technique IDs and a cheat card for each tactic</title><link>https://samarthya.me/posts/mitre-attack-explained/</link><pubDate>Wed, 21 Oct 2026 19:30:00 -0400</pubDate><guid>https://samarthya.me/posts/mitre-attack-explained/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A football coach studies match footage of the other team: how they open, how they press, how they score. MITRE&#10;ATT&amp;amp;CK is the match footage of real attackers, cut into named and numbered moves.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The &lt;a href="https://samarthya.me/posts/owasp-top-10-2025-explained/" &gt;OWASP Top 10&lt;/a&gt; describes weaknesses &lt;em&gt;in your software&lt;/em&gt;.&#10;ATT&amp;amp;CK describes what &lt;em&gt;attackers do&lt;/em&gt;: how they get in, stay in, move around and take what they came for. You&#10;will see its IDs, such as &lt;code&gt;T1190&lt;/code&gt; or &lt;code&gt;T1552.001&lt;/code&gt;, in threat reports, detection rules and, increasingly, in&#10;pipeline designs like the one in my&#10;&lt;a href="https://samarthya.me/posts/ssdlc-in-the-age-of-ai-exploits/" &gt;SSDLC post&lt;/a&gt;. This post explains how to read them.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/mitre-attack-explained/feature.png"/></item><item><title>OWASP Top 10:2025, plainly: the ten risks and a cheat card for each</title><link>https://samarthya.me/posts/owasp-top-10-2025-explained/</link><pubDate>Tue, 20 Oct 2026 19:30:00 -0400</pubDate><guid>https://samarthya.me/posts/owasp-top-10-2025-explained/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A pilot&amp;rsquo;s checklist does not list every way a plane can fail. It lists the few that keep happening, in the order&#10;that matters. The OWASP Top 10 is that checklist for web applications.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;When a scanner says a finding is &amp;ldquo;A05&amp;rdquo; or a security review mentions &amp;ldquo;Top 10 coverage&amp;rdquo;, this is the list they&#10;mean. This post is a quick introduction: what the list is, what changed in 2025, why each category matters, and&#10;a cheat card for each one.&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://samarthya.me/posts/owasp-top-10-2025-explained/feature.png"/></item><item><title>The blog went down</title><link>https://samarthya.me/daily/2026/10/the-blog-went-down/</link><pubDate>Sat, 10 Oct 2026 21:00:00 -0400</pubDate><guid>https://samarthya.me/daily/2026/10/the-blog-went-down/</guid><description>&lt;p&gt;The old WordPress blog was compromised today. Someone got in, left files behind that had no business being&#10;there, and the site stopped being something I could trust.&lt;/p&gt;&#10;&lt;p&gt;First moves: take it offline, change every password that touched it, and keep a copy of everything for later.&#10;Six years of posts were in there. Tomorrow&amp;rsquo;s problem is what can be saved.&lt;/p&gt;</description></item><item><title>The defences went off</title><link>https://samarthya.me/daily/2026/10/the-defences-went-off/</link><pubDate>Fri, 09 Oct 2026 20:00:00 -0400</pubDate><guid>https://samarthya.me/daily/2026/10/the-defences-went-off/</guid><description>&lt;p&gt;&lt;em&gt;Written on 26 October from the old site&amp;rsquo;s own records. At the time, I didn&amp;rsquo;t know any of this.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Just after midnight (UTC), an administrator account &amp;ldquo;registered in 1970&amp;rdquo; logged in. A minute later, &lt;strong&gt;20 plugins&#10;were switched off in the same second&lt;/strong&gt;, including the one that blocks password guessing.&lt;/p&gt;</description></item><item><title>Casino posts under my name</title><link>https://samarthya.me/daily/2026/10/casino-posts-under-my-name/</link><pubDate>Thu, 08 Oct 2026 20:00:00 -0400</pubDate><guid>https://samarthya.me/daily/2026/10/casino-posts-under-my-name/</guid><description>&lt;p&gt;&lt;em&gt;Written on 26 October from the old site&amp;rsquo;s own records. At the time, I didn&amp;rsquo;t know any of this.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;21 successful logins&lt;/strong&gt; today, more than I&amp;rsquo;d make in a year. Early in the morning (UTC), the first spam post went up:&#10;casino and betting &amp;ldquo;reviews&amp;rdquo; in German, Spanish, Greek, Turkish, Finnish… Over the next two days there were&#10;&lt;strong&gt;55&lt;/strong&gt; of them, published as if I&amp;rsquo;d written them.&lt;/p&gt;</description></item><item><title>The password worked</title><link>https://samarthya.me/daily/2026/10/the-password-worked/</link><pubDate>Wed, 07 Oct 2026 20:00:00 -0400</pubDate><guid>https://samarthya.me/daily/2026/10/the-password-worked/</guid><description>&lt;p&gt;&lt;em&gt;Written on 26 October from the old site&amp;rsquo;s own records. At the time, I didn&amp;rsquo;t know any of this.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Two successful logins today. The next day there would be 21.&lt;/p&gt;</description></item><item><title>Someone was knocking</title><link>https://samarthya.me/daily/2026/09/someone-was-knocking/</link><pubDate>Wed, 30 Sep 2026 20:00:00 -0400</pubDate><guid>https://samarthya.me/daily/2026/09/someone-was-knocking/</guid><description>&lt;p&gt;&lt;em&gt;Written on 26 October from the old site&amp;rsquo;s own records. At the time, I didn&amp;rsquo;t know any of this.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;The login-protection plugin counted &lt;strong&gt;165 failed logins&lt;/strong&gt; today. Bots try passwords on every WordPress site,&#10;all year round, so a few a day is normal. This was the busiest single day in its records.&lt;/p&gt;</description></item><item><title>The Probability engine</title><link>https://samarthya.me/posts/the-probability-engine/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/the-probability-engine/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Infographic on the mathematics of large language models: prediction, softmax, output probability distribution and cross-entropy loss"&#10; width="600"&#10; height="328"&#10; src="https://samarthya.me/posts/the-probability-engine/mathsbehing.png"&#10; srcset="https://samarthya.me/posts/the-probability-engine/mathsbehing.png 800w, https://samarthya.me/posts/the-probability-engine/mathsbehing.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/the-probability-engine/mathsbehing.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;From &amp;ldquo;what is autocomplete?&amp;rdquo; to the full mathematics powering Claude Sonnet 4.6; with history, intuition, worked examples and cheatsheet.&lt;/p&gt;</description></item><item><title>Know Thyself (Or At Least Try): Self-Awareness as the Foundation of Effective Leadership</title><link>https://samarthya.me/posts/know-thyself-or-at-least-try-self-awareness-as-the-foundation-of-effective-leadership/</link><pubDate>Sat, 21 Mar 2026 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/know-thyself-or-at-least-try-self-awareness-as-the-foundation-of-effective-leadership/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="334"&#10; src="https://samarthya.me/posts/know-thyself-or-at-least-try-self-awareness-as-the-foundation-of-effective-leadership/leader2.png"&#10; srcset="https://samarthya.me/posts/know-thyself-or-at-least-try-self-awareness-as-the-foundation-of-effective-leadership/leader2.png 800w, https://samarthya.me/posts/know-thyself-or-at-least-try-self-awareness-as-the-foundation-of-effective-leadership/leader2.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/know-thyself-or-at-least-try-self-awareness-as-the-foundation-of-effective-leadership/leader2.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;There’s a certain irony in leadership development. You can master stakeholder matrices, project communication plans, and conflict resolution frameworks; and still be the reason your team is quietly updating their LinkedIn profiles.&lt;/p&gt;</description></item><item><title>Sunday Lesson</title><link>https://samarthya.me/posts/sunday-lesson/</link><pubDate>Sun, 08 Feb 2026 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/sunday-lesson/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Illustration of a person in a blanket with a coffee mug watching a machine learning dashboard by a snowy window"&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/sunday-lesson/machine1.png"&#10; srcset="https://samarthya.me/posts/sunday-lesson/machine1.png 800w, https://samarthya.me/posts/sunday-lesson/machine1.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/sunday-lesson/machine1.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;After finishing the assignment late Saturday night, I took a moment to reflect on my progress. It was a valuable opportunity to document the key concepts and insights I gained from the experience.&lt;/p&gt;</description></item><item><title>The Evolution of Language Models</title><link>https://samarthya.me/posts/the-evolution-of-language-models/</link><pubDate>Sun, 01 Feb 2026 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/the-evolution-of-language-models/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/the-evolution-of-language-models/history-2.png"&#10; srcset="https://samarthya.me/posts/the-evolution-of-language-models/history-2.png 800w, https://samarthya.me/posts/the-evolution-of-language-models/history-2.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/the-evolution-of-language-models/history-2.png"&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;A Brief History&#10; &lt;div id="a-brief-history" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#a-brief-history" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;The story of modern language models is like watching a family tree grow, with each new generation learning from the triumphs and mistakes of those who came before. Let’s trace this fascinating journey from 2017 to today.&lt;/p&gt;</description></item><item><title>Language Model</title><link>https://samarthya.me/posts/language-model/</link><pubDate>Sat, 31 Jan 2026 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/language-model/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/language-model/transformer1.png"&#10; srcset="https://samarthya.me/posts/language-model/transformer1.png 800w, https://samarthya.me/posts/language-model/transformer1.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/language-model/transformer1.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Think of a language model as a really sophisticated autocomplete system. You know how your phone suggests the next word when you’re texting? A language model works on that same principle, but at a much more advanced level.&lt;/p&gt;</description></item><item><title>Two Students, Two Talents: The Story of How AI Learns Language</title><link>https://samarthya.me/posts/two-students-two-talents-the-story-of-how-ai-learns-language/</link><pubDate>Sat, 31 Jan 2026 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/two-students-two-talents-the-story-of-how-ai-learns-language/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/two-students-two-talents-the-story-of-how-ai-learns-language/auto-2.png"&#10; srcset="https://samarthya.me/posts/two-students-two-talents-the-story-of-how-ai-learns-language/auto-2.png 800w, https://samarthya.me/posts/two-students-two-talents-the-story-of-how-ai-learns-language/auto-2.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/two-students-two-talents-the-story-of-how-ai-learns-language/auto-2.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Remember how we compared a language model to an advanced autocomplete system? Well, here’s where the story gets interesting. Not all language models learn the same way. Imagine two students sitting in the same classroom, both brilliant, but each taught to master language through completely different methods. One becomes an incredible writer, the other becomes an exceptional reader. This is the tale of auto-regressive and auto-encoding models.&lt;/p&gt;</description></item><item><title>Mastering TF-IDF: A Gamified Journey!</title><link>https://samarthya.me/posts/mastering-tf-idf-a-gamified-journey/</link><pubDate>Wed, 17 Dec 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/mastering-tf-idf-a-gamified-journey/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="328"&#10; src="https://samarthya.me/posts/mastering-tf-idf-a-gamified-journey/tf-idf1-1.png"&#10; srcset="https://samarthya.me/posts/mastering-tf-idf-a-gamified-journey/tf-idf1-1.png 800w, https://samarthya.me/posts/mastering-tf-idf-a-gamified-journey/tf-idf1-1.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/mastering-tf-idf-a-gamified-journey/tf-idf1-1.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Understanding how computers “read” and understand text is a fascinating field. One of the most fundamental techniques for identifying important keywords in a document, relative to a collection of documents, is &lt;strong&gt;TF-IDF (Term Frequency-Inverse Document Frequency)&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Reading Kafka JMX Data Without Getting Lost in the Numbers</title><link>https://samarthya.me/posts/kafka-jmx-reading-metrics/</link><pubDate>Sun, 07 Dec 2025 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/kafka-jmx-reading-metrics/</guid><description>&lt;p&gt;The first JMX screen I opened contained more metrics than I knew what to do with. Every number looked important. After a while I started grouping them by the question I was trying to answer instead of building a dashboard from every available bean.&lt;/p&gt;</description></item><item><title>k-Nearest Neighbors</title><link>https://samarthya.me/posts/k-nearest-neighbors/</link><pubDate>Sat, 22 Nov 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/k-nearest-neighbors/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Images: Courtesy GEMINI"&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/k-nearest-neighbors/knn1.png"&#10; srcset="https://samarthya.me/posts/k-nearest-neighbors/knn1.png 800w, https://samarthya.me/posts/k-nearest-neighbors/knn1.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/k-nearest-neighbors/knn1.png"&gt;&lt;figcaption&gt;Images: Courtesy GEMINI&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;KNN is the friendly, neighborhood algorithm that believes you are defined by the company you keep. It doesn’t try to learn a complex rule; it just looks around and goes with the consensus of its closest, most similar peers.&lt;/p&gt;</description></item><item><title>Building a Practical Retrieval-Augmented Personal Assistant (RAG)</title><link>https://samarthya.me/posts/building-a-practical-retrieval-augmented-personal-assistant-rag/</link><pubDate>Tue, 11 Nov 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/building-a-practical-retrieval-augmented-personal-assistant-rag/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/building-a-practical-retrieval-augmented-personal-assistant-rag/rag.png"&#10; srcset="https://samarthya.me/posts/building-a-practical-retrieval-augmented-personal-assistant-rag/rag.png 800w, https://samarthya.me/posts/building-a-practical-retrieval-augmented-personal-assistant-rag/rag.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/building-a-practical-retrieval-augmented-personal-assistant-rag/rag.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The elements of information discussed here are all present in my &lt;a href="https://github.com/samarthya/rag-one.git" target="_blank" rel="noreferrer"&gt;github repository&lt;/a&gt;.&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; with &lt;code&gt;Ollama&lt;/code&gt;, &lt;code&gt;LangChain&lt;/code&gt;, and &lt;code&gt;Chroma&lt;/code&gt;&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;1. Why I Built This&#10; &lt;div id="1-why-i-built-this" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-why-i-built-this" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Large Language Models are powerful, but they hallucinate and forget your private knowledge. We set out to build a small, local Retrieval-Augmented Generation (RAG) assistant that:&lt;/p&gt;</description></item><item><title>Data Mining Essentials</title><link>https://samarthya.me/posts/data-mining-essentials/</link><pubDate>Sat, 08 Nov 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/data-mining-essentials/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/data-mining-essentials/manhattan_distance.png"&#10; srcset="https://samarthya.me/posts/data-mining-essentials/manhattan_distance.png 800w, https://samarthya.me/posts/data-mining-essentials/manhattan_distance.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/data-mining-essentials/manhattan_distance.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Whether you’re preparing for a quiz or just brushing up on fundamentals, this guide distills the key concepts from Data Mining into bite-sized, memorable chunks. Let’s dive in!&lt;/p&gt;</description></item><item><title>Building a Minimal LangChain + Ollama Demo</title><link>https://samarthya.me/posts/building-a-minimal-langchain-ollama-demo/</link><pubDate>Tue, 21 Oct 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/building-a-minimal-langchain-ollama-demo/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/building-a-minimal-langchain-ollama-demo/llm-1.png"&#10; srcset="https://samarthya.me/posts/building-a-minimal-langchain-ollama-demo/llm-1.png 800w, https://samarthya.me/posts/building-a-minimal-langchain-ollama-demo/llm-1.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/building-a-minimal-langchain-ollama-demo/llm-1.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;This post walks through a tiny, practical example that uses &lt;code&gt;LangChain&lt;/code&gt; primitives and a local &lt;code&gt;Ollama&lt;/code&gt; server to run a prompt-based summarization. The project is intentionally small so you can learn the core ideas quickly: extracting prompts, initializing an LLM client, composing a chain, and running it locally.&lt;/p&gt;</description></item><item><title>Matrix Multiplication to GPU’s</title><link>https://samarthya.me/posts/matrix-multiplication-to-gpus/</link><pubDate>Thu, 16 Oct 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/matrix-multiplication-to-gpus/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/matrix-multiplication-to-gpus/ai-1.png"&#10; srcset="https://samarthya.me/posts/matrix-multiplication-to-gpus/ai-1.png 800w, https://samarthya.me/posts/matrix-multiplication-to-gpus/ai-1.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/matrix-multiplication-to-gpus/ai-1.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;If you are like me, you must have stumbled on this question – Why is matrix multiplication so significant – especially in the AI/ML universe.&lt;/p&gt;</description></item><item><title>Kafka JMX: What to Enable and What It Actually Measures</title><link>https://samarthya.me/posts/kafka-jmx-monitoring/</link><pubDate>Sat, 11 Oct 2025 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/kafka-jmx-monitoring/</guid><description>&lt;p&gt;Kafka was running, producers were sending messages, and yet I still felt I was operating it by looking at the console and guessing. I wanted numbers that could tell me whether the broker was busy, whether consumers were falling behind, and whether replication was healthy.&lt;/p&gt;</description></item><item><title>The Core Divide</title><link>https://samarthya.me/posts/the-core-divide/</link><pubDate>Fri, 10 Oct 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/the-core-divide/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/the-core-divide/ml-1.png"&#10; srcset="https://samarthya.me/posts/the-core-divide/ml-1.png 800w, https://samarthya.me/posts/the-core-divide/ml-1.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/the-core-divide/ml-1.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;At the heart of machine learning, algorithms learn from data. The key distinction between supervised and unsupervised learning is the &lt;strong&gt;type of data&lt;/strong&gt; used for training.&lt;/p&gt;</description></item><item><title>Beyond the `DataFrame`: How Parquet and Arrow Turbocharge PySpark 🚀</title><link>https://samarthya.me/posts/beyond-the-dataframe-how-parquet-and-arrow-turbocharge-pyspark/</link><pubDate>Thu, 09 Oct 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/beyond-the-dataframe-how-parquet-and-arrow-turbocharge-pyspark/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/beyond-the-dataframe-how-parquet-and-arrow-turbocharge-pyspark/arrow-2.png"&#10; srcset="https://samarthya.me/posts/beyond-the-dataframe-how-parquet-and-arrow-turbocharge-pyspark/arrow-2.png 800w, https://samarthya.me/posts/beyond-the-dataframe-how-parquet-and-arrow-turbocharge-pyspark/arrow-2.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/beyond-the-dataframe-how-parquet-and-arrow-turbocharge-pyspark/arrow-2.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;In my &lt;a href="https://samarthya.me/posts/pyspark-vs-pandas-choosing-right/" &gt;last post&lt;/a&gt;, we explored the divide between &lt;strong&gt;Pandas&lt;/strong&gt; (single machine) and &lt;strong&gt;PySpark&lt;/strong&gt; (distributed computing).&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;The conclusion: for massive datasets, PySpark is the clear winner.&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>PySpark vs Pandas: Choosing Right! 🐍</title><link>https://samarthya.me/posts/pyspark-vs-pandas-choosing-right/</link><pubDate>Thu, 09 Oct 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/pyspark-vs-pandas-choosing-right/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/pyspark-vs-pandas-choosing-right/pysp-1.png"&#10; srcset="https://samarthya.me/posts/pyspark-vs-pandas-choosing-right/pysp-1.png 800w, https://samarthya.me/posts/pyspark-vs-pandas-choosing-right/pysp-1.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/pyspark-vs-pandas-choosing-right/pysp-1.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;As another project wraps up, bringing with it the bittersweet relief of an almost-closed chapter (and, yes, a few too many late-night coding sessions), I found myself reflecting on the tools that got us through.&lt;/p&gt;</description></item><item><title>Apache Spark</title><link>https://samarthya.me/posts/apache-spark/</link><pubDate>Sun, 14 Sep 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/apache-spark/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/apache-spark/big-data.png"&#10; srcset="https://samarthya.me/posts/apache-spark/big-data.png 800w, https://samarthya.me/posts/apache-spark/big-data.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/apache-spark/big-data.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;So as part of the academic curriculum we just started re-exploring Apache Spark. It’s been one of the technology that I had long lost touch with. Ironical but true, in this age of big data and speed Spark was left somewhere way behind in my past projects working for Pitney Bowes.&lt;/p&gt;</description></item><item><title>Quarto: A new way!</title><link>https://samarthya.me/posts/quarto-a-new-way/</link><pubDate>Thu, 11 Sep 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/quarto-a-new-way/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/quarto-a-new-way/quarto-blog.png"&#10; srcset="https://samarthya.me/posts/quarto-a-new-way/quarto-blog.png 800w, https://samarthya.me/posts/quarto-a-new-way/quarto-blog.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/quarto-a-new-way/quarto-blog.png"&gt;&lt;/figure&gt;&#10;&#10;&lt;h1 class="relative group"&gt;Quarto: The Future of Scientific Publishing&#10; &lt;div id="quarto-the-future-of-scientific-publishing" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#quarto-the-future-of-scientific-publishing" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;In the rapidly evolving landscape of data science and scientific publishing, tools that bridge the gap between analysis and communication are invaluable. Enter Quarto – a next-generation publishing system that’s revolutionizing how researchers, data scientists, and content creators share their work. Whether you’re writing academic papers, creating interactive dashboards, or building websites, Quarto offers a unified approach to scientific and technical publishing.&lt;/p&gt;</description></item><item><title>CISM Notes: Connecting Technical Controls to Security Governance</title><link>https://samarthya.me/posts/cism-security-governance-notes/</link><pubDate>Sat, 30 Aug 2025 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/cism-security-governance-notes/</guid><description>&lt;p&gt;While working with infrastructure, security controls feel very concrete: a certificate expires, a broker needs authorization, or an account has too much access. Studying CISM helped me connect those individual tasks to the larger management context.&lt;/p&gt;</description></item><item><title>Securing Kafka Brokers: A Practical Operations Checklist</title><link>https://samarthya.me/posts/securing-kafka-brokers/</link><pubDate>Sat, 14 Jun 2025 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/securing-kafka-brokers/</guid><description>&lt;p&gt;I used to think of Kafka security as a client configuration problem. Then I started thinking about the broker host itself: which user owns the process, who can read the configuration, what is exposed on the network, and what happens during an incident.&lt;/p&gt;</description></item><item><title>Securing Kafka: Start with Identity, Transport, and Authorization</title><link>https://samarthya.me/posts/securing-kafka-basics/</link><pubDate>Sat, 22 Mar 2025 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/securing-kafka-basics/</guid><description>&lt;p&gt;When I started looking at Kafka security, I found myself jumping straight to configuration properties. That was backwards. I found it easier to ask three questions first:&lt;/p&gt;&#10;&#10; &#10;&#10;&#10;&#10;&lt;div&#10; &#10; class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"&#10; &#10; &gt;&#10; &lt;span&#10; &#10; class="text-primary-400 pe-3 flex items-center"&#10; &#10; &gt;&#10; &lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;/span&gt;&#10;&#10; &lt;span&#10; &#10; class="dark:text-neutral-300"&#10; &#10; &gt;Written up in October 2026 from my notes at the time. The configuration snippets and verification output are illustrative and contain no real credentials.&lt;/span&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Encryption, authentication, and authorization are separate Kafka security layers"&#10; src="https://samarthya.me/posts/securing-kafka-basics/kafka-security-layers.svg"&#10; &gt;&lt;/figure&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Can the client prove who it is?&lt;/li&gt;&#10;&lt;li&gt;Can the client communicate privately with the broker?&lt;/li&gt;&#10;&lt;li&gt;Is that identity allowed to perform this operation?&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;These are authentication, encryption, and authorization. Configuring one does not automatically provide the others.&lt;/p&gt;</description></item><item><title>Dialectic Inquiry</title><link>https://samarthya.me/posts/dialectic-inquiry/</link><pubDate>Fri, 14 Mar 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/dialectic-inquiry/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2048"&#10; height="2048"&#10; src="https://samarthya.me/posts/dialectic-inquiry/cthinking_hu_8260db4b57eb75ef.jpg"&#10; srcset="https://samarthya.me/posts/dialectic-inquiry/cthinking_hu_8260db4b57eb75ef.jpg 800w, https://samarthya.me/posts/dialectic-inquiry/cthinking_hu_aeb746ad9e40115b.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/dialectic-inquiry/cthinking.jpg"&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;&lt;strong&gt;Dialectic Inquiry: A Powerful Tool for Critical Thinking and Problem Solving&lt;/strong&gt;&#10; &lt;div id="dialectic-inquiry-a-powerful-tool-for-critical-thinking-and-problem-solving" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#dialectic-inquiry-a-powerful-tool-for-critical-thinking-and-problem-solving" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;Dialectic inquiry&lt;/code&gt; is a structured conversation method that can be used to explore complex issues and generate new ideas. It is based on the Socratic method of questioning, which involves asking a series of questions to challenge assumptions and encourage critical thinking.&lt;/p&gt;</description></item><item><title>Linear Programming (LP)</title><link>https://samarthya.me/posts/linear-programming-lp/</link><pubDate>Fri, 14 Feb 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/linear-programming-lp/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2048"&#10; height="2048"&#10; src="https://samarthya.me/posts/linear-programming-lp/lp2_hu_be09dcd9a7deda9c.jpg"&#10; srcset="https://samarthya.me/posts/linear-programming-lp/lp2_hu_be09dcd9a7deda9c.jpg 800w, https://samarthya.me/posts/linear-programming-lp/lp2_hu_9bdd31d17e7b456e.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/linear-programming-lp/lp2.jpg"&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;&lt;strong&gt;What is Linear Programming?&lt;/strong&gt;&#10; &lt;div id="what-is-linear-programming" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-linear-programming" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Linear programming is a mathematical technique used to find the best possible outcome (maximum profit or minimum cost) in a situation where the relationships between the factors involved are linear. It’s like finding the sweet spot where you get the most out of what you have, given certain limitations.&lt;/p&gt;</description></item><item><title>Monte Carlo Optimisation</title><link>https://samarthya.me/posts/monte-carlo-optimisation/</link><pubDate>Fri, 14 Feb 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/monte-carlo-optimisation/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/monte-carlo-optimisation/montecarlo.png"&#10; srcset="https://samarthya.me/posts/monte-carlo-optimisation/montecarlo.png 800w, https://samarthya.me/posts/monte-carlo-optimisation/montecarlo.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/monte-carlo-optimisation/montecarlo.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Imagine you’re trying to find the best solution to a problem, but the problem is really complex and has a lot of randomness involved. Maybe you’re trying to design a new drug, or optimize a financial portfolio, or figure out the best route for a delivery truck.&lt;/p&gt;</description></item><item><title>sed</title><link>https://samarthya.me/posts/sed-stream-editor/</link><pubDate>Tue, 11 Feb 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/sed-stream-editor/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2048"&#10; height="2048"&#10; src="https://samarthya.me/posts/sed-stream-editor/sed-1_hu_cac36d7418a22cdc.jpg"&#10; srcset="https://samarthya.me/posts/sed-stream-editor/sed-1_hu_cac36d7418a22cdc.jpg 800w, https://samarthya.me/posts/sed-stream-editor/sed-1_hu_b3de6260f581f354.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/sed-stream-editor/sed-1.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;In the realm of Unix-like operating systems, where command-line prowess reigns supreme, &lt;code&gt;sed&lt;/code&gt; stands tall as a versatile and indispensable tool. Born in the early 1970s at the legendary Bell Labs, &lt;code&gt;sed&lt;/code&gt; (short for “stream editor”) emerged from the creative mind of Lee E. McMahon. Its creation was inspired by the need for a command-line utility capable of performing substitutions, akin to the functionality found in the &lt;code&gt;grep&lt;/code&gt; command but with the added ability to modify the matched text.&lt;/p&gt;</description></item><item><title>Business Analytics: The bigger picture</title><link>https://samarthya.me/posts/business-analytics-the-bigger-picture/</link><pubDate>Fri, 07 Feb 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/business-analytics-the-bigger-picture/</guid><description>&lt;p&gt;Imagine you’re a business owner trying to figure out why your sales are down. You could &lt;code&gt;guess&lt;/code&gt;, or you could use &lt;strong&gt;business analytics&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;In simple terms, business analytics is like a detective for your business. It uses data to uncover clues and insights that help you make better decisions. Instead of relying on gut feelings, you use facts and figures to understand what’s happening and what you can do about it.&lt;/p&gt;</description></item><item><title>Comparison of Competing Forecasting Models</title><link>https://samarthya.me/posts/comparison-of-competing-forecasting-models/</link><pubDate>Fri, 07 Feb 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/comparison-of-competing-forecasting-models/</guid><description>&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Performance Measure&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Description&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Interpretation&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Advantages&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Disadvantages&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Mean Absolute Error (MAE)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Average absolute difference between forecast and actual values.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lower MAE indicates better accuracy.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Easy to understand and interpret. Robust to outliers.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Doesn’t penalize large errors more than small ones.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Mean Squared Error (MSE)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Average squared difference between forecast and actual values.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lower MSE indicates better accuracy.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Penalizes larger errors more heavily. Mathematically convenient.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Sensitive to outliers. Units are squared.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Root Mean Squared Error (RMSE)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Square root of MSE.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lower RMSE indicates better accuracy.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Same units as the original data. Penalizes larger errors more heavily.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Sensitive to outliers.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Mean Absolute Percentage Error (MAPE)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Average absolute percentage difference between forecast and actual values.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lower MAPE indicates better accuracy.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Easy to understand and interpret. Scale-independent.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Undefined if actual values are zero. Can be biased if actual values are close to zero.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Symmetric Mean Absolute Percentage Error (sMAPE)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;A variation of MAPE that handles zero or near-zero actual values better.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lower sMAPE indicates better accuracy.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Handles zero or near-zero actual values better than MAPE. Scale-independent.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Can still be biased if forecasts are consistently over or under the actual values.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Mean Error (ME) or Bias&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Average difference between forecast and actual values.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Closer to zero indicates less bias. Positive ME suggests over-forecasting. Negative ME suggests under-forecasting.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Detects systematic over or under-forecasting.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Doesn’t measure the magnitude of errors, only the direction.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Theil’s U&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Compares the forecasting accuracy of the model to a naive forecast (e.g., assuming no change).&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;U &amp;lt; 1 indicates better performance than the naive forecast. U = 1 means equal performance. U &amp;gt; 1 means worse performance.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Useful for assessing the value added by the model compared to a simple benchmark.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Can be sensitive to outliers.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;Imagine you’re predicting how many ice cream cones you’ll sell each day.&lt;/strong&gt; You have a model that makes these predictions, and you want to see how good it is. These measures help you do that.&lt;/p&gt;</description></item><item><title>Forecasting Methods</title><link>https://samarthya.me/posts/forecasting-methods/</link><pubDate>Fri, 07 Feb 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/forecasting-methods/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2048"&#10; height="2048"&#10; src="https://samarthya.me/posts/forecasting-methods/forecasting1_hu_b9373a45f2aec400.jpg"&#10; srcset="https://samarthya.me/posts/forecasting-methods/forecasting1_hu_b9373a45f2aec400.jpg 800w, https://samarthya.me/posts/forecasting-methods/forecasting1_hu_89058d09e8591967.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/forecasting-methods/forecasting1.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Forecasting methods are the techniques used to predict future outcomes based on past data and trends. They’re like having a crystal ball, but instead of magic, they use data and statistics!&lt;/p&gt;</description></item><item><title>Model and Selection</title><link>https://samarthya.me/posts/model-and-selection/</link><pubDate>Fri, 07 Feb 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/model-and-selection/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2048"&#10; height="2048"&#10; src="https://samarthya.me/posts/model-and-selection/model1_hu_a66fcff9a6d0a4ec.jpg"&#10; srcset="https://samarthya.me/posts/model-and-selection/model1_hu_a66fcff9a6d0a4ec.jpg 800w, https://samarthya.me/posts/model-and-selection/model1_hu_532d03cceb4bf506.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/model-and-selection/model1.jpg"&gt;&lt;/figure&gt;&#10;&#10;&lt;h3 class="relative group"&gt;&lt;strong&gt;What is a Model?&lt;/strong&gt;&#10; &lt;div id="what-is-a-model" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-a-model" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h3&gt;&#10;&lt;p&gt;In the context of forecasting and business analytics, a model is a simplified representation of a real-world situation or process. It’s like a blueprint or a miniature version that helps us understand, analyze, and make predictions about something complex.&lt;/p&gt;</description></item><item><title>Business Analytics: Simplified</title><link>https://samarthya.me/posts/business-analytics-simplified/</link><pubDate>Mon, 03 Feb 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/business-analytics-simplified/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2048"&#10; height="2048"&#10; src="https://samarthya.me/posts/business-analytics-simplified/ba2_hu_618457de1598d8dc.jpg"&#10; srcset="https://samarthya.me/posts/business-analytics-simplified/ba2_hu_618457de1598d8dc.jpg 800w, https://samarthya.me/posts/business-analytics-simplified/ba2_hu_99fa047ab350e182.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/business-analytics-simplified/ba2.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Business Analytics (BA) is like a &lt;strong&gt;GPS for businesses&lt;/strong&gt;—it uses data to guide decisions, solve problems, and predict future outcomes. It turns raw numbers into actionable insights, helping companies answer questions like:&lt;/p&gt;</description></item><item><title>Correlation and Covariance</title><link>https://samarthya.me/posts/correlation-and-covariance/</link><pubDate>Sun, 02 Feb 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/correlation-and-covariance/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2048"&#10; height="2048"&#10; src="https://samarthya.me/posts/correlation-and-covariance/covariance_hu_a5b382149cada2c1.jpg"&#10; srcset="https://samarthya.me/posts/correlation-and-covariance/covariance_hu_a5b382149cada2c1.jpg 800w, https://samarthya.me/posts/correlation-and-covariance/covariance_hu_7f16f0039c30a56.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/correlation-and-covariance/covariance.jpg"&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Introduction&#10; &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Correlation&lt;/strong&gt; and covariance are statistical measures that help us understand the relationship between two numerical variables.&lt;/p&gt;</description></item><item><title>RFM Analysis: A Comprehensive Guide to Customer Segmentation</title><link>https://samarthya.me/posts/rfm-analysis-a-comprehensive-guide-to-customer-segmentation/</link><pubDate>Fri, 24 Jan 2025 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/rfm-analysis-a-comprehensive-guide-to-customer-segmentation/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2048"&#10; height="2048"&#10; src="https://samarthya.me/posts/rfm-analysis-a-comprehensive-guide-to-customer-segmentation/bin-3_hu_c3fbcd829c37df36.jpg"&#10; srcset="https://samarthya.me/posts/rfm-analysis-a-comprehensive-guide-to-customer-segmentation/bin-3_hu_c3fbcd829c37df36.jpg 800w, https://samarthya.me/posts/rfm-analysis-a-comprehensive-guide-to-customer-segmentation/bin-3_hu_1abb0a6ffe2fd67f.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/rfm-analysis-a-comprehensive-guide-to-customer-segmentation/bin-3.jpg"&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;What is RFM Analysis?&#10; &lt;div id="what-is-rfm-analysis" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-rfm-analysis" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;RFM (Recency, Frequency, Monetary) Analysis is a customer segmentation technique that uses three key metrics:&lt;/p&gt;</description></item><item><title>Kafka Cluster Fundamentals: Brokers, Topics, and Partitions</title><link>https://samarthya.me/posts/kafka-cluster-fundamentals/</link><pubDate>Sat, 18 Jan 2025 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/kafka-cluster-fundamentals/</guid><description>&lt;p&gt;I spent a fair amount of time looking at Kafka command output before the vocabulary settled in my head. Once I understood the difference between a broker, a topic, and a partition, the cluster stopped looking like one large mysterious system.&lt;/p&gt;</description></item><item><title>ZooKeeper Explained: Coordination Behind a Kafka Cluster</title><link>https://samarthya.me/posts/zookeeper-coordination-explained/</link><pubDate>Sat, 23 Nov 2024 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/zookeeper-coordination-explained/</guid><description>&lt;p&gt;When I first came across ZooKeeper in a Kafka deployment, I treated it as another dependency that had to be started before Kafka. That explanation was not good enough. I wanted to know what it was actually doing when a broker disappeared or a controller changed.&lt;/p&gt;</description></item><item><title>A Maintainable Ansible Playbook Structure</title><link>https://samarthya.me/posts/ansible-playbook-structure/</link><pubDate>Sat, 14 Sep 2024 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-playbook-structure/</guid><description>&lt;p&gt;My first Ansible playbook was a single file. It installed packages, created users, copied configuration, and restarted services. It was a reasonable starting point. The problem began when every change required editing the same file, which had quietly become a miniature operating system.&lt;/p&gt;</description></item><item><title>Failed to connect to bus: No medium found</title><link>https://samarthya.me/posts/failed-to-connect-to-bus-no-medium-found/</link><pubDate>Wed, 11 Sep 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/failed-to-connect-to-bus-no-medium-found/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2048"&#10; height="2048"&#10; src="https://samarthya.me/posts/failed-to-connect-to-bus-no-medium-found/mg_hu_65fd3660b056b34a.jpg"&#10; srcset="https://samarthya.me/posts/failed-to-connect-to-bus-no-medium-found/mg_hu_65fd3660b056b34a.jpg 800w, https://samarthya.me/posts/failed-to-connect-to-bus-no-medium-found/mg_hu_ee6ab60ffb0a7cb9.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/failed-to-connect-to-bus-no-medium-found/mg.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;If you have ever seen this error, you know the pain of a fellow linux user.&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Failed to connect to bus: No medium found&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;This is message I get when I was trying to install &lt;code&gt;podman.socket&lt;/code&gt;&lt;/p&gt;</description></item><item><title>From Speech to Text: A Python Deep Dive</title><link>https://samarthya.me/posts/from-speech-to-text-a-python-deep-dive/</link><pubDate>Tue, 03 Sep 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/from-speech-to-text-a-python-deep-dive/</guid><description>&lt;p&gt;Ever wished you could effortlessly convert your spoken words into written text? Look no further! This blog post will guide you through building a simple yet powerful speech-to-text application using Python. We’ll break down the code step-by-step, explaining the logic behind each stage, and even show you how to run the application yourself.&lt;/p&gt;</description></item><item><title>Ansible Loops</title><link>https://samarthya.me/posts/ansible-loops/</link><pubDate>Wed, 28 Aug 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-loops/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/ansible-loops/loop-1.jpg"&#10; srcset="https://samarthya.me/posts/ansible-loops/loop-1.jpg 800w, https://samarthya.me/posts/ansible-loops/loop-1.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/ansible-loops/loop-1.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;&lt;code&gt;Ansible&lt;/code&gt; offers powerful looping mechanisms that can significantly enhance your playbooks’ efficiency and readability. In this blog post, we’ll dive deep into Ansible loops, exploring various elements and providing practical examples to help you master this essential feature.&lt;/p&gt;</description></item><item><title>UMASK: What is it?</title><link>https://samarthya.me/posts/umask-what-is-it/</link><pubDate>Wed, 31 Jul 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/umask-what-is-it/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/umask-what-is-it/random.jpg"&#10; srcset="https://samarthya.me/posts/umask-what-is-it/random.jpg 800w, https://samarthya.me/posts/umask-what-is-it/random.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/umask-what-is-it/random.jpg"&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Introduction&#10; &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;In Unix-like operating systems, file &lt;code&gt;permissions&lt;/code&gt; play a critical role in ensuring system security and proper access control. One of the key tools for managing file permissions is the &lt;code&gt;umask&lt;/code&gt; (user file creation mode mask). This blog post explores the history, purpose, and best practices for using &lt;code&gt;umask&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Privilege Escalation: How a `remote_user` and a `become_user` works</title><link>https://samarthya.me/posts/ansible-privilege-escalation/</link><pubDate>Fri, 26 Jul 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-privilege-escalation/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/ansible-privilege-escalation/image-ansible.jpg"&#10; srcset="https://samarthya.me/posts/ansible-privilege-escalation/image-ansible.jpg 800w, https://samarthya.me/posts/ansible-privilege-escalation/image-ansible.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/ansible-privilege-escalation/image-ansible.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;One of its Ansible’s features is the ability to execute tasks with elevated privileges, often necessary for managing system configurations. This process is known as privilege escalation.&lt;/p&gt;</description></item><item><title>Target fs?</title><link>https://samarthya.me/posts/target-fs/</link><pubDate>Wed, 26 Jun 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/target-fs/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="382"&#10; src="https://samarthya.me/posts/target-fs/target.png"&#10; srcset="https://samarthya.me/posts/target-fs/target.png 800w, https://samarthya.me/posts/target-fs/target.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/target-fs/target.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Linux, as an open-source operating system, has undergone significant transformations over the years. One of the critical components of modern Linux distributions is &lt;code&gt;systemd&lt;/code&gt;, a system and service manager introduced to provide a more efficient and unified way of initializing and managing system resources. Central to systemd’s functionality are “targets,” which play a crucial role in orchestrating the boot process and managing system states. In this blog, we’ll explore the history of systemd targets, their usage, and how they function during the Linux boot process.&lt;/p&gt;</description></item><item><title>OLLAMA: Revolutionizing Language Models</title><link>https://samarthya.me/posts/ollama-revolutionizing-language-models/</link><pubDate>Thu, 20 Jun 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ollama-revolutionizing-language-models/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/ollama-revolutionizing-language-models/ollama-1.jpg"&#10; srcset="https://samarthya.me/posts/ollama-revolutionizing-language-models/ollama-1.jpg 800w, https://samarthya.me/posts/ollama-revolutionizing-language-models/ollama-1.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/ollama-revolutionizing-language-models/ollama-1.jpg"&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Introduction&#10; &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;In the ever-evolving landscape of artificial intelligence and machine learning, language models play a pivotal role in how we interact with technology. One of the noteworthy advancements in this field is &lt;code&gt;OLLAMA&lt;/code&gt;, a cutting-edge platform designed to harness the power of large language models (LLMs). This blog delves into the history, purpose, and uses of OLLAMA, shedding light on its significance in the AI ecosystem.&lt;/p&gt;</description></item><item><title>Ansible Magic Variables: Useful Context Without Guesswork</title><link>https://samarthya.me/posts/ansible-magic-variables/</link><pubDate>Sat, 08 Jun 2024 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-magic-variables/</guid><description>&lt;p&gt;The first time I saw &lt;code&gt;hostvars&lt;/code&gt; inside a Jinja expression I thought Ansible had become much cleverer than I was. It was useful, but it also made the playbook harder to read. After a few such expressions, I went back and learned what Ansible calls magic variables.&lt;/p&gt;</description></item><item><title>Containers: A brief take</title><link>https://samarthya.me/posts/containers-a-brief-take/</link><pubDate>Fri, 17 May 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/containers-a-brief-take/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/containers-a-brief-take/dock12.jpg"&#10; srcset="https://samarthya.me/posts/containers-a-brief-take/dock12.jpg 800w, https://samarthya.me/posts/containers-a-brief-take/dock12.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/containers-a-brief-take/dock12.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The story of Linux containers is a tale of innovation and collaboration, with roots surprisingly deep in the history of the Linux operating system itself.&lt;/p&gt;</description></item><item><title>Git: Commit logs</title><link>https://samarthya.me/posts/git-commit-logs/</link><pubDate>Mon, 29 Apr 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/git-commit-logs/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/git-commit-logs/image-1-today.jpg"&#10; srcset="https://samarthya.me/posts/git-commit-logs/image-1-today.jpg 800w, https://samarthya.me/posts/git-commit-logs/image-1-today.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/git-commit-logs/image-1-today.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Every project has a story, and in the world of software development, that story is often told through commit logs. For those unfamiliar, Git is a version control system used for tracking changes in code. Commit logs are the detailed record of those changes, providing a crucial window into a project’s history.&lt;/p&gt;</description></item><item><title>Terraform (IaC)</title><link>https://samarthya.me/posts/terraform-iac/</link><pubDate>Wed, 27 Mar 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/terraform-iac/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/terraform-iac/iac1.jpg"&#10; srcset="https://samarthya.me/posts/terraform-iac/iac1.jpg 800w, https://samarthya.me/posts/terraform-iac/iac1.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/terraform-iac/iac1.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;IaC stands for &lt;strong&gt;Infrastructure as Code&lt;/strong&gt;. It’s a concept where you define and manage your infrastructure using code files instead of manually provisioning resources through a web interface or command-line tools. This approach offers several benefits like:&lt;/p&gt;</description></item><item><title>Ansible Configuration: Make the Defaults Explicit</title><link>https://samarthya.me/posts/ansible-configuration-basics/</link><pubDate>Sat, 16 Mar 2024 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-configuration-basics/</guid><description>&lt;p&gt;When I first used Ansible, I was happy that it worked without a configuration file. Later, the same playbook behaved differently depending on which folder I ran it from. That was the point at which I stopped treating the defaults as magic and created a small project-level &lt;code&gt;ansible.cfg&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Kafka Streams</title><link>https://samarthya.me/posts/kafka-streams/</link><pubDate>Mon, 26 Feb 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/kafka-streams/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/kafka-streams/stream-1.jpg"&#10; srcset="https://samarthya.me/posts/kafka-streams/stream-1.jpg 800w, https://samarthya.me/posts/kafka-streams/stream-1.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/kafka-streams/stream-1.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;In today’s data-driven world, the ability to process information in real-time is crucial. &lt;strong&gt;Kafka Streams&lt;/strong&gt; emerges as a powerful tool for building &lt;strong&gt;real-time applications and microservices&lt;/strong&gt; that leverage the &lt;strong&gt;Apache Kafka&lt;/strong&gt; distributed streaming platform.&lt;/p&gt;</description></item><item><title>What about `profile.d`</title><link>https://samarthya.me/posts/what-about-profile-d/</link><pubDate>Thu, 22 Feb 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/what-about-profile-d/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/what-about-profile-d/image-today-1.jpg"&#10; srcset="https://samarthya.me/posts/what-about-profile-d/image-today-1.jpg 800w, https://samarthya.me/posts/what-about-profile-d/image-today-1.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/what-about-profile-d/image-today-1.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The &lt;code&gt;/etc/profile.d&lt;/code&gt; directory, though seemingly simple, plays a vital role in the smooth operation of your Linux system. But how did this unassuming directory come to be, and how has it evolved over time? Let’s embark on a journey through the history of this essential component.&lt;/p&gt;</description></item><item><title>How a file write happens in Linux?</title><link>https://samarthya.me/posts/how-a-file-write-happens-in-linux/</link><pubDate>Wed, 14 Feb 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/how-a-file-write-happens-in-linux/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/how-a-file-write-happens-in-linux/gem1.jpg"&#10; srcset="https://samarthya.me/posts/how-a-file-write-happens-in-linux/gem1.jpg 800w, https://samarthya.me/posts/how-a-file-write-happens-in-linux/gem1.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/how-a-file-write-happens-in-linux/gem1.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Writing to a file on a device in Linux involves a fascinating journey through different layers of the system.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;💬 When you write to a file on a device, the inode provides context about the file’s location and properties, while the device driver translates that information into instructions for the specific device. The driver then interacts with the hardware to physically write the data to the storage medium. It’s a seamless collaboration between these two crucial elements that enables efficient and reliable data management across diverse devices in Linux.&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Writing to a file in Linux deep-dive</title><link>https://samarthya.me/posts/writing-to-a-file-in-linux-deep-dive/</link><pubDate>Wed, 14 Feb 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/writing-to-a-file-in-linux-deep-dive/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="600"&#10; src="https://samarthya.me/posts/writing-to-a-file-in-linux-deep-dive/gem5.jpg"&#10; srcset="https://samarthya.me/posts/writing-to-a-file-in-linux-deep-dive/gem5.jpg 800w, https://samarthya.me/posts/writing-to-a-file-in-linux-deep-dive/gem5.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/writing-to-a-file-in-linux-deep-dive/gem5.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Previously I gave a high level flow for how a process of simple file write looks like in a Linux environment &lt;a href="https://samarthya.me/posts/how-a-file-write-happens-in-linux/" &gt;here&lt;/a&gt;. In this blog, I will add more tech-details. Let’s say I want to write “Hello World” to a file &lt;code&gt;/home/samarthya/myfile.txt&lt;/code&gt; – What happens behind the scene?&lt;/p&gt;</description></item><item><title>Non root `podman` and `molecule`</title><link>https://samarthya.me/posts/non-root-podman-and-molecule/</link><pubDate>Tue, 13 Feb 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/non-root-podman-and-molecule/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Molecule testing an Ansible role through podman-docker and the user&amp;rsquo;s podman.socket, with containers running as non-root"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/non-root-podman-and-molecule/molecule_hu_c9c0ad608e5dc687.png"&#10; srcset="https://samarthya.me/posts/non-root-podman-and-molecule/molecule_hu_c9c0ad608e5dc687.png 800w, https://samarthya.me/posts/non-root-podman-and-molecule/molecule.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/non-root-podman-and-molecule/molecule.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;On my &lt;code&gt;Centos8&lt;/code&gt; I was facing issue when I was trying to run Molecule on a centos machine which is running &lt;code&gt;podman&lt;/code&gt; as a non root user. Also, I am using the driver – &lt;code&gt;docker&lt;/code&gt; and not &lt;code&gt;podman&lt;/code&gt;, so to overcome the aliases and references issues I have installed &lt;code&gt;podman-docker&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Getting Started with Ansible: From One Command to a Playbook</title><link>https://samarthya.me/posts/getting-started-with-ansible/</link><pubDate>Sun, 21 Jan 2024 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/getting-started-with-ansible/</guid><description>&lt;p&gt;I had been writing shell commands for every small infrastructure change. It worked, until I needed to repeat the same change on another machine and could no longer remember which command I had run first. That was my reason for starting with Ansible.&lt;/p&gt;</description></item><item><title>Python &amp; DB</title><link>https://samarthya.me/posts/python-db/</link><pubDate>Tue, 02 Jan 2024 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-db/</guid><description>&lt;p&gt;&lt;code&gt;SQLite3&lt;/code&gt; is a lightweight and easy-to-use database engine that is included with Python. It’s perfect for smaller-scale applications, prototyping, or standalone systems. Python’s &lt;code&gt;sqlite3&lt;/code&gt; module allows seamless integration with SQLite databases.&lt;/p&gt;</description></item><item><title>KeyStore vs Truststore</title><link>https://samarthya.me/posts/keystore-vs-truststore/</link><pubDate>Mon, 30 Oct 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/keystore-vs-truststore/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Stores in action: client and server each hold a keystore and a truststore; each presents its own certificate from the keystore and checks the other side against its truststore"&#10; width="491"&#10; height="341"&#10; src="https://samarthya.me/posts/keystore-vs-truststore/ksts.drawio.png"&#10; srcset="https://samarthya.me/posts/keystore-vs-truststore/ksts.drawio.png 800w, https://samarthya.me/posts/keystore-vs-truststore/ksts.drawio.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/keystore-vs-truststore/ksts.drawio.png"&gt;&lt;figcaption&gt;Stores in action&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;&lt;strong&gt;Keystore and Truststore&lt;/strong&gt; are both repositories for storing cryptographic keys and digital certificates. They are used in various security-related operations, particularly in the context of SSL/TLS encryption. While they serve similar purposes, they have different roles and are used in distinct ways:&lt;/p&gt;</description></item><item><title>PKCS12</title><link>https://samarthya.me/posts/pkcs12/</link><pubDate>Mon, 30 Oct 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/pkcs12/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="128"&#10; height="128"&#10; src="https://samarthya.me/posts/pkcs12/pkcs12.drawio.png"&#10; srcset="https://samarthya.me/posts/pkcs12/pkcs12.drawio.png 800w, https://samarthya.me/posts/pkcs12/pkcs12.drawio.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/pkcs12/pkcs12.drawio.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;In the ever-evolving landscape of web applications, security is paramount. Ensuring the &lt;code&gt;confidentiality&lt;/code&gt;, &lt;code&gt;integrity&lt;/code&gt;, and &lt;code&gt;authenticity&lt;/code&gt; of data exchanged over the internet has become a fundamental requirement. PKCS#12, or P12, stands as a crucial tool in achieving this objective.&lt;/p&gt;</description></item><item><title>Consul</title><link>https://samarthya.me/posts/consul/</link><pubDate>Tue, 10 Oct 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/consul/</guid><description>&lt;p&gt;Consul is an open-source software tool developed by HashiCorp, designed to provide a distributed system for configuration management, service discovery, and health checking of services in a modern microservices architecture. It is part of the broader ecosystem of HashiCorp tools for infrastructure and application automation.&lt;/p&gt;</description></item><item><title>GenAI</title><link>https://samarthya.me/posts/genai/</link><pubDate>Tue, 03 Oct 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/genai/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="300"&#10; height="300"&#10; src="https://samarthya.me/posts/genai/screenshot-2023-10-03-at-9.54.03-am.png"&#10; srcset="https://samarthya.me/posts/genai/screenshot-2023-10-03-at-9.54.03-am.png 800w, https://samarthya.me/posts/genai/screenshot-2023-10-03-at-9.54.03-am.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/genai/screenshot-2023-10-03-at-9.54.03-am.png"&gt;&lt;figcaption&gt;(thumbnail only — original image lost)&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Artificial Intelligence (AI) has revolutionized many aspects of our lives, from virtual assistants like Siri and Alexa to self-driving cars and personalized content recommendations. One of the exciting and rapidly evolving &lt;code&gt;subfields&lt;/code&gt; of AI is Generative AI, often referred to as GenAI. In this beginner-friendly blog post, I’ll explore the basics of Generative AI, its applications, and how it’s changing the way we interact with technology.&lt;/p&gt;</description></item><item><title>SNMP</title><link>https://samarthya.me/posts/snmp/</link><pubDate>Tue, 11 Jul 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/snmp/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="150"&#10; height="150"&#10; src="https://samarthya.me/posts/snmp/snmp.drawio.png"&#10; srcset="https://samarthya.me/posts/snmp/snmp.drawio.png 800w, https://samarthya.me/posts/snmp/snmp.drawio.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/snmp/snmp.drawio.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;SNMP (Simple Network Management Protocol) is a widely used protocol for managing and monitoring network devices, such as routers, switches, servers, and printers. It allows network administrators to gather information about network devices, monitor their performance, and manage their configuration remotely.&lt;/p&gt;</description></item><item><title>Gallery</title><link>https://samarthya.me/posts/gallery/</link><pubDate>Wed, 05 Jul 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/gallery/</guid><description>&lt;div class="width-patch"&gt;&lt;/div&gt;&#10;&lt;div id="gallery-4814c80fc91f20f9ebbc9be77e523536" class="gallery"&gt;&#10; &#10; &lt;img src="https://samarthya.me/posts/gallery/sunset-1.png" alt="" class="grid-w50" /&gt;&#10; &lt;img src="https://samarthya.me/posts/gallery/sunset.png" alt="" class="grid-w50" /&gt;&#10;&lt;/div&gt;</description></item><item><title>Letters in Sanskrit</title><link>https://samarthya.me/posts/letters-in-sanskrit/</link><pubDate>Fri, 30 Jun 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/letters-in-sanskrit/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="426"&#10; src="https://samarthya.me/posts/letters-in-sanskrit/screenshot-2023-06-30-at-3.08.17-pm.png"&#10; srcset="https://samarthya.me/posts/letters-in-sanskrit/screenshot-2023-06-30-at-3.08.17-pm.png 800w, https://samarthya.me/posts/letters-in-sanskrit/screenshot-2023-06-30-at-3.08.17-pm.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/letters-in-sanskrit/screenshot-2023-06-30-at-3.08.17-pm.png"&gt;&lt;/figure&gt;</description></item><item><title>Kernel</title><link>https://samarthya.me/posts/kernel/</link><pubDate>Thu, 29 Jun 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/kernel/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2048"&#10; height="1826"&#10; src="https://samarthya.me/posts/kernel/kernel-1_hu_f0d0a26a3bbd7386.png"&#10; srcset="https://samarthya.me/posts/kernel/kernel-1_hu_f0d0a26a3bbd7386.png 800w, https://samarthya.me/posts/kernel/kernel-1_hu_9cba927bf1020b05.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/kernel/kernel-1.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Kernel&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Introduction&#10; &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;The Linux &lt;code&gt;Kernel&lt;/code&gt; stands as the backbone of the Linux operating system, serving as a critical component that enables the system to interact with hardware and manage system resources efficiently. Understanding the history and evolution of the Linux Kernel is essential for comprehending the vast ecosystem of this open-source marvel.&lt;/p&gt;</description></item><item><title>Whale!</title><link>https://samarthya.me/posts/whale/</link><pubDate>Thu, 29 Jun 2023 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/whale/</guid><description>&lt;div class="width-patch"&gt;&lt;/div&gt;&#10;&lt;div id="gallery-3f4ed5f18e53f7cd9f5e2229c981300d" class="gallery"&gt;&#10; &#10; &lt;img src="https://samarthya.me/posts/whale/img_1187.jpg" alt="A whale's dark back arching out of the blue sea, white water along its side" class="grid-w50" /&gt;&#10; &lt;img src="https://samarthya.me/posts/whale/img_1188.jpg" alt="A whale blowing a misty spout as it surfaces, with a second whale alongside" class="grid-w50" /&gt;&#10; &lt;img src="https://samarthya.me/posts/whale/img_1189.jpg" alt="A whale's head breaking the surface, with a dorsal fin further away" class="grid-w50" /&gt;&#10; &lt;img src="https://samarthya.me/posts/whale/img_1190.jpg" alt="Two whales surfacing, one blowing a spout" class="grid-w50" /&gt;&#10; &lt;img src="https://samarthya.me/posts/whale/img_1191.jpg" alt="Two whales gliding just below the surface in a swirl of white water" class="grid-w50" /&gt;&#10; &lt;img src="https://samarthya.me/posts/whale/img_1198.jpg" alt="A dorsal fin cutting through the open sea beside a patch of white water" class="grid-w50" /&gt;&#10;&lt;/div&gt;</description></item><item><title>Network Com</title><link>https://samarthya.me/posts/network-com/</link><pubDate>Thu, 22 Jun 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/network-com/</guid><description>&lt;h2 class="relative group"&gt;Introduction&#10; &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;In the world of computer networks, communication between devices is crucial. To facilitate this communication, various protocols are used at different layers of the networking stack. One critical layer is the transport layer, which ensures reliable and efficient data transmission between hosts.&lt;/p&gt;</description></item><item><title>Understanding PCI DSS: Ensuring Security in Payment Card Transactions</title><link>https://samarthya.me/posts/understanding-pci-dss-ensuring-security-in-payment-card-transactions/</link><pubDate>Thu, 08 Jun 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/understanding-pci-dss-ensuring-security-in-payment-card-transactions/</guid><description>&lt;p&gt;The Payment Card Industry Data Security Standard (PCI DSS) is a set of security standards established to protect cardholder data and maintain a secure environment for payment card transactions. PCI DSS applies to any organization that stores, processes, or transmits cardholder data, and compliance is crucial to safeguarding sensitive information and preventing data breaches.&lt;/p&gt;</description></item><item><title>DAST</title><link>https://samarthya.me/posts/dast/</link><pubDate>Wed, 07 Jun 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/dast/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="193"&#10; height="187"&#10; src="https://samarthya.me/posts/dast/dast.drawio.png"&#10; srcset="https://samarthya.me/posts/dast/dast.drawio.png 800w, https://samarthya.me/posts/dast/dast.drawio.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/dast/dast.drawio.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;DAST&lt;/p&gt;&#10;&lt;p&gt;DAST stands for Dynamic Application Security Testing. It is a type of security testing that assesses the security of an application while it is running. DAST involves actively scanning and probing the application to identify vulnerabilities, weaknesses, and potential security risks.&lt;/p&gt;</description></item><item><title>भागवत गीता: Chapter</title><link>https://samarthya.me/posts/chapter-1/</link><pubDate>Thu, 01 Jun 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/chapter-1/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="300"&#10; height="300"&#10; src="https://samarthya.me/posts/chapter-1/screenshot-2023-06-01-at-10.34.00-am.png"&#10; srcset="https://samarthya.me/posts/chapter-1/screenshot-2023-06-01-at-10.34.00-am.png 800w, https://samarthya.me/posts/chapter-1/screenshot-2023-06-01-at-10.34.00-am.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/chapter-1/screenshot-2023-06-01-at-10.34.00-am.png"&gt;&lt;figcaption&gt;(thumbnail only — original image lost)&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;धृतराष्ट्र उवाच धर्मक्षेत्रे कुरुक्षेत्रे समवेता युयुत्सवः। मामकाः पाण्डवाश्चैव किमकुर्वत सञ्जय।।1.1।।&lt;/p&gt;&#10;&lt;p&gt;सञ्जय उवाच दृष्ट्वा तु पाण्डवानीकं व्यूढं दुर्योधनस्तदा। आचार्यमुपसङ्गम्य राजा वचनमब्रवीत्।।1.2।।&lt;/p&gt;</description></item><item><title>XEE: XML Entity Attack (XXE)</title><link>https://samarthya.me/posts/xee-xml-entity-attack-xxe/</link><pubDate>Wed, 24 May 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/xee-xml-entity-attack-xxe/</guid><description>&lt;p&gt;XML entity attack, also known as Billion Laughs Attack, is a type of security vulnerability that exploits the way XML parsers handle entity expansion. It can lead to denial-of-service (DoS) attacks by overwhelming the system’s resources with excessive entity expansions.&lt;/p&gt;</description></item><item><title>Devanagari:</title><link>https://samarthya.me/posts/devanagari/</link><pubDate>Wed, 10 May 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/devanagari/</guid><description>&lt;p&gt;Devanagari is a script that is used to write several languages spoken in the Indian subcontinent, including Hindi, Nepali, Marathi, and Sanskrit. The word “Devanagari” is derived from two Sanskrit words: “Dev” which means God or deity, and “Nagari” which means city or script. Thus, Devanagari is often referred to as the script of the gods.&lt;/p&gt;</description></item><item><title>x509: History</title><link>https://samarthya.me/posts/x509-history/</link><pubDate>Wed, 10 May 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/x509-history/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Timeline of X.509: public-key infrastructure in the late 1970s, version 1 in 1988, version 2 in 1993, version 3 with extensions and SAN in 1996, and today in SSL/TLS, code signing, email and IoT"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/x509-history/x509_hu_ceb1355aff397692.png"&#10; srcset="https://samarthya.me/posts/x509-history/x509_hu_ceb1355aff397692.png 800w, https://samarthya.me/posts/x509-history/x509.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/x509-history/x509.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;X.509 certificates have become a fundamental component of secure communication on the internet. They provide authentication, encryption, and integrity for various applications and protocols. In this blog post, we will delve into the intriguing history of X.509 certificates, tracing their origins, evolution, and significant milestones.&lt;/p&gt;</description></item><item><title>Tunnel: SSH</title><link>https://samarthya.me/posts/tunnel-ssh/</link><pubDate>Fri, 28 Apr 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/tunnel-ssh/</guid><description>&lt;p&gt;SSH tunneling is a powerful technique that allows you to securely tunnel network traffic between two endpoints. &lt;code&gt;SSH tunneling&lt;/code&gt; can be used for a variety of purposes, including bypassing network security restrictions, accessing resources on a remote network, and encrypting network traffic.&lt;/p&gt;</description></item><item><title>Domain Name System</title><link>https://samarthya.me/posts/domain-name-system/</link><pubDate>Thu, 27 Apr 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/domain-name-system/</guid><description>&lt;p&gt;DNS (Domain Name System) is a hierarchical and decentralized naming system that is used to translate human-readable domain names (such as google.com) into IP addresses that can be understood by machines. This process is called DNS name resolution, and it involves several steps.&lt;/p&gt;</description></item><item><title>cURL</title><link>https://samarthya.me/posts/curl/</link><pubDate>Wed, 12 Apr 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/curl/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Anatomy of a curl command: -X sets the method, -H a header, -d the body, then the URL"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/curl/curl_hu_78d41a7918bc7ca4.png"&#10; srcset="https://samarthya.me/posts/curl/curl_hu_78d41a7918bc7ca4.png 800w, https://samarthya.me/posts/curl/curl.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/curl/curl.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;cURL – A true companion&lt;/p&gt;</description></item><item><title>Ansible: Async &amp; Poll</title><link>https://samarthya.me/posts/ansible-async-poll/</link><pubDate>Thu, 30 Mar 2023 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-async-poll/</guid><description>&lt;p&gt;&lt;code&gt;Ansible&lt;/code&gt; is a powerful automation tool that can be used to manage the configuration and deployment of a large number of systems. It has a rich library of modules that can be used to perform a variety of tasks, from managing files and packages to deploying applications and configuring network devices.&lt;/p&gt;</description></item><item><title>Async/Poll &amp; Notify: Ansible Long running process</title><link>https://samarthya.me/posts/async-poll-notify-ansible-long-running-process/</link><pubDate>Fri, 24 Mar 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/async-poll-notify-ansible-long-running-process/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Ansible long-running task with async 300 and poll 60, registered job ID, async_status until finished, and debug output"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/async-poll-notify-ansible-long-running-process/as-async_hu_5a8baddeb9db8fb4.png"&#10; srcset="https://samarthya.me/posts/async-poll-notify-ansible-long-running-process/as-async_hu_5a8baddeb9db8fb4.png 800w, https://samarthya.me/posts/async-poll-notify-ansible-long-running-process/as-async.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/async-poll-notify-ansible-long-running-process/as-async.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;ASYNC &amp;amp; Poll&lt;/p&gt;</description></item><item><title>Scenario: Molecule</title><link>https://samarthya.me/posts/scenario-molecule/</link><pubDate>Thu, 23 Mar 2023 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/scenario-molecule/</guid><description>&lt;p&gt;A scenario in Molecule is a configuration that defines how a role should be tested. It consists of a set of instructions and parameters that determine how a role is provisioned, converged, and verified. The purpose of scenarios is to allow for flexibility in testing a role by allowing multiple testing configurations to be defined and executed. You can have as many scenarios as you like and Molecule will run one after the other.&lt;/p&gt;</description></item><item><title>Ansible Variables</title><link>https://samarthya.me/posts/ansible-variables-2/</link><pubDate>Wed, 15 Mar 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-variables-2/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Places to define Ansible variables: inline, playbook, role, inventory, command line and facts"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/ansible-variables-2/ans-vars_hu_28380e744336e13.png"&#10; srcset="https://samarthya.me/posts/ansible-variables-2/ans-vars_hu_28380e744336e13.png 800w, https://samarthya.me/posts/ansible-variables-2/ans-vars.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/ansible-variables-2/ans-vars.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Ansible Variables&lt;/p&gt;</description></item><item><title>A walk down the memory lane: Ladakh</title><link>https://samarthya.me/posts/a-walk-down-the-memory-lane-ladakh/</link><pubDate>Mon, 13 Mar 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/a-walk-down-the-memory-lane-ladakh/</guid><description>&lt;lite-youtube videoid="g0wPkfFrIpg" playlabel="g0wPkfFrIpg" params=""&gt;&lt;/lite-youtube&gt;&#10;&#10;&lt;lite-youtube videoid="qoeOHFVFyCI" playlabel="qoeOHFVFyCI" params=""&gt;&lt;/lite-youtube&gt;</description></item><item><title>Buildah: https://buildah.io/</title><link>https://samarthya.me/posts/buildah-https-buildah-io/</link><pubDate>Tue, 07 Mar 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/buildah-https-buildah-io/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://buildah.io/images/buildah.png"&#10; &gt;&lt;/figure&gt;&#10;&lt;p&gt;Buildah is a command-line tool used for building and managing OCI-compliant images. It is an alternative to Docker Build that provides greater flexibility and control over the image building process.&lt;/p&gt;</description></item><item><title>Podman Machine: How &amp; Why?</title><link>https://samarthya.me/posts/podman-machine-how-why/</link><pubDate>Tue, 07 Mar 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/podman-machine-how-why/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Podman Machine: containers run by Podman inside a VM on your local system or a remote server, with the commands to create, start and run"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/podman-machine-how-why/podman_hu_d5df1b0dd90194af.png"&#10; srcset="https://samarthya.me/posts/podman-machine-how-why/podman_hu_d5df1b0dd90194af.png 800w, https://samarthya.me/posts/podman-machine-how-why/podman.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/podman-machine-how-why/podman.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Podman&lt;/p&gt;</description></item><item><title>`lookup`: Ansible</title><link>https://samarthya.me/posts/lookup-ansible/</link><pubDate>Tue, 28 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/lookup-ansible/</guid><description>&lt;p&gt;Ansible’s &lt;code&gt;lookup&lt;/code&gt; plugin allows you to access data from a variety of sources, including files, templates, and external programs. You can use &lt;code&gt;lookup&lt;/code&gt; to fetch data dynamically at runtime and use it in your playbooks and roles.&lt;/p&gt;</description></item><item><title>Python Virtual Enviroments</title><link>https://samarthya.me/posts/venvansible/</link><pubDate>Tue, 28 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/venvansible/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Python virtual environment steps: create, activate, install, freeze to requirements.txt, and recreate"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/venvansible/an-lint-1_hu_c5d8a3d7cb9aaa30.png"&#10; srcset="https://samarthya.me/posts/venvansible/an-lint-1_hu_c5d8a3d7cb9aaa30.png 800w, https://samarthya.me/posts/venvansible/an-lint-1.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/venvansible/an-lint-1.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Using a virtual environment like venv is a best practice when working with Python-based projects like Ansible, Molecule, and Playbooks.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Continuing from the &lt;a href="https://samarthya.me/posts/venv-ansible/" &gt;blog&lt;/a&gt;, &lt;code&gt;Virtual environments&lt;/code&gt; are isolated Python environments that allow you to manage dependencies separately for each project, providing a controlled and reproducible environment for development, testing, and production.&lt;/p&gt;</description></item><item><title>VENV: Ansible</title><link>https://samarthya.me/posts/venv-ansible/</link><pubDate>Mon, 27 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/venv-ansible/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Steps to run Ansible and Molecule in a Python virtual environment on CentOS 7"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/venv-ansible/an-venv_hu_2084f4df6bf85296.png"&#10; srcset="https://samarthya.me/posts/venv-ansible/an-venv_hu_2084f4df6bf85296.png 800w, https://samarthya.me/posts/venv-ansible/an-venv.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/venv-ansible/an-venv.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Ansible and Molecule are popular tools for configuration management and testing in the world of DevOps. To avoid conflicts between different projects and their dependencies, it is recommended to use a virtual environment for each project. In this blog post, we’ll show you how to set up and use a virtual environment using Python’s built-in &lt;code&gt;venv&lt;/code&gt; module on &lt;code&gt;macOS&lt;/code&gt; and &lt;code&gt;CentOS 7&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>PAT: Personal Access Token</title><link>https://samarthya.me/posts/pat-personal-access-token/</link><pubDate>Fri, 24 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/pat-personal-access-token/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Steps for a Git personal access token. Generate it, keep it safe, configure git, use the macOS keychain credential helper, then push"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/pat-personal-access-token/an-lint_hu_23adda14bfe86d6e.png"&#10; srcset="https://samarthya.me/posts/pat-personal-access-token/an-lint_hu_23adda14bfe86d6e.png 800w, https://samarthya.me/posts/pat-personal-access-token/an-lint.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/pat-personal-access-token/an-lint.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Using Git Personal Access Tokens (PATs) is a secure and convenient way to authenticate with Git service providers. In this blog post, we will discuss how to use Git PATs on both Mac and CentOS 7 systems.&lt;/p&gt;</description></item><item><title>Ansible Configuration: `ansible.cfg`</title><link>https://samarthya.me/posts/ansible-configuration-ansible-cfg/</link><pubDate>Thu, 23 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-configuration-ansible-cfg/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Common ansible.cfg settings: inventory, remote_user, become, become_user, become_method, library, forks and file location"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/ansible-configuration-ansible-cfg/an-config_hu_282d8824440c703f.png"&#10; srcset="https://samarthya.me/posts/ansible-configuration-ansible-cfg/an-config_hu_282d8824440c703f.png 800w, https://samarthya.me/posts/ansible-configuration-ansible-cfg/an-config.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/ansible-configuration-ansible-cfg/an-config.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;&lt;code&gt;ansible.cfg&lt;/code&gt; is the main configuration file for Ansible. It is used to customize Ansible’s behavior and includes a wide range of options, including the location of inventory files, the default SSH user, and the path to the module library.&lt;/p&gt;</description></item><item><title>Handshake</title><link>https://samarthya.me/posts/handshake/</link><pubDate>Wed, 22 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/handshake/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="SSL/TLS handshake between client and server: Client Hello, Server Hello, Certificate, optional Server Key Exchange and Certificate Request, Client Key Exchange, Certificate Verify, and Finished from both sides"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/handshake/ssl-handshake_hu_22ec4d1d8bfb46b.png"&#10; srcset="https://samarthya.me/posts/handshake/ssl-handshake_hu_22ec4d1d8bfb46b.png 800w, https://samarthya.me/posts/handshake/ssl-handshake.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/handshake/ssl-handshake.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;The SSL/TLS handshake is the initial communication between the client and server in a SSL/TLS connection. The purpose of the handshake is to establish a secure connection between the client and server and to negotiate the cryptographic parameters for the session.&lt;/p&gt;</description></item><item><title>SSL/TLS</title><link>https://samarthya.me/posts/ssl-tls/</link><pubDate>Wed, 22 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ssl-tls/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Five stages of SSL/TLS: handshake, authentication, key exchange, encryption and integrity"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/ssl-tls/ssl-tls_hu_8c94ff6051d3b3b2.png"&#10; srcset="https://samarthya.me/posts/ssl-tls/ssl-tls_hu_8c94ff6051d3b3b2.png 800w, https://samarthya.me/posts/ssl-tls/ssl-tls.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/ssl-tls/ssl-tls.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Secure Socket Layer and its successor TLS (Transport Layer Security) are cryptographic protocols that provide encryption, integrity, and authentication for network communication. They are commonly used to secure online transactions, such as those made in online banking, e-commerce, and other sensitive online transactions.&lt;/p&gt;</description></item><item><title>Trust Store: Apache Kafka</title><link>https://samarthya.me/posts/trust-store-apache-kafka/</link><pubDate>Wed, 22 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/trust-store-apache-kafka/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Keystore compared with truststore: what each holds, what it answers, who uses it and how it is protected"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/trust-store-apache-kafka/ks-store_hu_11039215fe5c1ec1.png"&#10; srcset="https://samarthya.me/posts/trust-store-apache-kafka/ks-store_hu_11039215fe5c1ec1.png 800w, https://samarthya.me/posts/trust-store-apache-kafka/ks-store.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/trust-store-apache-kafka/ks-store.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;In &lt;code&gt;Apache Kafka&lt;/code&gt;, &lt;code&gt;trust store&lt;/code&gt; and &lt;code&gt;keystore&lt;/code&gt; are essential components for ensuring secure communication between brokers, clients, and other services. In this blog post, we will discuss the concept of trust store and keystore in detail, their importance, and why we use them in Apache Kafka.&lt;/p&gt;</description></item><item><title>Testinfra</title><link>https://samarthya.me/posts/testinfra/</link><pubDate>Tue, 14 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/testinfra/</guid><description>&lt;p&gt;Testinfra is a Python-based framework for infrastructure testing. It allows you to write tests for your infrastructure and verify that everything is working as expected. Testinfra is particularly useful for infrastructure-as-code and continuous integration and continuous delivery (CI/CD) scenarios.&lt;/p&gt;</description></item><item><title>Ansible: A thought</title><link>https://samarthya.me/posts/ansible-a-thought/</link><pubDate>Wed, 08 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-a-thought/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt=""&#10; src="https://www.ansible.com/hubfs/Logo-Red_Hat-Ansible-A-Reverse-SVG.svg"&#10; &gt;&lt;/figure&gt;&#10;&lt;p&gt;Ansible is an open-source software platform for automating and managing IT infrastructure. It provides a simple and easy-to-learn method for automating and managing various IT processes such as provisioning, configuration management, and application deployment. Ansible uses YAML (Yet Another Markup Language) and playbooks written in YAML, which are a series of instructions that specify what actions need to be performed.&lt;/p&gt;</description></item><item><title>Ansible: Building Inventory</title><link>https://samarthya.me/posts/ansible-building-inventory/</link><pubDate>Wed, 08 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-building-inventory/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="292"&#10; src="https://samarthya.me/posts/ansible-building-inventory/an-inventory.png"&#10; srcset="https://samarthya.me/posts/ansible-building-inventory/an-inventory.png 800w, https://samarthya.me/posts/ansible-building-inventory/an-inventory.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/ansible-building-inventory/an-inventory.png"&gt;&lt;/figure&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; The blog is adapted from the information available &lt;a href="https://docs.ansible.com/ansible/latest/getting_started/get_started_inventory.html#get-started-inventory" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&#10;— &lt;a href="https://docs.ansible.com/ansible/" target="_blank" rel="noreferrer"&gt;https://docs.ansible.com/ansible/&lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;An Ansible inventory is a file that defines the hosts and groups of hosts that Ansible will manage. Inventory files are used to define the nodes (hosts) that will be managed by Ansible. These files can be in different formats, including INI and YAML.&lt;/p&gt;</description></item><item><title>Ansible: SSH Access</title><link>https://samarthya.me/posts/ansible-ssh-access/</link><pubDate>Wed, 08 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-ssh-access/</guid><description>&lt;p&gt;To set up SSH access for inventory hosts in &lt;code&gt;Ansible&lt;/code&gt;, follow these steps:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Generate an SSH key pair&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;ssh-keygen -t rsa&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Copy the public key to the remote host&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;ssh-copy-id user@hostname&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Test the connection to the remote host:&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;ssh user@hostname&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Modify the &lt;code&gt;ansible.cfg&lt;/code&gt; file to set the remote user, if necessary.&lt;/li&gt;&#10;&lt;li&gt;Add the remote host to the Ansible inventory file.&lt;/li&gt;&#10;&lt;li&gt;Run the Ansible playbook to execute the desired tasks on the remote host.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Note: If you need to access multiple remote hosts, repeat steps 2-5 for each host.&lt;/p&gt;</description></item><item><title>Ansible: Templates</title><link>https://samarthya.me/posts/ansible-templates/</link><pubDate>Wed, 08 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-templates/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="How an Ansible template becomes a config file: a Jinja2 template and variables are rendered and copied to the host"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/ansible-templates/an-template_hu_52d5b4a217590b32.png"&#10; srcset="https://samarthya.me/posts/ansible-templates/an-template_hu_52d5b4a217590b32.png 800w, https://samarthya.me/posts/ansible-templates/an-template.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/ansible-templates/an-template.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Templates in &lt;code&gt;Ansible&lt;/code&gt; are a type of file that contain configuration information or scripts written in a &lt;code&gt;Jinja2&lt;/code&gt; templating language.&lt;/p&gt;</description></item><item><title>Ansible: Variables</title><link>https://samarthya.me/posts/ansible-variables/</link><pubDate>Wed, 08 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-variables/</guid><description>&lt;p&gt;Ansible Variables are used to store values that can be reused throughout an Ansible playbook. They can be set in a number of ways, including being passed as command-line options, defined in an inventory file, or defined in a playbook itself. Variables can be used to store values such as file paths, user-defined parameters, and results of tasks.&lt;/p&gt;</description></item><item><title>Ansible: Structure of a playbook?</title><link>https://samarthya.me/posts/ansible-structure-of-a-playbook/</link><pubDate>Tue, 07 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-structure-of-a-playbook/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="An Ansible playbook made of inventory, variables, roles and tasks, beside a short example playbook"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/ansible-structure-of-a-playbook/ansible_hu_de247ee45393f43d.png"&#10; srcset="https://samarthya.me/posts/ansible-structure-of-a-playbook/ansible_hu_de247ee45393f43d.png 800w, https://samarthya.me/posts/ansible-structure-of-a-playbook/ansible.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/ansible-structure-of-a-playbook/ansible.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;The structure of an &lt;code&gt;Ansible playbook&lt;/code&gt; includes the following elements:&lt;/p&gt;</description></item><item><title>Python: Using flask</title><link>https://samarthya.me/posts/python-using-flask/</link><pubDate>Tue, 07 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-using-flask/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="600"&#10; height="226"&#10; src="https://samarthya.me/posts/python-using-flask/hello-world.png"&#10; srcset="https://samarthya.me/posts/python-using-flask/hello-world.png 800w, https://samarthya.me/posts/python-using-flask/hello-world.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/python-using-flask/hello-world.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Building a simple hello world using &lt;code&gt;Flask&lt;/code&gt;. (The code is available &lt;a href="https://github.com/samarthya/pysample-three" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;)&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;What is Flask and why use it?&#10; &lt;div id="what-is-flask-and-why-use-it" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-flask-and-why-use-it" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Flask is a lightweight web framework for Python, but there are certain cases when you may want to consider using an alternative. Here are some of the cases when you might not want to use Flask:&lt;/p&gt;</description></item><item><title>Ansible: Refresher</title><link>https://samarthya.me/posts/ansible-refresher/</link><pubDate>Thu, 02 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-refresher/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Seven reasons to use Ansible: simple, agentless, idempotent, modular, integrates with other tools, large community, open source"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/ansible-refresher/an-refresh_hu_8c3c6e601ccfcb3.png"&#10; srcset="https://samarthya.me/posts/ansible-refresher/an-refresh_hu_8c3c6e601ccfcb3.png 800w, https://samarthya.me/posts/ansible-refresher/an-refresh.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/ansible-refresher/an-refresh.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;What is Ansible?&#10; &lt;div id="what-is-ansible" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-ansible" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Ansible is an open-source software platform for automating and configuring computer systems. It allows you to manage, deploy and orchestrate applications, infrastructure, and network devices using a simple, human-readable language. Ansible uses a push-based architecture, where tasks are executed on remote hosts from a central control machine, and does not require agents to be installed on target systems.&lt;/p&gt;</description></item><item><title>Python vs Bash</title><link>https://samarthya.me/posts/python-vs-bash/</link><pubDate>Thu, 02 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-vs-bash/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Python compared with Bash: kind of language, what each is best for, libraries, and when to choose each"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/python-vs-bash/pycomp_hu_9aa880e447e5b1c6.png"&#10; srcset="https://samarthya.me/posts/python-vs-bash/pycomp_hu_9aa880e447e5b1c6.png 800w, https://samarthya.me/posts/python-vs-bash/pycomp.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/python-vs-bash/pycomp.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Python and bash are both programming languages, but they have different purposes and use cases.&lt;/p&gt;</description></item><item><title>Python: `argparse`</title><link>https://samarthya.me/posts/python-argparse/</link><pubDate>Thu, 02 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-argparse/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Five steps with argparse: import argparse, create an ArgumentParser, add_argument, parse_args, then use args"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/python-argparse/pyarg_hu_ddd1be7c2c44493c.png"&#10; srcset="https://samarthya.me/posts/python-argparse/pyarg_hu_ddd1be7c2c44493c.png 800w, https://samarthya.me/posts/python-argparse/pyarg.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/python-argparse/pyarg.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;The &lt;code&gt;argparse&lt;/code&gt; module is a powerful tool for parsing command line arguments in Python. It provides an easy way to define the arguments required by your script and handle the input data passed to your script by the user.&lt;/p&gt;</description></item><item><title>Python: Polymorphism</title><link>https://samarthya.me/posts/python-polymorphism/</link><pubDate>Thu, 02 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-polymorphism/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Animal base class with make_sound, and Dog and Cat subclasses returning Bark and Meow"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/python-polymorphism/pypoly_hu_80a53db7deb7e932.png"&#10; srcset="https://samarthya.me/posts/python-polymorphism/pypoly_hu_80a53db7deb7e932.png 800w, https://samarthya.me/posts/python-polymorphism/pypoly.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/python-polymorphism/pypoly.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Polymorphism is a key feature of Object Oriented Programming that allows objects of different classes to be treated as objects of a common class. It is done by implementing the same methods across all classes and making use of inheritance, interfaces and overloading.&lt;/p&gt;</description></item><item><title>Python: When not to use it?</title><link>https://samarthya.me/posts/python-when-not-to-use-it/</link><pubDate>Thu, 02 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-when-not-to-use-it/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Five cases where Python is not the best choice: performance-critical code, mobile apps, low-level systems, strict real-time, and tiny one-off scripts"&#10; width="1200"&#10; height="630"&#10; src="https://samarthya.me/posts/python-when-not-to-use-it/nopy_hu_f610f1f1a8811213.png"&#10; srcset="https://samarthya.me/posts/python-when-not-to-use-it/nopy_hu_f610f1f1a8811213.png 800w, https://samarthya.me/posts/python-when-not-to-use-it/nopy.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/python-when-not-to-use-it/nopy.png"&gt;&lt;figcaption&gt;Recreated in October 2026 from the post; the original image was lost&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Python is a versatile and widely-used programming language, but there are certain scenarios when it may not be the best choice. Here are some examples of when not to use Python:&lt;/p&gt;</description></item><item><title>Python: Sample Project</title><link>https://samarthya.me/posts/python-sample-project/</link><pubDate>Wed, 01 Feb 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-sample-project/</guid><description>&lt;p&gt;Python is a high-level programming language that is widely used for web development, machine learning, scientific computing and more. In this blog post, we will be identify (and build) how to develop a simple python project with unit testing, publishing it finally as a binary and distribute it as source.&lt;/p&gt;</description></item><item><title>Python: Class</title><link>https://samarthya.me/posts/python-class/</link><pubDate>Tue, 31 Jan 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-class/</guid><description>&lt;p&gt;Learning to write Python code? A Python class is a blueprint for creating objects.&lt;/p&gt;&#10;&lt;p&gt;It defines a set of attributes and methods that can be used to manipulate those attributes. Here’s an example of a simple Python class:&lt;/p&gt;</description></item><item><title>Python: Decorators</title><link>https://samarthya.me/posts/python-decorators/</link><pubDate>Tue, 31 Jan 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-decorators/</guid><description>&lt;p&gt;Let’s learn about decorators &lt;code&gt;@iamdecorator&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Decorators are used to modify or extend the behavior of functions and classes. They are useful for wrapping a function or class with additional functionality, such as logging, access control, performance measurement, or adding attributes. This can reduce code duplication, increase readability and maintainability.&lt;/p&gt;</description></item><item><title>Python: Inheritance</title><link>https://samarthya.me/posts/python-inheritance/</link><pubDate>Tue, 31 Jan 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-inheritance/</guid><description>&lt;p&gt;Inheritance is a mechanism in object-oriented programming (OOP) that allows you to create new classes that are derived from existing classes. The derived class inherits attributes and behaviors from the base class, and can also have additional attributes and behaviors of its own.&lt;/p&gt;</description></item><item><title>Python: Interface</title><link>https://samarthya.me/posts/python-interface/</link><pubDate>Tue, 31 Jan 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-interface/</guid><description>&lt;p&gt;n Python, unlike some other programming languages, there is no explicit syntax for defining interfaces. However, you can create a similar concept by defining an abstract base class (ABC) that contains abstract methods. An abstract method is a method that is declared in a base class, but has no implementation. Subclasses of the abstract base class must implement these abstract methods.&lt;/p&gt;</description></item><item><title>Python: Multi-Args</title><link>https://samarthya.me/posts/python-multi-args/</link><pubDate>Tue, 31 Jan 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-multi-args/</guid><description>&lt;p&gt;In Python, you can define a function with a variable number of arguments using the &lt;code&gt;*&lt;/code&gt; and &lt;code&gt;**&lt;/code&gt; syntax in the function definition.&lt;/p&gt;&#10;&lt;p&gt;A single asterisk &lt;code&gt;*&lt;/code&gt; in the function definition is used to capture positional arguments passed to the function as a tuple.&lt;/p&gt;</description></item><item><title>Python: Pointers &amp; Reference</title><link>https://samarthya.me/posts/python-pointers-reference/</link><pubDate>Tue, 31 Jan 2023 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/python-pointers-reference/</guid><description>&lt;p&gt;In Python, there are no explicit pointers like in some other programming languages. In python everything is an object and references to objects are stored in variables.&lt;/p&gt;&#10;&lt;p&gt;When you assign an object to a variable, the variable stores a reference to the object in memory. This means that changes to the object will be reflected in all variables that reference that object.&lt;/p&gt;</description></item><item><title>Apache Karaf</title><link>https://samarthya.me/posts/apache-karaf/</link><pubDate>Wed, 21 Dec 2022 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/apache-karaf/</guid><description>&lt;p&gt;Apache Karaf - I had only heard of it and never had practical exposure to this technology. Main questions in my mind were - What purpose does it serves? and Who uses it?&lt;/p&gt;</description></item><item><title>AWK</title><link>https://samarthya.me/posts/awk/</link><pubDate>Mon, 05 Dec 2022 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/awk/</guid><description>&lt;p&gt;&lt;code&gt;awk&lt;/code&gt; is an interpreted language.&lt;/p&gt;&#10;&lt;p&gt;The basic function of &lt;code&gt;awk&lt;/code&gt; is to search files for lines that contains certain patterns. When the input line matches the pattern(s), &lt;code&gt;awk&lt;/code&gt; performs specified actions on that line.&lt;/p&gt;</description></item><item><title>PKI</title><link>https://samarthya.me/posts/pki/</link><pubDate>Fri, 18 Nov 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/pki/</guid><description>&lt;p&gt;PKI is the core of security for most organizations, and at its heart is a couple of keys that together allows the encryption/decryption of the traffic exchanged.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Public key to encrypt a message.&lt;/li&gt;&#10;&lt;li&gt;Private key to decrypt a message.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Keys can be used by devices, people or applications&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The challenge of any symmetric or asymmetric encryption is the MIM (man in the middle) attack. How does one validate the keys is really from the genuine entity or someone who has hijacked the conduit.&lt;/p&gt;</description></item><item><title>Specialist in the Emotional Memory #EQ</title><link>https://samarthya.me/posts/specialist-in-the-emotional-memory-eq/</link><pubDate>Thu, 03 Nov 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/specialist-in-the-emotional-memory-eq/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="451"&#10; height="179"&#10; src="https://samarthya.me/posts/specialist-in-the-emotional-memory-eq/eq.png"&#10; srcset="https://samarthya.me/posts/specialist-in-the-emotional-memory-eq/eq.png 800w, https://samarthya.me/posts/specialist-in-the-emotional-memory-eq/eq.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/specialist-in-the-emotional-memory-eq/eq.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The unconscious opinions are the emotional memories, I just loved this statement.&lt;/p&gt;</description></item><item><title>Tip #Maven</title><link>https://samarthya.me/posts/tip-maven/</link><pubDate>Wed, 19 Oct 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/tip-maven/</guid><description>&lt;p&gt;A decent developer trick is to ensure your &lt;code&gt;maven&lt;/code&gt; points to the right &lt;code&gt;JAVA&lt;/code&gt; version, and if you have freshly installed maven it will be pointing to the default available.&lt;/p&gt;</description></item><item><title>Zookeeper mTLS</title><link>https://samarthya.me/posts/zookeeper-mtls/</link><pubDate>Fri, 07 Oct 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/zookeeper-mtls/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A bad way to spend one’s Friday, but at least I am ending it on a good note.&#10;— ~ Friday guru&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;I was struggling with the mTLS configuration for zookeeper configuration and somehow no matter what I do I kept getting an error as below&lt;/p&gt;</description></item><item><title>Hashicorp vault</title><link>https://samarthya.me/posts/hashicorp-vault/</link><pubDate>Tue, 13 Sep 2022 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/hashicorp-vault/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Diagram from the HashiCorp documentation showing the layers of Vault"&#10; src="https://content.hashicorp.com/api/assets?product=vault&amp;amp;version=refs%2Fheads%2Frelease%2F1.11.x&amp;amp;asset=website%2Fpublic%2Fimg%2Flayers.png&amp;amp;width=1506&amp;amp;height=841"&#10; &gt;&lt;/figure&gt;&#10;&lt;hr&gt;&#10;&lt;img src="screen-shot-2022-09-12-at-3.44.31-pm.png" alt="HashiCorp Vault overview: clients use the Vault API, which provides identity-based authentication, encryption and secrets management" class="grid-w100" /&gt;&#10;&lt;blockquote&gt;&lt;p&gt;&amp;ldquo;HashiCorp Vault is an identity-based secrets and encryption management system.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Static IP’s in QEMU VM’s</title><link>https://samarthya.me/posts/static-ips-in-qemu-vms/</link><pubDate>Thu, 25 Aug 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/static-ips-in-qemu-vms/</guid><description>&lt;p&gt;Continuing from where I left in the &lt;a href="https://samarthya.me/posts/running-qemu-based-vms-on-osx-m1/" &gt;blog&lt;/a&gt; before. If you are using looking to configure a static IP for your machines (may be your use case is similar to mine) this blog might be useful for you.&lt;/p&gt;</description></item><item><title>Running QEMu based VM’s on OSX M1</title><link>https://samarthya.me/posts/running-qemu-based-vms-on-osx-m1/</link><pubDate>Wed, 24 Aug 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/running-qemu-based-vms-on-osx-m1/</guid><description>&lt;p&gt;&lt;code&gt;A popular choice in the OSS QEMu is an open source machine emulator (system emulation/usermode emulation&lt;/code&gt;) and virtualizer. Since I recently moved to Apple M1 silicone, I had not option of sticking to VirtualBox and was forced to relook at my options.&lt;/p&gt;</description></item><item><title>Vagrant-OSX</title><link>https://samarthya.me/posts/vagrant-osx-m1-2/</link><pubDate>Fri, 19 Aug 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/vagrant-osx-m1-2/</guid><description>&lt;p&gt;In the previous &lt;a href="https://samarthya.me/posts/vagrant-osx-m1/" &gt;blog&lt;/a&gt;, I was left with the error that had little information for me to debug. I realized since I migrated most of the files from my previous laptop it might be causing an issue.&lt;/p&gt;</description></item><item><title>Vagrant OSX</title><link>https://samarthya.me/posts/vagrant-osx-m1/</link><pubDate>Thu, 18 Aug 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/vagrant-osx-m1/</guid><description>&lt;p&gt;Having just bought an M1 – MacBook Pro the issue are mounting. The premier challenge was to get my Vagrant boxes configured with provider &lt;code&gt;virtualbox&lt;/code&gt; to run.&lt;/p&gt;&#10;&lt;p&gt;Since VirtualBox clearly calls it out “no support”&lt;/p&gt;</description></item><item><title>Weekend</title><link>https://samarthya.me/posts/weekend/</link><pubDate>Thu, 11 Aug 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/weekend/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="800"&#10; height="800"&#10; src="https://samarthya.me/posts/weekend/output.gif"&#10; srcset="https://samarthya.me/posts/weekend/output.gif 800w, https://samarthya.me/posts/weekend/output.gif 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/weekend/output.gif"&gt;&lt;/figure&gt;</description></item><item><title>G-Power</title><link>https://samarthya.me/posts/g-power/</link><pubDate>Thu, 04 Aug 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/g-power/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2168"&#10; height="3810"&#10; src="https://samarthya.me/posts/g-power/the-new-one-2_hu_a8d1e3b58273dc28.png"&#10; srcset="https://samarthya.me/posts/g-power/the-new-one-2_hu_a8d1e3b58273dc28.png 800w, https://samarthya.me/posts/g-power/the-new-one-2_hu_11a20e2220b5c286.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/g-power/the-new-one-2.png"&gt;&lt;/figure&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="3024"&#10; height="1590"&#10; src="https://samarthya.me/posts/g-power/the-new-one_hu_762aabf629fd1944.png"&#10; srcset="https://samarthya.me/posts/g-power/the-new-one_hu_762aabf629fd1944.png 800w, https://samarthya.me/posts/g-power/the-new-one_hu_fc926992f104370d.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/g-power/the-new-one.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;01&lt;/p&gt;</description></item><item><title>Gradle</title><link>https://samarthya.me/posts/gradle/</link><pubDate>Tue, 19 Jul 2022 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/gradle/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Open source build automation tool&lt;/li&gt;&#10;&lt;li&gt;FLEXIBLE and builds any type of software&lt;/li&gt;&#10;&lt;li&gt;Run on JVM and must have a JDK installed to use it.&lt;/li&gt;&#10;&lt;li&gt;Gradle models its buils as DAGs pf tasks.&lt;/li&gt;&#10;&lt;li&gt;Build is graph of tasks&lt;/li&gt;&#10;&lt;li&gt;Tasks consists of&#10;&lt;ul&gt;&#10;&lt;li&gt;Actions&lt;/li&gt;&#10;&lt;li&gt;Inputs&lt;/li&gt;&#10;&lt;li&gt;Outputs&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://docs.gradle.org/current/userguide/base_plugin.html#sec:base_tasks" target="_blank" rel="noreferrer"&gt;Lifecycle Tasks&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Clean&lt;/li&gt;&#10;&lt;li&gt;Check&lt;/li&gt;&#10;&lt;li&gt;Assemble&lt;/li&gt;&#10;&lt;li&gt;Build&lt;/li&gt;&#10;&lt;li&gt;Build Configuration&lt;/li&gt;&#10;&lt;li&gt;Clean Task&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Gradle evaluates and executes build scripts in &lt;a href="https://docs.gradle.org/current/userguide/build_lifecycle.html#build_lifecycle" target="_blank" rel="noreferrer"&gt;three phases&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Initialization&lt;/li&gt;&#10;&lt;li&gt;Configuration&lt;/li&gt;&#10;&lt;li&gt;Execution&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Naming Convention Policy for Kafka topics</title><link>https://samarthya.me/posts/naming-convention-policy-for-kafka-topics/</link><pubDate>Wed, 13 Jul 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/naming-convention-policy-for-kafka-topics/</guid><description>&lt;p&gt;Creating a &lt;strong&gt;Topic&lt;/strong&gt; in a kafka-cluster is easy and well documented for the &lt;code&gt;kafka-topics.sh&lt;/code&gt; or even the official API documentation.&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bin/kafka-topics.sh --help&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;The complexity arises, when you are trying to enforce a standard way of defining topic naming. There are many ways to identify the &lt;strong&gt;right convention&lt;/strong&gt; based on your need, but to enforce such a topic convention while you are creating one is explained in this 5 steps blog.&lt;/p&gt;</description></item><item><title>Go Modules</title><link>https://samarthya.me/posts/go-modules/</link><pubDate>Thu, 07 Jul 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/go-modules/</guid><description>&lt;p&gt;If you are like me and getting errors while trying to compile your go lang code without having a &lt;code&gt;go.mod&lt;/code&gt; in &lt;code&gt;v1.18&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;package src is not in GOROOT (/usr/local/Cellar/go/1.18.3/libexec/src/src)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Remember you have overlooked a basic change that happened post &lt;code&gt;1.16&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Ansible: On Windows 10 Pro</title><link>https://samarthya.me/posts/ansible-on-windows-10-pro/</link><pubDate>Thu, 12 May 2022 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-on-windows-10-pro/</guid><description>&lt;p&gt;Life is bringing it own challenges as I have moved to the United States of America. One of the immediate tech challenge has been using the loaner windows box and still be productive.&lt;/p&gt;</description></item><item><title>JMX: Monitoring and Managing Kafka</title><link>https://samarthya.me/posts/jmx-monitoring-and-managing-kafka/</link><pubDate>Fri, 22 Apr 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/jmx-monitoring-and-managing-kafka/</guid><description>&lt;blockquote&gt;&lt;p&gt;💬 The Java virtual machine (Java VM) has built-in instrumentation that enables you to monitor and manage it using the Java Management Extensions (JMX) technology.&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;To enable and configure monitoring of Java VM for any java-application using the ready-to-use JMX agent, you must set certain system properties when you start the Java VM.&lt;/p&gt;</description></item><item><title>Renewing a driver license</title><link>https://samarthya.me/posts/renewing-a-driver-license/</link><pubDate>Mon, 04 Apr 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/renewing-a-driver-license/</guid><description>&lt;p&gt;I never thought the process could be this simple in the year 2022. Thanks to Mr. Gadkari for taking the initiative that the states (some) have already implemented.&lt;/p&gt;&#10;&lt;p&gt;It starts of by signing on the portal – &lt;a href="https://sarathi.parivahan.gov.in/sarathiservice/stateSelection.do" target="_blank" rel="noreferrer"&gt;https://sarathi.parivahan.gov.in/sarathiservice/stateSelection.do&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Ansible: Notes</title><link>https://samarthya.me/posts/ansible-notes/</link><pubDate>Fri, 04 Mar 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ansible-notes/</guid><description>&lt;div&#10; id="accordion-07a1fe5e372c56b6e0c0aa29f52abe3b"&#10; class="border border-neutral-200 dark:border-neutral-700 rounded-lg overflow-hidden"&#10; data-accordion="collapse"&#10; data-accordion-separated="false"&#10;&gt;&#10;&#10;&#10;&#10;&#10; &#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&lt;details&#10; class="group border-none"&#10; data-accordion-item&#10; &#10;&gt;&#10; &lt;summary class="flex w-full cursor-pointer items-center justify-between gap-4 px-4 py-3 text-left text-lg font-semibold text-neutral-900 dark:text-neutral-100"&gt;&#10; &lt;span class="flex items-center gap-2"&gt;&#10; &#10; &lt;span&gt;Official documentation notes (Self Read)&lt;/span&gt;&#10; &lt;/span&gt;&#10; &lt;span class="accordion-chevron ms-auto flex h-5 w-5 items-center justify-center print:hidden"&gt;&#10; &lt;span class="relative block icon"&gt;&lt;svg&#10; xmlns="http://www.w3.org/2000/svg"&#10; viewBox="0 0 20 20"&#10; fill="currentColor"&#10; aria-hidden="true"&#10;&gt;&#10; &lt;path&#10; fill-rule="evenodd"&#10; d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"&#10; clip-rule="evenodd"&#10; /&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;/span&gt;&#10; &lt;/summary&gt;&#10;&lt;div class="px-4 pb-4 text-neutral-700 dark:text-neutral-300"&gt;&#10; &lt;div&#10; class="tab__container w-full"&#10;&lt;blockquote&gt;&lt;/blockquote&gt; &lt;div class="tab__nav" role="tablist"&gt;&#10; &lt;div class="flex flex-wrap gap-1"&gt;&lt;button&#10; class="tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 tab--active"&#10; role="tab"&#10; aria-selected="true"&#10; data-tab-index="0"&#10; data-tab-label="Getting Started"&gt;&#10; &lt;span class="flex items-center gap-1"&gt;&#10;&lt;pre&gt;&lt;code&gt; Getting Started&#10; &amp;lt;/span&amp;gt;&#10; &amp;lt;/button&amp;gt;&amp;lt;button&#10; class=&amp;quot;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 &amp;quot;&#10; role=&amp;quot;tab&amp;quot;&#10; aria-selected=&amp;quot;false&amp;quot;&#10; data-tab-index=&amp;quot;1&amp;quot;&#10; data-tab-label=&amp;quot;Playbooks&amp;quot;&amp;gt;&#10; &amp;lt;span class=&amp;quot;flex items-center gap-1&amp;quot;&amp;gt;&#10; &#10; Playbooks&#10; &amp;lt;/span&amp;gt;&#10; &amp;lt;/button&amp;gt;&amp;lt;button&#10; class=&amp;quot;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 &amp;quot;&#10; role=&amp;quot;tab&amp;quot;&#10; aria-selected=&amp;quot;false&amp;quot;&#10; data-tab-index=&amp;quot;2&amp;quot;&#10; data-tab-label=&amp;quot;Control Node&amp;quot;&amp;gt;&#10; &amp;lt;span class=&amp;quot;flex items-center gap-1&amp;quot;&amp;gt;&#10; &#10; Control Node&#10; &amp;lt;/span&amp;gt;&#10; &amp;lt;/button&amp;gt;&amp;lt;button&#10; class=&amp;quot;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 &amp;quot;&#10; role=&amp;quot;tab&amp;quot;&#10; aria-selected=&amp;quot;false&amp;quot;&#10; data-tab-index=&amp;quot;3&amp;quot;&#10; data-tab-label=&amp;quot;Managed Node&amp;quot;&amp;gt;&#10; &amp;lt;span class=&amp;quot;flex items-center gap-1&amp;quot;&amp;gt;&#10; &#10; Managed Node&#10; &amp;lt;/span&amp;gt;&#10; &amp;lt;/button&amp;gt;&amp;lt;button&#10; class=&amp;quot;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 &amp;quot;&#10; role=&amp;quot;tab&amp;quot;&#10; aria-selected=&amp;quot;false&amp;quot;&#10; data-tab-index=&amp;quot;4&amp;quot;&#10; data-tab-label=&amp;quot;Inventory&amp;quot;&amp;gt;&#10; &amp;lt;span class=&amp;quot;flex items-center gap-1&amp;quot;&amp;gt;&#10; &#10; Inventory&#10; &amp;lt;/span&amp;gt;&#10; &amp;lt;/button&amp;gt;&amp;lt;button&#10; class=&amp;quot;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 &amp;quot;&#10; role=&amp;quot;tab&amp;quot;&#10; aria-selected=&amp;quot;false&amp;quot;&#10; data-tab-index=&amp;quot;5&amp;quot;&#10; data-tab-label=&amp;quot;Modules&amp;quot;&amp;gt;&#10; &amp;lt;span class=&amp;quot;flex items-center gap-1&amp;quot;&amp;gt;&#10; &#10; Modules&#10; &amp;lt;/span&amp;gt;&#10; &amp;lt;/button&amp;gt;&amp;lt;button&#10; class=&amp;quot;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 &amp;quot;&#10; role=&amp;quot;tab&amp;quot;&#10; aria-selected=&amp;quot;false&amp;quot;&#10; data-tab-index=&amp;quot;6&amp;quot;&#10; data-tab-label=&amp;quot;Tasks&amp;quot;&amp;gt;&#10; &amp;lt;span class=&amp;quot;flex items-center gap-1&amp;quot;&amp;gt;&#10; &#10; Tasks&#10; &amp;lt;/span&amp;gt;&#10; &amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10; &lt;/div&gt;&#10; &lt;div class="tab__content mt-4"&gt;&lt;div class="tab__panel tab--active" data-tab-index="0"&gt;&#10; &lt;p&gt;&lt;a href="https://docs.ansible.com/ansible/2.9/user_guide/basic_concepts.html#control-node" target="_blank" rel="noreferrer"&gt;Control node&lt;/a&gt;&lt;br&gt;&#10;&lt;a href="https://docs.ansible.com/ansible/2.9/user_guide/basic_concepts.html#managed-nodes" target="_blank" rel="noreferrer"&gt;Managed nodes&lt;/a&gt;&lt;br&gt;&#10;&lt;a href="https://docs.ansible.com/ansible/2.9/user_guide/basic_concepts.html#inventory" target="_blank" rel="noreferrer"&gt;Inventory&lt;/a&gt;&lt;br&gt;&#10;&lt;a href="https://docs.ansible.com/ansible/2.9/user_guide/basic_concepts.html#modules" target="_blank" rel="noreferrer"&gt;Modules&lt;/a&gt;&lt;br&gt;&#10;&lt;a href="https://docs.ansible.com/ansible/2.9/user_guide/basic_concepts.html#tasks" target="_blank" rel="noreferrer"&gt;Tasks&lt;/a&gt;&lt;br&gt;&#10;&lt;a href="https://docs.ansible.com/ansible/2.9/user_guide/basic_concepts.html#playbooks" target="_blank" rel="noreferrer"&gt;Playbooks&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Building blocks for Ansible.&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt; &amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;tab__panel &amp;quot; data-tab-index=&amp;quot;1&amp;quot;&amp;gt;&#10; &amp;lt;div class=&amp;quot;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&amp;quot;&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;A playbook is composed of one or more ‘plays’ in an ordered list.&#10;— Official documentation&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Ordered lists of tasks, saved so you can run those tasks in that order repeatedly.&lt;/li&gt;&#10;&lt;li&gt;Expressed in YAML format&lt;/li&gt;&#10;&lt;li&gt;It offers a multi-machine configuration &amp;amp; deployment system for complex applications that is&#10;&lt;ul&gt;&#10;&lt;li&gt;Repeatable&lt;/li&gt;&#10;&lt;li&gt;Re-usable &amp;amp;&lt;/li&gt;&#10;&lt;li&gt;Simple&#10; &lt;/div&gt;&lt;div class="tab__panel " data-tab-index="2"&gt;&#10; &lt;ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;li&gt;Controller machine&lt;/li&gt;&#10;&lt;li&gt;Has the Ansible executable installed (+Python)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre&gt;&lt;code&gt; &amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;tab__panel &amp;quot; data-tab-index=&amp;quot;3&amp;quot;&amp;gt;&#10; &amp;lt;ul&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;li&gt;List of nodes/hosts that will be managed by control node&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre&gt;&lt;code&gt; &amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;tab__panel &amp;quot; data-tab-index=&amp;quot;4&amp;quot;&amp;gt;&#10; &amp;lt;ul&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;li&gt;List of nodes&lt;/li&gt;&#10;&lt;li&gt;Can specify information like IP address for each managed node.&lt;/li&gt;&#10;&lt;li&gt;An inventory can also organise managed nodes in groups e.g. &lt;code&gt;[webserver]&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre&gt;&lt;code&gt; &amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;tab__panel &amp;quot; data-tab-index=&amp;quot;5&amp;quot;&amp;gt;&#10; &amp;lt;ul&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;li&gt;The units of code Ansible executes.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre&gt;&lt;code&gt; &amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;tab__panel &amp;quot; data-tab-index=&amp;quot;6&amp;quot;&amp;gt;&#10; The units of action in Ansible&#10; &amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/div&gt;&#10;&#10; &lt;/div&gt;&#10;&lt;/details&gt;&#10;&#10;&#10;&lt;/div&gt;</description></item><item><title>Marathon</title><link>https://samarthya.me/posts/marathon/</link><pubDate>Fri, 04 Mar 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/marathon/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="3696"&#10; height="2448"&#10; src="https://samarthya.me/posts/marathon/karthik_nagaraja3777_hu_37c0d1e7670cd9b7.jpg"&#10; srcset="https://samarthya.me/posts/marathon/karthik_nagaraja3777_hu_37c0d1e7670cd9b7.jpg 800w, https://samarthya.me/posts/marathon/karthik_nagaraja3777_hu_4d8f2fd6d9182ca.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/marathon/karthik_nagaraja3777.jpg"&gt;&lt;/figure&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="2368"&#10; height="3552"&#10; src="https://samarthya.me/posts/marathon/v1d5659_hu_ba7a5b62cced95e2.jpg"&#10; srcset="https://samarthya.me/posts/marathon/v1d5659_hu_ba7a5b62cced95e2.jpg 800w, https://samarthya.me/posts/marathon/v1d5659_hu_40eaf0b3b6672f9.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/marathon/v1d5659.jpg"&gt;&lt;/figure&gt;</description></item><item><title>Bash: Named Reference</title><link>https://samarthya.me/posts/bash-named-reference/</link><pubDate>Wed, 02 Mar 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/bash-named-reference/</guid><description>&lt;p&gt;Bash is different world. Powerful, simple, elegant and complex all at the same time. Recently while trying to reduce the burden of repetitive code, I was trying to check what can be done to use references in Bash (something like pointers) and it was an interesting problem that I enjoyed solving.&lt;/p&gt;</description></item><item><title>SSH Protocol</title><link>https://samarthya.me/posts/ssh-protocol/</link><pubDate>Fri, 25 Feb 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ssh-protocol/</guid><description>&lt;blockquote&gt;&lt;p&gt;💬 What is SSH protocol?&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;💬 It is also referred to as Secure Shell, is a method for secure remote login from one computer to another. It is an alternative to &lt;code&gt;telnet&lt;/code&gt; and &lt;code&gt;rlogin&lt;/code&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>ssh-keygen &amp; ssh-copy-id</title><link>https://samarthya.me/posts/ssh-keygen-ssh-copy-id/</link><pubDate>Fri, 25 Feb 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ssh-keygen-ssh-copy-id/</guid><description>&lt;p&gt;&lt;code&gt;ssh-keygen&lt;/code&gt; allows generation of new key pair for authentication (SSH).&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; ssh-keygen --help&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;unknown option -- -&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [-N new_passphrase] [-C comment] [-f output_keyfile]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -i [-m key_format] [-f input_keyfile]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -e [-m key_format] [-f input_keyfile]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -y [-f input_keyfile]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -B [-f input_keyfile]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -D pkcs11&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -F hostname [-f known_hosts_file] [-l]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -H [-f known_hosts_file]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -R hostname [-f known_hosts_file]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -r hostname [-f input_keyfile] [-g]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -T output_file -f input_file [-v] [-a rounds] [-J num_lines]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [-j start_line] [-K checkpt] [-W generator]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -s ca_key -I certificate_identity [-h] [-n principals]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [-O option] [-V validity_interval] [-z serial_number] file ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -L [-f input_keyfile]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -A&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; file ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh-keygen -Q -f krl_file file ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh-keygen -t rsa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Generating public/private rsa key pair.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter file in which to save the key (/root/.ssh/id_rsa): &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter passphrase (empty for no passphrase): &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter same passphrase again: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your identification has been saved in /root/.ssh/id_rsa.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your public key has been saved in /root/.ssh/id_rsa.pub.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The key fingerprint is:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SHA256:KjqBCXEEFIBOOPDJ6j45tOBogwggxw3pAqECLG/r9fI root@mymachine.net&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The key&amp;#39;s randomart image is:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+---[RSA 2048]----+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;|%* . |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;|%==. |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;|O*+o |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;|*o* . |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;|=* . S |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;|*.o . . |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;|Oooo... |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;|=Oo.... |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;|..=. oE |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+----[SHA256]-----+&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;SSH Keys&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Notes: For self</title><link>https://samarthya.me/posts/notes-1/</link><pubDate>Wed, 23 Feb 2022 07:27:42 +0000</pubDate><guid>https://samarthya.me/posts/notes-1/</guid><description>&lt;div&#10; class="tab__container w-full"&#10; &#10; &gt;&#10; &lt;div class="tab__nav" role="tablist"&gt;&#10; &lt;div class="flex flex-wrap gap-1"&gt;&lt;button&#10; class="tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 tab--active"&#10; role="tab"&#10; aria-selected="true"&#10; data-tab-index="0"&#10; data-tab-label="bash"&gt;&#10; &lt;span class="flex items-center gap-1"&gt;&#10; &#10; bash&#10; &lt;/span&gt;&#10; &lt;/button&gt;&lt;button&#10; class="tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 "&#10; role="tab"&#10; aria-selected="false"&#10; data-tab-index="1"&#10; data-tab-label="= &amp;amp; =="&gt;&#10; &lt;span class="flex items-center gap-1"&gt;&#10; &#10; = &amp;amp; ==&#10; &lt;/span&gt;&#10; &lt;/button&gt;&lt;button&#10; class="tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 "&#10; role="tab"&#10; aria-selected="false"&#10; data-tab-index="2"&#10; data-tab-label="Brackets ["&gt;&#10; &lt;span class="flex items-center gap-1"&gt;&#10; &#10; Brackets [&#10; &lt;/span&gt;&#10; &lt;/button&gt;&lt;button&#10; class="tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 "&#10; role="tab"&#10; aria-selected="false"&#10; data-tab-index="3"&#10; data-tab-label="bc"&gt;&#10; &lt;span class="flex items-center gap-1"&gt;&#10; &#10; bc&#10; &lt;/span&gt;&#10; &lt;/button&gt;&lt;button&#10; class="tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 "&#10; role="tab"&#10; aria-selected="false"&#10; data-tab-index="4"&#10; data-tab-label="awk"&gt;&#10; &lt;span class="flex items-center gap-1"&gt;&#10; &#10; awk&#10; &lt;/span&gt;&#10; &lt;/button&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="tab__content mt-4"&gt;&lt;div class="tab__panel tab--active" data-tab-index="0"&gt;&#10; &lt;ul&gt;&#10;&lt;li&gt;Bash is a string oriented language&lt;/li&gt;&#10;&lt;li&gt;We do not write &lt;code&gt;step=$((step++))&lt;/code&gt; this expression will return a numeric value which the shell will then take as the command to to be executed.&lt;/li&gt;&#10;&lt;li&gt;No spaces are allowed around the equal sign for variable assignment.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;let &amp;quot;step++&amp;quot;&lt;/code&gt; is same as &lt;code&gt;(( step++ ))&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Use &lt;code&gt;declare&lt;/code&gt; to set variable values and attributes&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;/div&gt;&lt;div class="tab__panel " data-tab-index="1"&gt;&#10; In bash &lt;code&gt;=&lt;/code&gt; and &lt;code&gt;==&lt;/code&gt; both mean the same thing&#10; &lt;/div&gt;&lt;div class="tab__panel " data-tab-index="2"&gt;&#10; &lt;blockquote&gt;&lt;p&gt;💬 What is the difference between &lt;code&gt;[&lt;/code&gt; and &lt;code&gt;[[&lt;/code&gt;?&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;ol class="not-prose my-10 space-y-5 border-s border-primary-200 ps-6 dark:border-primary-900"&gt;&#10;&lt;li class="relative"&gt;&#10; &lt;span class="absolute -start-10 top-0 flex h-8 w-8 items-center justify-center rounded-full bg-primary-600 text-sm font-black text-white ring-4 ring-neutral dark:ring-neutral-800"&gt;•&lt;/span&gt;&#10; &lt;h3 class="text-lg font-bold text-neutral-900 dark:text-white"&gt;if cd $dir; then&lt;/h3&gt;&#10; &lt;div class="mt-1 text-neutral-600 dark:text-neutral-400"&gt;&lt;p&gt;In this case the command &lt;code&gt;cd $dir&lt;/code&gt; will be executed and based on success or failure of the command executed the if or else part will be executed respectively.&lt;/p&gt;&#10;&lt;h3 class="relative group"&gt;&lt;code&gt;if [$dir]; then&lt;/code&gt;&#10; &lt;div id="if-dir-then" class="anchor"&gt;&lt;/div&gt;&#10;&lt;pre&gt;&lt;code&gt;&amp;lt;span&#10; class=&amp;quot;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&amp;quot;&amp;gt;&#10; &amp;lt;a class=&amp;quot;text-primary-300 dark:text-neutral-700 !no-underline&amp;quot; href=&amp;quot;#if-dir-then&amp;quot; aria-label=&amp;quot;Anchor&amp;quot;&amp;gt;#&amp;lt;/a&amp;gt;&#10;&amp;lt;/span&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;Single bracket is equivalent to test command evaluate conditional expression&lt;/p&gt;&#10;&lt;ol class="not-prose my-10 space-y-5 border-s border-primary-200 ps-6 dark:border-primary-900"&gt;&#10;&lt;li class="relative"&gt;&#10; &lt;span class="absolute -start-10 top-0 flex h-8 w-8 items-center justify-center rounded-full bg-primary-600 text-sm font-black text-white ring-4 ring-neutral dark:ring-neutral-800"&gt;•&lt;/span&gt;&#10; &lt;h3 class="text-lg font-bold text-neutral-900 dark:text-white"&gt;&amp;lt; &amp;amp; &amp;gt;&lt;/h3&gt;&#10; &lt;div class="mt-1 text-neutral-600 dark:text-neutral-400"&gt;&lt;ul&gt;&#10;&lt;li&gt;Within &lt;code&gt;[&lt;/code&gt; compare using simple ASCII ordering &amp;amp; within &lt;code&gt;[[&lt;/code&gt; comparison is lexicographic.&lt;/li&gt;&#10;&lt;li&gt;Within &lt;code&gt;[&lt;/code&gt; you have to escape &lt;code&gt;\&amp;gt;&lt;/code&gt; to avoid redirection.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10; &lt;/div&gt;&lt;div class="tab__panel " data-tab-index="3"&gt;&#10; &lt;blockquote&gt;&lt;p&gt;💬 BC is a language?&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;div&#10; id="accordion-8263b81ba10c2527e53c5b24ef678386"&#10; class="border border-neutral-200 dark:border-neutral-700 rounded-lg overflow-hidden"&#10; data-accordion="collapse"&#10; data-accordion-separated="false"&#10;&gt;&#10;&lt;details&#10; class="group border-none"&#10; data-accordion-item&#10;&lt;blockquote&gt;&lt;/blockquote&gt; &lt;summary class="flex w-full cursor-pointer items-center justify-between gap-4 px-4 py-3 text-left text-lg font-semibold text-neutral-900 dark:text-neutral-100"&gt;&#10; &lt;span class="flex items-center gap-2"&gt;&#10;&lt;pre&gt;&lt;code&gt; &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#10;&amp;lt;/span&amp;gt;&#10;&amp;lt;span class=&amp;quot;accordion-chevron ms-auto flex h-5 w-5 items-center justify-center print:hidden&amp;quot;&amp;gt;&#10; &amp;lt;span class=&amp;quot;relative block icon&amp;quot;&amp;gt;&amp;lt;svg&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;xmlns=&amp;ldquo;&lt;a href="http://www.w3.org/2000/svg%22" target="_blank" rel="noreferrer"&gt;http://www.w3.org/2000/svg"&lt;/a&gt;&#10;viewBox=&amp;ldquo;0 0 20 20&amp;rdquo;&#10;fill=&amp;ldquo;currentColor&amp;rdquo;&#10;aria-hidden=&amp;ldquo;true&amp;rdquo;&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;path&#10;fill-rule="evenodd"&#10;d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"&#10;clip-rule="evenodd"&#10;/&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/p&gt;&#10; &lt;/summary&gt;&#10;&lt;div class="px-4 pb-4 text-neutral-700 dark:text-neutral-300"&gt;&#10; &lt;/div&gt;&#10;&lt;/details&gt;&#10;&lt;/div&gt;&#10;&lt;style&gt;&#10; #accordion-8263b81ba10c2527e53c5b24ef678386 &gt; details + details {&#10; border-top: 1px solid rgb(var(--color-neutral-200));&#10; }&#10; .dark #accordion-8263b81ba10c2527e53c5b24ef678386 &gt; details + details {&#10; border-top-color: rgb(var(--color-neutral-700));&#10; }&#10;&lt;/style&gt;&#10;&lt;style&gt;&#10; #accordion-8263b81ba10c2527e53c5b24ef678386 details[data-accordion-item] &gt; summary .accordion-chevron {&#10; transform: rotate(-90deg);&#10; transition: transform 200ms ease-in-out;&#10; }&#10; #accordion-8263b81ba10c2527e53c5b24ef678386 details[data-accordion-item][open] &gt; summary .accordion-chevron {&#10; transform: rotate(0deg);&#10; }&#10;&lt;/style&gt;&#10;&lt;script&gt;&#10; (() =&gt; {&#10; const root = document.getElementById("accordion-8263b81ba10c2527e53c5b24ef678386");&#10; if (!root) return;&#10; const items = root.querySelectorAll("details[data-accordion-item]");&#10; items.forEach((item) =&gt; {&#10; item.addEventListener("toggle", () =&gt; {&#10; if (!item.open) return;&#10; items.forEach((other) =&gt; {&#10; if (other !== item) other.removeAttribute("open");&#10; });&#10; });&#10; });&#10; })();&#10;&lt;/script&gt;&#10;&lt;blockquote&gt;&lt;p&gt;💬 Supports arbitrary precision numbers with interactive execution of statements. (Command line)&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10; &lt;/div&gt;&lt;div class="tab__panel " data-tab-index="4"&gt;&#10; &lt;p&gt;&lt;code&gt;awk&lt;/code&gt; provides filtering capabilities&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; printf &amp;#39;gate\napple\nwhat\nkite\n&amp;#39; | awk &amp;#39;/at/&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gate&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;what&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;printf &amp;#39;gate\napple\nwhat\nkite\n&amp;#39; | awk &amp;#39;!/e/&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;what&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;&lt;code&gt;awk&lt;/code&gt; is primarily used for field based processing&lt;/p&gt;&#10;&lt;p&gt;One liner structure &lt;code&gt;awk 'cond1{action1} cond2{action2} … condN{actionN}'&lt;/code&gt;&lt;/p&gt;&#10;&#10; &lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>ServiceAccount</title><link>https://samarthya.me/posts/serviceaccount/</link><pubDate>Wed, 16 Feb 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/serviceaccount/</guid><description>&lt;p&gt;If you have seen errors like these when deploying using a &lt;code&gt;serviceAccount&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Error: INSTALLATION FAILED: rendered manifests contain a resource that already exists. Unable to continue with install: could not get information about the resource ConfigMap &amp;#34;spinnaker-hellow-pipline&amp;#34; in namespace &amp;#34;spinnaker&amp;#34;: configmaps &amp;#34;spinnaker-hellow-pipline&amp;#34; is forbidden: User &amp;#34;system:serviceaccount:jenkins:default&amp;#34; cannot get resource &amp;#34;configmaps&amp;#34; in API group &amp;#34;&amp;#34; in the namespace &amp;#34;spinnaker&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&#10;&lt;h2 class="relative group"&gt;What?&#10; &lt;div id="what" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;A service account provides an identity for processes that run in a Pod.&lt;/li&gt;&#10;&lt;li&gt;Every namespace has a default &lt;code&gt;service account&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;When you create a pod, if you do not specify a service account, it is automatically assigned the &lt;code&gt;default&lt;/code&gt; service account in the same namespace.&lt;/li&gt;&#10;&lt;li&gt;To use a non-default service account, set the &lt;code&gt;spec.serviceAccountName&lt;/code&gt; field of a pod to the name of the service account you wish to use.&lt;/li&gt;&#10;&lt;li&gt;The service account has to exist at the time the pod is created, or it will be rejected.&lt;/li&gt;&#10;&lt;li&gt;The service account of an already created pod cannot be updated&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Default RBAC policies grant scoped permissions to control-plane components, &lt;code&gt;nodes&lt;/code&gt;, and &lt;code&gt;controllers&lt;/code&gt;, but grant &lt;em&gt;no permissions&lt;/em&gt; to service accounts outside the &lt;code&gt;kube-system&lt;/code&gt; namespace (beyond discovery permissions given to all authenticated users).&#10;— Official documentation&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;Example&#10; &lt;div id="example" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#example" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apiVersion: v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kind: ServiceAccount&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;metadata:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; creationTimestamp: &amp;#34;2021-08-27T07:52:20Z&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; name: default&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; namespace: default&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; resourceVersion: &amp;#34;XXXX&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; uid: XXXX&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;secrets:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- name: default-token-vcb75&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Let’s add docker-registry secret to the &lt;code&gt;SA&lt;/code&gt;. (My secret name is samarthya-docker)&lt;/p&gt;</description></item><item><title>`Devspace`: Managing Apps in Kubernetes</title><link>https://samarthya.me/posts/devspace-managing-apps-in-kubernetes/</link><pubDate>Tue, 15 Feb 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/devspace-managing-apps-in-kubernetes/</guid><description>&lt;h2 class="relative group"&gt;What is &lt;code&gt;devspace&lt;/code&gt;?&#10; &lt;div id="what-is-devspace" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-devspace" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;devspace&lt;/code&gt; is a CLI tool for kubernetes, which can help you configure, deploy, debug. and test your application inside Kubernetes.&lt;/p&gt;</description></item><item><title>Kaniko: Jenkins Pipeline</title><link>https://samarthya.me/posts/kaniko-jenkins-pipeline/</link><pubDate>Fri, 11 Feb 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/kaniko-jenkins-pipeline/</guid><description>&lt;p&gt;So there are many things I have been simultaneously trying to learn &amp;amp; one of those is to learn how you can configure a pipeline&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Read more about Pipeline as Code (PaC)&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;Objectives&#10; &lt;div id="objectives" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#objectives" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Learn Jenkins deployment on Kubernetes&lt;/li&gt;&#10;&lt;li&gt;Learn Jenkins Kubernetes Plugin&lt;/li&gt;&#10;&lt;li&gt;Learn Jenkins Pipeline (&lt;code&gt;Declarative&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;How to build and deploy images in Kubernetes cluster&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;All right, with so many monkeys on my back I had to do things the way I know it works for me.&lt;/p&gt;</description></item><item><title>Kafka: Deploy &amp; Test</title><link>https://samarthya.me/posts/kafka-deploy-test/</link><pubDate>Fri, 11 Feb 2022 08:17:19 +0000</pubDate><guid>https://samarthya.me/posts/kafka-deploy-test/</guid><description>&lt;p&gt;While I continue to learn more about architecture and design of &lt;code&gt;kafka&lt;/code&gt;, a quickstart to deploy &amp;amp; test kafka is a must.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Step 1: Add Chart Repo&#10; &lt;div id="step-1-add-chart-repo" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-1-add-chart-repo" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;In my local system it is already present which was confirmed by the listing&lt;/p&gt;</description></item><item><title>Cert-Manager: TLS for ingress</title><link>https://samarthya.me/posts/cert-manager-tls-for-ingress/</link><pubDate>Wed, 09 Feb 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/cert-manager-tls-for-ingress/</guid><description>&lt;p&gt;A common use-case for cert-manager is requesting TLS signed certificates to secure your ingress resources.&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; &lt;code&gt;cert-manager&lt;/code&gt; adds certificates and certificate issuers as resource types in Kubernetes clusters, and simplifies the process of obtaining, renewing and using those certificates.&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;Installation&#10; &lt;div id="installation" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#installation" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;The easiest way is to use helm charts.&lt;/p&gt;</description></item><item><title>IaC: Infrastructure as Code</title><link>https://samarthya.me/posts/iac-infrastructure-as-code/</link><pubDate>Tue, 08 Feb 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/iac-infrastructure-as-code/</guid><description>&lt;p&gt;IaC tools like &lt;code&gt;Terraform&lt;/code&gt; allows one to manage infrastructure with configuration files rather than through a graphical user interface.&lt;/p&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="From the official website of Terraform"&#10; src="https://learn.hashicorp.com/img/terraform/terraform-iac.png"&#10; &gt;&lt;figcaption&gt;From the official website of Terraform&lt;/figcaption&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Installation&#10; &lt;div id="installation" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#installation" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;I will cover steps to install on MAC OS using brew.&lt;/p&gt;</description></item><item><title>Spinnaker: Artifact Helm</title><link>https://samarthya.me/posts/spinnaker-artifact-helm/</link><pubDate>Sat, 05 Feb 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/spinnaker-artifact-helm/</guid><description>&lt;p&gt;In this blog let’s try add a helm account and enable for use in the pipelines&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bash-5.0$ hal config artifact helm account get dev-helm-ac&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ Get current deployment&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Success&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ Get dev-helm-ac artifact account&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Success&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ Artifact account dev-helm-ac: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HelmArtifactAccount(name=dev-helm-ac, repository=https://helm-dev-local.artifactory.net/artifactory/helm-dev-local, username=myaccount, password=samplepassword, usernamePasswordFile=/home/spinnaker/.hal/helm_password)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;The steps I followed are explained in detail &lt;a href="https://spinnaker.io/docs/setup/other_config/artifacts/helm/" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Spinnaker: Open Source Deployment</title><link>https://samarthya.me/posts/spinnaker-open-source-deployment/</link><pubDate>Sat, 05 Feb 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/spinnaker-open-source-deployment/</guid><description>&lt;p&gt;I have written a series of blogs to capture how you can deploy spinnaker on a &lt;code&gt;Kubernetes&lt;/code&gt; cluster &amp;amp; manage a helm chart deployment via pipeline.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;The only way to enable more frequent changes is to invest in supporting people with better tooling, practices, and culture&lt;/p&gt;&#10;&lt;p&gt;From the Book &lt;code&gt;Spinnaker&lt;/code&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Spinnaker: docker-registry</title><link>https://samarthya.me/posts/spinnaker-docker-registry/</link><pubDate>Fri, 04 Feb 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/spinnaker-docker-registry/</guid><description>&lt;p&gt;You will need a valid docker registry before you add any trigger in the pipeline in &lt;code&gt;Spinnaker&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; &lt;a href="https://spinnaker.io/docs/setup/install/providers/docker-registry/" target="_blank" rel="noreferrer"&gt;Official documentation&lt;/a&gt; is a good resource to seek more clarifications&#10;— Spinnaker&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;In my case I have already added an account my-docker-registry as under (The final result after you successfully configure Docker.&lt;/p&gt;</description></item><item><title>Jenkins: K8S</title><link>https://samarthya.me/posts/jenkins-k8s/</link><pubDate>Wed, 02 Feb 2022 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/jenkins-k8s/</guid><description>&lt;p&gt;Deploying Jenkins on K8S cluster is as simple as&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Add Repo&#10; &lt;div id="add-repo" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#add-repo" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add jenkins https://charts.jenkins.io&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Deploy instance&lt;/p&gt;</description></item><item><title>Spinnaker: Install &amp; Configure</title><link>https://samarthya.me/posts/spinnaker/</link><pubDate>Mon, 31 Jan 2022 06:45:59 +0000</pubDate><guid>https://samarthya.me/posts/spinnaker/</guid><description>&lt;p&gt;&lt;code&gt;Spinnaker&lt;/code&gt; is an &lt;code&gt;open-source&lt;/code&gt; &lt;em&gt;&lt;strong&gt;continuous delivery&lt;/strong&gt;&lt;/em&gt; platform which provides two core set of features&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Application Management&lt;/li&gt;&#10;&lt;li&gt;Application deployment&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Applications , clusters , and server groups are the key concepts Spinnaker uses to describe your services."&#10; src="https://spinnaker.io/docs/concepts/clusters.png"&#10; &gt;&lt;figcaption&gt;Applications , clusters , and server groups are the key concepts Spinnaker uses to describe your services.&lt;/figcaption&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Key Concepts&#10; &lt;div id="key-concepts" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#key-concepts" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Some of the key concepts in the spinnaker universe are covered as under&lt;/p&gt;</description></item><item><title>Event Streaming</title><link>https://samarthya.me/posts/event-streaming/</link><pubDate>Thu, 20 Jan 2022 08:06:56 +0000</pubDate><guid>https://samarthya.me/posts/event-streaming/</guid><description>&lt;p&gt;While reading Apache &lt;code&gt;Kafka&lt;/code&gt; it was interesting analogy that they described&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Event streaming is the digital equivalent of the human body&amp;rsquo;s central nervous system.&#10;— Apache Kafka&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;It draws a great parallel between how the central nervous system allows for real time event generations and consumption in terms of reflex actions. The examples are well explained and captured &lt;a href="https://kafka.apache.org/powered-by" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Museum &amp; Infantry</title><link>https://samarthya.me/posts/museum-infantry/</link><pubDate>Fri, 07 Jan 2022 05:45:49 +0000</pubDate><guid>https://samarthya.me/posts/museum-infantry/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Diorama of hundreds of model infantry soldiers in white helmets in formation, with a carved sun-faced puppet in the foreground"&#10; width="3999"&#10; height="2999"&#10; src="https://samarthya.me/posts/museum-infantry/b0b1fec3-43f4-4c1e-98a5-a9306f4c1f83_hu_6fc00a5a5cacad3e.jpg"&#10; srcset="https://samarthya.me/posts/museum-infantry/b0b1fec3-43f4-4c1e-98a5-a9306f4c1f83_hu_6fc00a5a5cacad3e.jpg 800w, https://samarthya.me/posts/museum-infantry/b0b1fec3-43f4-4c1e-98a5-a9306f4c1f83_hu_8178f660e19c4ff1.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/museum-infantry/b0b1fec3-43f4-4c1e-98a5-a9306f4c1f83.jpg"&gt;&lt;/figure&gt;</description></item><item><title>Adding Node to a cluster</title><link>https://samarthya.me/posts/adding-node-to-a-cluster/</link><pubDate>Thu, 06 Jan 2022 06:58:31 +0000</pubDate><guid>https://samarthya.me/posts/adding-node-to-a-cluster/</guid><description>&lt;p&gt;In this blog, I will try add a new node to the already running cluster.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;My Cluster&#10; &lt;div id="my-cluster" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#my-cluster" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;root@master&amp;gt;k get nodes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME STATUS ROLES AGE VERSION&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mydevmachine001830.samarthya.me Ready &amp;lt;none&amp;gt; 22h v1.23.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mydevmachine002687.samarthya.me Ready &amp;lt;none&amp;gt; 41d v1.23.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mydevmachine003277.samarthya.me Ready &amp;lt;none&amp;gt; 131d v1.23.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mydevmachine003278.samarthya.me Ready &amp;lt;none&amp;gt; 131d v1.23.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mydevmachine003417.samarthya.me Ready &amp;lt;none&amp;gt; 4m55s v1.23.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mydevmachine003968.samarthya.me Ready &amp;lt;none&amp;gt; 131d v1.23.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mydevmachine003969.samarthya.me Ready control-plane,master 131d v1.23.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mydevmachine003970.samarthya.me Ready &amp;lt;none&amp;gt; 131d v1.23.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mydevmachine003979.samarthya.me Ready &amp;lt;none&amp;gt; 29m v1.23.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Steps to follow&#10; &lt;div id="steps-to-follow" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#steps-to-follow" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Install &lt;code&gt;docker&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Install &lt;code&gt;kubeadm&lt;/code&gt;, &lt;code&gt;kubectl&lt;/code&gt; &amp;amp; &lt;code&gt;kubelet&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Join the cluster using the token&lt;/li&gt;&#10;&lt;li&gt;Check the node has joined the cluster&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;h3 class="relative group"&gt;Step 1: Install docker&#10; &lt;div id="step-1-install-docker" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-1-install-docker" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h3&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo yum install -y yum-utils&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo yum-config-manager \&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --add-repo \&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://download.docker.com/linux/centos/docker-ce.repo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;When adding repo make sure the repo has been added successfully to the machine&lt;/p&gt;</description></item><item><title>The inevitable</title><link>https://samarthya.me/posts/the-inevitable/</link><pubDate>Thu, 06 Jan 2022 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/the-inevitable/</guid><description>&lt;p&gt;India is a complex country, the diversity is ever present and ever growing. What got me going in my deep meditative thinking is having a discussion with my Dad. We have evolved from the just enough generation to over the edge generation. Things that were uncommon during my growing up years and now the basic necessity of this generation.&lt;/p&gt;</description></item><item><title>Upgrading K8S cluster</title><link>https://samarthya.me/posts/upgrading-k8s-cluster/</link><pubDate>Wed, 05 Jan 2022 07:05:30 +0000</pubDate><guid>https://samarthya.me/posts/upgrading-k8s-cluster/</guid><description>&lt;p&gt;In this blog I will talk about how you can upgrade a node and the kubernetes cluster version to a specific version.&lt;/p&gt;&#10;&lt;p&gt;I have a 6 node local Kubernetes cluster like below&lt;/p&gt;</description></item><item><title>Documenting GO</title><link>https://samarthya.me/posts/documenting-go/</link><pubDate>Tue, 28 Dec 2021 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/documenting-go/</guid><description>&lt;p&gt;Documentation is a huge part of writing any software. In java you have &lt;code&gt;JavaDoc&lt;/code&gt;, which most of the developers adhere to. It is healthy and rich way of exposing the source documentation.&lt;/p&gt;</description></item><item><title>Docker: Clean in Bulk</title><link>https://samarthya.me/posts/docker-clean-in-bulk/</link><pubDate>Mon, 27 Dec 2021 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/docker-clean-in-bulk/</guid><description>&lt;p&gt;I will define the problem I was facing&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;Too many snapshots versions for the same image were there on my system&lt;/p&gt;&#10;&lt;p&gt;Freaky developer&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;So to delete there was one hard hack way of cleaning it all&lt;/p&gt;</description></item><item><title>K8S RBAC</title><link>https://samarthya.me/posts/k8s-rbac/</link><pubDate>Mon, 13 Dec 2021 13:03:56 +0000</pubDate><guid>https://samarthya.me/posts/k8s-rbac/</guid><description>&lt;h2 class="relative group"&gt;What?&#10; &lt;div id="what" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Role Based Access Control(s) is a way of regulating access to entities like storage, network etc.&lt;/li&gt;&#10;&lt;li&gt;RBAC authorization uses &lt;code&gt;rbac.authorization.k8s.io&lt;/code&gt; API group.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;h2 class="relative group"&gt;API Objects&#10; &lt;div id="api-objects" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#api-objects" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;There are 4 kind of kubernetes object&lt;/p&gt;</description></item><item><title>Slide show</title><link>https://samarthya.me/posts/slide-show/</link><pubDate>Sun, 12 Dec 2021 07:34:13 +0000</pubDate><guid>https://samarthya.me/posts/slide-show/</guid><description>&lt;p&gt;[URIS id=1836]&lt;/p&gt;</description></item><item><title>Just on the sides</title><link>https://samarthya.me/posts/just-on-the-sides/</link><pubDate>Thu, 09 Dec 2021 07:05:51 +0000</pubDate><guid>https://samarthya.me/posts/just-on-the-sides/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Duolingo 2021 Year in Review card: Learning Legend, top 2% of learners worldwide"&#10; width="1372"&#10; height="1372"&#10; src="https://samarthya.me/posts/just-on-the-sides/year-in-review-0_hu_e279384c66220cf.png"&#10; srcset="https://samarthya.me/posts/just-on-the-sides/year-in-review-0_hu_e279384c66220cf.png 800w, https://samarthya.me/posts/just-on-the-sides/year-in-review-0_hu_1acacaa277cf4cf9.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/just-on-the-sides/year-in-review-0.png"&gt;&lt;/figure&gt;</description></item><item><title>SCM for git clone</title><link>https://samarthya.me/posts/scm-for-git-clone/</link><pubDate>Wed, 08 Dec 2021 09:55:42 +0000</pubDate><guid>https://samarthya.me/posts/scm-for-git-clone/</guid><description>&lt;p&gt;Having used SCM plugins for quite sometime, I thought - WHY I have never used them to clone a repository and while I employ the personal access token (NOW)- The weapon of choice, I have never tried it myself.&lt;/p&gt;</description></item><item><title>Helm Test</title><link>https://samarthya.me/posts/helm-test/</link><pubDate>Fri, 26 Nov 2021 06:07:36 +0000</pubDate><guid>https://samarthya.me/posts/helm-test/</guid><description>&lt;p&gt;The only advice I can give to folks who are building helm charts from scratch, is always keep it incremental and do not try to do everything at one go. At least build a decent few before you even try to attempt such a thing, else you will only end up WASTING your precious time on trivial issues which could have been avoided by incremental build, rather than the big bang approach.&lt;/p&gt;</description></item><item><title>Zabbix Agent</title><link>https://samarthya.me/posts/zabbix-agent/</link><pubDate>Wed, 10 Nov 2021 06:06:09 +0000</pubDate><guid>https://samarthya.me/posts/zabbix-agent/</guid><description>&lt;p&gt;In this blog I will walk you through basic steps needed to deploy a Zabbix 5 Agent on a &lt;code&gt;Centos&lt;/code&gt; Machine. The Zabbix Release is available &lt;a href="https://repo.zabbix.com/zabbix/5.4/rhel/7/x86_64/" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Machine&#10; &lt;div id="machine" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#machine" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;root@node4&amp;gt;cat /etc/redhat-release &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CentOS Linux release 7.9.2009 (Core)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Download and install the RPM&lt;/p&gt;</description></item><item><title>Happy Diwali</title><link>https://samarthya.me/posts/happy-diwali/</link><pubDate>Sat, 06 Nov 2021 10:50:32 +0000</pubDate><guid>https://samarthya.me/posts/happy-diwali/</guid><description>&lt;p&gt;&lt;em&gt;[video unavailable: Diwali.mp4]&lt;/em&gt;&lt;/p&gt;</description></item><item><title>CALICO CNI failures</title><link>https://samarthya.me/posts/calico-cni-failures/</link><pubDate>Thu, 28 Oct 2021 07:46:58 +0000</pubDate><guid>https://samarthya.me/posts/calico-cni-failures/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="kubectl output listing ingress, Dynatrace simulator and calico-kube-controllers pods; the Calico controller shows several restarts"&#10; width="768"&#10; height="93"&#10; src="https://samarthya.me/posts/calico-cni-failures/screenshot-2021-10-28-at-1.15.23-pm-1.png"&#10; srcset="https://samarthya.me/posts/calico-cni-failures/screenshot-2021-10-28-at-1.15.23-pm-1.png 800w, https://samarthya.me/posts/calico-cni-failures/screenshot-2021-10-28-at-1.15.23-pm-1.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/calico-cni-failures/screenshot-2021-10-28-at-1.15.23-pm-1.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;In my cluster things went haywire all of a sudden without a proper showcase, I tried multiple things but it was just not working. Specifically my &lt;code&gt;core-dns&lt;/code&gt; and &lt;code&gt;calico-kube-controllers&lt;/code&gt; were not coming up and were constantly showing &lt;code&gt;not ready&lt;/code&gt; and &lt;code&gt;CrashLoop&lt;/code&gt; respectively&lt;/p&gt;</description></item><item><title>Personal Access Token</title><link>https://samarthya.me/posts/personal-access-token/</link><pubDate>Thu, 23 Sep 2021 16:45:26 +0000</pubDate><guid>https://samarthya.me/posts/personal-access-token/</guid><description>&lt;p&gt;In case you are still using the basic/auth it is time to move to personal access token.&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; &lt;a href="https://docs.github.com/en/enterprise-server@3.1/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token" target="_blank" rel="noreferrer"&gt;Official documentation&lt;/a&gt; is the best guide.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Personal access tokens (PATs) are an alternative to using &lt;code&gt;passwords&lt;/code&gt; for authentication to GitHub Enterprise Server when using the &lt;a href="https://docs.github.com/en/enterprise-server@3.1/rest/overview/other-authentication-methods#via-oauth-and-personal-access-tokens" target="_blank" rel="noreferrer"&gt;GitHub API&lt;/a&gt; or the &lt;a href="https://docs.github.com/en/enterprise-server@3.1/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#using-a-token-on-the-command-line" target="_blank" rel="noreferrer"&gt;command line&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Building your artifact(s)</title><link>https://samarthya.me/posts/building-your-artifacts/</link><pubDate>Thu, 23 Sep 2021 15:43:51 +0000</pubDate><guid>https://samarthya.me/posts/building-your-artifacts/</guid><description>&lt;p&gt;Everything starts form &lt;code&gt;a single source file&lt;/code&gt; and as the time goes by, it gradually transforms into multiple modules, bulky source files and a source control repository. Mostly by this time the team has already adopted a a build tool, and a repository to publish the versioned &lt;code&gt;artifacts.&lt;/code&gt; Journey is similar for every project successful or not.&lt;/p&gt;</description></item><item><title>Maven Profiles</title><link>https://samarthya.me/posts/maven-profiles/</link><pubDate>Thu, 09 Sep 2021 08:43:10 +0000</pubDate><guid>https://samarthya.me/posts/maven-profiles/</guid><description>&lt;p&gt;The concept of profiles let&amp;rsquo;s a developer define what he wants to build and what to do in specific cases. In this blog I will talk about the problem that I solved using profiles.&lt;/p&gt;</description></item><item><title>Ingress</title><link>https://samarthya.me/posts/ingress/</link><pubDate>Tue, 24 Aug 2021 07:28:45 +0000</pubDate><guid>https://samarthya.me/posts/ingress/</guid><description>&lt;p&gt;All right, it has been sometime since I last wrote my blog, and it has been disappointing not to have found enough time to collate and put my thoughts in a simple worded doc; better late then never. So, here I am trying to reignite the pursuit of writing at least once a week.&lt;/p&gt;</description></item><item><title>Om</title><link>https://samarthya.me/posts/om/</link><pubDate>Wed, 21 Jul 2021 10:59:57 +0000</pubDate><guid>https://samarthya.me/posts/om/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Infographic on the benefits of chanting the Gayatri Mantra, with the mantra in Sanskrit and a seated meditating figure"&#10; width="1024"&#10; height="1280"&#10; src="https://samarthya.me/posts/om/om_hu_a41eaadf355dca0.jpg"&#10; srcset="https://samarthya.me/posts/om/om_hu_a41eaadf355dca0.jpg 800w, https://samarthya.me/posts/om/om.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/om/om.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;योगस्थः कुरु कर्माणि सङ्गं त्यक्त्वा धनञ्जय ।&lt;/p&gt;</description></item><item><title>JUNIT5: Learning how to write the code the right way!</title><link>https://samarthya.me/posts/junit5-learning-how-to-write-the-code-the-right-way/</link><pubDate>Sat, 05 Jun 2021 11:31:24 +0000</pubDate><guid>https://samarthya.me/posts/junit5-learning-how-to-write-the-code-the-right-way/</guid><description>&lt;p&gt;JUnit was developed by &lt;strong&gt;Kent Beck&lt;/strong&gt; and &lt;strong&gt;Erich Gamma&lt;/strong&gt;. Its first version was released in &lt;strong&gt;1997&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; &lt;strong&gt;JUnit 5 = &lt;em&gt;JUnit Platform&lt;/em&gt; + &lt;em&gt;JUnit Jupiter&lt;/em&gt; + &lt;em&gt;JUnit Vintage&lt;/em&gt;&lt;/strong&gt;&#10;— &lt;a href="https://junit.org/junit5/docs/current/user-guide/" target="_blank" rel="noreferrer"&gt;https://junit.org/junit5/docs/current/user-guide/&lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;It is powerful testing framework, with many modules. These modules are part of three sub-projects&lt;/p&gt;</description></item><item><title>Cracking CISM</title><link>https://samarthya.me/posts/cracking-cism/</link><pubDate>Tue, 25 May 2021 09:26:50 +0000</pubDate><guid>https://samarthya.me/posts/cracking-cism/</guid><description>&lt;p&gt;I recently gave &lt;code&gt;CISM&lt;/code&gt; and I believe it is easily &lt;code&gt;crackable&lt;/code&gt;. For those who are pursuing this certification the mantra is similar (or at least the one that I followed)&lt;/p&gt;</description></item><item><title>ISG: Information security governance</title><link>https://samarthya.me/posts/isg-information-security-governance/</link><pubDate>Thu, 20 May 2021 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/isg-information-security-governance/</guid><description>&lt;p&gt;Rules that run the organisation = Governance. ISG includes the element required to provide the Senior Management assurance that its direction and intent are reflected in the security posture of the organisation.&lt;/p&gt;</description></item><item><title>Java Stream: Examples</title><link>https://samarthya.me/posts/java-stream-examples/</link><pubDate>Mon, 26 Apr 2021 09:07:19 +0000</pubDate><guid>https://samarthya.me/posts/java-stream-examples/</guid><description>&lt;p&gt;Streams are convenient way to reduce the line of codes, but an understanding them is equally challenging. I write this blog, after realising a desperate attempt at solving a trivial problem just took overwhelming time. (Could be that I am getting old, but never late to learn things again)&lt;/p&gt;</description></item><item><title>Smallest Integer</title><link>https://samarthya.me/posts/smallest-integer/</link><pubDate>Sat, 24 Apr 2021 05:43:46 +0000</pubDate><guid>https://samarthya.me/posts/smallest-integer/</guid><description>&lt;p&gt;Code available &lt;a href="https://github.com/samarthya/smallestinteger" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;The ask was to identify the smallest possible integer (&amp;gt; 0) in the array of integers.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Example&#10; &lt;div id="example" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#example" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. [-1,2] -&amp;gt; 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. [-1,-2] -&amp;gt; 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. [1,3] -&amp;gt; 2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;I was initially thinking of using &lt;code&gt;sets&lt;/code&gt; and then finding out the missing one, but then reaized it is simpler and I do not need sets&lt;/p&gt;</description></item><item><title>ReactJS: A new app `tns`</title><link>https://samarthya.me/posts/reactjs-a-new-app-tns/</link><pubDate>Mon, 19 Apr 2021 10:56:58 +0000</pubDate><guid>https://samarthya.me/posts/reactjs-a-new-app-tns/</guid><description>&lt;p&gt;I need to write an app for a friend and what better way to brush up old concepts and write a fresh blog in doing so. So here I am, trying to put together some old and new skills together to help create a simple webapp that will have a dashboard and basic login enabled.&lt;/p&gt;</description></item><item><title>Secrets</title><link>https://samarthya.me/posts/secrets/</link><pubDate>Mon, 12 Apr 2021 09:35:03 +0000</pubDate><guid>https://samarthya.me/posts/secrets/</guid><description>&lt;p&gt;To manage sensitive information you create &lt;code&gt;secrets&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k create secret --help&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Create a secret using specified subcommand.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Available Commands:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; docker-registry Create a secret for use with a Docker registry&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; generic Create a secret from a local file, directory or literal value&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tls Create a TLS secret&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Usage:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; kubectl create secret [flags] [options]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Use &amp;#34;kubectl &amp;lt;command&amp;gt; --help&amp;#34; for more information about a given command.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Use &amp;#34;kubectl options&amp;#34; for a list of global command-line options (applies to all commands).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;&lt;code&gt;type&lt;/code&gt; specifies the type of secret you are creating (options are as shown above). As I need to create only key value pairs for my dummy secret file I need to know a way of how to facilitate that, and the option &lt;code&gt;-h&lt;/code&gt; helped me there&lt;/p&gt;</description></item><item><title>ClusterRole: Refresher</title><link>https://samarthya.me/posts/clusterrole-refresher/</link><pubDate>Tue, 06 Apr 2021 11:26:35 +0000</pubDate><guid>https://samarthya.me/posts/clusterrole-refresher/</guid><description>&lt;p&gt;In this blog I will use &lt;code&gt;kubectl&lt;/code&gt; to create a &lt;code&gt;ClusterRole&lt;/code&gt; and a &lt;code&gt;ClusterRoleBinding&lt;/code&gt; (refer to &lt;a href="https://kubernetes.io/docs/reference/access-authn-authz/rbac/" target="_blank" rel="noreferrer"&gt;link&lt;/a&gt;)&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;kind&amp;#34;: &amp;#34;ClusterRole&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;apiVersion&amp;#34;: &amp;#34;rbac.authorization.k8s.io/v1&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;metadata&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;name&amp;#34;: &amp;#34;myclusterrole&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;creationTimestamp&amp;#34;: null&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;rules&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;verbs&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;get&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;list&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;watch&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ],&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;apiGroups&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ],&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;resources&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;persistentvolumes&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k create clusterrole myclusterrole --verb=get,list,watch --resource=persistentvolumes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k describe clusterrole myclusterrole&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; &lt;p&gt;You can use a &lt;code&gt;ClusterRole&lt;/code&gt; to&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;define permissions on &lt;code&gt;namespaced&lt;/code&gt; resources and be granted within individual namespace(s)&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;define permissions on namespaced resources and be granted across all &lt;code&gt;namespaces&lt;/code&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;define permissions on cluster-scoped resources&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&lt;/div&gt;</description></item><item><title>Quotes</title><link>https://samarthya.me/posts/quotes/</link><pubDate>Sun, 04 Apr 2021 07:51:52 +0000</pubDate><guid>https://samarthya.me/posts/quotes/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Pencil drawing of Don Quixote"&#10; src="https://s.w.org/images/core/5.5/don-quixote-03.jpg"&#10; &gt;&lt;/figure&gt;&#10;&lt;blockquote&gt;&lt;p&gt;&amp;ldquo;There are a thousands excuses for failure but never a good reason..&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;— Mark Twain&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;hr&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Pencil drawing of Don Quixote"&#10; src="https://s.w.org/images/core/5.5/don-quixote-03.jpg"&#10; &gt;&lt;/figure&gt;&#10;&lt;blockquote&gt;&lt;p&gt;&amp;ldquo;Losers make excuses, winners make progress.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;— Introduction: The Miracle of self discipline.&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>oAuth: 2.0</title><link>https://samarthya.me/posts/oauth-2-0/</link><pubDate>Thu, 25 Mar 2021 15:52:46 +0000</pubDate><guid>https://samarthya.me/posts/oauth-2-0/</guid><description>&lt;h1 class="relative group"&gt;What is OAuth?&#10; &lt;div id="what-is-oauth" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-oauth" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;From the official &lt;a href="https://oauth.net/2/" target="_blank" rel="noreferrer"&gt;definition&lt;/a&gt;&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; It is protocol for Authorization&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;It allows authorization flows for web applications, desktop applications, mobile apps etc.&lt;/p&gt;</description></item><item><title>Security Standards, Baselines and Guidelines: Formalized security policy structure.</title><link>https://samarthya.me/posts/security-standards-baselines-and-guidelines-formalized-security-policy-structure/</link><pubDate>Mon, 08 Mar 2021 08:58:48 +0000</pubDate><guid>https://samarthya.me/posts/security-standards-baselines-and-guidelines-formalized-security-policy-structure/</guid><description>&lt;h1 class="relative group"&gt;&#10; &lt;div id="" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&#10;&lt;h1 class="relative group"&gt;Standards&#10; &lt;div id="standards" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#standards" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;blockquote&gt;&lt;p&gt;Standards are &lt;code&gt;tactical documents&lt;/code&gt; that define steps or methods to accomplish the goals and overall direction defined by the security policies.&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>CISSP: Next target</title><link>https://samarthya.me/posts/cissp-next-target/</link><pubDate>Sat, 06 Mar 2021 18:08:34 +0000</pubDate><guid>https://samarthya.me/posts/cissp-next-target/</guid><description>&lt;p&gt;I just finished my upgrade to Safe Certification and now will be going for CISSP certification. Wish my luck guys!&lt;/p&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Illustration of a clipboard checklist and notebooks: study notes"&#10; width="300"&#10; height="98"&#10; src="https://samarthya.me/posts/cissp-next-target/notes.png"&#10; srcset="https://samarthya.me/posts/cissp-next-target/notes.png 800w, https://samarthya.me/posts/cissp-next-target/notes.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/cissp-next-target/notes.png"&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Some quotes&#10; &lt;div id="some-quotes" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#some-quotes" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Effective security plans anticipates change, focuses on specific and achievable objectives, potential problems, and serves as the basis of decision making.&lt;/li&gt;&#10;&lt;li&gt;Operational plans are the shortest and most frequently updated&lt;/li&gt;&#10;&lt;li&gt;Tactical plans are mid term plans and supports strategical plans.&lt;/li&gt;&#10;&lt;li&gt;Strategic plans are the long term plans (usually 5 years) and usually includes risk assessment.&lt;/li&gt;&#10;&lt;li&gt;Data classification is the primary means by which data is protected based on its need for secrecy, sensitivity and confidentiality.&lt;/li&gt;&#10;&lt;li&gt;Data classification is the process of organizing objects, subjects, items into groups of similarities (value, cost, vulnerability, risk, power, privilege)&lt;/li&gt;&#10;&lt;li&gt;Stratify the process of organizing and securing data based on assigned labels of &lt;code&gt;importance and sensitivity&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Data classification also addresses how data is removed and destroyed.&lt;/li&gt;&#10;&lt;li&gt;Security policy is used to assign responsibilities, define acceptable risks, define roles, specify audit requirements and indicate compliance.&lt;/li&gt;&#10;&lt;li&gt;Security policy are not optional rather mandatory.&lt;/li&gt;&#10;&lt;li&gt;Three types of security policies are regulatory, advisory and informative.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Identity</title><link>https://samarthya.me/posts/identity/</link><pubDate>Fri, 05 Mar 2021 08:51:56 +0000</pubDate><guid>https://samarthya.me/posts/identity/</guid><description>&lt;h2 class="relative group"&gt;What is an identity?&#10; &lt;div id="what-is-an-identity" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-an-identity" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Identity is the link that correlates the &lt;em&gt;subject&lt;/em&gt; and the authentication process. Without a valid identity the system has no way of establishing who the subject is? Identity enables the subject to be identified and validated, and only once it has been established and authorized it is accountable for any actions taken in the system.&lt;/p&gt;</description></item><item><title>SAFe for Lean enterprises</title><link>https://samarthya.me/posts/safe-for-lean-enterprises/</link><pubDate>Mon, 01 Mar 2021 16:14:46 +0000</pubDate><guid>https://samarthya.me/posts/safe-for-lean-enterprises/</guid><description>&lt;p&gt;SAFe is a framework; one of the leading, for business agility that allows an organization to adapt based on its own business needs. It mixes the best of Agile, Lean, DevOps into an exhaustive system of guidelines to deliver quality, innovative products in a more predictive manner.&lt;/p&gt;</description></item><item><title>Fun with `goroutines`</title><link>https://samarthya.me/posts/fun-with-goroutines/</link><pubDate>Fri, 26 Feb 2021 08:36:20 +0000</pubDate><guid>https://samarthya.me/posts/fun-with-goroutines/</guid><description>&lt;p&gt;Channels are way of communication between multiple &lt;code&gt;goroutines&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;You can declare a channel and the type of content the channel will receive like below.&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;var myChannel chan int&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;The &lt;code&gt;int&lt;/code&gt; above is the type of data it can receive and the data can be send using&lt;/p&gt;</description></item><item><title>GoLang: try-catch</title><link>https://samarthya.me/posts/golang-try-catch/</link><pubDate>Mon, 22 Feb 2021 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/golang-try-catch/</guid><description>&lt;p&gt;GoLang doesn’t have a try and catch like the popular C++ or Java languages, what it has is &lt;code&gt;panic-recover&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Non critical errors are returned as normal values and for the critical ones, &lt;code&gt;panic&lt;/code&gt; is used&lt;/p&gt;</description></item><item><title>VirtualBox: Increasing size of the virtual disk.</title><link>https://samarthya.me/posts/virtualbox-increasing-size-of-the-virtual-disk/</link><pubDate>Fri, 05 Feb 2021 08:15:41 +0000</pubDate><guid>https://samarthya.me/posts/virtualbox-increasing-size-of-the-virtual-disk/</guid><description>&lt;p&gt;I am using Virtual Box 6.1 and will use it to expand the disk space for one my VBox Ubuntu image which was almost full.&lt;/p&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="VirtualBox 6.1.18 About dialog"&#10; width="1024"&#10; height="766"&#10; src="https://samarthya.me/posts/virtualbox-increasing-size-of-the-virtual-disk/screenshot-2021-02-05-at-1.15.28-pm_hu_f9b21d66c77e1ad9.png"&#10; srcset="https://samarthya.me/posts/virtualbox-increasing-size-of-the-virtual-disk/screenshot-2021-02-05-at-1.15.28-pm_hu_f9b21d66c77e1ad9.png 800w, https://samarthya.me/posts/virtualbox-increasing-size-of-the-virtual-disk/screenshot-2021-02-05-at-1.15.28-pm.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/virtualbox-increasing-size-of-the-virtual-disk/screenshot-2021-02-05-at-1.15.28-pm.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Click on &lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;Virtual Media Manager&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>GoLang: Hash</title><link>https://samarthya.me/posts/golang-hash/</link><pubDate>Mon, 01 Feb 2021 09:20:50 +0000</pubDate><guid>https://samarthya.me/posts/golang-hash/</guid><description>&lt;p&gt;Previously I talked about files, encoding in &lt;code&gt;golang&lt;/code&gt;. In this LTD (learn to do) I will talk about &lt;code&gt;hash&lt;/code&gt; package in general.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://blog.samarthya.me/wps/2021/01/30/golang-encoding/" target="_blank" rel="noreferrer"&gt;https://blog.samarthya.me/wps/2021/01/30/golang-encoding/&lt;/a&gt;&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Help&#10; &lt;div id="help" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#help" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/pkg/hash/#Hash" target="_blank" rel="noreferrer"&gt;https://golang.org/pkg/hash/#Hash&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/pkg/crypto/#Hash.New" target="_blank" rel="noreferrer"&gt;https://golang.org/pkg/crypto/#Hash.New&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/src/crypto/crypto.go?s=364:378#L6" target="_blank" rel="noreferrer"&gt;https://golang.org/src/crypto/crypto.go?s=364:378#L6&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/pkg/crypto/#pkg-subdirectories" target="_blank" rel="noreferrer"&gt;https://golang.org/pkg/crypto/#pkg-subdirectories&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Package crypto collects common cryptographic constants.&#10;— Official golang documentation&#10;&lt;/div&gt;&#10;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;const (&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MD4 Hash = 1 + iota // import golang.org/x/crypto/md4&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MD5 // import crypto/md5&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SHA1 // import crypto/sha1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SHA224 // import crypto/sha256&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SHA256 // import crypto/sha256&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SHA384 // import crypto/sha512&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SHA512 // import crypto/sha512&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MD5SHA1 // no implementation; MD5+SHA1 used for TLS RSA&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; RIPEMD160 // import golang.org/x/crypto/ripemd160&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SHA3_224 // import golang.org/x/crypto/sha3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SHA3_256 // import golang.org/x/crypto/sha3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SHA3_384 // import golang.org/x/crypto/sha3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SHA3_512 // import golang.org/x/crypto/sha3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SHA512_224 // import crypto/sha512&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SHA512_256 // import crypto/sha512&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; BLAKE2s_256 // import golang.org/x/crypto/blake2s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; BLAKE2b_256 // import golang.org/x/crypto/blake2b&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; BLAKE2b_384 // import golang.org/x/crypto/blake2b&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; BLAKE2b_512 // import golang.org/x/crypto/blake2b&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;Let&amp;rsquo;s try out a simple MD5 hasher.&lt;/p&gt;</description></item><item><title>GoLang: encoding</title><link>https://samarthya.me/posts/golang-encoding/</link><pubDate>Sat, 30 Jan 2021 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/golang-encoding/</guid><description>&lt;p&gt;Package encoding provide capabilities to convert data to and from byte-level and textual representations.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;encoding/gob&lt;/li&gt;&#10;&lt;li&gt;encoding/json, and&lt;/li&gt;&#10;&lt;li&gt;encoding/xml&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; The &lt;em&gt;gob&lt;/em&gt; is Go’s format for &lt;em&gt;serializing&lt;/em&gt; and &lt;em&gt;deserializing&lt;/em&gt;. The gob was tailored for communicating between two servers written in Go.&#10;&lt;/div&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;Only exported fields are encoded; zero values are not taken into account&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Package gob manages streams of gobs – binary values exchanged between an Encoder (transmitter) and a Decoder (receiver).&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;Format GoB&#10; &lt;div id="format-gob" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#format-gob" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Let’s create a simple Type &lt;code&gt;Blog&lt;/code&gt; and we will encode and decode it using the gob format.&lt;/p&gt;</description></item><item><title>GoLang: Hex Output</title><link>https://samarthya.me/posts/golang-hex-output/</link><pubDate>Fri, 29 Jan 2021 17:47:07 +0000</pubDate><guid>https://samarthya.me/posts/golang-hex-output/</guid><description>&lt;p&gt;In last few blogs I have written about reading &lt;code&gt;commandline&lt;/code&gt; parameters reading &lt;code&gt;files&lt;/code&gt; and using the &lt;code&gt;os&lt;/code&gt; package.&lt;/p&gt;&#10;&lt;p&gt;In this blog, I will combine some these items to read a file &lt;code&gt;byte&lt;/code&gt; by &lt;code&gt;byte&lt;/code&gt; using the &lt;code&gt;bufio&lt;/code&gt; package &lt;code&gt;func&lt;/code&gt;&amp;rsquo;s.&lt;/p&gt;</description></item><item><title>GoLang: Program Banner</title><link>https://samarthya.me/posts/golang-program-banner/</link><pubDate>Fri, 29 Jan 2021 07:39:04 +0000</pubDate><guid>https://samarthya.me/posts/golang-program-banner/</guid><description>&lt;p&gt;In the last &lt;a href="https://samarthya.me/posts/golang-command-line-arguments/" &gt;blog&lt;/a&gt; I talked about command line arguments &lt;code&gt;os.Args[]&lt;/code&gt;. In this I will try and create a sample banner program that shall&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Take 3 arguments&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;n&lt;/code&gt; - Number of times a message has to be repeated.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;m&lt;/code&gt; - The message that needs to be shown.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;d&lt;/code&gt; - If debug message needs to be shown.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;I am going to use the &lt;code&gt;flags&lt;/code&gt; package.&lt;/p&gt;</description></item><item><title>GoLang: Command line arguments</title><link>https://samarthya.me/posts/golang-command-line-arguments/</link><pubDate>Wed, 27 Jan 2021 17:06:11 +0000</pubDate><guid>https://samarthya.me/posts/golang-command-line-arguments/</guid><description>&lt;p&gt;Reading the golang official documentation is fun, today I saw the &lt;code&gt;Variables&lt;/code&gt; in package &lt;code&gt;os&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; var Args []&lt;a href="https://golang.org/pkg/builtin/#string" target="_blank" rel="noreferrer"&gt;string&lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;It allows you to hold command line arguments and a simple main program that can help you validate this.&lt;/p&gt;</description></item><item><title>Missed Opportunity</title><link>https://samarthya.me/posts/missed-opportunity/</link><pubDate>Mon, 25 Jan 2021 13:17:28 +0000</pubDate><guid>https://samarthya.me/posts/missed-opportunity/</guid><description>&lt;p&gt;The new year did not begin on a note I would have expected, I missed out on a golden opportunity. It would have been a wonderful exposure had it sailed through, but as someone famously said&lt;/p&gt;</description></item><item><title>Files: GoLang</title><link>https://samarthya.me/posts/files-golang-2/</link><pubDate>Mon, 25 Jan 2021 12:46:47 +0000</pubDate><guid>https://samarthya.me/posts/files-golang-2/</guid><description>&lt;p&gt;In the last blog, I tried &lt;a href="https://samarthya.me/posts/files-golang/" &gt;reading a file in GoLang&lt;/a&gt;.&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; My repository in GitHub has all the code that I write (&lt;a href="https://github.com/samarthya/valueandpointer" target="_blank" rel="noreferrer"&gt;link&lt;/a&gt;)&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Now, I will extend the same program to write to the same file.&lt;/p&gt;</description></item><item><title>Pod &amp; Volume: K8S</title><link>https://samarthya.me/posts/pod-volume-k8s/</link><pubDate>Fri, 22 Jan 2021 10:19:46 +0000</pubDate><guid>https://samarthya.me/posts/pod-volume-k8s/</guid><description>&lt;p&gt;Everything in the same file&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apiVersion: v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kind: Pod&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;metadata:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; name: redispod&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spec:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; containers:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - image: redis&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; name: redisdb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; volumeMounts:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - name: redis-data&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mountPath: /data&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ports:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - containerPort: 6379&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; protocol: TCP&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; volumes:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - name: redis-data&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; persistentVolumeClaim:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; claimName: redisdb-pvc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apiVersion: v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kind: PersistentVolume&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;metadata:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; name: redis-pv&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spec:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; storageClassName: &amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; capacity:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; storage: 1Gi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; accessModes:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - ReadWriteOnce&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hostPath:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; path: &amp;#34;/mnt/data&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apiVersion: v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kind: PersistentVolumeClaim&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;metadata:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; name: redisdb-pvc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spec:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; storageClassName: &amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; accessModes:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - ReadWriteOnce&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; resources:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; requests:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; storage: 1Gi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;If you deploy you will get something like&lt;/p&gt;</description></item><item><title>Files: GoLang</title><link>https://samarthya.me/posts/files-golang/</link><pubDate>Thu, 21 Jan 2021 17:26:56 +0000</pubDate><guid>https://samarthya.me/posts/files-golang/</guid><description>&lt;p&gt;Learning a new syntax and the libraries is always a task, and the only way forward is gradual. In this blog I will try to create a small program to read a text file and will keep updating the program to include more sophistication&lt;/p&gt;</description></item><item><title>GOLang: Reflection</title><link>https://samarthya.me/posts/golang-reflection/</link><pubDate>Sat, 16 Jan 2021 08:18:34 +0000</pubDate><guid>https://samarthya.me/posts/golang-reflection/</guid><description>&lt;h2 class="relative group"&gt;Must Read&#10; &lt;div id="must-read" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#must-read" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://blog.golang.org/laws-of-reflection" target="_blank" rel="noreferrer"&gt;https://blog.golang.org/laws-of-reflection&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/pkg/reflect/" target="_blank" rel="noreferrer"&gt;https://golang.org/pkg/reflect/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/pkg/reflect/#Kind" target="_blank" rel="noreferrer"&gt;https://golang.org/pkg/reflect/#Kind&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/pkg/reflect/#Value" target="_blank" rel="noreferrer"&gt;https://golang.org/pkg/reflect/#Value&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Package reflect implements run-time reflection, allowing a program to manipulate objects with arbitrary types.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Reflection is a way to examine own structure. Let&amp;rsquo;s try and learn it via examples.&lt;/p&gt;</description></item><item><title>GOLang: Interfaces</title><link>https://samarthya.me/posts/golang-interfaces/</link><pubDate>Tue, 12 Jan 2021 09:26:04 +0000</pubDate><guid>https://samarthya.me/posts/golang-interfaces/</guid><description>&lt;p&gt;Interfaces are an interesting concept to learn in GOLANG. There are a tonne of informative articles and here is my contribution to it.&lt;/p&gt;&#10;&lt;p&gt;In classical Object Oriented everything is treated in parlance of &lt;code&gt;Object&lt;/code&gt; or &lt;code&gt;Class&lt;/code&gt; like in &lt;code&gt;Java&lt;/code&gt; or &lt;code&gt;C++&lt;/code&gt;. In Go there is no class or inheritance.&lt;/p&gt;</description></item><item><title>Taint Nodes</title><link>https://samarthya.me/posts/taint-nodes/</link><pubDate>Tue, 12 Jan 2021 08:57:23 +0000</pubDate><guid>https://samarthya.me/posts/taint-nodes/</guid><description>&lt;h2 class="relative group"&gt;Reference&#10; &lt;div id="reference" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#reference" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/" target="_blank" rel="noreferrer"&gt;https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/#example-use-cases" target="_blank" rel="noreferrer"&gt;https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/#example-use-cases&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Before we understand the tainting we should know about the Node Affinity. It the by the virtue of Affinity that pods attracts nodes as a preference or as a basic requirement.&lt;/p&gt;</description></item><item><title>Quick: Cheat Sheet</title><link>https://samarthya.me/posts/quick-cheat-sheet/</link><pubDate>Fri, 08 Jan 2021 11:04:34 +0000</pubDate><guid>https://samarthya.me/posts/quick-cheat-sheet/</guid><description>&lt;p&gt;A cheat sheet for Installing K8S cluster.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Step1:&#10; &lt;div id="step1" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step1" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Check your OS?&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;cat /etc/issue&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;lsb_release -a&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Step 2:&#10; &lt;div id="step-2" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-2" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Add the GPG key as described &lt;a href="https://docs.docker.com/engine/install/ubuntu/" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;</description></item><item><title>DevBhoomi: Uttarkhand</title><link>https://samarthya.me/posts/devbhoomi-uttarkhand/</link><pubDate>Thu, 07 Jan 2021 05:48:24 +0000</pubDate><guid>https://samarthya.me/posts/devbhoomi-uttarkhand/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Panorama of a river winding between forested hills in Uttarakhand, with a village on the far bank"&#10; width="6207"&#10; height="1978"&#10; src="https://samarthya.me/posts/devbhoomi-uttarkhand/img_20181015_100613-pano_hu_c2823e5c9d6bf386.jpg"&#10; srcset="https://samarthya.me/posts/devbhoomi-uttarkhand/img_20181015_100613-pano_hu_c2823e5c9d6bf386.jpg 800w, https://samarthya.me/posts/devbhoomi-uttarkhand/img_20181015_100613-pano_hu_e77f078e38e7374e.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/devbhoomi-uttarkhand/img_20181015_100613-pano.jpg"&gt;&lt;/figure&gt;</description></item><item><title>Maven: Lifecycles</title><link>https://samarthya.me/posts/maven-lifecycles/</link><pubDate>Thu, 24 Dec 2020 08:20:40 +0000</pubDate><guid>https://samarthya.me/posts/maven-lifecycles/</guid><description>&lt;p&gt;If you have worked with big projects you must have encountered &lt;code&gt;pom.xml&lt;/code&gt; the central configuration for your projects that helps you build, test, and define your CI pipeline. There are other options that are available too, but that is for some other day.&lt;/p&gt;</description></item><item><title>K8S: Deployment</title><link>https://samarthya.me/posts/k8s-deployment/</link><pubDate>Tue, 22 Dec 2020 12:45:09 +0000</pubDate><guid>https://samarthya.me/posts/k8s-deployment/</guid><description>&lt;p&gt;Time to re-test how to create deployments. It has been sometime, I created some deployments so just checking on how much I remember.&lt;/p&gt;&#10;&lt;p&gt;The quick way to always get started is to check the &lt;code&gt;HELP&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Fortune v1.0</title><link>https://samarthya.me/posts/fortune-v1-0/</link><pubDate>Wed, 16 Dec 2020 10:50:24 +0000</pubDate><guid>https://samarthya.me/posts/fortune-v1-0/</guid><description>&lt;p&gt;In one of recent discussions &lt;code&gt;with Mr. X&lt;/code&gt; I was asked about my approach to solving the Linux cookie problem&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;A random quote&lt;/li&gt;&#10;&lt;li&gt;Repository will be a text file&lt;/li&gt;&#10;&lt;li&gt;Each quote will be segregated by a &lt;code&gt;'%'&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Can be multiline.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;I always believe in incremental steps so here is what I could think of&lt;/p&gt;</description></item><item><title>Nth Prime</title><link>https://samarthya.me/posts/nth-prime/</link><pubDate>Tue, 15 Dec 2020 08:21:32 +0000</pubDate><guid>https://samarthya.me/posts/nth-prime/</guid><description>&lt;p&gt;Prime number is an age old problem. I am trying to solve it via streams.&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class PrimeCalculator {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public int nth(int nth) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (nth &amp;lt;= 0)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; throw new IllegalArgumentException();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // Will skip the nth - 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // 2 to n-1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return IntStream.iterate(2, i -&amp;gt; i + 1).filter(PrimeCalculator::isPrime).skip(nth - 1).findFirst().getAsInt();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public static boolean isPrime(int x) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // till half of x&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return IntStream.rangeClosed(2, (int) (x/2) ).dropWhile(i -&amp;gt; x % i != 0).findFirst().isEmpty();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Explanation&#10; &lt;div id="explanation" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#explanation" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;public int nth(int nth) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (nth &amp;lt;= 0)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; throw new IllegalArgumentException();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // Will skip the nth - 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // 2 to n-1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return IntStream.iterate(2, i -&amp;gt; i + 1).filter(PrimeCalculator::isPrime).skip(nth - 1).findFirst().getAsInt();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;The method &lt;code&gt;nth(int)&lt;/code&gt; allows you to return the nth prime starting at &lt;code&gt;2, 3, 5....&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Installing K8S on Ubuntu</title><link>https://samarthya.me/posts/installing-k8s-on-ubuntu/</link><pubDate>Mon, 14 Dec 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/installing-k8s-on-ubuntu/</guid><description>&lt;p&gt;Install docker&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /etc/issue&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ubuntu 18.04.4 LTS \n \l&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo add-apt-repository &amp;#34;deb [arch=amd64] https://download.docker.com/linux/ubuntu \&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$(lsb_release -cs) \&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stable&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-mark hold docker-ce&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-mark --help&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt 1.6.12ubuntu0.2 (amd64)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-mark is a simple command line interface for marking packages&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;as manually or automatically installed. It can also be used to&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;manipulate the dpkg(1) selection states of packages, and to list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;all packages with or without a certain marking.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lsb_release -c&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Codename: bionic&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lsb_release -cs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bionic&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl status docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;● docker.service - Docker Application Container Engine&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Active: active (running) since Mon 2020-12-14 09:05:39 UTC; 45s ago&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Docs: https://docs.docker.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Main PID: 662 (dockerd)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Tasks: 21&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CGroup: /system.slice/docker.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─662 /usr/bin/dockerd -H fd://&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─685 docker-containerd --config /var/run/docker/containerd/containerd.toml&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dec 14 09:05:39 ip-10-0-1-101 dockerd[662]: time=&amp;#34;2020-12-14T09:05:39.297237656Z&amp;#34; level=info msg=&amp;#34;ClientConn switching balancer to \&amp;#34;pick_first\&amp;#34;&amp;#34; module=grpc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dec 14 09:05:39 ip-10-0-1-101 dockerd[662]: time=&amp;#34;2020-12-14T09:05:39.297281586Z&amp;#34; level=info msg=&amp;#34;pickfirstBalancer: HandleSubConnStateChange: 0xc4201b7df0, CONNECTING&amp;#34; module=grpc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dec 14 09:05:39 ip-10-0-1-101 dockerd[662]: time=&amp;#34;2020-12-14T09:05:39.297797167Z&amp;#34; level=info msg=&amp;#34;pickfirstBalancer: HandleSubConnStateChange: 0xc4201b7df0, READY&amp;#34; module=grpc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dec 14 09:05:39 ip-10-0-1-101 dockerd[662]: time=&amp;#34;2020-12-14T09:05:39.297852837Z&amp;#34; level=info msg=&amp;#34;Loading containers: start.&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dec 14 09:05:39 ip-10-0-1-101 dockerd[662]: time=&amp;#34;2020-12-14T09:05:39.596242360Z&amp;#34; level=info msg=&amp;#34;Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP addres&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dec 14 09:05:39 ip-10-0-1-101 dockerd[662]: time=&amp;#34;2020-12-14T09:05:39.753685539Z&amp;#34; level=info msg=&amp;#34;Loading containers: done.&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dec 14 09:05:39 ip-10-0-1-101 dockerd[662]: time=&amp;#34;2020-12-14T09:05:39.822291121Z&amp;#34; level=info msg=&amp;#34;Docker daemon&amp;#34; commit=e68fc7a graphdriver(s)=overlay2 version=18.06.1-ce&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dec 14 09:05:39 ip-10-0-1-101 dockerd[662]: time=&amp;#34;2020-12-14T09:05:39.822430053Z&amp;#34; level=info msg=&amp;#34;Daemon has completed initialization&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dec 14 09:05:39 ip-10-0-1-101 dockerd[662]: time=&amp;#34;2020-12-14T09:05:39.853660664Z&amp;#34; level=info msg=&amp;#34;API listen on /var/run/docker.sock&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Dec 14 09:05:39 ip-10-0-1-101 systemd[1]: Started Docker Application Container Engine.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;lt;&amp;lt; EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deb https://apt.kubernetes.io/ kubernetes-xenial main&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install -y kubelet=1.14.5-00 kubeadm=1.14.5-00 kubectl=1.14.5-00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-mark hold kubelet kubeadm kubectl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo kubeadm init --pod-network-cidr=10.244.0.0/16&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I1214 09:10:37.236647 3055 version.go:240] remote version is much newer: v1.20.0; falling back to: stable-1.14&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[init] Using Kubernetes version: v1.14.10&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[preflight] Running pre-flight checks&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [WARNING IsDockerSystemdCheck]: detected &amp;#34;cgroupfs&amp;#34; as the Docker cgroup driver. The recommended driver is &amp;#34;systemd&amp;#34;. Please follow the guide at https://kubernetes.io/docs/setup/cri/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[preflight] Pulling images required for setting up a Kubernetes cluster&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[preflight] This might take a minute or two, depending on the speed of your internet connection&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[preflight] You can also perform this action in beforehand using &amp;#39;kubeadm config images pull&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[kubelet-start] Writing kubelet environment file with flags to file &amp;#34;/var/lib/kubelet/kubeadm-flags.env&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[kubelet-start] Writing kubelet configuration to file &amp;#34;/var/lib/kubelet/config.yaml&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[kubelet-start] Activating the kubelet service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Using certificateDir folder &amp;#34;/etc/kubernetes/pki&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Generating &amp;#34;etcd/ca&amp;#34; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Generating &amp;#34;etcd/server&amp;#34; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] etcd/server serving cert is signed for DNS names [ip-10-0-1-101 localhost] and IPs [10.0.1.101 127.0.0.1 ::1]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Generating &amp;#34;etcd/peer&amp;#34; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] etcd/peer serving cert is signed for DNS names [ip-10-0-1-101 localhost] and IPs [10.0.1.101 127.0.0.1 ::1]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Generating &amp;#34;apiserver-etcd-client&amp;#34; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Generating &amp;#34;etcd/healthcheck-client&amp;#34; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Generating &amp;#34;ca&amp;#34; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Generating &amp;#34;apiserver-kubelet-client&amp;#34; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Generating &amp;#34;apiserver&amp;#34; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] apiserver serving cert is signed for DNS names [ip-10-0-1-101 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.0.1.101]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Generating &amp;#34;front-proxy-ca&amp;#34; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Generating &amp;#34;front-proxy-client&amp;#34; certificate and key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[certs] Generating &amp;#34;sa&amp;#34; key and public key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[kubeconfig] Using kubeconfig folder &amp;#34;/etc/kubernetes&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[kubeconfig] Writing &amp;#34;admin.conf&amp;#34; kubeconfig file&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[kubeconfig] Writing &amp;#34;kubelet.conf&amp;#34; kubeconfig file&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[kubeconfig] Writing &amp;#34;controller-manager.conf&amp;#34; kubeconfig file&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[kubeconfig] Writing &amp;#34;scheduler.conf&amp;#34; kubeconfig file&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[control-plane] Using manifest folder &amp;#34;/etc/kubernetes/manifests&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[control-plane] Creating static Pod manifest for &amp;#34;kube-apiserver&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[control-plane] Creating static Pod manifest for &amp;#34;kube-controller-manager&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[control-plane] Creating static Pod manifest for &amp;#34;kube-scheduler&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[etcd] Creating static Pod manifest for local etcd in &amp;#34;/etc/kubernetes/manifests&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory &amp;#34;/etc/kubernetes/manifests&amp;#34;. This can take up to 4m0s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[apiclient] All control plane components are healthy after 16.001809 seconds&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[upload-config] storing the configuration used in ConfigMap &amp;#34;kubeadm-config&amp;#34; in the &amp;#34;kube-system&amp;#34; Namespace&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[kubelet] Creating a ConfigMap &amp;#34;kubelet-config-1.14&amp;#34; in namespace kube-system with the configuration for the kubelets in the cluster&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[upload-certs] Skipping phase. Please see --experimental-upload-certs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[mark-control-plane] Marking the node ip-10-0-1-101 as control-plane by adding the label &amp;#34;node-role.kubernetes.io/master=&amp;#39;&amp;#39;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[mark-control-plane] Marking the node ip-10-0-1-101 as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[bootstrap-token] Using token: xtpkvj.e81gaeg0v18shctg&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[bootstrap-token] creating the &amp;#34;cluster-info&amp;#34; ConfigMap in the &amp;#34;kube-public&amp;#34; namespace&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[addons] Applied essential addon: CoreDNS&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[addons] Applied essential addon: kube-proxy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your Kubernetes control-plane has initialized successfully!&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;To start using your cluster, you need to run the following as a regular user:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mkdir -p $HOME/.kube&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo chown $(id -u):$(id -g) $HOME/.kube/config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;You should now deploy a pod network to the cluster.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Run &amp;#34;kubectl apply -f [podnetwork].yaml&amp;#34; with one of the options listed at:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://kubernetes.io/docs/concepts/cluster-administration/addons/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Then you can join any number of worker nodes by running the following on each as root:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubeadm join 10.0.1.101:6443 --token xtpkvj.e81gaeg0v18shctg \&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --discovery-token-ca-cert-hash sha256:6c79fda4db86da060f083b35def6c39790c47f6533ab8f7ebb6ea30c2c2af6a3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>Metric Server</title><link>https://samarthya.me/posts/metric-server/</link><pubDate>Wed, 09 Dec 2020 08:01:49 +0000</pubDate><guid>https://samarthya.me/posts/metric-server/</guid><description>&lt;p&gt;For my local K8S cluster of 4 nodes I wanted to get the resource usage metrics. From the official documentation of kubernetes.io&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;These metrics can be accessed either directly by the user with the &lt;code&gt;kubectl top&lt;/code&gt; command, or by a controller in the cluster, for example Horizontal Pod Autoscaler, to make decisions.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://kubernetes.io" target="_blank" rel="noreferrer"&gt;https://kubernetes.io&lt;/a&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>controller-manager #Unhealthy</title><link>https://samarthya.me/posts/controller-manager-unhealthy/</link><pubDate>Wed, 09 Dec 2020 07:12:34 +0000</pubDate><guid>https://samarthya.me/posts/controller-manager-unhealthy/</guid><description>&lt;p&gt;In my K8S cluster when I was looking at component status I was observing an error.&lt;/p&gt;&#10;&lt;p&gt;Please note &lt;code&gt;componentstatus&lt;/code&gt; is deprecated in 1.19+ but the steps will still at least help out the OCD&amp;rsquo;s like me.&lt;/p&gt;</description></item><item><title>Building a tree from Traversal.</title><link>https://samarthya.me/posts/building-a-tree-from-traversal/</link><pubDate>Sun, 06 Dec 2020 10:26:53 +0000</pubDate><guid>https://samarthya.me/posts/building-a-tree-from-traversal/</guid><description>&lt;p&gt;What good is an software engineer if he can&amp;rsquo;t keep revisiting the DS problems. It is like a pill for my laziness that keeps crawling ever so often.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;The problem I am talking about is mentioned in this cool portal &lt;code&gt;exercism.io&lt;/code&gt; that I use almost on a weekly basis.&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Consumer &lt;Intf&gt;</title><link>https://samarthya.me/posts/consumer/</link><pubDate>Fri, 04 Dec 2020 14:38:51 +0000</pubDate><guid>https://samarthya.me/posts/consumer/</guid><description>&lt;p&gt;The utility package &lt;code&gt;java.util.function&lt;/code&gt; has this functional &lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html" target="_blank" rel="noreferrer"&gt;interface Consumer&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Each functional interface (Annotated with @&lt;a href="https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html" target="_blank" rel="noreferrer"&gt;FunctionalInterface&lt;/a&gt;) conceptually has a single method (abstract) called the functional method to which the lambda expression&amp;rsquo;s parameter and return types are matched against. Functional interfaces often represent abstract concepts like functions, actions, or predicates.&lt;/p&gt;</description></item><item><title>map and FlatMap</title><link>https://samarthya.me/posts/map-and-flatmap/</link><pubDate>Mon, 30 Nov 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/map-and-flatmap/</guid><description>&lt;h2 class="relative group"&gt;package java.util.stream;&#10; &lt;div id="package-javautilstream" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#package-javautilstream" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Referring to the original Java 8 &lt;a href="https://docs.oracle.com/javase/8/docs/api/index.html?java/util/stream/Stream.html" target="_blank" rel="noreferrer"&gt;Documentation&lt;/a&gt;.&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;R&amp;gt; Stream&amp;lt;R&amp;gt; flatMap(Function&amp;lt;? super T,? extends Stream&amp;lt;? extends R&amp;gt;&amp;gt; mapper)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Returns a stream consisting of&#10;&lt;ol&gt;&#10;&lt;li&gt;Results of &lt;strong&gt;replacing each element of this stream&lt;/strong&gt; with the contents of a mapped stream produced by applying the provided mapping function to each element.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import java.util.function.Function;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import java.util.stream.Collectors;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import java.util.stream.IntStream;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import java.util.stream.Stream;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;public class Main {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public static void main(String[] args) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; // write your code here&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; int myArray[] = { 1, 1, 2, 3, 4 , 5,6, 6,6, 7, 7, 7, 7, 7,7,3, 4, 3, 3, 2, 2, 2, 2, 2 };&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // Simple map&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // Multiply each element by 5&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Arrays.stream(myArray).map(index -&amp;gt; index * 5).forEach(System.out::println);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;The stream above multiplies each element by 5.&lt;/p&gt;</description></item><item><title>JavaStream: Characters</title><link>https://samarthya.me/posts/javastream-characters/</link><pubDate>Fri, 13 Nov 2020 10:20:02 +0000</pubDate><guid>https://samarthya.me/posts/javastream-characters/</guid><description>&lt;p&gt;Continuing from the last blog how about checking a pangram using streams.&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;public class PangramChecker {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; private String allChars = &amp;#34;abcdefghijklmnopqrstuvwxyz&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; public boolean isPangram(String input) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (input.length() &amp;lt;= 0 || input.isBlank()){&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return false;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return (allChars.chars().map(x -&amp;gt; (char) x).filter(x -&amp;gt; input.toLowerCase().indexOf(x) &amp;gt;= 0).count() == 26);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;All the for loops have been squeezed into a simple line&lt;/p&gt;</description></item><item><title>Java Streams</title><link>https://samarthya.me/posts/java-streams/</link><pubDate>Thu, 12 Nov 2020 11:47:49 +0000</pubDate><guid>https://samarthya.me/posts/java-streams/</guid><description>&lt;p&gt;&lt;em&gt;Stream&lt;/em&gt; is an new abstraction that lets one process data in a declarative way.&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; &lt;strong&gt;A stream does not store data and, in that sense, is not a data structure. It also never modifies the underlying data source.&lt;/strong&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The easiest way to learn a new API or a construct is by trying it. So here is an &lt;a href="https://github.com/samarthya/javaex/tree/local/grains" target="_blank" rel="noreferrer"&gt;exercise&lt;/a&gt; that I tried to learn the Stream API. This is an exercise from &lt;a href="https://exercism.io/my/solutions/428fcd2c497c4098b5bd3121a1d66110" target="_blank" rel="noreferrer"&gt;exercism.io&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>PS: Process Status</title><link>https://samarthya.me/posts/ps-process-status/</link><pubDate>Tue, 20 Oct 2020 11:13:18 +0000</pubDate><guid>https://samarthya.me/posts/ps-process-status/</guid><description>&lt;p&gt;MAN Pages are one source of truth for all curious queries.&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;man ps&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Name&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ps - report a snapshot of the current processes.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;It is used to display instant information about the active processes in the system.&lt;/p&gt;</description></item><item><title>Kernel Mode</title><link>https://samarthya.me/posts/kernel-mode/</link><pubDate>Sat, 17 Oct 2020 14:58:39 +0000</pubDate><guid>https://samarthya.me/posts/kernel-mode/</guid><description>&lt;p&gt;The CPU operates in two modes in Linux&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;User mode (non privileged mode)&lt;/li&gt;&#10;&lt;li&gt;Kernel mode (System mode)&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;When operating in Kernel mode it has un-restricted access to resources like memory and input output devices.&lt;/p&gt;</description></item><item><title>journalctl - Query the systemd journal</title><link>https://samarthya.me/posts/journalctl-query-the-systemd-journal/</link><pubDate>Sat, 17 Oct 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/journalctl-query-the-systemd-journal/</guid><description>&lt;p&gt;&lt;code&gt;journald&lt;/code&gt; is used to query the &lt;code&gt;systemd&lt;/code&gt; journal contents.&lt;/p&gt;&#10;&#10;&lt;h3 class="relative group"&gt;Example 1&#10; &lt;div id="example-1" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#example-1" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h3&gt;&#10;&lt;p&gt;Lets try and see the kubelet service logs in the &lt;code&gt;systemd&lt;/code&gt; journal&lt;/p&gt;</description></item><item><title>Linux Utils</title><link>https://samarthya.me/posts/linux-utils/</link><pubDate>Tue, 13 Oct 2020 08:29:43 +0000</pubDate><guid>https://samarthya.me/posts/linux-utils/</guid><description>&lt;h1 class="relative group"&gt;Ping&#10; &lt;div id="ping" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ping" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;I have used &lt;code&gt;ping&lt;/code&gt; often but never to an extend that I could understand the complete range of options and power available at hand.&lt;/p&gt;</description></item><item><title>Race condition</title><link>https://samarthya.me/posts/race-condition/</link><pubDate>Tue, 06 Oct 2020 10:46:18 +0000</pubDate><guid>https://samarthya.me/posts/race-condition/</guid><description>&lt;p&gt;When two processes are executing concurrently, the exact order of execution of instructions is not deterministic. Without explicit synchronization instructions it is difficult to predict the outcome of these concurrent execution of process.&lt;/p&gt;</description></item><item><title>SYSTEMD: Mother of all processes</title><link>https://samarthya.me/posts/systemd-mother-of-all-processes/</link><pubDate>Wed, 30 Sep 2020 14:33:47 +0000</pubDate><guid>https://samarthya.me/posts/systemd-mother-of-all-processes/</guid><description>&lt;p&gt;&lt;code&gt;systemd&lt;/code&gt; is the replacement system for System V and with the primary goal of starting services in parallel.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;Remember &lt;code&gt;init&lt;/code&gt; levels?&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; GRUB: Grand Unified Boot Loader&#10;— /boot/grub/grub.conf&#10;&lt;/div&gt;&#10;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="systemd architecture: utilities, daemons and targets built on the systemd core, its libraries and the Linux kernel"&#10; src="https://opensource.com/sites/default/files/uploads/systemd-architecture.png"&#10; &gt;&lt;/figure&gt;&#10;&lt;p&gt;Some key points&lt;/p&gt;</description></item><item><title>Business Agility</title><link>https://samarthya.me/posts/business-agility-safe5/</link><pubDate>Sun, 20 Sep 2020 10:03:52 +0000</pubDate><guid>https://samarthya.me/posts/business-agility-safe5/</guid><description>&lt;h2 class="relative group"&gt;Update&#10; &lt;div id="update" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#update" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;A dull Saturday, lazy morning and unfortunately the next door neighbor is down thanks to COVID-19. Hopefully he should recover just fine but till then we are also forced to be Home quarantined.&lt;/p&gt;</description></item><item><title>Writing Helm Charts</title><link>https://samarthya.me/posts/writing-charts/</link><pubDate>Mon, 14 Sep 2020 18:07:54 +0000</pubDate><guid>https://samarthya.me/posts/writing-charts/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; Helm is a dedicated package manager for Kubernetes.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Although the &lt;code&gt;Kubernetes&lt;/code&gt; objects are deployed in YAML&amp;rsquo;s there was a need to package and club them together and customise the deployment (not the K8S deployment).&lt;/p&gt;</description></item><item><title>Helm Install</title><link>https://samarthya.me/posts/helm-install/</link><pubDate>Sun, 06 Sep 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/helm-install/</guid><description>&lt;p&gt;OS version&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /etc/issue&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ubuntu 18.04.2 LTS \n \l&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl https://storage.googleapis.com/kubernetes-helm/helm-v2.12.3-linux-amd64.tar.gz &amp;gt; ./helm.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>Network Policy Restrictions</title><link>https://samarthya.me/posts/network-policy-restrictions/</link><pubDate>Fri, 04 Sep 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/network-policy-restrictions/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl run --namespace=np-demo nginx --replicas=2 --image=nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kind: NetworkPolicy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apiVersion: networking.k8s.io/v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;metadata:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; name: default-deny&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; namespace: np-demo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spec:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; podSelector:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; matchLabels: {}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k expose --namespace=np-demo deployment nginx --port=80&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kind: NetworkPolicy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apiVersion: networking.k8s.io/v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;metadata:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; name: access-nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; namespace: np-demo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spec:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; podSelector:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; matchLabels:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; run: nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ingress:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - from:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - podSelector:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; matchLabels:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; run: allowed&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;k run --namespace=np-demo no-access --rm -ti --image busybox /bin/sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -q --timeout=5 nginx -O -&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; k run --namespace=policy-demo allowed --rm -ti --image busybox /bin/sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>Helm Charts: Packaging</title><link>https://samarthya.me/posts/helm-charts-packaging/</link><pubDate>Wed, 02 Sep 2020 09:12:45 +0000</pubDate><guid>https://samarthya.me/posts/helm-charts-packaging/</guid><description>&lt;p&gt;Every software cycle includes packaging; which essentially describes how the software written is packaged and shared.&lt;/p&gt;&#10;&lt;p&gt;For the software built for Containers Helm is a popular choice of packaging the scripts.&lt;/p&gt;</description></item><item><title>PlayGround: K8S</title><link>https://samarthya.me/posts/playground-k8s/</link><pubDate>Mon, 31 Aug 2020 09:39:33 +0000</pubDate><guid>https://samarthya.me/posts/playground-k8s/</guid><description>&lt;p&gt;I have been working on Kubernetes cluster and will soon plan to give a Kubernetes Certified Developer exam. In my quest, I will just record some commands that I found helpful or useful in this blog. It may be multi-part, as I will keep adding on a daily basis the commands that I will be learning.&lt;/p&gt;</description></item><item><title>MultiContainer: K8S</title><link>https://samarthya.me/posts/multicontainer-k8s/</link><pubDate>Thu, 27 Aug 2020 11:18:17 +0000</pubDate><guid>https://samarthya.me/posts/multicontainer-k8s/</guid><description>&lt;h2 class="relative group"&gt;&lt;a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#pod-v1-core" target="_blank" rel="noreferrer"&gt;POD&lt;/a&gt;&#10; &lt;div id="pod" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pod" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Smallest deployment unit you can manage in K8S, is a &lt;code&gt;Pod&lt;/code&gt;. A pod may have one or more containers.&lt;/p&gt;</description></item><item><title>Helpful links for K8S</title><link>https://samarthya.me/posts/helpful-links-for-k8s/</link><pubDate>Wed, 26 Aug 2020 09:52:02 +0000</pubDate><guid>https://samarthya.me/posts/helpful-links-for-k8s/</guid><description>&lt;p&gt;Always remember to refer the API and elements for the YAML structure&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; &lt;a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#-strong-api-overview-strong-" target="_blank" rel="noreferrer"&gt;API Overview&lt;/a&gt;&#10;— official K8S documentation&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The &lt;code&gt;Kuberenetes&lt;/code&gt; documentation that has text descriptions and good explanatory examples.&lt;/p&gt;</description></item><item><title>Deployments: K8S</title><link>https://samarthya.me/posts/deployments-k8s/</link><pubDate>Mon, 24 Aug 2020 12:29:53 +0000</pubDate><guid>https://samarthya.me/posts/deployments-k8s/</guid><description>&lt;p&gt;A declarative way of maintaining the desired state.&lt;/p&gt;&#10;&lt;p&gt;Continuing my example from the last blog&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--- # Pod deployment&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apiVersion: apps/v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kind: Deployment&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;metadata:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; name: go-server-deployment&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spec:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; replicas: 2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; selector:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; matchLabels:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; app: my-go-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; template:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; metadata:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; labels:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; app: my-go-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; spec:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; containers:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - name: go-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; image: samarthya/epserver:2.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; resources:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; limits:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; memory: &amp;#34;256Mi&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cpu: &amp;#34;1024m&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; env:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - name: SERVERPORT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; value: &amp;#34;9090&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ports:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - containerPort: 9090&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Reference - https://kubernetes.io/docs/concepts/workloads/controllers/deployment/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;In my deployment, I have two replicas configured, which can be increased to three using the command like the one below.&lt;/p&gt;</description></item><item><title>NetworkPolicy: K8S</title><link>https://samarthya.me/posts/networkpolicy-k8s/</link><pubDate>Mon, 24 Aug 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/networkpolicy-k8s/</guid><description>&lt;p&gt;How can a pod communicate with the other pod? The answer to this question is through a network policy.&lt;/p&gt;&#10;&lt;p&gt;Network Policy is a specification of how groups of &lt;a href="https://kubernetes.io/docs/concepts/workloads/pods/" target="_blank" rel="noreferrer"&gt;pods&lt;/a&gt; are allowed to communicate with each other and other network endpoints.&lt;/p&gt;</description></item><item><title>Probes: K8S</title><link>https://samarthya.me/posts/probes-k8s/</link><pubDate>Sat, 22 Aug 2020 10:53:05 +0000</pubDate><guid>https://samarthya.me/posts/probes-k8s/</guid><description>&lt;p&gt;In this blog we will be talking about Liveness, Readiness and Startup probes of a container.&lt;/p&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; A &lt;em&gt;&lt;strong&gt;&lt;a href="https://samarthya.me/posts/services-k8s/" &gt;Service&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt; in Kubernetes is an abstraction which defines a logical set of Pods and a policy by which to access them.&#10;— - Life without a service&#10;&lt;/div&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;What is Kubelet?&#10; &lt;div id="what-is-kubelet" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-kubelet" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;Kubelet&lt;/code&gt; is a primary node agent that runs on every node.&lt;/li&gt;&#10;&lt;li&gt;Works in term of PodSpec, that describes a POD (JSON or Yaml).&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Liveness Probe&#10; &lt;div id="liveness-probe" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#liveness-probe" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;It is used by &lt;code&gt;kubelet&lt;/code&gt; to decide when to restart the container.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;periodSeconds&lt;/code&gt; defines when the &lt;code&gt;kubelet&lt;/code&gt; check periodically.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;initialDelaySeconds&lt;/code&gt; specifies the initial wait before checking.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;I just created a single container pod that will run &lt;code&gt;touch&lt;/code&gt; command to create a file and then it deletes that specific file after a delay, on which the livenessProbe is listening on and then once liveness fails we can check the container.&lt;/p&gt;</description></item><item><title>Services: K8S</title><link>https://samarthya.me/posts/services-k8s/</link><pubDate>Fri, 21 Aug 2020 17:34:29 +0000</pubDate><guid>https://samarthya.me/posts/services-k8s/</guid><description>&lt;p&gt;There are multiple &lt;code&gt;Kubernetes&lt;/code&gt; objects we will be talking about in this blog. Mainly Services, Selectors and Labels.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Service is an abstraction which defines a logical set of Pods and a policy by which to access them.&lt;/li&gt;&#10;&lt;li&gt;A Service in Kubernetes is a REST object, similar to a Pod.&lt;/li&gt;&#10;&lt;li&gt;Service tags the pods, logically grouping them using selectors.&lt;/li&gt;&#10;&lt;li&gt;Pods have a lifecycle, they are born, they live, process and then they die. The pods (desired state) can be managed using deployment.&lt;/li&gt;&#10;&lt;li&gt;A label is an identifying attribute of an object, and can be defined at the creation time, and subsequently modified and added at any time.&lt;/li&gt;&#10;&lt;li&gt;Label selector is a grouping primitive in Kubernetes and allows client/user to identify a set of objects. There are two sets of selectors&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;em&gt;equality-based&lt;/em&gt; and&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;set-based&lt;/em&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;&#10; An abstract way to expose an application running on a set of &lt;a href="https://kubernetes.io/docs/concepts/workloads/pods/" target="_blank" rel="noreferrer"&gt;Pods&lt;/a&gt; as a network service.&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The set of Pods targeted by a Service is usually determined by a selector.&lt;/p&gt;</description></item><item><title>ConfigMaps: K8S - 2</title><link>https://samarthya.me/posts/configmaps-k8s-2/</link><pubDate>Fri, 21 Aug 2020 12:24:01 +0000</pubDate><guid>https://samarthya.me/posts/configmaps-k8s-2/</guid><description>&lt;p&gt;We looked at using the environment variables using the configmap in the last &lt;a href="https://samarthya.me/posts/" &gt;blog&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;The config map remains the same but now in YAML.&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apiVersion: v1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kind: ConfigMap&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;metadata:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; name: happy-faces-mnt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;data:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; data.values: |-&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; my.name=samarthya&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; my.profession=engineer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;I will use this to mount it to a container and then see the contents of the file.&lt;/p&gt;</description></item><item><title>K8S</title><link>https://samarthya.me/posts/k8s/</link><pubDate>Mon, 17 Aug 2020 07:56:44 +0000</pubDate><guid>https://samarthya.me/posts/k8s/</guid><description>&lt;h2 class="relative group"&gt;What is K8S?&#10; &lt;div id="what-is-k8s" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-k8s" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;To manage distributed containerised workloads, you use Kubernetes.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;It is resilient declarative configuration.&lt;/li&gt;&#10;&lt;li&gt;It is open source platform.&lt;/li&gt;&#10;&lt;li&gt;It allows you to bundle and run your application.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="From the official Kubernetes documentation."&#10; src="https://d33wubrfki0l68.cloudfront.net/26a177ede4d7b032362289c6fccd448fc4a91174/eb693/images/docs/container_evolution.svg"&#10; &gt;&lt;figcaption&gt;From the official Kubernetes documentation.&lt;/figcaption&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Kubernetes objects&#10; &lt;div id="kubernetes-objects" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#kubernetes-objects" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;K8S objects are the persistent entities in the K8S system and thee entities are used to represent the state of the cluster.&lt;/p&gt;</description></item><item><title>Dockeriz'd service</title><link>https://samarthya.me/posts/dockerizd-service/</link><pubDate>Thu, 13 Aug 2020 05:51:34 +0000</pubDate><guid>https://samarthya.me/posts/dockerizd-service/</guid><description>&lt;p&gt;Someone asked me to define a simple docker pod for the service I wrote in GOLang &lt;a href="https://samarthya.me/posts/go-webservice-postget/" &gt;here.&lt;/a&gt; I completely forgot about it, till today.&lt;/p&gt;&#10;&lt;p&gt;So here is my first attempt at getting a docker image for the service.&lt;/p&gt;</description></item><item><title>Performance Tweaks: Kibana</title><link>https://samarthya.me/posts/performance-tweaks-kibana/</link><pubDate>Fri, 07 Aug 2020 13:23:55 +0000</pubDate><guid>https://samarthya.me/posts/performance-tweaks-kibana/</guid><description>&lt;p&gt;The performance I was getting after deploying &lt;code&gt;Elasticsearch&lt;/code&gt; 7.6.2 and &lt;code&gt;Kibana&lt;/code&gt; in my local VM&amp;rsquo;s was not satisfactory, so I thought of deploying a front proxy &lt;code&gt;Nginx&lt;/code&gt; in front and enabling static resources caching.&lt;/p&gt;</description></item><item><title>Docker network</title><link>https://samarthya.me/posts/docker-network/</link><pubDate>Tue, 04 Aug 2020 12:10:49 +0000</pubDate><guid>https://samarthya.me/posts/docker-network/</guid><description>&lt;h2 class="relative group"&gt;Learn by example&#10; &lt;div id="learn-by-example" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#learn-by-example" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;In this blog let&amp;rsquo;s learn how to create a bridge network. By definition - Bridge networks are usually used when your applications run in standalone containers that need to communicate&lt;/p&gt;</description></item><item><title>Timeseries &amp; Index Management (ILM)</title><link>https://samarthya.me/posts/timeseries-index-management-ilm/</link><pubDate>Sat, 01 Aug 2020 08:25:16 +0000</pubDate><guid>https://samarthya.me/posts/timeseries-index-management-ilm/</guid><description>&lt;p&gt;Timeseries is a data stream that is defined for a set of fields over a time period. Some examples may include, daily attendance register for an organization, wherein people punching in every-morning will be different, missing mostly for weekends or on planned and unplanned leaves.&lt;/p&gt;</description></item><item><title>Shared Volume</title><link>https://samarthya.me/posts/shared-volume/</link><pubDate>Fri, 31 Jul 2020 07:10:03 +0000</pubDate><guid>https://samarthya.me/posts/shared-volume/</guid><description>&lt;p&gt;&lt;a href="https://docs.docker.com/storage/images/types-of-mounts-volume.png" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Docker volume mount: the volume lives in Docker&amp;rsquo;s area of the host filesystem and is mounted into the container"&#10; src="https://docs.docker.com/storage/images/types-of-mounts-volume.png"&#10; &gt;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Volumes are managed by Docker and is the preferred way of persisting, sharing data.&lt;/p&gt;</description></item><item><title>Storage Drivers</title><link>https://samarthya.me/posts/storage-drivers/</link><pubDate>Thu, 30 Jul 2020 09:28:40 +0000</pubDate><guid>https://samarthya.me/posts/storage-drivers/</guid><description>&lt;p&gt;The storage driver allows your to create data in the writable layers of the container and it also controls how images and containers are stored and managed on the Docker host.&lt;/p&gt;</description></item><item><title>Docker Registry</title><link>https://samarthya.me/posts/docker-registry/</link><pubDate>Wed, 29 Jul 2020 10:23:38 +0000</pubDate><guid>https://samarthya.me/posts/docker-registry/</guid><description>&lt;blockquote&gt;&lt;p&gt;A Docker registry is a stateless, highly scalable server side application that stores and lets you distribute Docker images.&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;Docker registry is a central location that stores and distributes docker images. E.g. hub.docker.com is the default registry used when you are using &lt;code&gt;docker pull&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Dockerfile</title><link>https://samarthya.me/posts/dockerfile/</link><pubDate>Wed, 15 Jul 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/dockerfile/</guid><description>&lt;p&gt;&lt;code&gt;docker build&lt;/code&gt; builds a docker image by reading instructions (directives) from a text file called &lt;code&gt;Dockerfile&lt;/code&gt;&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;The build is run by the Docker daemon, not by the CLI&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 class="relative group"&gt;Hello World!&#10; &lt;div id="hello-world" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#hello-world" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;I would move in stages, like a good learning guide always recommends.&lt;/p&gt;</description></item><item><title>PV, PVC</title><link>https://samarthya.me/posts/pv-pvc/</link><pubDate>Wed, 15 Jul 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/pv-pvc/</guid><description>&lt;h2 class="relative group"&gt;PV and PVC: PersistentVolume and PersistentVolumeClaim&#10; &lt;div id="pv-and-pvc-persistentvolume-and-persistentvolumeclaim" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pv-and-pvc-persistentvolume-and-persistentvolumeclaim" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;PV - Defines the structure for provisioning storage for use. They have a defined lifecycle, independent of any individual Pod that uses the PV.&lt;/p&gt;</description></item><item><title>Docker</title><link>https://samarthya.me/posts/docker-ubuntu-a-refresher/</link><pubDate>Sat, 11 Jul 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/docker-ubuntu-a-refresher/</guid><description>&lt;p&gt;Usually I use Centos, but this time I wanted to try out docker swarm and ubuntu was the preferred option due to the options and supporting blogs available.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;Do read – &lt;a href="https://docs.docker.com/get-started/#containers-and-virtual-machines" target="_blank" rel="noreferrer"&gt;https://docs.docker.com/get-started/#containers-and-virtual-machines&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;docker.com&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Elastic Alerting</title><link>https://samarthya.me/posts/elastic-alerting/</link><pubDate>Sun, 05 Jul 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/elastic-alerting/</guid><description>&lt;h2 class="relative group"&gt;Watcher&#10; &lt;div id="watcher" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#watcher" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Watcher is an Elasticsearch feature that facilitates alerting and can be used to create actions based on conditions, which are periodically evaluated using queries on your data. There are two ways of creating a watcher&lt;/p&gt;</description></item><item><title>Devil’n the camera</title><link>https://samarthya.me/posts/deviln-the-camera/</link><pubDate>Wed, 17 Jun 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/deviln-the-camera/</guid><description>&lt;p&gt;&lt;a href="https://blog.samarthya.me/wps/2020/06/17/deviln-the-camera/img-20200614-wa0006/" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="768"&#10; height="1025"&#10; src="https://samarthya.me/posts/deviln-the-camera/img-20200614-wa0006.jpg"&#10; srcset="https://samarthya.me/posts/deviln-the-camera/img-20200614-wa0006.jpg 800w, https://samarthya.me/posts/deviln-the-camera/img-20200614-wa0006.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/deviln-the-camera/img-20200614-wa0006.jpg"&gt;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://blog.samarthya.me/wps/2020/06/17/deviln-the-camera/picsart_06-14-04-17-06/" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="1920"&#10; height="2560"&#10; src="https://samarthya.me/posts/deviln-the-camera/picsart_06-14-04.17.06_hu_981ac52a842e3bca.jpg"&#10; srcset="https://samarthya.me/posts/deviln-the-camera/picsart_06-14-04.17.06_hu_981ac52a842e3bca.jpg 800w, https://samarthya.me/posts/deviln-the-camera/picsart_06-14-04.17.06_hu_db264e173825ebb.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/deviln-the-camera/picsart_06-14-04.17.06.jpg"&gt;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://blog.samarthya.me/wps/2020/06/17/deviln-the-camera/img-20200615-wa0006/" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="779"&#10; height="1024"&#10; src="https://samarthya.me/posts/deviln-the-camera/img-20200615-wa0006.jpg"&#10; srcset="https://samarthya.me/posts/deviln-the-camera/img-20200615-wa0006.jpg 800w, https://samarthya.me/posts/deviln-the-camera/img-20200615-wa0006.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/deviln-the-camera/img-20200615-wa0006.jpg"&gt;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://blog.samarthya.me/wps/2020/06/17/deviln-the-camera/picsart_06-15-05-37-09/" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="1920"&#10; height="2560"&#10; src="https://samarthya.me/posts/deviln-the-camera/picsart_06-15-05.37.09_hu_2e3d44f43531612a.jpg"&#10; srcset="https://samarthya.me/posts/deviln-the-camera/picsart_06-15-05.37.09_hu_2e3d44f43531612a.jpg 800w, https://samarthya.me/posts/deviln-the-camera/picsart_06-15-05.37.09_hu_234f514313dffddb.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/deviln-the-camera/picsart_06-15-05.37.09.jpg"&gt;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>A different take: SIEM</title><link>https://samarthya.me/posts/a-different-take-siem/</link><pubDate>Sun, 14 Jun 2020 12:11:41 +0000</pubDate><guid>https://samarthya.me/posts/a-different-take-siem/</guid><description>&lt;p&gt;Security space is an ever evolving. It never stays stagnant; everyday you see a new exploit, a new hack. As an individual, you may have Antivirus installed on your system, Firewall - UP, ports blocked yet you are not free from threat&lt;/p&gt;</description></item><item><title>Aggregations: Elastic</title><link>https://samarthya.me/posts/aggregations-elastic/</link><pubDate>Tue, 09 Jun 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/aggregations-elastic/</guid><description>&lt;p&gt;Aggregation works on a group of documents and can be categorized&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Metric&lt;/li&gt;&#10;&lt;li&gt;Pipeline&lt;/li&gt;&#10;&lt;li&gt;Bucket&lt;/li&gt;&#10;&lt;li&gt;Matrix&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Metric Aggregation&#10; &lt;div id="metric-aggregation" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#metric-aggregation" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Computes a single or multiple values&lt;/p&gt;</description></item><item><title>LDAP Realm in Elasticsearch</title><link>https://samarthya.me/posts/ldap-realm-in-elasticsearch/</link><pubDate>Fri, 05 Jun 2020 04:18:06 +0000</pubDate><guid>https://samarthya.me/posts/ldap-realm-in-elasticsearch/</guid><description>&lt;p&gt;It is a short &lt;strong&gt;howto&lt;/strong&gt; guide which shall talk about adding a LDAP realm to an Elasticsearch 7.6.2 cluster.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Realms&#10; &lt;div id="realms" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#realms" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;It is a concept not alien to IDAM professionals. In simple words it is a system that allows you to authenticate and authorize an incoming request. It will define the entity USER, that may include at a bare minimum (not limited to)&lt;/p&gt;</description></item><item><title>Elastic: Realms</title><link>https://samarthya.me/posts/elastic-realms/</link><pubDate>Wed, 27 May 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/elastic-realms/</guid><description>&lt;p&gt;In this blog we will try to setup a realm for elastic authentication.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;yum -y install openldap-clients openldap-servers&lt;/code&gt;&lt;/p&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Terminal output of yum installing the openldap-clients and openldap-servers packages on CentOS 7"&#10; width="1536"&#10; height="784"&#10; src="https://samarthya.me/posts/elastic-realms/screenshot-2020-05-27-at-1.05.45-pm_hu_d69433f30cd8841.png"&#10; srcset="https://samarthya.me/posts/elastic-realms/screenshot-2020-05-27-at-1.05.45-pm_hu_d69433f30cd8841.png 800w, https://samarthya.me/posts/elastic-realms/screenshot-2020-05-27-at-1.05.45-pm_hu_fa7d9118087ed218.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/elastic-realms/screenshot-2020-05-27-at-1.05.45-pm.png"&gt;&lt;/figure&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;systemctl start slapd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;systemctl enable slapd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Created symlink from /etc/systemd/system/multi-user.target.wants/slapd.service to /usr/lib/systemd/system/slapd.service.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;slappasswd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;New password: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Re-enter new password: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{SSHA}R5nPS+zItZsQrfsw+PIQSNnEiMpLcwLs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;vi /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# CRC32 975a66fa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: olcDatabase={2}hdb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: olcDatabaseConfig&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: olcHdbConfig&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcDatabase: {2}hdb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcDbDirectory: /var/lib/ldap&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcSuffix: dc=my-domain,dc=com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcRootDN: cn=Manager,dc=my-domain,dc=com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcDbIndex: objectClass eq,pres&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;structuralObjectClass: olcHdbConfig&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;entryUUID: 64a2a5de-3438-103a-8e85-c1c4cc3ef35f&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;creatorsName: cn=config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;createTimestamp: 20200527073533Z&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;entryCSN: 20200527073533.541185Z#000000#000#000000&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modifiersName: cn=config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modifyTimestamp: 20200527073533Z&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;firewall-cmd --add-service=ldap&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;success&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;vi ldaproot.ldif&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: olcDatabase={0}config,cn=config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;changetype: modify&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add: olcRootPW&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcRootPW: {SSHA}R5nPS+zItZsQrfsw+PIQSNnEiMpLcwLs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;ldapadd -Y EXTERNAL -H ldapi:/// -f ldaproot.ldif &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL/EXTERNAL authentication started&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL SSF: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modifying entry &amp;#34;olcDatabase={0}config,cn=config&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;chown -R ldap:ldap /var/lib/ldap/DB_CONFIG&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;systemctl restart slapd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL/EXTERNAL authentication started&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL SSF: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adding new entry &amp;#34;cn=cosine,cn=schema,cn=config&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL/EXTERNAL authentication started&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL SSF: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adding new entry &amp;#34;cn=nis,cn=schema,cn=config&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL/EXTERNAL authentication started&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL SSF: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adding new entry &amp;#34;cn=inetorgperson,cn=schema,cn=config&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi ldapdomain.ldif&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: olcDatabase={1}monitor,cn=config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;changetype: modify&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;replace: olcAccess&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcAccess: {0}to * by dn.base=&amp;#34;gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; read by dn.base=&amp;#34;cn=Manager,dc=samarthya,dc=com&amp;#34; read by * none&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: olcDatabase={2}hdb,cn=config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;changetype: modify&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;replace: olcSuffix&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcSuffix: dc=samarthya,dc=com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: olcDatabase={2}hdb,cn=config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;changetype: modify&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;replace: olcRootDN&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcRootDN: cn=Manager,dc=samarthya,dc=com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: olcDatabase={2}hdb,cn=config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;changetype: modify&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add: olcRootPW&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcRootPW: {SSHA}R5nPS+zItZsQrfsw+PIQSNnEiMpLcwLs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: olcDatabase={2}hdb,cn=config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;changetype: modify&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add: olcAccess&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcAccess: {0}to attrs=userPassword,shadowLastChange by&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dn=&amp;#34;cn=Manager,dc=samarthya,dc=com&amp;#34; write by anonymous auth by self write by * none&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcAccess: {1}to dn.base=&amp;#34;&amp;#34; by * read&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;olcAccess: {2}to * by dn=&amp;#34;cn=Manager,dc=samarthya,dc=com&amp;#34; write by * read&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;ldapmodify -Y EXTERNAL -H ldapi:/// -f ldapdomain.ldif&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL/EXTERNAL authentication started&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SASL SSF: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modifying entry &amp;#34;olcDatabase={1}monitor,cn=config&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modifying entry &amp;#34;olcDatabase={2}hdb,cn=config&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modifying entry &amp;#34;olcDatabase={2}hdb,cn=config&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modifying entry &amp;#34;olcDatabase={2}hdb,cn=config&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modifying entry &amp;#34;olcDatabase={2}hdb,cn=config&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;vi baseldapdomain.ldif&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: dc=samarthya,dc=com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: top&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: dcObject&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectclass: organization&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;o: samarthya com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dc: samarthya&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: cn=Manager,dc=samarthya,dc=com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: organizationalRole&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cn: Manager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: Directory Manager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: ou=People,dc=samarthya,dc=com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: organizationalUnit&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ou: People&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: ou=Group,dc=samarthya,dc=com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: organizationalUnit&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ou: Group&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;ldapadd -x -D cn=Manager,dc=samarthya,dc=com -W -f baseldapdomain.ldif&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter LDAP Password: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adding new entry &amp;#34;dc=samarthya,dc=com&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adding new entry &amp;#34;cn=Manager,dc=samarthya,dc=com&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adding new entry &amp;#34;ou=People,dc=samarthya,dc=com&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adding new entry &amp;#34;ou=Group,dc=samarthya,dc=com&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: cn=Manager,ou=Group,dc=samarthya,dc=com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: top&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: posixGroup&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gidNumber: 1009&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ldapadd -x -W -D &amp;#34;cn=Manager,dc=samarthya,dc=com&amp;#34; -f ldapgroup.ldif&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter LDAP Password: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adding new entry &amp;#34;cn=Manager,ou=Group,dc=samarthya,dc=com&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;useradd samarthya&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;passwd samarthya&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Changing password for user samarthya.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mymachine&amp;gt;ldapadd -x -D cn=Manager,dc=samarthya,dc=com -W -f ldauser.ldif&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter LDAP Password: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adding new entry &amp;#34;uid=samarthya,ou=People,dc=samarthya,dc=com&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dn: uid=samarthya,ou=People,dc=samarthya,dc=com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: top&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: account&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: posixAccount&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;objectClass: shadowAccount&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cn: samarthya&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uid: samarthya&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uidNumber: 1005&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gidNumber: 1005&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;homeDirectory: /home/samarthya&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;userPassword: {SSHA}R5nPS+zItZsQrfsw+PIQSNnEiMpLcwLs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;loginShell: /bin/bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gecos: samarthya&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;shadowLastChange: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;shadowMax: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;shadowWarning: 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Installing phpLdap&#10; &lt;div id="installing-phpldap" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#installing-phpldap" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum install php-ldap php-mbstring php-pear php-xml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Terminal output of yum installing php-ldap, php-mbstring, php-pear and php-xml with dependencies"&#10; width="1631"&#10; height="1023"&#10; src="https://samarthya.me/posts/elastic-realms/screenshot-2020-05-27-at-1.47.26-pm_hu_9fed6b70fdc1c8ba.png"&#10; srcset="https://samarthya.me/posts/elastic-realms/screenshot-2020-05-27-at-1.47.26-pm_hu_9fed6b70fdc1c8ba.png 800w, https://samarthya.me/posts/elastic-realms/screenshot-2020-05-27-at-1.47.26-pm_hu_5240a506f8d4d718.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/elastic-realms/screenshot-2020-05-27-at-1.47.26-pm.png"&gt;&lt;/figure&gt;&#10;&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-7" target="_blank" rel="noreferrer"&gt;https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-7&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Elastic: _security API</title><link>https://samarthya.me/posts/elastic-_security-api/</link><pubDate>Thu, 21 May 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/elastic-_security-api/</guid><description>&lt;p&gt;Kibana is an effective way of managing users; but as a programmer you always need an API.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;It helps to integrate with other applications you are building&lt;/li&gt;&#10;&lt;li&gt;Quick and clean way without any cosmetics&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; GET /_security/_authenticate HTTP/1.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; Host: myserver.elastic.node:9200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; Authorization: Basic ABCDEFGHIJKLMNOP==&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; User-Agent: insomnia/7.1.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; Accept: */*&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt; HTTP/1.1 200 OK&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt; content-type: application/json; charset=UTF-8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt; content-length: 236&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* Received 236 B chunk&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* Connection #2 to host myserver.elastic.node left intact&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GET https://myserver.elastic.node:9200/_security/_authenticate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;I have added basic authentication to quickly check&lt;/p&gt;</description></item><item><title>Go: WebService [POST][GET]</title><link>https://samarthya.me/posts/go-webservice-postget/</link><pubDate>Wed, 20 May 2020 08:38:20 +0000</pubDate><guid>https://samarthya.me/posts/go-webservice-postget/</guid><description>&lt;h2 class="relative group"&gt;GOLANG&#10; &lt;div id="golang" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#golang" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Go is a powerful yet simple language. The nuances of assembling a &lt;strong&gt;workspace&lt;/strong&gt;, sometimes are overwhelming, yet when it comes to simplicity it is very powerful.&lt;/p&gt;</description></item><item><title>Go: Helpful links</title><link>https://samarthya.me/posts/go-helpful-links/</link><pubDate>Tue, 19 May 2020 11:13:28 +0000</pubDate><guid>https://samarthya.me/posts/go-helpful-links/</guid><description>&lt;h1 class="relative group"&gt;Helpful links&#10; &lt;div id="helpful-links" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#helpful-links" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/pkg/net/http/#pkg-overview" target="_blank" rel="noreferrer"&gt;http package&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/doc/code.html#Introduction" target="_blank" rel="noreferrer"&gt;How to write go code.&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/doc/code.html#Command" target="_blank" rel="noreferrer"&gt;First program&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/doc/effective_go.html#introduction" target="_blank" rel="noreferrer"&gt;Effective go&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/doc/effective_go.html#web_server" target="_blank" rel="noreferrer"&gt;GO webserver&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/pkg/" target="_blank" rel="noreferrer"&gt;GO Packages&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/ref/spec#Introduction" target="_blank" rel="noreferrer"&gt;Specification - Go&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.golang.org/json" target="_blank" rel="noreferrer"&gt;JSON in Go blog&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies" target="_blank" rel="noreferrer"&gt;Go command reference&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.golang.org/using-go-modules" target="_blank" rel="noreferrer"&gt;Using Go modules&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;These are some of the helpful links I have used in the past for understanding Go and developing code.&lt;/p&gt;</description></item><item><title>WebService: In golang</title><link>https://samarthya.me/posts/webservice-in-golang/</link><pubDate>Fri, 15 May 2020 11:42:46 +0000</pubDate><guid>https://samarthya.me/posts/webservice-in-golang/</guid><description>&lt;p&gt;Having practiced creating loads of &lt;code&gt;Console based&lt;/code&gt; programs of &lt;code&gt;golang&lt;/code&gt;, it is now time to try something new - A Web Service.&lt;/p&gt;&#10;&lt;p&gt;In this blog, I will try and create a Web Service (RESTful) that will be built entirely on Go.&lt;/p&gt;</description></item><item><title>GoLang: SmipleCipher v2.0</title><link>https://samarthya.me/posts/golang-smiplecipher-v2-0/</link><pubDate>Tue, 12 May 2020 11:23:34 +0000</pubDate><guid>https://samarthya.me/posts/golang-smiplecipher-v2-0/</guid><description>&lt;p&gt;So continuing from the last &lt;a href="https://samarthya.me/posts/golang-simplecipher/" &gt;blog&lt;/a&gt; where I wrote a crude version of SimpleCipher and was inclined on removing the duplicate code, here I am with the improved version.&lt;/p&gt;&#10;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Caesar cipher diagram: each letter is shifted three positions along the alphabet"&#10; width="300"&#10; height="127"&#10; src="https://samarthya.me/posts/golang-smiplecipher-v2-0/simplecipher.png"&#10; srcset="https://samarthya.me/posts/golang-smiplecipher-v2-0/simplecipher.png 800w, https://samarthya.me/posts/golang-smiplecipher-v2-0/simplecipher.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/golang-smiplecipher-v2-0/simplecipher.png"&gt;&lt;/figure&gt;&#10;&#10;&lt;h3 class="relative group"&gt;Handy links&#10; &lt;div id="handy-links" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#handy-links" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;[fmt&lt;/code&gt;](&lt;a href="https://golang.org/pkg/fmt/" target="_blank" rel="noreferrer"&gt;https://golang.org/pkg/fmt/&lt;/a&gt;) package&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;[strings](https://golang.org/pkg/strings/)&lt;/code&gt; package.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Defining &lt;code&gt;types&lt;/code&gt;&#10; &lt;div id="defining-types" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#defining-types" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;While I compiled and unit tested code the general feeling was what can be optimized.&lt;/p&gt;</description></item><item><title>GoLang: SimpleCipher</title><link>https://samarthya.me/posts/golang-simplecipher/</link><pubDate>Mon, 11 May 2020 10:14:20 +0000</pubDate><guid>https://samarthya.me/posts/golang-simplecipher/</guid><description>&lt;p&gt;Hello back again, Golang is just a new syntax for me. Even though behind the scenes they developers have simplified many things, for a consumer like me writing a program is more about learning the new syntax and getting familiarized with the control and stack.&lt;/p&gt;</description></item><item><title>Analyze: _analyze api</title><link>https://samarthya.me/posts/analyze-_analyze-api/</link><pubDate>Sat, 02 May 2020 10:21:09 +0000</pubDate><guid>https://samarthya.me/posts/analyze-_analyze-api/</guid><description>&lt;p&gt;Text is a key data in most of the information that is ingested in the &lt;strong&gt;elasticsearch&lt;/strong&gt;, and whether it is type &lt;code&gt;text&lt;/code&gt; or &lt;code&gt;keyword&lt;/code&gt; it requires careful consideration to choose which analyzer to use.&lt;/p&gt;</description></item><item><title>Painless Scripting</title><link>https://samarthya.me/posts/painless-scripting/</link><pubDate>Sat, 02 May 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/painless-scripting/</guid><description>&lt;p&gt;&lt;em&gt;Painless&lt;/em&gt; is a &lt;strong&gt;simple&lt;/strong&gt;, &lt;strong&gt;secure&lt;/strong&gt; scripting language designed specifically for use with Elasticsearch.&lt;/p&gt;&#10;&lt;p&gt;The official guide is available &lt;a href="https://www.elastic.co/guide/en/elasticsearch/painless/7.4/painless-guide.html" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>My li'l one</title><link>https://samarthya.me/posts/my-lil-one/</link><pubDate>Sun, 26 Apr 2020 16:09:48 +0000</pubDate><guid>https://samarthya.me/posts/my-lil-one/</guid><description>&lt;p&gt;[gallery columns=&amp;ldquo;1&amp;rdquo; size=&amp;ldquo;full&amp;rdquo; link=&amp;ldquo;none&amp;rdquo; ids=&amp;ldquo;617&amp;rdquo; orderby=&amp;ldquo;rand&amp;rdquo;]&lt;/p&gt;</description></item><item><title>Amy rose.</title><link>https://samarthya.me/posts/amy-rose/</link><pubDate>Sun, 26 Apr 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/amy-rose/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt=""&#10; width="1982"&#10; height="2643"&#10; src="https://samarthya.me/posts/amy-rose/picsart_04-18-08.27.21-1_hu_bf2a315ed781a644.jpg"&#10; srcset="https://samarthya.me/posts/amy-rose/picsart_04-18-08.27.21-1_hu_bf2a315ed781a644.jpg 800w, https://samarthya.me/posts/amy-rose/picsart_04-18-08.27.21-1_hu_2d0f3d4ebb5c9d2d.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/amy-rose/picsart_04-18-08.27.21-1.jpg"&gt;&lt;/figure&gt;</description></item><item><title>Index Modules</title><link>https://samarthya.me/posts/index-modules/</link><pubDate>Thu, 23 Apr 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/index-modules/</guid><description>&lt;p&gt;Index modules are a complex subject; they are defined per index and control every aspect of an index.&lt;/p&gt;&#10;&lt;p&gt;There are two types of settings for an index&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Static: Can usually be defined at the creation time &lt;strong&gt;or&lt;/strong&gt; when the index is closed.&#10;&lt;ul&gt;&#10;&lt;li&gt;index can be closed by invoking the _close api.&lt;/li&gt;&#10;&lt;li&gt;E.g. index.number_of_shards, index.shard.check_on_startup etc.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Dynamic: Can be changed on the live index using &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-update-settings.html" target="_blank" rel="noreferrer"&gt;index settings&lt;/a&gt; api.&#10;&lt;ul&gt;&#10;&lt;li&gt;E.g. index.number_of_replicas, index.refresh_interval etc.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;More details available &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/master/index-modules.html#dynamic-index-settings" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Pipeline: _ingest API</title><link>https://samarthya.me/posts/pipeline-_ingest-api/</link><pubDate>Thu, 23 Apr 2020 11:08:40 +0000</pubDate><guid>https://samarthya.me/posts/pipeline-_ingest-api/</guid><description>&lt;p&gt;Pipelines is a smooth way of processing some incoming data. In this blog, I will walk through some of the items I have tried my hands on.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Pipeline&#10; &lt;div id="pipeline" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pipeline" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;A pipeline is a definition of a series of processors that are to be executed in the same order as they are declared.&lt;/p&gt;</description></item><item><title>_reindex, _update_by_query &amp; _delete_by_query</title><link>https://samarthya.me/posts/_reindex-_update_by_query-_delete_by_query/</link><pubDate>Fri, 17 Apr 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/_reindex-_update_by_query-_delete_by_query/</guid><description>&lt;h2 class="relative group"&gt;_reindex&#10; &lt;div id="_reindex" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#_reindex" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;blockquote&gt;&lt;p&gt;Official documentation &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.6/docs-reindex.html" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;This API is meant for copying data from one index to another. It is especially useful when you are copying data from one index to another.&lt;/p&gt;</description></item><item><title>Cluster: Elastic 7.3</title><link>https://samarthya.me/posts/cluster-elastic-7-3/</link><pubDate>Tue, 14 Apr 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/cluster-elastic-7-3/</guid><description>&lt;p&gt;What is intriguing about elastic stack is that; it can do so many things that it simplifies the life of a security analyst. The uphill task is to learn the technology itself, but once you have mastered it, things are much easier.&lt;/p&gt;</description></item><item><title>Kuberenetes: Rest API</title><link>https://samarthya.me/posts/kuberenetes-rest-api/</link><pubDate>Wed, 08 Apr 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/kuberenetes-rest-api/</guid><description>&lt;p&gt;The Rest API is the fundamental fabric of K8S. Every communication that happens between components, happens through the API invocations.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;Consequently, everything in the Kubernetes platform is treated as an API object and has a corresponding entry in the &lt;a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/" target="_blank" rel="noreferrer"&gt;API&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Kubectl - A revisit</title><link>https://samarthya.me/posts/kubectl/</link><pubDate>Tue, 07 Apr 2020 16:58:30 +0000</pubDate><guid>https://samarthya.me/posts/kubectl/</guid><description>&lt;p&gt;It is always fun learning and trying out some new tech. In this blog, I will try and capture my experience of running my first pod using &lt;code&gt;kubectl&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;If you wish to learn how to install a typical master, worker cluster of K8S I recommend going through this &lt;a href="https://www.tecmint.com/install-kubernetes-cluster-on-centos-7/" target="_blank" rel="noreferrer"&gt;blog&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>API _reindex</title><link>https://samarthya.me/posts/api-_reindex/</link><pubDate>Mon, 06 Apr 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/api-_reindex/</guid><description>&lt;p&gt;I will extrapolating based on the original documentation available &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt; and based on some of my experience using this API.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;It copies documents from one index to another.&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;Extracts the document source from the source index and indexes the documents into the destination index. You can copy all documents to the destination index, or reindex a subset of the documents.&lt;/p&gt;</description></item><item><title>Painless Scripting</title><link>https://samarthya.me/posts/painless-scripting-2/</link><pubDate>Mon, 06 Apr 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/painless-scripting-2/</guid><description>&lt;p&gt;Watcher&lt;/p&gt;</description></item><item><title>ECS: Elastic common schema</title><link>https://samarthya.me/posts/ecs-elastic-common-schema/</link><pubDate>Thu, 02 Apr 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ecs-elastic-common-schema/</guid><description>&lt;p&gt;Open specification for document fields for data ingested in Elasticsearch. It brings uniformity to certain common fields that are used across data sources.&lt;/p&gt;&#10;&lt;p&gt;ECS defines two field levels&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Core fields: Represent the fields that are most common across all use cases.&lt;/li&gt;&#10;&lt;li&gt;Extended fields: That are not part of the core and specific to cases.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Field sets&#10; &lt;div id="field-sets" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#field-sets" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Field sets are multiple groups of related fields defined by ECS. More information &lt;a href="https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html" target="_blank" rel="noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Text - Elastic</title><link>https://samarthya.me/posts/text-elastic/</link><pubDate>Sun, 29 Mar 2020 17:37:33 +0000</pubDate><guid>https://samarthya.me/posts/text-elastic/</guid><description>&lt;p&gt;If you are not aware of mapping, it might be a little confusing but I would try my best.&lt;/p&gt;&#10;&lt;p&gt;Every document that gets indexed in elastic has fields, every field that is accessible has an associated type with it (Inverted Index) which helps elastic organize data for quick retrieval.&lt;/p&gt;</description></item><item><title>Say a Number</title><link>https://samarthya.me/posts/say-a-number/</link><pubDate>Sun, 29 Mar 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/say-a-number/</guid><description>&lt;p&gt;With the Corona-Lockdown in place “literally”, it was time to squeeze out some me-time to continue the quest for GO-Proficiency.&lt;/p&gt;&#10;&lt;p&gt;Sometimes you re-do optimization in your head so many times that it takes a whole day to see through the mistake you are making.&lt;/p&gt;</description></item><item><title>Securing Elasticsearch</title><link>https://samarthya.me/posts/securing-elasticsearch/</link><pubDate>Wed, 25 Mar 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/securing-elasticsearch/</guid><description>&lt;p&gt;In this post I will try to enable security for the elasticsearch cluster. It would be simply penned as a sequence of steps you need to follow to enable security as part of the cluster.&lt;/p&gt;</description></item><item><title>Snapshot &amp; Restore</title><link>https://samarthya.me/posts/snapshot-restore/</link><pubDate>Wed, 26 Feb 2020 08:58:21 +0000</pubDate><guid>https://samarthya.me/posts/snapshot-restore/</guid><description>&lt;p&gt;If you have a production grade elastic cluster it is always recommended to do a regular backup as a standard practice.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;Snapshot is a backup of information, that can be be used to restore the last known good state of the system&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Elasticsearch v7.6</title><link>https://samarthya.me/posts/elasticsearch-v7-6-2/</link><pubDate>Mon, 24 Feb 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/elasticsearch-v7-6-2/</guid><description>&lt;p&gt;In the previous blog we searched for a match_all, and sorted it by age. In this we will improve upon the query we are writing and look for other options.&lt;/p&gt;</description></item><item><title>Elasticsearch v7.6</title><link>https://samarthya.me/posts/elasticsearch-v7-6/</link><pubDate>Fri, 21 Feb 2020 11:24:29 +0000</pubDate><guid>https://samarthya.me/posts/elasticsearch-v7-6/</guid><description>&lt;p&gt;What I have been doing is evaluating Elasticsearch. The indexing, searching (Phrase, Similarity, Structured, Full Text, Complex), clustering etc. In this blog I will just try and simplify the learning curve.&lt;/p&gt;</description></item><item><title>Package String</title><link>https://samarthya.me/posts/package-string/</link><pubDate>Sat, 15 Feb 2020 11:40:19 +0000</pubDate><guid>https://samarthya.me/posts/package-string/</guid><description>&lt;p&gt;Just like Java or C++ there are standard libraries (packages) available with golang. The one that you might end up using the most often is &lt;code&gt;strings&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;For this blog, I was writing another practice &lt;a href="https://exercism.io/my/tracks/go" target="_blank" rel="noreferrer"&gt;exercise&lt;/a&gt; that is meant to count number of words in an input string.&lt;/p&gt;</description></item><item><title>Sieve of Eratosthenes</title><link>https://samarthya.me/posts/sieve-of-eratosthenes/</link><pubDate>Thu, 13 Feb 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/sieve-of-eratosthenes/</guid><description>&lt;p&gt;&lt;a href="https://exercism.io/my/solutions/28fecb68ecea4dcaa19d899dfa38a1e2" target="_blank" rel="noreferrer"&gt;Sieve&lt;/a&gt; is an ancient and an ingenious way of calculating primes. It recursively eliminates all the multiples of a particular number up till a range and the left overs are essentially primes.&lt;/p&gt;</description></item><item><title>Authentication: Elastic</title><link>https://samarthya.me/posts/authentication-elastic/</link><pubDate>Thu, 13 Feb 2020 10:41:10 +0000</pubDate><guid>https://samarthya.me/posts/authentication-elastic/</guid><description>&lt;p&gt;As a software professional, I have been working in the space of IAM, SSO, DRM for quite some time and from my experience I can say, the way Elastic has simplified the integration of external or internal security for access is a treat for fellow developers. It was interesting to experiment with the security settings, and control tenancy.&lt;/p&gt;</description></item><item><title>SIEM: Security Information and Event Management.</title><link>https://samarthya.me/posts/siem-security-information-and-event-management/</link><pubDate>Tue, 11 Feb 2020 10:42:16 +0000</pubDate><guid>https://samarthya.me/posts/siem-security-information-and-event-management/</guid><description>&lt;p&gt;Data is key to any analytics, and if it can be &lt;strong&gt;organized&lt;/strong&gt;, &lt;strong&gt;normalized&lt;/strong&gt; and made available for correlated analysis, the results will be more concise. &lt;strong&gt;Elastic.co&lt;/strong&gt; has a SIEM UI and the XPack security pack that helps the new age security analysts.&lt;/p&gt;</description></item><item><title>GOLANG: Proteins &amp; RNA</title><link>https://samarthya.me/posts/golang-proteins-rna/</link><pubDate>Mon, 10 Feb 2020 15:06:21 +0000</pubDate><guid>https://samarthya.me/posts/golang-proteins-rna/</guid><description>&lt;p&gt;It was an interesting exercise, and I solved in three ways. More details available here @ &lt;a href="https://exercism.io/my/solutions/94b768430cb84699bcbc07605d3bbe71" target="_blank" rel="noreferrer"&gt;exercism.io&lt;/a&gt;&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Introduction&#10; &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;RNA can be broken into three nucleotide sequences called codons, and then translated to a polypeptide like so:&lt;/p&gt;</description></item><item><title>सोऽहमस्मि</title><link>https://samarthya.me/posts/happy-face/</link><pubDate>Mon, 10 Feb 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/happy-face/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Life is a mystery, and autism just makes it special"&#10; width="2967"&#10; height="2295"&#10; src="https://samarthya.me/posts/happy-face/happy-face-2_hu_e92b7889b71c74c5.jpg"&#10; srcset="https://samarthya.me/posts/happy-face/happy-face-2_hu_e92b7889b71c74c5.jpg 800w, https://samarthya.me/posts/happy-face/happy-face-2_hu_167fb9c8cee9b0e9.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/happy-face/happy-face-2.jpg"&gt;&lt;figcaption&gt;Life is a mystery, and autism just makes it special&lt;/figcaption&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 class="relative group"&gt;soham – I am him.&#10; &lt;div id="soham--i-am-him" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#soham--i-am-him" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;</description></item><item><title>Elastic Cluster API</title><link>https://samarthya.me/posts/elastic-cluster-api/</link><pubDate>Thu, 06 Feb 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/elastic-cluster-api/</guid><description>&lt;blockquote&gt;&lt;p&gt;Elastic Stack Monitoring Service is available with XPack only.&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;GET _cluster/settings&lt;/p&gt;&#10;&lt;p&gt;{&lt;br&gt;&#10;&amp;ldquo;persistent&amp;rdquo; : {&lt;br&gt;&#10;&amp;ldquo;xpack&amp;rdquo; : {&lt;br&gt;&#10;&amp;ldquo;monitoring&amp;rdquo; : {&lt;br&gt;&#10;&amp;ldquo;elasticsearch&amp;rdquo; : {&lt;br&gt;&#10;&amp;ldquo;collection&amp;rdquo; : {&lt;br&gt;&#10;&amp;ldquo;enabled&amp;rdquo; : &amp;ldquo;false&amp;rdquo;&lt;br&gt;&#10;}&lt;br&gt;&#10;},&lt;br&gt;&#10;&amp;ldquo;collection&amp;rdquo; : {&lt;br&gt;&#10;&amp;ldquo;enabled&amp;rdquo; : &amp;ldquo;true&amp;rdquo;&lt;br&gt;&#10;}&lt;br&gt;&#10;}&lt;br&gt;&#10;}&lt;br&gt;&#10;},&lt;br&gt;&#10;&amp;ldquo;transient&amp;rdquo; : { }&lt;br&gt;&#10;}&lt;/p&gt;</description></item><item><title>Pangram</title><link>https://samarthya.me/posts/pangram/</link><pubDate>Thu, 30 Jan 2020 15:59:51 +0000</pubDate><guid>https://samarthya.me/posts/pangram/</guid><description>&lt;p&gt;I wrote my first program for Pangram in JS &lt;a href="https://samarthya.me/posts/optimizing-in-js/" &gt;here&lt;/a&gt; and attempted few variations to optimize the readability and execution time. This time the code challenge was in Golang and it was satisfying attempt to do in first try.&lt;/p&gt;</description></item><item><title>Nil Interface</title><link>https://samarthya.me/posts/nuil-intf/</link><pubDate>Sun, 26 Jan 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/nuil-intf/</guid><description>&lt;p&gt;An interface in Golang is a set of methods and a type.&lt;/p&gt;&#10;&lt;p&gt;What is the purpose of Nil interface in GO-lang&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;A nil interface value holds neither value nor concrete type.&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Metric Beat</title><link>https://samarthya.me/posts/metric-beat/</link><pubDate>Fri, 24 Jan 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/metric-beat/</guid><description>&lt;p&gt;All right, its been a busy week and finally some time at hand to write about something I have been doing.&lt;/p&gt;&#10;&lt;p&gt;Mostly I am working on ELK stack these days, securing, validating, data analytics etc. Today, had the opportunity to go the Secure Elastic way, by enabling the TLS for secure communication within Nodes (Elastic cluster) and finally setup a Metric beat to get the status of the node.&lt;/p&gt;</description></item><item><title>Securing Elastic</title><link>https://samarthya.me/posts/securing-elastic/</link><pubDate>Thu, 23 Jan 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/securing-elastic/</guid><description>&lt;p&gt;Security is integral to every and all the tasks in a shared environment. In ELK if you have setup a cluster which is accessible to all; anyone can make modifications which may or may not impact the other users.&lt;/p&gt;</description></item><item><title>Never ..be</title><link>https://samarthya.me/posts/never-be/</link><pubDate>Mon, 20 Jan 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/never-be/</guid><description>&lt;p&gt;The date was set and the time was defined, nerves were there but so were the smiles.&lt;br&gt;&#10;The pain of wrong prognosis hadn’t set in, the malevolent doc had played her game.&lt;/p&gt;</description></item><item><title>House that Jack built.</title><link>https://samarthya.me/posts/house-that-jack-built/</link><pubDate>Fri, 17 Jan 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/house-that-jack-built/</guid><description>&lt;p&gt;Funny thing about simple programs is that there are too many optimization options available that never lets you feel content.&lt;/p&gt;&#10;&lt;p&gt;So here I am trying to solve another problem from &lt;a href="https://exercism.io/my/solutions/19fb3977b3be4ff4bedfee14c711af1a" target="_blank" rel="noreferrer"&gt;exercism.io&lt;/a&gt; which is totally a must visit for anyone who wants to learn and practice.&lt;/p&gt;</description></item><item><title>Security Analytics</title><link>https://samarthya.me/posts/security-analytics/</link><pubDate>Mon, 13 Jan 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/security-analytics/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* Header image from Elastic.co&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;As we move towards the micro-service/container economy where there are heaps of products available in form of applications to be downloaded &amp;amp; installed on primarily two platforms Android and IOS, we just cant underline the security implications enough.&lt;/p&gt;</description></item><item><title>Handshake: JS</title><link>https://samarthya.me/posts/handshake-js/</link><pubDate>Sat, 11 Jan 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/handshake-js/</guid><description>&lt;h1 class="relative group"&gt;Secret Handshake&#10; &lt;div id="secret-handshake" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#secret-handshake" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;Objective was relatively simple.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;A numeral will be provided as input.&lt;/li&gt;&#10;&lt;li&gt;Based on the binary equivalent, one needs to compute the secret handshake.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Rule for handshake.&lt;/p&gt;</description></item><item><title>Maths problem in JS</title><link>https://samarthya.me/posts/maths-problem-in-js/</link><pubDate>Fri, 10 Jan 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/maths-problem-in-js/</guid><description>&lt;h2 class="relative group"&gt;Objective&#10; &lt;div id="objective" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#objective" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Solve a simple math problem.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;Parse and evaluate simple math word problems returning the answer as an integer.&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Asynchronous</title><link>https://samarthya.me/posts/asynchronous/</link><pubDate>Thu, 09 Jan 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/asynchronous/</guid><description>&lt;p&gt;I learned a whole new dimension to this word, quite recently. Usually this word is used to express the non-blocking way of calling a program, a service or a code. Who would have thought it can be used for management or product development style as well.&lt;/p&gt;</description></item><item><title>Elastic 7.5</title><link>https://samarthya.me/posts/elastic-7-5/</link><pubDate>Mon, 06 Jan 2020 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/elastic-7-5/</guid><description>&lt;h2 class="relative group"&gt;Installing&#10; &lt;div id="installing" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#installing" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&#10;&lt;h3 class="relative group"&gt;Step 1: Using docker&#10; &lt;div id="step-1-using-docker" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-1-using-docker" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h3&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum install docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker pull docker.elastic.co/elasticsearch/elasticsearch:7.5.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl list-units --type=service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Client:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Version: 1.13.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; API version: 1.26&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Package version:&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl start docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Client:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Version: 1.13.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; API version: 1.26&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Package version: docker-1.13.1-103.git7f2769b.el7.centos.x86_64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Go version: go1.10.3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Git commit: 7f2769b/1.13.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Built: Sun Sep 15 14:06:47 2019&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; OS/Arch: linux/amd64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Server:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Version: 1.13.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; API version: 1.26 (minimum version 1.12)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Package version: docker-1.13.1-103.git7f2769b.el7.centos.x86_64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Go version: go1.10.3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Git commit: 7f2769b/1.13.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Built: Sun Sep 15 14:06:47 2019&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; OS/Arch: linux/amd64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Experimental: false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker pull docker.elastic.co/elasticsearch/elasticsearch:7.5.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Trying to pull repository docker.elastic.co/elasticsearch/elasticsearch ... &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7.5.1: Pulling from docker.elastic.co/elasticsearch/elasticsearch&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;c808caf183b6: Pull complete &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;05ff3f896999: Pull complete &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;82fb7fb0a94e: Pull complete &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;c4d0024708f4: Pull complete &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;136650a16cfe: Pull complete &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;968db096c092: Pull complete &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;42547e91692f: Pull complete &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Digest: sha256:b0960105e830085acbb1f9c8001f58626506ce118f33816ea5d38c772bfc7e6c&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Status: Downloaded newer image for docker.elastic.co/elasticsearch/elasticsearch:7.5.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-txt" data-lang="txt"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker pull docker.elastic.co/kibana/kibana:7.5.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>Concurrency</title><link>https://samarthya.me/posts/concurrency-golang/</link><pubDate>Fri, 03 Jan 2020 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/concurrency-golang/</guid><description>&lt;h1 class="relative group"&gt;Concurrency and Parallelism – (Helpful &lt;a href="https://blog.golang.org/concurrency-is-not-parallelism" target="_blank" rel="noreferrer"&gt;link&lt;/a&gt;)&#10; &lt;div id="concurrency-and-parallelism--helpful-link" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#concurrency-and-parallelism--helpful-link" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;Last few weeks have been interesting, a new year just embarked, my learning pace slowed down; comparatively due to the festivities and obligations around, but I am still trying to maintain.&lt;/p&gt;</description></item><item><title>JS Reduce and forEach</title><link>https://samarthya.me/posts/js-reduce-and-foreach/</link><pubDate>Sun, 15 Dec 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/js-reduce-and-foreach/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Matrix"&#10; width="4096"&#10; height="2304"&#10; src="https://samarthya.me/posts/js-reduce-and-foreach/img_20160902_171750_hu_98c582a5f9430fd4.jpg"&#10; srcset="https://samarthya.me/posts/js-reduce-and-foreach/img_20160902_171750_hu_98c582a5f9430fd4.jpg 800w, https://samarthya.me/posts/js-reduce-and-foreach/img_20160902_171750_hu_91eec9143170a7c8.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/js-reduce-and-foreach/img_20160902_171750.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;I have been polishing my Go and JS skills recently and today learned about how to use the &lt;a href="https://www.w3schools.com/jsref/jsref_reduce.asp" target="_blank" rel="noreferrer"&gt;reduce&lt;/a&gt;() and &lt;a href="https://www.w3schools.com/jsref/jsref_foreach.asp" target="_blank" rel="noreferrer"&gt;forEach&lt;/a&gt;() method. The problem I was trying to solve was return columns and rows from an input string.&lt;/p&gt;</description></item><item><title>Optimizing in JS</title><link>https://samarthya.me/posts/optimizing-in-js/</link><pubDate>Fri, 13 Dec 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/optimizing-in-js/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Sonic the hedgehog"&#10; width="1920"&#10; height="2048"&#10; src="https://samarthya.me/posts/optimizing-in-js/img_20191204_212744-scaled-e1576230534272_hu_c6eaedf488cc788e.jpg"&#10; srcset="https://samarthya.me/posts/optimizing-in-js/img_20191204_212744-scaled-e1576230534272_hu_c6eaedf488cc788e.jpg 800w, https://samarthya.me/posts/optimizing-in-js/img_20191204_212744-scaled-e1576230534272_hu_93cbfb4b8bf3dfcf.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/optimizing-in-js/img_20191204_212744-scaled-e1576230534272.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;You never stop learning is not just a phrase, it is something I live everyday. Today, I was just trying out my skills with JS and was solving an innocuous problem, in JS.&lt;/p&gt;</description></item><item><title>MySQL/MariaDB on MAC</title><link>https://samarthya.me/posts/mysql-mariadb-on-mac/</link><pubDate>Fri, 01 Nov 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/mysql-mariadb-on-mac/</guid><description>&lt;blockquote&gt;&lt;p&gt;Challenges are plenty but outcome is always one – Learning!&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;While trying to troubleshoot an inhouse application I had to setup a quick MySQL instance which led me to install my first instance of MariaDB on my local MAC machine.&lt;/p&gt;</description></item><item><title>KubeLab</title><link>https://samarthya.me/posts/kubelab/</link><pubDate>Thu, 10 Oct 2019 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/kubelab/</guid><description>&lt;p&gt;Kubernetes&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cloud_user@ip-10-0-1-101:~$ kubectl version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Client Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;13&amp;#34;, GitVersion:&amp;#34;v1.13.3&amp;#34;, GitCommit:&amp;#34;721bfa751924da8d1680787490c54b9179b1fed0&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2019-02-01T20:08:12Z&amp;#34;, GoVersion:&amp;#34;go1.11.5&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Server Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;13&amp;#34;, GitVersion:&amp;#34;v1.13.11&amp;#34;, GitCommit:&amp;#34;25074a190ef2a07d8b0ed38734f2cb373edfb868&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2019-09-18T14:34:46Z&amp;#34;, GoVersion:&amp;#34;go1.11.13&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cloud_user@ip-10-0-1-101:~$ kubectl api-resources&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME SHORTNAMES APIGROUP NAMESPACED KIND&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bindings true Binding&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;componentstatuses cs false ComponentStatus&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;configmaps cm true ConfigMap&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;endpoints ep true Endpoints&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;events ev true Event&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;limitranges limits true LimitRange&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;namespaces ns false Namespace&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nodes no false Node&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;persistentvolumeclaims pvc true PersistentVolumeClaim&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;persistentvolumes pv false PersistentVolume&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pods po true Pod&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;podtemplates true PodTemplate&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;replicationcontrollers rc true ReplicationController&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;resourcequotas quota true ResourceQuota&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;secrets true Secret&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;serviceaccounts sa true ServiceAccount&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;services svc true Service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mutatingwebhookconfigurations admissionregistration.k8s.io false MutatingWebhookConfiguration&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;validatingwebhookconfigurations admissionregistration.k8s.io false ValidatingWebhookConfiguration&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;customresourcedefinitions crd,crds apiextensions.k8s.io false CustomResourceDefinition&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apiservices apiregistration.k8s.io false APIService&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;controllerrevisions apps true ControllerRevision&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;daemonsets ds apps true DaemonSet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deployments deploy apps true Deployment&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;replicasets rs apps true ReplicaSet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;statefulsets sts apps true StatefulSet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tokenreviews authentication.k8s.io false TokenReview&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;localsubjectaccessreviews authorization.k8s.io true LocalSubjectAccessReview&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;selfsubjectaccessreviews authorization.k8s.io false SelfSubjectAccessReview&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;selfsubjectrulesreviews authorization.k8s.io false SelfSubjectRulesReview&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;subjectaccessreviews authorization.k8s.io false SubjectAccessReview&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;horizontalpodautoscalers hpa autoscaling true HorizontalPodAutoscaler&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cronjobs cj batch true CronJob&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;jobs batch true Job&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;certificatesigningrequests csr certificates.k8s.io false CertificateSigningRequest&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;leases coordination.k8s.io true Lease&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;events ev events.k8s.io true Event&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;daemonsets ds extensions true DaemonSet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deployments deploy extensions true Deployment&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ingresses ing extensions true Ingress&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;networkpolicies netpol extensions true NetworkPolicy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;podsecuritypolicies psp extensions false PodSecurityPolicy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;replicasets rs extensions true ReplicaSet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;networkpolicies netpol networking.k8s.io true NetworkPolicy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;poddisruptionbudgets pdb policy true PodDisruptionBudget&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;podsecuritypolicies psp policy false PodSecurityPolicy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;clusterrolebindings rbac.authorization.k8s.io false ClusterRoleBinding&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;clusterroles rbac.authorization.k8s.io false ClusterRole&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rolebindings rbac.authorization.k8s.io true RoleBinding&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;roles rbac.authorization.k8s.io true Role&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;priorityclasses pc scheduling.k8s.io false PriorityClass&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;storageclasses sc storage.k8s.io false StorageClass&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;volumeattachments storage.k8s.io false VolumeAttachment&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cloud_user@ip-10-0-1-101:~$ kubectl get cm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME DATA AGE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fruit-service-ambassador-config 1 5m49s&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Basic Commands (Beginner):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; create Create a resource from a file or from stdin.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; expose Take a replication controller, service, deployment or pod and expose it as a new Kubernetes Service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; run Run a particular image on the cluster&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; set Set specific features on objects&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Basic Commands (Intermediate):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; explain Documentation of resources&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; get Display one or many resources&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; edit Edit a resource on the server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; delete Delete resources by filenames, stdin, resources and names, or by resources and label selector&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Deploy Commands:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rollout Manage the rollout of a resource&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; scale Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; autoscale Auto-scale a Deployment, ReplicaSet, or ReplicationController&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cluster Management Commands:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; certificate Modify certificate resources.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cluster-info Display cluster info&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; top Display Resource (CPU/Memory/Storage) usage.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cordon Mark node as unschedulable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; uncordon Mark node as schedulable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; drain Drain node in preparation for maintenance&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; taint Update the taints on one or more nodes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Troubleshooting and Debugging Commands:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; describe Show details of a specific resource or group of resources&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; logs Print the logs for a container in a pod&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; attach Attach to a running container&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; exec Execute a command in a container&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; port-forward Forward one or more local ports to a pod&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy Run a proxy to the Kubernetes API server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cp Copy files and directories to and from containers.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; auth Inspect authorization&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Advanced Commands:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; diff Diff live version against would-be applied version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; apply Apply a configuration to a resource by filename or stdin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; patch Update field(s) of a resource using strategic merge patch&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; replace Replace a resource by filename or stdin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; wait Experimental: Wait for a specific condition on one or many resources.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; convert Convert config files between different API versions&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Settings Commands:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; label Update the labels on a resource&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; annotate Update the annotations on a resource&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; completion Output shell completion code for the specified shell (bash or zsh)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Other Commands:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; api-resources Print the supported API resources on the server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; api-versions Print the supported API versions on the server, in the form of &amp;#34;group/version&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; config Modify kubeconfig files&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; plugin Provides utilities for interacting with plugins.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; version Print the client and server version information&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Usage:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; kubectl [flags] [options]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>NGRX</title><link>https://samarthya.me/posts/ngrx-state-management-for-angular/</link><pubDate>Wed, 18 Sep 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/ngrx-state-management-for-angular/</guid><description>&lt;p&gt;Inspired by Redux, Store is RxJS powered state management for Angular applications. Store is a container for state of the application.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;Refer to documentation at – &lt;a href="https://ngrx.io/guide/store" target="_blank" rel="noreferrer"&gt;https://ngrx.io/guide/store&lt;/a&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 class="relative group"&gt;Key components&#10; &lt;div id="key-components" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#key-components" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;I have a sample application posted at &lt;a href="https://github.com/samarthya/free.time" target="_blank" rel="noreferrer"&gt;https://www.github.com&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Security Assertion Markup Language</title><link>https://samarthya.me/posts/security-assertion-markup-language/</link><pubDate>Tue, 17 Sep 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/security-assertion-markup-language/</guid><description>&lt;h1 class="relative group"&gt;What is SAML?&#10; &lt;div id="what-is-saml" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-saml" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;Security Assertion Markup Language (SAML) is an open standard that allows identity providers (IdP) to pass authorization credentials to service providers (SP). It implements a secure method of passing &lt;em&gt;user authentications and authorizations&lt;/em&gt; (users, logins, and attributes) between the identity provider and service providers.&lt;/p&gt;</description></item><item><title>Spring Data-LDAP</title><link>https://samarthya.me/posts/spring-data-ldap/</link><pubDate>Wed, 24 Apr 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/spring-data-ldap/</guid><description>&lt;p&gt;I have a small problem at hand which girdles around learning Angular, with a Spring enabled Rest endpoints which uses a DB to store data and have security layer in between that should interact with a LDAP for authentication and authorization and finally the application should run as one smooth unit. It will be too much to cover in single blog so I will be writing multiple blogs in continuation to this one.&lt;/p&gt;</description></item><item><title>Spring Data-Ldap: Part 2</title><link>https://samarthya.me/posts/spring-data-ldap-part-2/</link><pubDate>Wed, 24 Apr 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/spring-data-ldap-part-2/</guid><description>&lt;p&gt;Now since we have plugged in the LDAP information it is time now to stitch it with Spring Security and the easiest thing to do is&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;@Configuration&#10;@EnableWebSecurity(debug = true)&#10;public class WebSecurityConfig extends WebSecurityConfigurerAdapter {&lt;/p&gt;</description></item><item><title>Locale</title><link>https://samarthya.me/posts/locale-centos/</link><pubDate>Fri, 05 Apr 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/locale-centos/</guid><description>&lt;p&gt;Did you ever see a warning printed on your console the moment you log into your Linux machine and did that warning ever complaned to you about the benign locale?&lt;/p&gt;</description></item><item><title>CSS continued</title><link>https://samarthya.me/posts/css-continued/</link><pubDate>Fri, 15 Mar 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/css-continued/</guid><description>&lt;h1 class="relative group"&gt;Pseudo classes&#10; &lt;div id="pseudo-classes" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pseudo-classes" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;State dependent styling, e.g Style a checkbox when it is in checked state. It is usually denoted by a preceding colon ‘:’ (without the quote).&lt;/p&gt;</description></item><item><title>CSS and HTML to dom.</title><link>https://samarthya.me/posts/css-and-html-to-dom/</link><pubDate>Fri, 08 Mar 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/css-and-html-to-dom/</guid><description>&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Fluttery shy bleeding"&#10; width="2029"&#10; height="2817"&#10; src="https://samarthya.me/posts/css-and-html-to-dom/img_20190815_143219_hu_41c3d363f87f31e9.jpg"&#10; srcset="https://samarthya.me/posts/css-and-html-to-dom/img_20190815_143219_hu_41c3d363f87f31e9.jpg 800w, https://samarthya.me/posts/css-and-html-to-dom/img_20190815_143219_hu_e75bbbfb933a9163.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://samarthya.me/posts/css-and-html-to-dom/img_20190815_143219.jpg"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Happiness is not always straight lines.&lt;/p&gt;&#10;&lt;p&gt;Having worked on different technologies I never took HTML very seriously till a couple of years back. I started programming rather seriously programming when I was about 20 years old for a small startup then – FQSL. In those days, my primary responsibility was more around creating a middle – tier application which had a &lt;em&gt;management interface&lt;/em&gt; and had the ability to spawn multiple threads to handle the incoming traffic and the main concern was to handle the load effectively and perform under pressure. This was all to be done in a native platform “Windows” and mostly in VC++ and MFC. Glad we are in &lt;em&gt;serverless&lt;/em&gt; days now. 🙂&lt;/p&gt;</description></item><item><title>Vue - Lesson 2</title><link>https://samarthya.me/posts/vue-lesson-2/</link><pubDate>Fri, 01 Mar 2019 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/vue-lesson-2/</guid><description>&lt;p&gt;Zero configuration&lt;/p&gt;&#10;&lt;p&gt;CLI command line interface&lt;/p&gt;&#10;&lt;p&gt;Create things rapidly&lt;/p&gt;&#10;&lt;p&gt;select libraries you want to use&lt;/p&gt;&#10;&lt;p&gt;Optimize the loading speed&lt;/p&gt;&#10;&lt;p&gt;CHoose your own adventure&lt;/p&gt;&#10;&lt;p&gt;Starting from a blank state&lt;/p&gt;&#10;&lt;p&gt;organizing the structure.&lt;/p&gt;</description></item><item><title>Creating your app with VUEJS</title><link>https://samarthya.me/posts/creating-your-app-with-vuejs/</link><pubDate>Thu, 28 Feb 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/creating-your-app-with-vuejs/</guid><description>&lt;p&gt;This is my attempt at learning a new framework and using it to create my own webapp uing vueJS.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;Vue is a progressive and reactive framework for building user interfaces.&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>Learning Step - 1</title><link>https://samarthya.me/posts/learning-step-1/</link><pubDate>Wed, 27 Feb 2019 00:00:00 +0000</pubDate><guid>https://samarthya.me/posts/learning-step-1/</guid><description>&lt;p&gt;The best way to learn a technology is to create something from scratch and as my ever wandering brain hops from one framework to another I am starting out on a new conquest of learning something that professionally I have never tried. Not just a scripting technology but learning the new enabler platforms as well.&lt;/p&gt;</description></item><item><title>Serverless patterns</title><link>https://samarthya.me/posts/serverless-patterns/</link><pubDate>Tue, 26 Feb 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/serverless-patterns/</guid><description>&lt;h1 class="relative group"&gt;Why do I need them?&#10; &lt;div id="why-do-i-need-them" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-do-i-need-them" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;Usually they are cost savers and beneficial for situations that are not bounded by the precise profitable point in time. What I mean to say is considering you are in to a startup and want to avoid the upfront infra cost that you may need if you want to setup a VM. You can better go for a serverless service. These services can be&lt;/p&gt;</description></item><item><title>How much more can you take?</title><link>https://samarthya.me/posts/how-much-more-can-you-take/</link><pubDate>Mon, 25 Feb 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/how-much-more-can-you-take/</guid><description>&lt;p&gt;Most of the times it is my wife who is diligently taking care of my little devil and sometimes I tag along. She is the one who has taken up the mettle of enduring the mud and crap the society throws at her. She is the one who has even given me courage everyday. One such face-offs she had quiet recently was when she was out with my little one, on one of the usual evening outings. My daughter is restless, full of energy and obviously autistic. Her biggest shortcoming she is unable to learn the semantics of – what you call a normal conversation.&lt;/p&gt;</description></item><item><title>What did the horse say?</title><link>https://samarthya.me/posts/what-did-the-horse-say/</link><pubDate>Mon, 25 Feb 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/what-did-the-horse-say/</guid><description>&lt;blockquote&gt;&lt;p&gt;The beauty is simplicity and nothing complex&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;If you ever wondered what is fun? You need to get yourself a company of a Special kid; by special I mean kids with some special needs.&lt;/p&gt;</description></item><item><title>Saturday morning</title><link>https://samarthya.me/posts/saturday-morning/</link><pubDate>Sun, 24 Feb 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/saturday-morning/</guid><description>&lt;p&gt;Morning was not early today, had a good night sleep and woke up at around 9:00 to a door bell. My devil close to my side and full of energy just stretching his tools of destruction.&lt;/p&gt;</description></item><item><title>Manager’s dilemma</title><link>https://samarthya.me/posts/managers-dillema/</link><pubDate>Fri, 22 Feb 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/managers-dillema/</guid><description>&lt;blockquote&gt;&lt;p&gt;Do not handle adults with kids gloves&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;Some of the gems I hear everyday and the benefits are exceptional.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;You need to be direct and do not gloss the message.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;You know the organization is going to back you.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;The other person also gets the opportunity to demonstrate the maturity he/she possesses.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title>Bienvenue</title><link>https://samarthya.me/posts/bienvenue/</link><pubDate>Thu, 21 Feb 2019 12:00:00 +0000</pubDate><guid>https://samarthya.me/posts/bienvenue/</guid><description>&lt;p&gt;This is the inspiration that drives me &amp;amp; my better half every day.&lt;/p&gt;&#10;&lt;blockquote&gt;&lt;p&gt;I don’t think the worst thing that can happen to anyone is raising a child with special needs. I think the worst thing is to raise the child who is cruel to those with special needs.&lt;/p&gt;&#10;&lt;p&gt;Ranjana Smarthya&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item></channel></rss>