<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Sany's Blog]]></title><description><![CDATA[Sany's Blog]]></description><link>https://blog.sanyam.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 07:14:17 GMT</lastBuildDate><atom:link href="https://blog.sanyam.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Rovo One-Page Cheat Sheet]]></title><description><![CDATA[Rovo Search

Purpose: Find information across platforms (Jira, Confluence, SharePoint, Google Drive, etc.).

Key Benefits:

Improves accuracy by tailoring queries.

Respects user permissions (only shows what you can access).

Supports filtering by ap...]]></description><link>https://blog.sanyam.dev/rovo-one-page-cheat-sheet</link><guid isPermaLink="true">https://blog.sanyam.dev/rovo-one-page-cheat-sheet</guid><category><![CDATA[rovo]]></category><dc:creator><![CDATA[Sanyam Kumar]]></dc:creator><pubDate>Sat, 13 Dec 2025 21:50:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1765662357396/52aa4f5e-c2da-46b0-89b5-ebcd37175883.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-rovo-search"><strong>Rovo Search</strong></h3>
<ul>
<li><p><strong>Purpose:</strong> Find information across platforms (Jira, Confluence, SharePoint, Google Drive, etc.).</p>
</li>
<li><p><strong>Key Benefits:</strong></p>
<ul>
<li><p>Improves accuracy by tailoring queries.</p>
</li>
<li><p>Respects user permissions (only shows what you can access).</p>
</li>
<li><p>Supports filtering by <strong>app</strong> and <strong>contributor</strong>.</p>
</li>
</ul>
</li>
<li><p><strong>Features:</strong></p>
<ul>
<li><p><strong>Knowledge Cards:</strong> Provide instant insights (definitions, summaries).</p>
</li>
<li><p><strong>Multi-colored underline (Confluence):</strong> Rovo already has a definition.</p>
</li>
</ul>
</li>
<li><p><strong>Integrations:</strong></p>
<ul>
<li><p>SharePoint → Searchable directly in Rovo.</p>
</li>
<li><p>Google Sheets → Requires admin-added Google Drive connector.</p>
</li>
</ul>
</li>
<li><p><strong>Correction Method:</strong></p>
<ul>
<li>Use <strong>“bad response” feedback</strong> to report incorrect definitions.</li>
</ul>
</li>
</ul>
<hr />
<h3 id="heading-rovo-chat"><strong>Rovo Chat</strong></h3>
<ul>
<li><p><strong>Primary Use:</strong> Summarize content from multiple sources.</p>
</li>
<li><p><strong>Getting Started:</strong> Open Rovo Chat and type a query.</p>
</li>
<li><p><strong>Chat History:</strong> Users can review their own past chats.</p>
</li>
<li><p><strong>Access Anywhere:</strong> Available via the <strong>Rovo Chrome Extension</strong>.</p>
</li>
</ul>
<hr />
<h3 id="heading-rovo-agents"><strong>Rovo Agents</strong></h3>
<ul>
<li><p><strong>What They Do:</strong></p>
<ul>
<li><p>Automate workflows and repetitive tasks.</p>
</li>
<li><p>Triage requests.</p>
</li>
<li><p>Generate project updates from Jira.</p>
</li>
</ul>
</li>
<li><p><strong>Creation (No Code):</strong></p>
<ul>
<li>Built using <strong>Rovo Studio</strong>.</li>
</ul>
</li>
<li><p><strong>Automation:</strong></p>
<ul>
<li><p>Can be added to automation rules.</p>
</li>
<li><p>Support scheduled tasks (e.g., weekly summaries to Slack).</p>
</li>
</ul>
</li>
</ul>
<hr />
<h3 id="heading-rovo-studio"><strong>Rovo Studio</strong></h3>
<ul>
<li><p><strong>Purpose:</strong> No-code / low-code tool to create Rovo Agents.</p>
</li>
<li><p><strong>Audience:</strong> Non-developers and business users.</p>
</li>
</ul>
<hr />
<h3 id="heading-rovo-chrome-extension"><strong>Rovo Chrome Extension</strong></h3>
<ul>
<li><p><strong>Main Advantage:</strong></p>
<ul>
<li>Access Rovo Search and Chat from <strong>any browser tab or public web page</strong>.</li>
</ul>
</li>
<li><p><strong>Does NOT:</strong></p>
<ul>
<li>Grant access to Google Drive or other tools by itself.</li>
</ul>
</li>
</ul>
<hr />
<h3 id="heading-teamwork-graph"><strong>Teamwork Graph</strong></h3>
<ul>
<li><p><strong>Use Case:</strong></p>
<ul>
<li>Gain insights about team members, relationships, and work context.</li>
</ul>
</li>
<li><p><strong>Not For:</strong> Definitions or term explanations.</p>
</li>
</ul>
<hr />
<h3 id="heading-tcrei-framework"><strong>TCREI Framework</strong></h3>
<ul>
<li><p><strong>Evaluate &amp; Iterate:</strong></p>
<ul>
<li>Review responses, identify gaps, and refine prompts.</li>
</ul>
</li>
</ul>
<hr />
<h3 id="heading-key-exam-reminders"><strong>Key Exam Reminders</strong></h3>
<ul>
<li><p>Rovo <strong>never bypasses permissions</strong>.</p>
</li>
<li><p>Admins control <strong>connectors</strong> (Google Drive, SharePoint).</p>
</li>
<li><p>Users <strong>cannot edit definitions directly</strong>.</p>
</li>
<li><p>Automation + Agents = <strong>true hands-off workflows</strong>.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Node.js Unit Testing with Jest]]></title><description><![CDATA[Unit testing is essential to ensure the reliability of applications, especially for backend services interacting with databases and structured data like XML. Jest is a powerful JavaScript testing framework that simplifies writing and running tests fo...]]></description><link>https://blog.sanyam.dev/nodejs-unit-testing-with-jest</link><guid isPermaLink="true">https://blog.sanyam.dev/nodejs-unit-testing-with-jest</guid><category><![CDATA[Node.js]]></category><category><![CDATA[Jest]]></category><category><![CDATA[Testing]]></category><category><![CDATA[unit testing]]></category><dc:creator><![CDATA[Sanyam Kumar]]></dc:creator><pubDate>Fri, 01 Nov 2024 04:52:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1730435244276/524abc6e-2539-449b-8951-d4574a4a76af.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Unit testing is essential to ensure the reliability of applications, especially for backend services interacting with databases and structured data like XML. <strong>Jest</strong> is a powerful JavaScript testing framework that simplifies writing and running tests for Node.js applications.</p>
<p>This guide will walk you through setting up Jest for Node.js, testing SQL interactions, and validating XML structure. By the end, you’ll understand how to mock SQL queries, validate XML, and run tests in Jest with ease.</p>
<h2 id="heading-prerequisites">Prerequisites</h2>
<p>To follow along, you should have:</p>
<ol>
<li><p>A Node.js application setup.</p>
</li>
<li><p>Basic understanding of SQL and XML.</p>
</li>
<li><p>Jest installed as a development dependency.</p>
</li>
</ol>
<h3 id="heading-install-jest-and-dependencies">Install Jest and Dependencies</h3>
<p>Let’s get started by installing Jest, an SQL client (e.g., <code>mssql</code> for SQL Server), and an XML parser (<code>fast-xml-parser</code>).</p>
<pre><code class="lang-bash"><span class="hljs-comment"># Initialize the project and install Jest</span>
npm init -y
npm install --save-dev jest

<span class="hljs-comment"># Install an SQL client (e.g., `mssql` for SQL Server)</span>
npm install mssql

<span class="hljs-comment"># Install an XML parser to validate XML structure</span>
npm install fast-xml-parser
</code></pre>
<h2 id="heading-setting-up-jest">Setting Up Jest</h2>
<p>Once installed, configure Jest by adding a <code>"test"</code> script in your <code>package.json</code>:</p>
<pre><code class="lang-json">jsonCopy code<span class="hljs-string">"scripts"</span>: {
  <span class="hljs-attr">"test"</span>: <span class="hljs-string">"jest"</span>
}
</code></pre>
<p>This setup will enable you to run Jest using <code>npm test</code> from the command line.</p>
<h2 id="heading-mocking-sql-functions">Mocking SQL Functions</h2>
<p>Let’s create a simple example to test SQL queries without needing an actual database connection. We’ll use <strong>mocking</strong> to simulate SQL database interactions, allowing us to isolate and test only the code logic.</p>
<h3 id="heading-step-1-create-a-database-connection-module">Step 1: Create a Database Connection Module</h3>
<p>First, create a <code>db.js</code> file with a function to connect to your SQL database. This keeps your SQL configuration separate, making it easier to test.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// db.js</span>
<span class="hljs-keyword">const</span> sql = <span class="hljs-built_in">require</span>(<span class="hljs-string">'mssql'</span>);

<span class="hljs-keyword">const</span> config = {
  <span class="hljs-attr">user</span>: <span class="hljs-string">'yourUsername'</span>,
  <span class="hljs-attr">password</span>: <span class="hljs-string">'yourPassword'</span>,
  <span class="hljs-attr">server</span>: <span class="hljs-string">'yourServer'</span>,
  <span class="hljs-attr">database</span>: <span class="hljs-string">'yourDatabase'</span>,
  <span class="hljs-attr">options</span>: {
    <span class="hljs-attr">encrypt</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">enableArithAbort</span>: <span class="hljs-literal">true</span>,
  },
};

<span class="hljs-keyword">const</span> connectToDB = <span class="hljs-keyword">async</span> () =&gt; {
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">const</span> pool = <span class="hljs-keyword">await</span> sql.connect(config);
    <span class="hljs-keyword">return</span> pool;
  } <span class="hljs-keyword">catch</span> (err) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'Database connection failed:'</span>, err);
    <span class="hljs-keyword">throw</span> err;
  }
};

<span class="hljs-built_in">module</span>.exports = { connectToDB };
</code></pre>
<h3 id="heading-step-2-write-a-function-to-fetch-data">Step 2: Write a Function to Fetch Data</h3>
<p>Let’s say we want a function to retrieve a user by ID. This function will run a SQL query to get user information.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// userService.js</span>
<span class="hljs-keyword">const</span> { connectToDB } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'./db'</span>);

<span class="hljs-keyword">const</span> getUserById = <span class="hljs-keyword">async</span> (userId) =&gt; {
  <span class="hljs-keyword">const</span> pool = <span class="hljs-keyword">await</span> connectToDB();
  <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> pool
    .request()
    .input(<span class="hljs-string">'userId'</span>, sql.Int, userId)
    .query(<span class="hljs-string">'SELECT * FROM Users WHERE id = @userId'</span>);
  <span class="hljs-keyword">return</span> result.recordset[<span class="hljs-number">0</span>];
};

<span class="hljs-built_in">module</span>.exports = { getUserById };
</code></pre>
<h3 id="heading-step-3-mock-the-sql-database-in-jest">Step 3: Mock the SQL Database in Jest</h3>
<p>To test this function, we’ll use Jest’s <code>jest.mock()</code> method to replace the real database connection with a mock. This lets us test our function without needing an actual database.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// userService.test.js</span>
<span class="hljs-keyword">const</span> sql = <span class="hljs-built_in">require</span>(<span class="hljs-string">'mssql'</span>);
<span class="hljs-keyword">const</span> { getUserById } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'./userService'</span>);

jest.mock(<span class="hljs-string">'mssql'</span>); <span class="hljs-comment">// Mock the mssql module</span>

describe(<span class="hljs-string">'User Service'</span>, <span class="hljs-function">() =&gt;</span> {
  it(<span class="hljs-string">'should return user data for a valid userId'</span>, <span class="hljs-keyword">async</span> () =&gt; {
    <span class="hljs-comment">// Mock response data</span>
    <span class="hljs-keyword">const</span> mockData = { <span class="hljs-attr">id</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'John Doe'</span> };
    <span class="hljs-keyword">const</span> request = { <span class="hljs-attr">input</span>: jest.fn().mockReturnThis(), <span class="hljs-attr">query</span>: jest.fn().mockResolvedValue({ <span class="hljs-attr">recordset</span>: [mockData] }) };
    <span class="hljs-keyword">const</span> pool = { <span class="hljs-attr">request</span>: jest.fn().mockReturnValue(request) };

    sql.connect.mockResolvedValue(pool); <span class="hljs-comment">// Mock the connection to return our mock pool</span>

    <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> getUserById(<span class="hljs-number">1</span>);

    <span class="hljs-comment">// Validate the result</span>
    expect(result).toEqual(mockData);
    expect(pool.request).toHaveBeenCalled();
    expect(request.input).toHaveBeenCalledWith(<span class="hljs-string">'userId'</span>, sql.Int, <span class="hljs-number">1</span>);
    expect(request.query).toHaveBeenCalledWith(<span class="hljs-string">'SELECT * FROM Users WHERE id = @userId'</span>);
  });
});
</code></pre>
<p>In this test:</p>
<ul>
<li><p>We mock the SQL <code>connect()</code> function to return a fake <code>pool</code> object.</p>
</li>
<li><p>We mock the <code>query</code> function to return a predefined user (<code>mockData</code>), simulating a successful database query.</p>
</li>
<li><p>Jest verifies that the function behaves as expected without hitting a real database.</p>
</li>
</ul>
<h2 id="heading-testing-xml-validation">Testing XML Validation</h2>
<p>Next, let’s test XML files to ensure they include required fields. For example, each <code>&lt;user&gt;</code> in the XML might need an <code>&lt;id&gt;</code>, <code>&lt;name&gt;</code>, and <code>&lt;email&gt;</code> field.</p>
<h3 id="heading-step-1-write-an-xml-validator-function">Step 1: Write an XML Validator Function</h3>
<p>In <code>xmlValidator.js</code>:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> { XMLParser } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fast-xml-parser'</span>);

<span class="hljs-keyword">const</span> validateMandatoryFields = <span class="hljs-function">(<span class="hljs-params">xmlData, requiredFields</span>) =&gt;</span> {
  <span class="hljs-keyword">const</span> parser = <span class="hljs-keyword">new</span> XMLParser();
  <span class="hljs-keyword">const</span> jsonObj = parser.parse(xmlData);

  <span class="hljs-comment">// Check each required field</span>
  <span class="hljs-keyword">const</span> missingFields = requiredFields.filter(<span class="hljs-function">(<span class="hljs-params">field</span>) =&gt;</span> {
    <span class="hljs-keyword">const</span> parts = field.split(<span class="hljs-string">'.'</span>);
    <span class="hljs-keyword">let</span> obj = jsonObj;
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> part <span class="hljs-keyword">of</span> parts) {
      <span class="hljs-keyword">if</span> (!obj || !obj[part]) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
      }
      obj = obj[part];
    }
    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
  });

  <span class="hljs-keyword">return</span> missingFields.length === <span class="hljs-number">0</span>;
};

<span class="hljs-built_in">module</span>.exports = { validateMandatoryFields };
</code></pre>
<p>This <code>validateMandatoryFields</code> function:</p>
<ol>
<li><p>Converts the XML into JSON.</p>
</li>
<li><p>Checks if each required field (e.g., <a target="_blank" href="http://user.id"><code>user.id</code></a>, <a target="_blank" href="http://user.name"><code>user.name</code></a>, <a target="_blank" href="http://user.email"><code>user.email</code></a>) is present.</p>
</li>
<li><p>Returns <code>true</code> if all fields exist, otherwise <code>false</code>.</p>
</li>
</ol>
<h3 id="heading-step-2-write-jest-tests-for-xml-validation">Step 2: Write Jest Tests for XML Validation</h3>
<p>Now, let’s create tests to check that <code>validateMandatoryFields</code> works as expected.</p>
<p>In <code>xmlValidator.test.js</code>:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> { validateMandatoryFields } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'./xmlValidator'</span>);

describe(<span class="hljs-string">'XML Validator'</span>, <span class="hljs-function">() =&gt;</span> {
  it(<span class="hljs-string">'should return true if all mandatory fields are present'</span>, <span class="hljs-function">() =&gt;</span> {
    <span class="hljs-keyword">const</span> xmlData = <span class="hljs-string">`
      &lt;user&gt;
        &lt;id&gt;1&lt;/id&gt;
        &lt;name&gt;John Doe&lt;/name&gt;
        &lt;email&gt;johndoe@example.com&lt;/email&gt;
      &lt;/user&gt;
    `</span>;
    <span class="hljs-keyword">const</span> requiredFields = [<span class="hljs-string">'user.id'</span>, <span class="hljs-string">'user.name'</span>, <span class="hljs-string">'user.email'</span>];
    <span class="hljs-keyword">const</span> isValid = validateMandatoryFields(xmlData, requiredFields);

    expect(isValid).toBe(<span class="hljs-literal">true</span>);
  });

  it(<span class="hljs-string">'should return false if mandatory fields are missing'</span>, <span class="hljs-function">() =&gt;</span> {
    <span class="hljs-keyword">const</span> xmlData = <span class="hljs-string">`
      &lt;user&gt;
        &lt;id&gt;1&lt;/id&gt;
        &lt;name&gt;John Doe&lt;/name&gt;
      &lt;/user&gt;
    `</span>;
    <span class="hljs-keyword">const</span> requiredFields = [<span class="hljs-string">'user.id'</span>, <span class="hljs-string">'user.name'</span>, <span class="hljs-string">'user.email'</span>];
    <span class="hljs-keyword">const</span> isValid = validateMandatoryFields(xmlData, requiredFields);

    expect(isValid).toBe(<span class="hljs-literal">false</span>);
  });
});
</code></pre>
<p>This test suite checks two scenarios:</p>
<ul>
<li><p><strong>Success case</strong>: All required fields are present, so <code>isValid</code> should return <code>true</code>.</p>
</li>
<li><p><strong>Failure case</strong>: Missing fields cause <code>isValid</code> to return <code>false</code>.</p>
</li>
</ul>
<p>Now, all you have to do is chant the magic incantation:</p>
<pre><code class="lang-bash">npm <span class="hljs-built_in">test</span>
</code></pre>
<h2 id="heading-running-jest-tests-for-specific-files">Running Jest Tests for Specific Files</h2>
<p>To run tests for a particular file, specify the path in the <code>jest</code> command:</p>
<pre><code class="lang-bash">npm jest path/to/file.test.js
</code></pre>
<p>For example, to run only <code>userService.test.js</code>:</p>
<pre><code class="lang-bash">npm jest userService.test.js
</code></pre>
<p>You can also use patterns to match filenames:</p>
<pre><code class="lang-bash">npm jest user
</code></pre>
<p>This command will run all tests with “user” in the filename, making it easy to focus on specific areas during development.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Using Jest to test SQL functions and XML validation in Node.js can improve reliability and make development faster. With Jest’s mocking capabilities, you can avoid real database interactions in tests, and XML validation ensures structured data is complete.</p>
<h3 id="heading-key-takeaways">Key Takeaways</h3>
<ul>
<li><p><strong>Mock SQL Connections</strong>: Avoid hitting the database during tests by mocking SQL connections.</p>
</li>
<li><p><strong>XML Validation</strong>: Ensure XML files have all mandatory fields.</p>
</li>
<li><p><strong>Run Specific Tests</strong>: Run tests for individual files or patterns to quickly validate specific functionality.</p>
</li>
</ul>
<p>With Jest, you’re equipped to write robust, reliable tests that make your Node.js application easier to maintain and extend.</p>
]]></content:encoded></item><item><title><![CDATA[Understanding AWS Services]]></title><description><![CDATA[Amazon Web Services (AWS) stands as the titan of cloud computing, offering a smorgasbord of services that cater to every imaginable need. With well over 200 services at your fingertips, it can feel like an endless labyrinth. But fret no more! This bl...]]></description><link>https://blog.sanyam.dev/understanding-aws-services</link><guid isPermaLink="true">https://blog.sanyam.dev/understanding-aws-services</guid><category><![CDATA[AWS]]></category><dc:creator><![CDATA[Sanyam Kumar]]></dc:creator><pubDate>Sat, 20 Apr 2024 19:12:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713640320315/f6bc5d9a-bb85-4a5d-b14d-e5dbc869bd6b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Amazon Web Services (AWS) stands as the titan of cloud computing, offering a smorgasbord of services that cater to every imaginable need. With well over 200 services at your fingertips, it can feel like an endless labyrinth. But fret no more! This blog delves deeper, showcasing a wider range of the most popular AWS services and their functionalities.</p>
<p><strong>Essential Building Blocks:</strong></p>
<ul>
<li><p><strong>Elastic Compute Cloud (EC2):</strong> As mentioned before, EC2 forms the bedrock of AWS, providing on-demand virtual servers. Think of it as a vast pool of computing power, ready to scale up or down at your whim. Need to analyze terabytes of data? Spin up a cluster of EC2 instances. Building a robust backend for your mobile app? EC2 scales with your user base effortlessly.</p>
</li>
<li><p><strong>Simple Storage Service (S3):</strong> Data, glorious data! S3 remains your one-stop shop for storing all types of data objects – from application logs to media libraries. S3 boasts scalability, exceptional durability, and affordability, making it the go-to service for cloud storage.</p>
</li>
<li><p><strong>Relational Database Service (RDS):</strong> Databases are the lifeblood of many applications. RDS streamlines database management by offering managed relational database services for popular engines like MySQL, PostgreSQL, and Aurora. Say goodbye to the hassles of setting up, patching, or scaling your database – RDS handles it all.</p>
</li>
</ul>
<p><strong>Beyond the Basics:</strong></p>
<ul>
<li><p><strong>Amazon DynamoDB:</strong> For workloads demanding NoSQL databases with low latency and high performance, DynamoDB is your champion. Built for scalability and fault tolerance, DynamoDB is ideal for mobile backends, gaming applications, and internet-of-things (IoT) use cases.</p>
</li>
<li><p><strong>Amazon Elastic Kubernetes Service (EKS):</strong> Containerization is all the rage, and EKS provides a managed Kubernetes service for deploying and scaling containerized applications. Focus on building your apps; EKS takes care of managing the Kubernetes cluster, simplifying deployments and operations.</p>
</li>
<li><p><strong>Amazon Simple Notification Service (SNS):</strong> Need a highly scalable and cost-effective way to send notifications across different distributed applications? SNS is your answer. It allows you to publish messages to various topics, and subscribers can receive those messages according to their interests.</p>
</li>
</ul>
<p><strong>Security and Management:</strong></p>
<ul>
<li><p><strong>Amazon Cognito:</strong> User authentication is crucial, and Cognito provides user identity services for your web and mobile apps. Cognito simplifies user registration, login, and access control, allowing you to integrate social sign-in and implement multi-factor authentication (MFA) for enhanced security.</p>
</li>
<li><p><strong>Amazon CloudWatch:</strong> Keeping tabs on your AWS resources is essential. CloudWatch provides comprehensive monitoring and observability tools, allowing you to track resource utilization, application performance, and set custom alarms for proactive issue detection.</p>
</li>
<li><p><strong>AWS CloudTrail:</strong> Security is paramount. CloudTrail acts as your AWS auditor, recording API calls made to your AWS account. With CloudTrail, you can monitor user activity, track changes made to your resources, and fulfill regulatory compliance requirements.</p>
</li>
</ul>
<p><strong>Machine Learning and Artificial Intelligence (AI):</strong></p>
<ul>
<li><p><strong>Amazon SageMaker:</strong> Machine learning (ML) can be daunting, but SageMaker streamlines the entire ML lifecycle. From data preparation to model training and deployment, SageMaker offers a managed service that empowers you to build, train, and deploy ML models seamlessly.</p>
</li>
<li><p><strong>Amazon Rekognition:</strong> Want to leverage image and video analysis in your applications? Rekognition is an image and video recognition service that allows you to identify objects, scenes, and even people in your visual content. Perfect for building applications like content moderation, security surveillance, and automated image tagging.</p>
</li>
</ul>
<p><strong>Content Delivery and Networking:</strong></p>
<ul>
<li><p><strong>Amazon CloudFront:</strong> Delivering content to users across the globe with low latency requires a robust content delivery network (CDN). CloudFront excels in this domain, caching your content in geographically distributed edge locations, ensuring fast and reliable delivery of your static and dynamic content to your users.</p>
</li>
<li><p><strong>Amazon Virtual Private Cloud (VPC):</strong> Security is a top priority. VPC lets you create a logically isolated virtual network within the AWS cloud. You can define your own IP address range, configure security groups to control network traffic, and create subnets for specific use cases within your VPC.</p>
</li>
</ul>
<p>This list barely scratches the surface of the vast array of services offered by AWS. From services for analytics (Amazon Redshift) to business intelligence (Amazon QuickSight), and from blockchain (Amazon Managed Blockchain) to the Internet of Things (AWS IoT Core), AWS has a service for nearly every conceivable need.</p>
<p><strong>Ready to Unleash the Power of AWS?</strong></p>
<p>With its extensive suite of services, unwavering focus on scalability and security, and its pay-as-you-go pricing model, AWS empowers businesses of all sizes to innovate and thrive in the cloud. Whether you're a budding startup or a seasoned enterprise, AWS has the tools and resources to propel your applications and business to new heights.</p>
<p><strong>So, dive into the world of AWS and explore the possibilities!</strong> The AWS website offers a plethora of resources, including tutorials, documentation, and case studies to get you started. With a little exploration, you'll discover how AWS can be the engine that drives your success in the cloud.</p>
]]></content:encoded></item><item><title><![CDATA[Demystifying AutoSys]]></title><description><![CDATA[In today's fast-paced IT landscape, automation is king. And that's where AutoSys shines, standing tall as a powerful workload automation (WLA) tool that orchestrates and executes your tasks like a digital maestro. But mastering its capabilities can s...]]></description><link>https://blog.sanyam.dev/autosys</link><guid isPermaLink="true">https://blog.sanyam.dev/autosys</guid><category><![CDATA[AutoSys]]></category><category><![CDATA[JIL]]></category><category><![CDATA[automation]]></category><dc:creator><![CDATA[Sanyam Kumar]]></dc:creator><pubDate>Fri, 05 Jan 2024 04:51:55 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/LqKhnDzSF-8/upload/296b211daf052d5076741517d8a40aed.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In today's fast-paced IT landscape, automation is king. And that's where AutoSys shines, standing tall as a powerful workload automation (WLA) tool that orchestrates and executes your tasks like a digital maestro. But mastering its capabilities can seem daunting, especially for newcomers. This blog cuts through the complexity, offering a practical guide to creating, updating, and deleting jobs in AutoSys, empowering you to take control of your automation game.</p>
<p><strong>What is AutoSys?</strong></p>
<p>Think of AutoSys as your trusty IT conductor, meticulously scheduling and running tasks across your entire infrastructure. From routine backups to intricate data processing pipelines, AutoSys automates these critical processes, ensuring timely execution and error-free operation. Whether you're managing servers, applications, or data, AutoSys streamlines your workflows, boosts efficiency, and frees up your team for more strategic endeavors.</p>
<p><strong>Creating Jobs in AutoSys:</strong></p>
<p>Crafting jobs in AutoSys is surprisingly intuitive, thanks to the Job Information Language (JIL). Imagine JIL as your recipe book for automation, where you define the ingredients (scripts, commands, parameters) and instructions (scheduling, dependencies) for your desired outcome.</p>
<p>Here's the basic JIL recipe for creating a new job:</p>
<ol>
<li><p><strong>Start with the basics:</strong> Define the job name, type (command, script, box), and owner. "Backup_script" as your job name, <code>c</code> for a command type, and your username as the owner could be your starting point.</p>
</li>
<li><p><strong>Specify the action:</strong> Tell AutoSys what to do! Use the "command" attribute to reference the script or executable to be run. Remember, <code>backup.sh</code> could be your command in this case.</p>
</li>
<li><p><strong>Choose your platform:</strong> Determine where the job should run by specifying the machine name, like "backup_server."</p>
</li>
<li><p><strong>Schedule your workflow:</strong> Define the job's execution frequency. For daily backups, use "days_of_week: all" and "start_times: 02:00."</p>
</li>
<li><p><strong>Refine the details:</strong> Set additional attributes like error handling with "alarm_if_fail: 1" and output capture with "std_out_file: /logs/backup.log."</p>
</li>
</ol>
<p>That's it! Save your JIL script and run it with the <code>jil</code> command to see your automated job spring to life.</p>
<p><strong>Updating and Deleting Jobs:</strong></p>
<p>Your needs evolve, and so should your automation. AutoSys makes it easy to update and delete existing jobs. For updates, simply modify the relevant attributes in your JIL script and re-run it. To delete a job, use the <code>delete_job: &lt;job_name&gt;</code> command in JIL. Remember, with great power comes great responsibility, so use the delete command cautiously!</p>
<p><strong>Beyond the Basics:</strong></p>
<p>This is just a taste of AutoSys's vast capabilities. From dependencies and conditions to file watchers and global variables, there's a treasure trove of features to explore. Don't hesitate to dive deeper into the JIL documentation and discover how AutoSys can truly transform your IT operations.</p>
<p><strong>Sample Scripts:</strong></p>
<p>Want to see these concepts in action? Here are some sample JIL scripts:</p>
<ul>
<li><strong>Creating a simple command job:</strong></li>
</ul>
<pre><code class="lang-yaml"><span class="hljs-string">/*</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">Job</span> <span class="hljs-string">Name</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">*/</span>
<span class="hljs-attr">insert_job:</span> <span class="hljs-string">&lt;job_name&gt;</span>
<span class="hljs-attr">job_type:</span> <span class="hljs-string">&lt;job_type&gt;</span>
<span class="hljs-attr">command:</span> <span class="hljs-string">&lt;command_to_execute&gt;</span>
<span class="hljs-attr">machine:</span> <span class="hljs-string">&lt;machine_name&gt;</span>
<span class="hljs-attr">owner:</span> <span class="hljs-string">&lt;job_owner&gt;</span>
<span class="hljs-attr">permission:</span> <span class="hljs-string">&lt;permissions&gt;</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">&lt;job_description&gt;</span>
<span class="hljs-attr">std_out_file:</span> <span class="hljs-string">&lt;standard_output_file&gt;</span>
<span class="hljs-attr">std_err_file:</span> <span class="hljs-string">&lt;standard_error_file&gt;</span>
<span class="hljs-attr">alarm_if_fail:</span> <span class="hljs-string">&lt;0_or_1&gt;</span>
<span class="hljs-string">/*</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">Additional</span> <span class="hljs-string">Attributes</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">*/</span>
<span class="hljs-string">/*</span> <span class="hljs-string">Add</span> <span class="hljs-string">other</span> <span class="hljs-string">attributes</span> <span class="hljs-string">as</span> <span class="hljs-string">needed,</span> <span class="hljs-attr">such as:</span>
   <span class="hljs-string">box_name,</span> <span class="hljs-string">max_run_alarm,</span> <span class="hljs-string">priority,</span> <span class="hljs-string">days_of_week,</span> <span class="hljs-string">start_times,</span> <span class="hljs-string">condition...</span>
   <span class="hljs-string">Refer</span> <span class="hljs-string">to</span> <span class="hljs-string">your</span> <span class="hljs-string">CA</span> <span class="hljs-string">Workload</span> <span class="hljs-string">Automation</span> <span class="hljs-string">AE</span> <span class="hljs-string">documentation</span> <span class="hljs-string">for</span> <span class="hljs-string">more</span> <span class="hljs-string">details.</span> <span class="hljs-string">*/</span>

<span class="hljs-attr">Example:</span>
<span class="hljs-string">/*</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">Daily</span> <span class="hljs-string">Backup</span> <span class="hljs-string">Job</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">*/</span>
<span class="hljs-attr">insert_job:</span> <span class="hljs-string">daily_backup</span>
<span class="hljs-attr">job_type:</span> <span class="hljs-string">c</span>
<span class="hljs-attr">command:</span> <span class="hljs-string">/usr/bin/backup.sh</span>
<span class="hljs-attr">machine:</span> <span class="hljs-string">backup_server</span>
<span class="hljs-attr">owner:</span> <span class="hljs-string">admin</span>
<span class="hljs-attr">permission:</span> <span class="hljs-string">gx,wx</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">"Runs the daily backup script"</span>
<span class="hljs-attr">std_out_file:</span> <span class="hljs-string">/logs/backup_out.log</span>
<span class="hljs-attr">std_err_file:</span> <span class="hljs-string">/logs/backup_err.log</span>
<span class="hljs-attr">alarm_if_fail:</span> <span class="hljs-number">1</span>
<span class="hljs-string">/*</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">Scheduling</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">*/</span>
<span class="hljs-attr">days_of_week:</span> <span class="hljs-string">all</span>
<span class="hljs-attr">start_times:</span> <span class="hljs-string">"02:00"</span>
<span class="hljs-string">/*</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">Dependencies</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">*/</span>
<span class="hljs-attr">condition:</span> <span class="hljs-string">s(database_backup)</span>
<span class="hljs-string">/*</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">Other</span> <span class="hljs-string">Attributes</span> <span class="hljs-string">-----------------</span> <span class="hljs-string">*/</span>
<span class="hljs-attr">max_run_alarm:</span> <span class="hljs-number">120</span>
</code></pre>
<ul>
<li><strong>Updating an existing job:</strong></li>
</ul>
<pre><code class="lang-yaml"><span class="hljs-attr">update_job:</span> <span class="hljs-string">sample_job</span>
<span class="hljs-attr">command:</span> <span class="hljs-string">/bin/echo</span> <span class="hljs-string">"The job has been updated!"</span>
</code></pre>
<ul>
<li><strong>Deleting a job:</strong></li>
</ul>
<pre><code class="lang-yaml"><span class="hljs-attr">delete_job:</span> <span class="hljs-string">sample_job</span>
</code></pre>
<ul>
<li><strong>Creating a file watcher job:</strong></li>
</ul>
<pre><code class="lang-yaml"><span class="hljs-attr">insert_job:</span> <span class="hljs-string">&lt;job_name&gt;</span>
<span class="hljs-attr">job_type:</span> <span class="hljs-string">c</span>
<span class="hljs-attr">command:</span> <span class="hljs-string">&lt;command_to_execute_when_file_arrives&gt;</span>
<span class="hljs-attr">machine:</span> <span class="hljs-string">&lt;machine_name&gt;</span>
<span class="hljs-attr">watch_file:</span> <span class="hljs-string">&lt;file_path_and_name&gt;</span>
<span class="hljs-attr">max_run_alarm:</span> <span class="hljs-string">&lt;maximum_runtime_before_alarm&gt;</span>
<span class="hljs-attr">alarm_if_fail:</span> <span class="hljs-string">&lt;0_or_1&gt;</span>
<span class="hljs-string">/*</span> <span class="hljs-string">Additional</span> <span class="hljs-string">attributes</span> <span class="hljs-string">as</span> <span class="hljs-string">needed</span> <span class="hljs-string">*/</span>

<span class="hljs-attr">Example:</span>
<span class="hljs-attr">insert_job:</span> <span class="hljs-string">process_datafile</span>
<span class="hljs-attr">job_type:</span> <span class="hljs-string">c</span>
<span class="hljs-attr">command:</span> <span class="hljs-string">/apps/process_data.sh</span>
<span class="hljs-attr">machine:</span> <span class="hljs-string">data_server</span>
<span class="hljs-attr">watch_file:</span> <span class="hljs-string">/data/incoming/datafile_*.csv</span>
<span class="hljs-attr">max_run_alarm:</span> <span class="hljs-number">60</span>
<span class="hljs-attr">alarm_if_fail:</span> <span class="hljs-number">1</span>
</code></pre>
<ul>
<li><strong>Executing a JIL script from a file:</strong></li>
</ul>
<pre><code class="lang-yaml"><span class="hljs-string">jil</span> <span class="hljs-string">&lt;</span> <span class="hljs-string">script.jil</span> <span class="hljs-string">&gt;</span> <span class="hljs-string">script.out</span>
</code></pre>
<p><strong>Executing Multiple Scripts:</strong></p>
<p>Want to run multiple JIL scripts from one file? No problem! Use the <code>include</code> statement:</p>
<pre><code class="lang-yaml"><span class="hljs-attr">include:</span> <span class="hljs-string">"script1.jil"</span>
<span class="hljs-attr">include:</span> <span class="hljs-string">"script2.jil"</span>
</code></pre>
<p>Remember, order matters, and errors in included scripts can stop execution.</p>
]]></content:encoded></item><item><title><![CDATA[How to Simplify Node.js Version Management Using NVM]]></title><description><![CDATA[When I first started working with Node.js, I would directly install it from the official Node.js website using their recommended installer. It was a straightforward process: click, download, run the installer, and voilà! I had the latest version of N...]]></description><link>https://blog.sanyam.dev/simplifying-nodejs-version-management-with-nvm</link><guid isPermaLink="true">https://blog.sanyam.dev/simplifying-nodejs-version-management-with-nvm</guid><category><![CDATA[Node.js]]></category><category><![CDATA[nvm]]></category><dc:creator><![CDATA[Sanyam Kumar]]></dc:creator><pubDate>Wed, 18 May 2022 18:30:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/6LaCtmKaPOg/upload/1e11ad367a2dae9240f4892463c75459.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I first started working with Node.js, I would directly install it from the official Node.js website using their recommended installer. It was a straightforward process: click, download, run the installer, and voilà! I had the latest version of Node.js and npm installed on my machine, ready to kick off my new project.</p>
<p>However, Node.js evolves at lightning speed. It feels like there’s a new upgrade almost every other month, and by the time I was ready to start a new project, I’d have to update to the latest Node.js version to access the newest features.</p>
<p>But here’s the catch: when I revisited my old projects, I’d be greeted by a barrage of red error messages. Suddenly, my previously smooth-running project was plagued with npm packaging incompatibilities and other issues. It was frustrating to say the least.</p>
<p>Enter <strong>Node Version Manager (NVM)</strong>. This nifty tool allows you to manage multiple Node.js versions on your machine, making it easy to switch back and forth based on your project requirements. Let’s dive into how you can harness the power of NVM:</p>
<h2 id="heading-installing-nvm">Installing NVM</h2>
<h3 id="heading-windows-users">Windows Users</h3>
<p>If you’re on Windows, fear not! While NVM is primarily supported on Linux and Mac, there’s a similar tool called <strong>nvm-windows</strong> that provides an NVM-like experience for Windows users. Here’s what you need to do:</p>
<ol>
<li><p>Visit the NVM for Windows GitHub repository.</p>
</li>
<li><p>Download the latest version of the installer from the releases page.</p>
</li>
<li><p>Run the installer and follow the on-screen instructions.</p>
</li>
</ol>
<h3 id="heading-linux-and-mac-users">Linux and Mac Users</h3>
<p>For Linux and Mac users, open your terminal and execute the following command to install NVM:</p>
<pre><code class="lang-bash">curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
</code></pre>
<p>or</p>
<pre><code class="lang-bash">wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
</code></pre>
<p>This command will clone the NVM repository to <code>~/.nvm</code> on your device.</p>
<h2 id="heading-using-nvm">Using NVM</h2>
<p>Now that NVM is installed, let’s explore its capabilities:</p>
<ol>
<li><p><strong>Installing Node.js Versions</strong>:</p>
<ul>
<li><p>To install the latest version of Node.js, use:</p>
<pre><code class="lang-bash">  nvm install latest
</code></pre>
</li>
<li><p>To install a specific version (e.g., 14.17.0), run:</p>
<pre><code class="lang-bash">  nvm install 14.17.0
</code></pre>
</li>
</ul>
</li>
<li><p><strong>Setting a Default Version</strong>:</p>
<ul>
<li><p>Set a default Node.js version with:</p>
<pre><code class="lang-bash">  nvm <span class="hljs-built_in">alias</span> default 14.17.0
</code></pre>
</li>
</ul>
</li>
<li><p><strong>Switching Between Versions</strong>:</p>
<ul>
<li><p>Use the following command to switch to a specific version:</p>
<pre><code class="lang-bash">  nvm use 14.17.0
</code></pre>
</li>
</ul>
</li>
</ol>
<p>Remember to uninstall any existing Node.js installations to avoid conflicts with NVM. Now you’re equipped to manage your Node.js versions effectively!</p>
<p>Happy coding! 🚀</p>
<hr />
<p>Feel free to share this blog post with fellow developers who want to streamline their Node.js development workflow. If you have any questions or need further assistance, drop a comment below! 😊</p>
]]></content:encoded></item><item><title><![CDATA[Cloud Computing]]></title><description><![CDATA[Cloud computing is the on-demand delivery of IT resources via the internet, with pay-as-you-go pricing. Instead of buying, owning, and maintaining physical data centers and servers you can access technology services, such as computing power, storage,...]]></description><link>https://blog.sanyam.dev/cloud-computing</link><guid isPermaLink="true">https://blog.sanyam.dev/cloud-computing</guid><category><![CDATA[Cloud Computing]]></category><dc:creator><![CDATA[Sanyam Kumar]]></dc:creator><pubDate>Tue, 16 Mar 2021 12:12:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1615897071149/9kK3hqoq3.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p> Cloud computing is the on-demand delivery of IT resources via the internet, with pay-as-you-go pricing. Instead of buying, owning, and maintaining physical data centers and servers you can access technology services, such as computing power, storage, and databases, on an as-needed basis from a cloud provider like Amazon Web Services, Microsoft Azure, etc. </p>
<p><em>Why is it called "Cloud Computing"?</em></p>
<blockquote>
<p>The Cloud got its name when early Engineers needed a simple way to diagram complex networks connected through the internet. So they drew the bubbles around them, that looked like clouds and the name stuck. </p>
</blockquote>
<p>Organizations of every type, size, and industry are using the cloud for a wide variety of use cases, such as data backup, disaster recovery, email, virtual desktops, software development, and testing, big data analytics, and customer-facing web applications. For example, health care companies are using the cloud to develop more personalized treatments for patients. Financial services companies are using the cloud to power real-time fraud detection and prevention. And video game makers are using the cloud to deliver online games to millions of players around the world. </p>
<p>With cloud computing, the business can become more agile, reduce costs, instantly scale, and deploy globally in minutes. Cloud computing gives you instant access to a broad range of technologies so you can innovate faster and build nearly anything you can imagine, from infrastructure services such as compute, storage and databases, to the Internet of Things, machine learning, data analytics, and much more. </p>
<p>You can deploy technology services in a matter of minutes and get from idea to implementation several orders of magnitude faster than before. This gives you the freedom to experiment and test new ideas to differentiate customer experiences and transform business, such as adding machine learning and intelligence to applications to personalize experiences for customers and improve their engagement. You don't need to make large, upfront investments in hardware and overpay for the capacity you don't use. Instead, you can trade capital expense for the variable expense and only pay for IT as you consume it. </p>
<p><em>Where is Cloud storage actually located?</em></p>
<blockquote>
<p>Nothing is Up there! It turns out, internet infrastructure is actually very much earthbound. Every server and data center that makes up “The Cloud” is on land and chances are when you upload something to the cloud, you are not sending stuff up but you are sending stuff down through the ocean. Optical fiber - The Undersea Cloud.</p>
</blockquote>
<p>With cloud computing, you access resources from the cloud in real-time as they're needed. You can scale these resources up and down to grow or shrink capacity instantly as business needs change. Cloud computing also makes it easy to expand to new regions and deploy globally in minutes. Cloud infrastructure is all over the world so you're able to deploy the application in multiple physical locations in just a few clicks. Putting applications in closer proximity to end users reduces latency and improves their experience. No matter location, size, or industry, the cloud frees you from managing infrastructure and data centers so you can focus on what matters most to business.</p>
]]></content:encoded></item><item><title><![CDATA[Linux 101]]></title><description><![CDATA[Linux is a general-purpose computer operating system, originally released in 1991 by Linus Torvalds. Linux is defined by its kernel, which is the core component of the system. The kernel interacts with the computer hardware to allow software and othe...]]></description><link>https://blog.sanyam.dev/linux-101</link><guid isPermaLink="true">https://blog.sanyam.dev/linux-101</guid><category><![CDATA[Linux]]></category><category><![CDATA[Ubuntu]]></category><dc:creator><![CDATA[Sanyam Kumar]]></dc:creator><pubDate>Thu, 04 Mar 2021 02:27:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1614792814215/BbYDY5ol0.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>  Linux is a general-purpose computer operating system, originally released in 1991 by Linus Torvalds. Linux is defined by its kernel, which is the core component of the system. The kernel interacts with the computer hardware to allow software and other hardware to exchange information. Linux was inspired by MINIX which, in turn, was inspired by UNIX. </p>
<blockquote>
<p>Linux is based on a philosophy that software and operating systems should be free. Both, free of cost and freely modifiable. </p>
</blockquote>
<p>The software license which allows this, in the case of the Linux kernel, is called the GNU General Public License. This emphasis on freedom, both, cost and modification has helped Linux to become popular for many different applications and purposes. And Linux has popped up everywhere from the majority of the servers that run web services we all use to supercomputers, to your wifi router, in cars, mobile phones, and everywhere in between. </p>
<p>  Amid all these different kinds of Linux installations, the most important distinction you'll need to be aware of is one of genealogy. While the Linux kernel is more or less the same across nearly all of these installations of Linux, the software that surrounds the kernel that provides capabilities like software package management, control of services, and the location of configuration files differs between them. Many of the tools that come packaged with Linux come from the GNU Project and aren't a part of Linux. And so, taken together, the combination of the kernel and these common tools is often referred to as GNU Linux. Different groups of software and configuration choices that are maintained by individuals or groups of people are called distributions, or distros. </p>
<p>  Most major distributions of Linux fall into four categories based on the original distribution from which they were derived. There's Arch, Debian, Red Hat, and Slackware, and any number of other smaller distributions. Depending on your industry, your company, your institution, or any number of other factors, you're likely to end up learning to use the command line on a system that inherits from one of these distributions. Most likely, you'll be using one derived from Debian or Red Hat. Linux Mint,  <a target="_blank" href="https://ubuntu.com/">Ubuntu</a>, Elementary OS, and Kali Linux are all derived from Debian. CentOS, Fedora, and Red Hat Enterprise Linux are derived from Red Hat. The history of all of these different distributions of Linux is kind of beyond the scope of this course. But, what this means at its core is that you'll need to be aware of what system you're using and that you may need to adapt what you're doing to account for differences in distributions. </p>
<p>  As you begin working with Linux, through the command line, most of what you'll do is the same across the major distributions. That's because the text interface, the command line, is a program called a shell. The Bash shell, which is available almost everywhere. As you extend your learning and explore software packages and system administration you'll start to see differences.</p>
]]></content:encoded></item><item><title><![CDATA[Getting Started with Software Development]]></title><description><![CDATA[If you’ve ever considered building an app or making a website you are probably wondering how does this whole world fits together. Do you know what do I need to learn? What tools do I need to use? and how do they all fit together so that the basic pre...]]></description><link>https://blog.sanyam.dev/getting-started-with-software-development</link><guid isPermaLink="true">https://blog.sanyam.dev/getting-started-with-software-development</guid><category><![CDATA[software development]]></category><dc:creator><![CDATA[Sanyam Kumar]]></dc:creator><pubDate>Sun, 03 Jan 2021 10:05:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1614765862854/Dpe5DsIcs.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you’ve ever considered building an app or making a website you are probably wondering how does this whole world fits together. Do you know what do I need to learn? What tools do I need to use? and how do they all fit together so that the basic premise is you have mobile apps, websites, and web apps, and depending on what you want to build? You’ll learn different things, so let’s say that you’re interested in building mobile apps you know those are things like Instagram or LinkedIn or games if you want to build a mobile app, then you decide which type of phone or mobile device do you want to use so do you want to have it available on an iPhone and an iPad or an Android phone or Android tablet.</p>
<p>Once you decide you want to build an iPhone app for instance then you would learn something called iOS, you need a Mac to do that and then you use a free tool called <strong>Xcode</strong> and you make apps using <strong>Objective-C</strong>. Instead of Objective-C, now people are started to use <strong>Swift</strong>. The way you sell those apps is in the App Store so you upload it to the App Store and then Apple okay’s it or doesn’t, hopefully, they’ll hit it, and then it goes in the store, and then you can charge real money for that and launch your app.</p>
<p>That way the next thing is if you decide to make an Android app. If you are going for an Android phone or an Android tablet, then you are building for Android. Android is the operating system of those devices and the tool that you use is usually like <strong>eclipse</strong> or <strong>Android studio</strong>. The actual language that you use to build those apps is called <strong>Java</strong>. And for the language of Android Apps development, Besides “Java”, a new language called <strong>Kotlin</strong> is started to gain popularity Maybe in a few month or years, people will abandon Java and goes for Kotlin, so better to do some more Google search before spend all your time into either Java or Kotlin for Android development. so that is the basic idea of mobile apps you code in these specific languages in these specific tools and then people download your apps from the Google Play Store and they pay for them.</p>
<p>That way now says instead you would rather build a website so you want to build a website for your restaurant or your dad’s business or your school. The tools that you use to build websites are basically a text editor and then you save your files and then you upload them to the Internet. The languages you need to learn are called <strong>HTML</strong>, <strong>CSS</strong>, and a little bit of <strong>JavaScript</strong>. Those are some of the easiest things to learn initially, you don’t have to do a lot of programming or a lot of technical things. They’re fairly straightforward so that’s how to build a website.</p>
<p>Now say that you want to build a website but you want people to interact with it. You want them to log in or you want them to know friend people or like things or create accounts. All those things turn that website into a web application. You know something that you interact with and examples that are you know things like Facebook, Google Maps is a good example. It’s very interactive. So if you want to build something like that first of all you pick a language to build it in.</p>
<p>Your choices are things like <strong>Node.js</strong>, <strong>Ruby</strong>, <strong>Python</strong>, <strong>Java</strong> there’s more but those are some of the most common ones. Once you pick a language then you would also pick a database. A database is a thing that holds all the information on the site. When you create an account and a password that is stored in the databases like <strong>Oracle</strong>, <strong>SQL</strong>, <strong>MongoDB</strong>. The tools used to make web apps are also text-based so you have text editors like VS Code, Atom, Sublime. and then you save your files and then you upload them to the internet. It’s similar to making a website but you use more powerful languages to make things happen. So we’ve covered so far mobile apps, websites, and web apps.</p>
<p>Now let’s address a little bit more about the types of jobs that you might get in those fields. All three of those things require three types of people. The first is a designer, the second is a front-end developer and the third is a back-end developer. A designer thinks about the way things look and how they work. They use tools like <strong>Photoshop</strong>, Illustrator various tools like that. They design it and they make it look great and then they hand it over to the next person which is a front-end developer. A front-end developer is some who takes that design. They chop it up and translate it into the code and they use tools like HTML CSS and JavaScript. Now, what’s happening more and more of those designers and front-end developers are becoming the same person. So at MNCs, they only hire designers that are also front-end developers so eventually it pays off to know both those skills. And then you have back-end developers, so a front-end developer will chop up the design and make it ready but it won’t work. You can look at it but you can’t log in or you can’t create an account that type of thing. So the back-end developer takes that and then they wire it up quote-unquote, they connected to the database, they write code to make the app work and function. They’re using tools like Node.js, Ruby, Python, Java things like that.</p>
<p>So that is the basic overview of how this fits together. It can be confusing at first but once you understand that there are these basic buckets, you know okay I want to make a mobile app or I want to make a website or I want to make a web app once you decide which of those three things you want to do then you can go down a track and learn it.</p>
<p><em>Happy Learning</em></p>
]]></content:encoded></item><item><title><![CDATA[Dr. APJ Abdul Kalam]]></title><description><![CDATA[One afternoon, my grandfather casually asked me, “Who is the President of India?”
At that time, I wasn’t very strong in current affairs — but I knew this one. With confidence, I replied, “Dr. APJ Abdul Kalam.”
He smiled, nodded, and then followed up ...]]></description><link>https://blog.sanyam.dev/dr-apj-abdul-kalam</link><guid isPermaLink="true">https://blog.sanyam.dev/dr-apj-abdul-kalam</guid><dc:creator><![CDATA[Sanyam Kumar]]></dc:creator><pubDate>Thu, 15 Oct 2020 09:55:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1614765321342/JUQPnvduj.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One afternoon, my grandfather casually asked me, “Who is the President of India?”</p>
<p>At that time, I wasn’t very strong in current affairs — but I knew this one. With confidence, I replied, “Dr. APJ Abdul Kalam.”</p>
<p>He smiled, nodded, and then followed up with, “Good! Now tell me, what does APJ stand for?”</p>
<p>That question caught me off guard. I went blank. “I’m not sure,” I said, feeling a bit embarrassed.</p>
<p>That’s when he explained, “APJ means <strong>Avul Pakir Jainulabdeen</strong>.”</p>
<p>At first, I felt disappointed for not knowing something so basic. But soon, that feeling turned into pride — pride in learning the full name of one of the most respected leaders India has ever known.</p>
<hr />
<h3 id="heading-a-man-beyond-titles-and-power">A Man Beyond Titles and Power</h3>
<p>India lost one of her greatest sons when Dr. Kalam left us. He was far more than just a scientist or the President — he was a <strong>visionary</strong>, a <strong>teacher</strong>, and above all, a <strong>humble human being</strong>.</p>
<p>He never led through authority; he led through <strong>inspiration and compassion</strong>. The admiration people have for him wasn’t inherited or demanded — it was <strong>earned</strong> through his honesty, hard work, and kindness.</p>
<p>Even today, as I scroll through social media, I see quotes, photos, and stories celebrating him. It’s a reminder that his influence still lives on — in classrooms, in dreams, and in the hearts of millions.</p>
<hr />
<h3 id="heading-the-real-superman-of-india">The Real “Superman” of India 🦸‍♂️</h3>
<p>The media often called him the <strong>“Missile Man of India.”</strong> Indeed, he was the driving force behind India’s missile and defense technology, helping our nation secure its place among the global powers.</p>
<p>But to me, that title isn’t enough. He wasn’t just the Missile Man — he was <strong>India’s Superman</strong>.</p>
<p>He elevated the nation not only through science but through <strong>hope and belief</strong>. He showed us what true leadership looks like — not by commanding people, but by motivating them to rise higher.</p>
<p>Dr. Kalam’s work also transformed India’s space program. His dedication helped <strong>ISRO</strong> earn the recognition it enjoys today, standing proudly among agencies like NASA.</p>
<hr />
<h3 id="heading-his-greatest-investment-young-minds">His Greatest Investment: Young Minds 💭</h3>
<p>Dr. Kalam believed the true strength of India lay in its youth. He spent countless hours interacting with students, encouraging them to dream fearlessly and to pursue those dreams with discipline and determination.</p>
<p>His own journey — from a small town in Rameswaram to the highest office in the country — was living proof that <strong>circumstances can never define your destiny</strong>.</p>
<p>Despite all the fame and honors, he remained grounded and approachable. His humility was his greatest strength — and perhaps the real secret behind his success.</p>
<hr />
<h3 id="heading-a-legacy-that-will-never-fade">A Legacy That Will Never Fade 🌠</h3>
<p>Dr. Kalam’s influence is eternal. His speeches, his books, and his vision continue to inspire young minds across India and beyond.</p>
<p>He didn’t just lead a nation — he <strong>ignited a generation</strong>.<br />He didn’t just dream of a better India — he <strong>showed us how to build it</strong>.</p>
<p>Dr. APJ Abdul Kalam will forever be remembered — not merely as the “Missile Man,” but as the <strong>man who taught India how to dream</strong>.</p>
]]></content:encoded></item><item><title><![CDATA[The right way to do P@$5W0rd]]></title><description><![CDATA[The most important thing on the internet for your Digital Identity and your protection is securing your authentication with the internet, meaning your username and password. If someone is very active on social media, like Facebook, Twitter, or Linked...]]></description><link>https://blog.sanyam.dev/the-right-way-to-do-pdollar5w0rd</link><guid isPermaLink="true">https://blog.sanyam.dev/the-right-way-to-do-pdollar5w0rd</guid><category><![CDATA[passwords]]></category><dc:creator><![CDATA[Sanyam Kumar]]></dc:creator><pubDate>Sat, 18 May 2019 09:42:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1614791308560/NJpg5wL5l.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The most important thing on the internet for your Digital Identity and your protection is securing your authentication with the internet, meaning your username and password. If someone is very active on social media, like Facebook, Twitter, or LinkedIn, that page defines him/her professionally,  so breaching that page is ultimately breaching the Digital Identity of that person.  And the barrier between the attacker and the content is authentication.</p>
<p>Generally, you should now use the same password almost anywhere. The creation of unique passwords per website would be highly recommended, but there would also require that you download some plugin that can store those passwords and remember them for you.  So, for example, I have around 200 passwords. There’s no way I could remember them, right? I know some but some of them are truly generic and rely on platforms for me to authenticate into those sites.  <a target="_blank" href="https://www.lastpass.com/">LastPass•••|</a> </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1614764353047/d2iAwynHp.png" alt="screenshot-from-2018-05-25-09-17-13.png" /></p>
<p>Storing credentials in unencrypted form on a computer, for example in your internet browser, is not the smartest idea on the planet. Probably you should do is use LastPass•••| or find an application, that can store them securely for you and has two-factor authentication.</p>
<p>Two-factor is probably the most secure authentication the general public can get today. Highly recommended.  The main reason is that it combines something you have and something you know. What you know is your password, and what you have is usually, for example, a token on your phone. And it’s very hard to break for an average attacker. Storing anything on your device–mobile device or computer–in an unencrypted form that has your private data, either social or private life data is not a good idea.</p>
]]></content:encoded></item><item><title><![CDATA[Mathematics]]></title><description><![CDATA[TL;DR
Most people probably think of math as being about numbers and equations and, I don’t know, triangles. But where do numbers and triangles come from? Like, why are these things that anyone ever needs to talk about? You know, every math student ev...]]></description><link>https://blog.sanyam.dev/mathematics</link><guid isPermaLink="true">https://blog.sanyam.dev/mathematics</guid><category><![CDATA[Mathematics]]></category><dc:creator><![CDATA[Sanyam Kumar]]></dc:creator><pubDate>Fri, 30 Mar 2018 09:24:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1614790977714/Yde0CuuNf.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="tldr">TL;DR</h3>
<p>Most people probably think of math as being about numbers and equations and, I don’t know, triangles. But where do numbers and triangles come from? Like, why are these things that anyone ever needs to talk about? You know, every math student ever has probably at some point though, math class is boring and stupid and when am I ever going to use this? Besides which, how do we know that math is true? Why do four plus three turn out to be seven instead of twelve, and how does that kind of truth relate to scientific truth, which is based on evidence rather than I guess, pure Vulcan logic?</p>
<p>I think most mathematicians are probably with Plato on this. They’d tell you the mathematical truth is more pure and essential and fully known than anything in science. you’ve probably heard that evolution is just a theory, even gravity is just a theory because science can’t ever fully prove anything. But maths has proofs and we know for sure they’re right. But why is science stuck defending theories about the imperfect real world while maths has these perfect truths? Plato’s idea was that there are these ideal forms, like perfect circles, which exist in a kind of maths heaven somewhere. And the things in maths heaven work as maths does and we keep realizing they exist when we see the regular world struggling to imitate them with its imperfect triangles and circles. I’m not being very fair to this idea, because to me it just sounds crazy. I mean if ideal forms don’t exist somewhere in the physical universe then isn’t the notion of their reality a metaphor? And if so, what’s it a metaphor for? Are ideal forms of the property of nature, or do they exist in our minds, or what? There are a bunch of other ideas. The intuition viewpoint says that the source of mathematical truth is human intuition; that we verify the truth of mathematical propositions subjectively by thinking through them and directly experiencing their truth.</p>
<p>Well, I don’t know about you, but I have an annoying tendency to directly experience the truth of things that turn out to be false! So, how do we deal with that? And then there’s the social constructionist view that mathematics is just a kind of language game that mathematicians play with one another, making up the rules as they go along like some super nerdy version of Calvin ball. Like, the only reason four plus three is seven is that everybody says so. As a kid, did you ever just keep asking why, why, why, and eventually your parents or whoever would break down and say “because I said so”? maybe that was the answer! I love to mock social constructionists but there’s a valid, important point here that the consensus of mathematicians, like any human agreement, is to some extent vulnerable to mass allusions and groupthink and all the usual in-group/out-group drama that pervades human social life.</p>
<p>Still, if it’s strictly true that there’s little or no connection to any underlying reality, then it’s really weird that the rules mathematicians have happened to agree on are so great for describing the world around us. And I think that’s pretty much the average scientist’s view of mathematics: It some kind of language of nature. You need it to describe how the universe acts and who cares why it works? We’ve found that it does. At least here we’re on familiar territory for scientists. Mathematical truth if nothing else is backed up by empirical observations of the world just like any scientific theory. But does that mean that mathematical proof isn’t proof? When we want to know whether a mathematical idea is true, do we have to go out and find a relevant example triangle, or an unaccountably infinite set, and confirm the theory describes something in nature? Okay, so obviously I don’t buy any of these arguments, so here’s what I think: I got this idea from Haskell Curry, an all-around awesome mathematician who outlined it in a little paper in 1951. I’m not sure Curry did a great job defending his idea from hostile philosophers, but he characterized math in a way that, at least for me, finally clarifies this vague hunch humanity has had for so long that mathematical reasoning is somehow valid. Besides observing perfect circles, there’s another very physical and empirical way that we interact with math.
We perform calculations and we observe their results. What Curry thought, and what I think, is that maths is a science on the same footing as physics or chemistry. Mathematical rules themselves are phenomenon that exists in the real world and can be observed and studied. There may not be any perfect circles, but they're certainly are real definitions of them in the rules of geometry. And following the rules of geometry to reach conclusions about their properties is a real phenomenon with observable results.</p>
<p>Maths, in other words, is the science that studies the implications of systems of rules. And any rules count: maths is not just the stuff taught in grade school, like the straight edge and compass rules of geometry, or the equation-balancing rules of algebra, but also non-euclidean geometries and exotic algebras with arbitrary numbers of operations that are commutative or not or distributive whichever way, and the rules of games like tic-tac-toe and chess, even the abstracted rules of grocery checkout lines or stock options or gravity or quantum mechanics. Even straightforward rules can have surprising implications, so it’s not like there’s nothing to discover just because you know the rules.
The Pythagoreans, for example, were scandalized to learn that the rules of geometry led undeniably to irrational numbers like the square root of two. But there it is, and we have proof. A proof that is, if you look at it another way, a reproducible experiment. Maybe we can’t prove things in maths anymore than in science, but by following the rules of geometry, we can show ourselves again and again that the hypotenuse of a right triangle with two sides of equal length can’t be the ratio between any two whole numbers. So in the science of mathematics, the hypotheses are ideas we have about the implications of rules, like “you can guarantee a draw against any opponent in tic-tac-toe just by playing well”, and then experiments are individual applications of the rules, like checking a proof, to verify that they play out in a certain way.</p>
<p>The experiments in maths, in other words, are computations Like the intuition idea that maths is founded in the activity of human brains computing an answer, Curry’s view focuses on the empirical observation of computations. But the idea isn’t to directly experience their intuitive truth, so much is to see that the faithful application of rules does indeed lead to a particular conclusion. Putting computation at the center of mathematics like this makes me wonder about the connection between maths and computer science. I think maths is the science of computation. After all, the deep connection between mathematical proof and commutable, which was discovered as part of the investigation into the foundations of maths in the early twentieth century, is what kicked off the field of theoretical computer science in the first place. Somebody in computer science, maybe Edsger W. Dijkstra, is supposed to have said that computer sciences are no more about computers than astronomy is about telescopes. If throughout history mathematicians used their brains to conduct mathematical experiments in the same way that astronomers observed the night sky with their naked eyes, then computers are like telescopes through which we can better investigate the computational nature of reality. But what about that kid asking “when am I ever gonna use this?” If nature is all computational and mathematical, shouldn’t math be useful? Well, of course, it is.</p>
<p>Maths is everywhere. When kids ask “when am I ever going to use this,” what they mean is “you’re explaining this so badly that I don’t even know what it is. You’ve taught me how to swim without ever showing me a body of water big enough to swim in.” We give them little buckets, like contrived “a train leaves Chennai Central” problems, and then drill them endlessly on techniques for solving these non-problems. Traditional math classes are so eager to cover every clever technique in a subject that we end up covering them all using boring little problems that nobody needs to solve, and we leave people confused about why they learned to solve them in the first place, which they promptly forget how to do anyway. If we covered fewer techniques, we’d have more time to tackle real problems, and kids would have a chance to get an idea of what math is. Or, at least, what it’s good for.</p>
]]></content:encoded></item></channel></rss>