<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Saumyajit Purakayastha</title>
    <description>The latest articles on DEV Community by Saumyajit Purakayastha (@agspades).</description>
    <link>https://dev.to/agspades</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1534337%2F295dc089-d5c7-4c8d-acb2-5bebc3898805.png</url>
      <title>DEV Community: Saumyajit Purakayastha</title>
      <link>https://dev.to/agspades</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/agspades"/>
    <language>en</language>
    <item>
      <title>Creating a Cluster on MongoDB Atlas</title>
      <dc:creator>Saumyajit Purakayastha</dc:creator>
      <pubDate>Mon, 06 Oct 2025 07:31:55 +0000</pubDate>
      <link>https://dev.to/agspades/creating-a-cluster-on-mongodb-atlas-353c</link>
      <guid>https://dev.to/agspades/creating-a-cluster-on-mongodb-atlas-353c</guid>
      <description>&lt;p&gt;&lt;em&gt;Dedicated to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;MongoDB Atlas is a fully managed cloud database service that simplifies the deployment, management, and scaling of MongoDB clusters. Whether you're building a small prototype or a production-grade application, Atlas provides a user-friendly interface and robust features to get you started quickly. This polished guide walks you through creating a cluster on MongoDB Atlas, with detailed steps and practical tips to ensure a smooth setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you begin, ensure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A MongoDB Atlas account (sign up at &lt;a href="https://www.mongodb.com" rel="noopener noreferrer"&gt;mongodb.com&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;A valid email address and, optionally, a payment method for paid tiers (a free tier is available for testing).&lt;/li&gt;
&lt;li&gt;Basic familiarity with MongoDB concepts, such as collections and documents.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step-by-Step Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Log in to MongoDB Atlas
&lt;/h3&gt;

&lt;p&gt;Navigate to the MongoDB Atlas website and sign in with your credentials. If you’re new to Atlas, click &lt;strong&gt;Sign Up&lt;/strong&gt;, provide your email, and follow the prompts to create an account. Verify your email to activate your account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbttpd0bk968tv2bvcp01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbttpd0bk968tv2bvcp01.png" alt="Login Page" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Create a New Project
&lt;/h3&gt;

&lt;p&gt;Upon logging in, you’ll arrive at the Atlas dashboard. Click &lt;strong&gt;New Project&lt;/strong&gt; in the top-left corner. Enter a descriptive project name, such as "MyFirstCluster," to organize your databases. Click &lt;strong&gt;Next&lt;/strong&gt; to proceed. Optionally, invite team members to collaborate or click &lt;strong&gt;Create Project&lt;/strong&gt; to continue solo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2q9kmjgli4vmcq5zp3gk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2q9kmjgli4vmcq5zp3gk.png" alt="Create New Project" width="800" height="370"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy45va98ne2whuexrijnt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy45va98ne2whuexrijnt.png" alt="Project Name Input" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Build a Database
&lt;/h3&gt;

&lt;p&gt;In the project dashboard, locate and click &lt;strong&gt;Build a Database&lt;/strong&gt; (or &lt;strong&gt;Create a Cluster&lt;/strong&gt;). Atlas offers three cluster types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shared&lt;/strong&gt;: Free tier, perfect for learning or small projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated&lt;/strong&gt;: For production workloads with customizable resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serverless&lt;/strong&gt;: Pay-per-use for flexible scaling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this guide, select the &lt;strong&gt;Shared&lt;/strong&gt; (free) tier and click &lt;strong&gt;Create&lt;/strong&gt;. This tier, also known as the M0 Sandbox, provides 512 MB of storage, ideal for experimentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fft30tui4u33jou8jrshs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fft30tui4u33jou8jrshs.png" alt="Cluster Tier Selection" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Configure Cluster Settings
&lt;/h3&gt;

&lt;p&gt;Customize your cluster with the following settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Provider &amp;amp; Region&lt;/strong&gt;: Select a provider (AWS, Google Cloud, or Azure) and a region close to your target audience to minimize latency. For example, choose AWS’s &lt;code&gt;us-east-1&lt;/code&gt; for North American users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cluster Tier&lt;/strong&gt;: Confirm &lt;strong&gt;M0 Sandbox&lt;/strong&gt; for the free tier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cluster Name&lt;/strong&gt;: Assign a name like "TestCluster" for easy identification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Settings&lt;/strong&gt;: Retain defaults for MongoDB version and backup options, as backups are unavailable in the free tier.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Review the settings and click &lt;strong&gt;Create Deployment&lt;/strong&gt;. Cluster creation typically takes 3–5 minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3m7qh9wn3htfq99em9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3m7qh9wn3htfq99em9r.png" alt="Cluster Configuration" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  5. Create a Database User
&lt;/h3&gt;

&lt;p&gt;While the cluster is provisioning, set up access. Click &lt;strong&gt;Database Access&lt;/strong&gt; in the left menu, then &lt;strong&gt;Add New Database User&lt;/strong&gt; in the pop-up. Create a username (e.g., "dbUser") and a strong password. Assign the &lt;strong&gt;Read and Write to any database&lt;/strong&gt; role for full access. Save the credentials securely, as they’re needed for connecting to the cluster.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpl347bmxl3t2fbvurucy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpl347bmxl3t2fbvurucy.png" alt="Database User Creation" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  6. Configure Network Access
&lt;/h3&gt;

&lt;p&gt;To allow connections to your cluster, click &lt;strong&gt;Network Access&lt;/strong&gt; in the left menu, then &lt;strong&gt;Add IP Address&lt;/strong&gt;. For testing, select &lt;strong&gt;Allow Access from Anywhere&lt;/strong&gt; (0.0.0.0/0). For production, specify your application’s IP or use VPC peering for enhanced security. Save the settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqncz4umialksxycgtahq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqncz4umialksxycgtahq.png" alt="Network Access Setup" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  7. Choose a Connection Method
&lt;/h3&gt;

&lt;p&gt;Once the cluster is ready, click &lt;strong&gt;Connect&lt;/strong&gt; on the cluster dashboard. Atlas offers several connection options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MongoDB Shell&lt;/strong&gt;: Copy the connection string for use in the MongoDB shell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application&lt;/strong&gt;: Select your programming language (e.g., Node.js, Python) and use the provided code snippet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MongoDB Compass&lt;/strong&gt;: Download and install MongoDB Compass, then paste the connection string.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Replace &lt;code&gt;&amp;lt;password&amp;gt;&lt;/code&gt; in the connection string with your database user’s password. Test the connection to ensure it works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8nn8v1dxh4r7s71dp91z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8nn8v1dxh4r7s71dp91z.png" alt="Connection Options" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  8. Add a New Database to Your Cluster
&lt;/h3&gt;

&lt;p&gt;Navigate to the &lt;strong&gt;Collections&lt;/strong&gt; tab in your cluster dashboard and click &lt;strong&gt;Create Database&lt;/strong&gt;. Enter a database name (e.g., "myDatabase") and a collection name (e.g., "myCollection"). This creates a storage structure for your data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuuocou5hbqebtyonims0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuuocou5hbqebtyonims0.png" alt="Database Creation" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  9. Insert a New Document
&lt;/h3&gt;

&lt;p&gt;In the &lt;strong&gt;Collections&lt;/strong&gt; tab, select your database and collection, then click &lt;strong&gt;Insert Document&lt;/strong&gt;. Add a sample document manually or use the following JSON format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"$oid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"68e36dcb2a6c4114653f4f29"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Saumyajit"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click &lt;strong&gt;Insert&lt;/strong&gt; to save the document. Verify it appears in the collection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ebh1c2ozr2lgudrp81v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ebh1c2ozr2lgudrp81v.png" alt="Insert Document" width="800" height="370"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2x3aby63h73vuy5zobnj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2x3aby63h73vuy5zobnj.png" alt="Document View" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  10. Test Your Setup
&lt;/h3&gt;

&lt;p&gt;To confirm everything is working, connect via your preferred method (e.g., MongoDB Compass or a code snippet) and run a query. For example, in the MongoDB shell or a Node.js application, insert and retrieve a document:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;myCollection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertOne&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;myCollection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findOne&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the document is returned, your cluster is fully operational.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Restrict network access to specific IPs in production to prevent unauthorized access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt;: Use Atlas’s built-in monitoring tools to track performance metrics like CPU usage and query latency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backups&lt;/strong&gt;: For critical applications, upgrade to a paid tier to enable automated backups and point-in-time recovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scaling&lt;/strong&gt;: Monitor storage and performance needs. Upgrade to a higher tier (e.g., M10 or above) for production workloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Setting up a MongoDB Atlas cluster is a quick and intuitive process. Thanks to &lt;a class="mentioned-user" href="https://dev.to/santhoshnc"&gt;@santhoshnc&lt;/a&gt; for introducing to this world of NoSQL Databases.&lt;/p&gt;

&lt;p&gt;For more information, check the &lt;a href="https://www.mongodb.com/docs/atlas/" rel="noopener noreferrer"&gt;MongoDB Atlas documentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>nosql</category>
    </item>
    <item>
      <title>REST &gt; React? Why Blockchain Devs Should Care About the Basics</title>
      <dc:creator>Saumyajit Purakayastha</dc:creator>
      <pubDate>Fri, 18 Apr 2025 18:11:33 +0000</pubDate>
      <link>https://dev.to/agspades/rest-react-why-blockchain-devs-should-care-about-the-basics-10md</link>
      <guid>https://dev.to/agspades/rest-react-why-blockchain-devs-should-care-about-the-basics-10md</guid>
      <description>&lt;p&gt;In a world where a new JavaScript framework seems to spawn every fortnight and the vibe coding epidemic lures fresh devs into the abyss of aesthetic over architecture, one silent champion remains—&lt;strong&gt;the humble API&lt;/strong&gt;. For blockchain developers, understanding REST isn’t just some dusty legacy skill — it’s a foundational pillar that can define the success &lt;em&gt;or&lt;/em&gt; scalability of your entire dApp.&lt;/p&gt;

&lt;p&gt;Think of your dApp as a high-performance sports car. React? That’s the sleek bodywork, the shiny paint job. REST? That’s the engine. You can’t win a race with just a cool paint job — you need power under the hood. And when your frontend can't talk to your backend reliably, it doesn't matter how many Tailwind classes you sprinkled in.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80fe2kydzx0sfiab78cg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80fe2kydzx0sfiab78cg.png" alt="When Rest Meets React Meme" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why It Matters&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;REST and HTTP power the entire internet—and Web3 didn't escape that. Your dApp talks to blockchain nodes, RPC endpoints, APIs, IPFS gateways, auth servers, and maybe even a backend you forgot was running.&lt;/p&gt;

&lt;p&gt;Whether you’re hitting an Ethereum node via Infura, uploading assets to IPFS via Pinata, or verifying off-chain data with Chainlink, &lt;strong&gt;RESTful communication is everywhere&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;And let’s be real: Web3 is not 100% on-chain. It never was. And probably won’t be (unless your users enjoy waiting 12 seconds for a response).&lt;/p&gt;

&lt;p&gt;Understanding REST and HTTP gives you superpowers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debug failed RPC requests without having to Google error codes.&lt;/li&gt;
&lt;li&gt;Build your own tooling and services.&lt;/li&gt;
&lt;li&gt;Integrate off-chain components with actual confidence.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Core Concepts to Master
&lt;/h3&gt;

&lt;p&gt;There are some fundamental concepts of REST you must be familiar with before you start calling the endpoints with your favorite tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTP Methods&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET&lt;/code&gt; - Fetch data (e.g., get your wallet balance)
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST&lt;/code&gt; - Submit data (e.g., send a transaction or upload a file)
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PUT&lt;/code&gt; - Update existing data
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DELETE&lt;/code&gt; - Remove data (be careful, obviously)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Headers &amp;amp; Status Codes&lt;/strong&gt;: Understand &lt;code&gt;Authorization&lt;/code&gt;, &lt;code&gt;Content-Type&lt;/code&gt;, &lt;code&gt;Accept&lt;/code&gt;, and what a &lt;code&gt;403&lt;/code&gt;, &lt;code&gt;500&lt;/code&gt;, or &lt;code&gt;201 Created&lt;/code&gt; means. These matter when your &lt;code&gt;fetch()&lt;/code&gt; call mysteriously fails in your dApp.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;RESTful Principles&lt;/strong&gt;: Stateless interactions, predictable URLs, and treating everything as a &lt;strong&gt;resource&lt;/strong&gt;. Helps when you’re building your own API gateway or backend service for metadata storage.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;JSON Anatomy&lt;/strong&gt;: Know what a JSON body looks like. Practice reading and writing them. You’ll debug faster and build integrations cleaner.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  📌 &lt;strong&gt;HTTP Methods Example (with &lt;code&gt;curl&lt;/code&gt; and JavaScript)&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# GET example: Fetch a token balance (dummy endpoint)&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; GET &lt;span class="s2"&gt;"https://api.example.com/balance?address=0x123"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Accept: application/json"&lt;/span&gt;

&lt;span class="c"&gt;# POST example: Submit NFT metadata&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"http://localhost:3000/mint"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"name": "Space Ape", "image": "ipfs://Qm..."}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Equivalent in JavaScript (e.g., in a React dApp)&lt;/span&gt;
&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://localhost:3000/mint&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Space Ape&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ipfs://Qm...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Mint response:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Real-World Examples related to Web3
&lt;/h3&gt;

&lt;p&gt;Let’s bring REST into the blockchain trenches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Token Balances with Etherscan API&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Hit &lt;code&gt;https://api.etherscan.io/api?module=account&amp;amp;action=tokenbalance&amp;amp;...&lt;/code&gt;&lt;br&gt;&lt;br&gt;
→ &lt;code&gt;GET&lt;/code&gt; request, returns JSON. Simple, useful, RESTful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;IPFS Uploads via Pinata or Moralis&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Uploading files? You’re POSTing to a REST endpoint with a &lt;code&gt;Content-Type: multipart/form-data&lt;/code&gt; header. Knowing this helps you automate uploads and debug when something breaks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wallet Interactions via REST&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
WalletConnect and some mobile wallets expose HTTP APIs for session management. MetaMask and similar extensions use background messaging patterns that, while not strictly REST, follow similar request/response paradigms.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  📌 &lt;strong&gt;IPFS Upload Example with Pinata (Node.js)&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FormData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;form-data&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FormData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;file&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createReadStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./nft.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.pinata.cloud/pinning/pinFileToIPFS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;maxBodyLength&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;Infinity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getHeaders&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="na"&gt;pinata_api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_api_key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;pinata_secret_api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_secret&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;File IPFS Hash:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;IpfsHash&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Upload failed:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  How This Helps in Web3 Projects
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging becomes easier&lt;/strong&gt;: Instead of praying to the dev gods when a fetch fails, you can actually read the response headers and fix it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cleaner Integrations&lt;/strong&gt;: Knowing how to structure a request or parse a response means less guesswork, less spaghetti code, and fewer broken dApps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Architectural Clarity&lt;/strong&gt;: You’ll actually understand how your dApp talks to the backend, the blockchain, and anything in between.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use API Clients&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn to love &lt;a href="https://www.postman.com/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt; or &lt;a href="https://insomnia.rest/" rel="noopener noreferrer"&gt;Insomnia&lt;/a&gt;. They’re like Remix IDE, but for APIs—making requests, inspecting responses, and debugging is a breeze.
Bonus: Chain them into CI workflows later.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Mini Challenges&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use your favorite programming language to build a tiny REST API: &lt;code&gt;GET /hello&lt;/code&gt; returns &lt;code&gt;{ message: "Hello, Blockchain!" }&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;curl&lt;/code&gt; to POST data to your local server and log it.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;🚀 Final Thought&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before you dive back into your Solidity scripts or spin up another dApp UI, take a moment to master the basics. REST isn’t “old school”—it’s foundational. The best blockchain developers aren’t just smart contract ninjas—they’re full-stack warriors who can debug an API call just as easily as they can deploy to mainnet. So, here’s your mission: build a mini REST API, ping it with &lt;code&gt;curl&lt;/code&gt;, and understand what’s flowing under the hood. Because if you truly &lt;em&gt;get&lt;/em&gt; how the web works, you’ll build Web3 that actually works.&lt;/p&gt;




&lt;h4&gt;
  
  
  Footnotes:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Cover image by &lt;a href="https://unsplash.com/@douglasamarelo?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Douglas Lopes&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/a-laptop-computer-sitting-on-top-of-a-wooden-desk-ehyV_XOZ4iA?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Etherscan API: &lt;a href="https://docs.etherscan.io/" rel="noopener noreferrer"&gt;https://docs.etherscan.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pinata API: &lt;a href="https://docs.pinata.cloud/api-reference/introduction" rel="noopener noreferrer"&gt;https://docs.pinata.cloud/api-reference/introduction&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Postman API platform: &lt;a href="https://www.postman.com" rel="noopener noreferrer"&gt;https://www.postman.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;For more on REST in blockchain, see: &lt;a href="https://blog.thirdweb.com/what-a-blockchain-api-is-and-how-to-use-it/" rel="noopener noreferrer"&gt;https://blog.thirdweb.com/what-a-blockchain-api-is-and-how-to-use-it/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>web3</category>
      <category>react</category>
      <category>restapi</category>
    </item>
    <item>
      <title>Hey Dad, Let’s Talk About the Future of Tech!</title>
      <dc:creator>Saumyajit Purakayastha</dc:creator>
      <pubDate>Mon, 10 Mar 2025 18:58:01 +0000</pubDate>
      <link>https://dev.to/agspades/hey-dad-lets-talk-about-the-future-of-tech-12hf</link>
      <guid>https://dev.to/agspades/hey-dad-lets-talk-about-the-future-of-tech-12hf</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://future.forem.com/challenges/writing-2025-02-26" rel="noopener noreferrer"&gt;Future Writing Challenge&lt;/a&gt;: How Technology Is Changing Things.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hey Dad,&lt;/p&gt;

&lt;p&gt;Before you scold me for not calling you all week—I’ve got some new tech to geek out about! And trust me, you’re going to love this one. 😁&lt;/p&gt;

&lt;p&gt;Now, don’t worry, I won’t bore you with lines of code (though I know you’d appreciate a well-structured C# snippet). Instead, I want to talk about the bigger picture—how tech is evolving and what it might mean for both of us.&lt;/p&gt;




&lt;h2&gt;
  
  
  🪙 Money Without Banks?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5zcnknx62haljksw7fp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5zcnknx62haljksw7fp.jpg" alt="Photo by David McBee: https://www.pexels.com/photo/round-silver-and-gold-coins-730564/" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You've always been the organized kind—income gets deposited, bills get paid, and money stays safe in the bank. Simple, right?&lt;/p&gt;

&lt;p&gt;But what if I told you that in the future, &lt;strong&gt;banks might not even be necessary?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, before you call me out for preaching Bitcoin again (and for nagging you about not buying it when it was dirt cheap—you &lt;em&gt;should've&lt;/em&gt; 😒), hear me out.&lt;/p&gt;

&lt;p&gt;With recent advancements in blockchain and cryptocurrencies, we’re moving toward a world where people can send money instantly, without needing a middleman.&lt;/p&gt;

&lt;p&gt;I know what you’re thinking: “&lt;em&gt;But crypto is volatile, and banks provide security!”&lt;/em&gt; Fair point. But even traditional banks are experimenting with digital currencies, and blockchain isn’t just about money—it’s about &lt;strong&gt;secure transactions, digital contracts, and even ownership records.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 AI: Your Upcoming Junior Programmer?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3wze0qg9e3fugoc25sc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3wze0qg9e3fugoc25sc.jpg" alt="Gibberish JS" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You've been developing clear, efficient C# code for years. However, what if I told you that AI is also becoming increasingly proficient at that? Developers are already writing code more quickly thanks to tools like GitHub Copilot, which can recommend entire functions from a single comment.&lt;/p&gt;

&lt;p&gt;Will coders be replaced by AI? Not at all. It's more akin to having an excessively enthusiastic intern who makes suggestions, some of which are excellent and others of which are totally incorrect. Although AI is excellent at automating tedious coding jobs, &lt;strong&gt;it still lacks creativity, insight for solving problems, and the capacity to debug its own gibberish.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But let's face it, wouldn't we have more time to concentrate on the actual problems if AI could take care of the tedious boilerplate?&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 Privacy: The Price of Convenience
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5766bobr1gjgznqr0rm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5766bobr1gjgznqr0rm.jpg" alt="Privacy Lock" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remember when we used to joke about tech companies listening to our conversations? Well… turns out, it’s not much of a joke anymore. Our data is &lt;strong&gt;the new currency&lt;/strong&gt;, and companies are collecting, analyzing, and selling it at an insane rate.&lt;/p&gt;

&lt;p&gt;With AI predicting our behavior and algorithms deciding what we see, it’s no surprise that ads seem to "magically" show up right after we talk about something. But with emerging threats like &lt;strong&gt;quantum computing&lt;/strong&gt;, even our most secure encryption might become vulnerable in the future.&lt;/p&gt;

&lt;p&gt;Does this mean we should go full "off-the-grid" mode? Not necessarily. But &lt;strong&gt;being mindful of what data we share and using strong security practices&lt;/strong&gt; is going to be more important than ever.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 How Tech is Changing Us
&lt;/h2&gt;

&lt;p&gt;Beyond all the cool innovations, technology is &lt;strong&gt;reshaping how we interact&lt;/strong&gt;—and not always for the better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👥 Relationships:&lt;/strong&gt; We used to call each other. Now, it’s mostly texts, voice notes, and quick emoji reactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💼 Jobs:&lt;/strong&gt; Automation is replacing repetitive tasks, but it’s also creating new jobs that didn’t exist a decade ago.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🏛 Truth &amp;amp; Misinformation:&lt;/strong&gt; AI-generated content is so realistic now that it’s getting harder to tell fact from fiction. Deepfake videos, fake news, and AI-written articles can easily spread misinformation.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 What’s Next?
&lt;/h2&gt;

&lt;p&gt;The world is changing fast, and we can either &lt;strong&gt;adapt and ride the wave&lt;/strong&gt; or &lt;strong&gt;ignore it and get left behind.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔹 Stay curious—There’s always something new to learn.&lt;br&gt;
🔹 Stay skeptical—Not everything on the internet is true (even if AI says it is).&lt;br&gt;
🔹 Stay secure—Privacy matters, even if it’s inconvenient.&lt;/p&gt;

&lt;p&gt;The way I see it, technology is neither good nor bad—it’s just a tool. How we use it is what truly matters.&lt;/p&gt;

&lt;p&gt;So, Dad, what do you think? Are we heading toward a future of endless possibilities, or are we just writing more bugs for AI to fix?&lt;/p&gt;

&lt;p&gt;Let’s talk soon—I promise not to bring up another blockchain rant (maybe). 😉&lt;/p&gt;

&lt;p&gt;—Your Son&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sam&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Additional Prize Categories
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ripple Effects&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  Context
&lt;/h4&gt;

&lt;p&gt;I usually geek out about tech with my dad, who's a senior .NET developer. So, I thought—why not turn one of our usual discussions into a letter dedicated to him?&lt;/p&gt;

&lt;p&gt;Thanks for reading! Please feel free to leave your comments below 😁&lt;/p&gt;




</description>
      <category>futurechallenge</category>
      <category>ai</category>
      <category>web3</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Python Guide: Credit Card Number Validation Using Luhn's Algorithm</title>
      <dc:creator>Saumyajit Purakayastha</dc:creator>
      <pubDate>Sun, 09 Jun 2024 05:04:44 +0000</pubDate>
      <link>https://dev.to/agspades/python-guide-credit-card-number-validation-using-luhns-algorithm-jdp</link>
      <guid>https://dev.to/agspades/python-guide-credit-card-number-validation-using-luhns-algorithm-jdp</guid>
      <description>&lt;p&gt;Hey, it's me, Silver, and today we are going to build a simple program that validates credit card numbers using the Luhn algorithm. This is a practical project for anyone learning Python and looking to understand input validation, control flow, and basic algorithm implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Luhn Algorithm?
&lt;/h2&gt;

&lt;p&gt;The Luhn algorithm, also known as the "modulus 10" or "mod 10" algorithm, is a simple checksum formula used to validate various identification numbers, such as credit card numbers. It was created by IBM scientist Hans Peter Luhn and is widely used today.&lt;/p&gt;

&lt;p&gt;Let's take an example to ease our trouble:&lt;br&gt;
Consider the test credit card number generated by &lt;a href="https://developer.paypal.com/api/rest/sandbox/card-testing/" rel="noopener noreferrer"&gt;PayPal&lt;/a&gt;: "&lt;strong&gt;4032038996592097&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;The algorithm works as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Starting from the rightmost digit, double every second digit.&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4c4qf5az40u8itd8qsv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4c4qf5az40u8itd8qsv.png" alt="Luhn Algo Step 1" width="690" height="50"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If doubling a digit results in a number greater than 9, then add the digits to get a single-digit number (for example, 18: 1 + 8 = 9, 16: 1 + 6 = 7).&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq49wr9j9xis2pzza13ep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq49wr9j9xis2pzza13ep.png" alt="Luhn Algo Step 2" width="693" height="72"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now add all the numbers, touched and untouched, at even places and odd places.&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1j3y3uy1an7r0a13e2h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1j3y3uy1an7r0a13e2h.png" alt="Luhn Algo Step 3" width="772" height="69"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the total modulo 10 is equal to 0, the number is valid. We have got 80 here, so our card number is valid.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's translate this logic into a simple Python program. You can check out the final results on &lt;a href="https://github.com/AgSpades/luhn-credit-card-validator" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; too.&lt;/p&gt;
&lt;h2&gt;
  
  
  Implementing the Luhn Algorithm in Python
&lt;/h2&gt;

&lt;p&gt;Let's dive into the code. Below is a Python script that implements the Luhn algorithm to validate credit card numbers. Additionally, the script ensures that the input is at least a 15-digit number.&lt;/p&gt;

&lt;p&gt;Why 15 digits, you say? That's the least number of digits a valid credit card can have. Most credit card companies issue credit cards with 16 digits, but there are some exceptions; for example, American Express issues cards with 15 digits.&lt;/p&gt;

&lt;p&gt;Well, let's start.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;card_number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Enter credit card number: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;is_valid_card&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;card_number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Valid credit card number.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Invalid credit card number.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;luhn_check&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;card_number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;digits_of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;

    &lt;span class="n"&gt;digits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;digits_of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;card_number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;odd_digits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;digits&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;even_digits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;digits&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;checksum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;odd_digits&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;even_digits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;checksum&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;digits_of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;checksum&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_valid_card&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;card_number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;card_number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isdigit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;card_number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;luhn_check&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;card_number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Input Validation&lt;/strong&gt;: The &lt;code&gt;is_valid_card&lt;/code&gt; function checks if the input is a string of at least 15 digits using &lt;code&gt;card_number.isdigit()&lt;/code&gt; and &lt;code&gt;len(card_number) &amp;gt;= 15&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Luhn Algorithm&lt;/strong&gt;: The &lt;code&gt;luhn_check&lt;/code&gt; function processes the digits using the Luhn algorithm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It splits the number into individual digits using the internal function &lt;code&gt;digits_of&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Then we create two separate lists of &lt;code&gt;even_digits&lt;/code&gt; and &lt;code&gt;odd_digits&lt;/code&gt;. We perform necessary operations using &lt;code&gt;checksum&lt;/code&gt; on both the lists.&lt;/li&gt;
&lt;li&gt;Finally, we check if the total modulo 10 is 0.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;: Based on the result of the Luhn check and the length validation, the program prints whether the credit card number is valid or not.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Running the Program
&lt;/h2&gt;

&lt;p&gt;To run the program, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Copy the script into a file named &lt;code&gt;cc-validator.py&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open a terminal and navigate to the directory containing the script.&lt;/li&gt;
&lt;li&gt;Run the script using Python:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python cc-validator.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Congrats on building your own credit card number validator! &lt;/p&gt;

&lt;p&gt;The Luhn algorithm is a powerful tool that showcases how simple mathematical rules can be applied to real-world problems. This project is part of a series of validation projects aimed at helping learners solidify their Python programming skills. You can check out similar validation projects &lt;a href="https://github.com/AgSpades/validation-projects" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for reading! Feel free to share your thoughts below.&lt;/p&gt;




&lt;h4&gt;
  
  
  Footnotes:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/AgSpades" rel="noopener noreferrer"&gt;GitHub Profile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cover Photo by &lt;a href="https://unsplash.com/@rupixen?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;rupixen&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/person-using-laptop-computer-holding-card-Q59HmzK38eQ?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Bug Bounty Hunting 101: An Introduction for Beginners</title>
      <dc:creator>Saumyajit Purakayastha</dc:creator>
      <pubDate>Wed, 29 May 2024 08:09:20 +0000</pubDate>
      <link>https://dev.to/agspades/bug-bounty-hunting-101-an-introduction-for-beginners-4f42</link>
      <guid>https://dev.to/agspades/bug-bounty-hunting-101-an-introduction-for-beginners-4f42</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Bug bounty hunting, as the name suggests, is an activity where you hunt for bugs (look for security vulnerabilities) in software applications, websites, and systems and report them to the company or organization running the bounty program.&lt;/p&gt;

&lt;p&gt;In layman's terms, it's like being a digital detective who finds hidden weaknesses in code, helps improve security, and gets &lt;em&gt;paid&lt;/em&gt; for it. Yep, you read that right. It's a legal way to earn money online using your hacking skills without the FBI knocking on your door.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7qxjmyzsylkwpylro10y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7qxjmyzsylkwpylro10y.png" alt="FBI Meme" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Start?
&lt;/h2&gt;

&lt;p&gt;Well, I'm going to give you a glimpse of how to become a bug bounty hunter, but for further details, you'll need to purchase my $999 course where you'll get generic information that’s available on the internet for free. 😶&lt;/p&gt;

&lt;p&gt;Just kidding! I’m not a YouTuber. 🗣️&lt;/p&gt;

&lt;p&gt;Anyway, please read the rest of this guide with &lt;strong&gt;patience&lt;/strong&gt;, without simply scrolling away, and you might gain some new information and perhaps &lt;em&gt;enlightenment&lt;/em&gt;. This guide will cover how to acquire knowledge using resources from the internet and books, and crucially, how to apply that knowledge practically at each step.&lt;/p&gt;

&lt;p&gt;So, let's begin...&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Foundation in Computer Science and Networking
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Crawl before you walk."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before you dive into the digital bug battlefield, remember: a solid grasp of computer science and networking basics is your armor. Rest assured, I've got you covered.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Online Resources:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cs50.harvard.edu/x/2024/" rel="noopener noreferrer"&gt;CS50's Introduction to Computer Science&lt;/a&gt; (Harvard OCW)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.khanacademy.org/computing/computer-science/informationtheory" rel="noopener noreferrer"&gt;Introduction to Networking&lt;/a&gt; (Khan Academy)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Recommended Book:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"&lt;a href="https://amzn.to/3wRo69K" rel="noopener noreferrer"&gt;Foundations of Information Security: A Straightforward Introduction&lt;/a&gt;" by Jason Andress: This book covers the basics of networking and introduces cryptographic principles which are crucial for understanding network security.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Concepts:&lt;/strong&gt; Study IP addressing, DNS, TCP/IP, HTTP/HTTPS, firewalls, and VPNs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; Set up simple networking labs using tools like &lt;a href="https://www.netacad.com/courses/packet-tracer" rel="noopener noreferrer"&gt;Cisco Packet Tracer&lt;/a&gt; or &lt;a href="https://gns3.com/" rel="noopener noreferrer"&gt;GNS3&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Understand Web Technologies
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“The Web as I envisaged it, we have not seen it yet. The future is still so much bigger than the past.” – Tim Berners-Lee&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Next, you'll need to understand how websites work. This knowledge is crucial since most bug bounty programs are centered around web applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Learn" rel="noopener noreferrer"&gt;HTML, CSS, and JavaScript&lt;/a&gt; (MDN Web Docs)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.theodinproject.com/paths/foundations/courses/foundations" rel="noopener noreferrer"&gt;Web Development 101&lt;/a&gt; (The Odin Project)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Recommended Book:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"&lt;a href="https://amzn.to/3VtVX29" rel="noopener noreferrer"&gt;Eloquent JavaScript&lt;/a&gt;" by Marijn Haverbeke: An excellent introduction to JavaScript and modern web development practices. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Concepts:&lt;/strong&gt; Learn HTML, CSS, JavaScript, and Client-Server Model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; Create small web projects to apply your learning, such as a basic website or web app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Learn Programming and Scripting
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Code is poetry."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bug bounty hunting frequently requires the creation of scripts to assess applications. Python is an excellent language for beginners in this field.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.codecademy.com/learn/learn-python-3" rel="noopener noreferrer"&gt;CodeCademy: Learn Python3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Recommended Book:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"&lt;a href="https://amzn.to/4bzsbyw" rel="noopener noreferrer"&gt;Automate the Boring Stuff with Python&lt;/a&gt;" by Al Sweigart: A practical guide to Python, perfect for beginners looking to learn scripting and automation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Projects:&lt;/strong&gt; Automate repetitive tasks you encounter daily, such as file management or web scraping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Master Cybersecurity Basics
&lt;/h2&gt;

&lt;p&gt;Being aware of common vulnerabilities and their exploitation methods is crucial in the field of bug bounty hunting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://owasp.org/www-project-webgoat/" rel="noopener noreferrer"&gt;OWASP WebGoat&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dvwa.co.uk/" rel="noopener noreferrer"&gt;Damn Vulnerable Web Application (DVWA)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommended Book:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; "&lt;a href="https://amzn.to/3KlFLJG" rel="noopener noreferrer"&gt;The Web Application Hacker's Handbook"&lt;/a&gt; by Dafydd Stuttard and Marcus Pinto: A comprehensive guide to web application security, covering various vulnerabilities and attack vectors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; Use platforms like OWASP WebGoat and DVWA (Damn Vulnerable Web Application) to practice finding and exploiting vulnerabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Dive into Ethical Hacking
&lt;/h2&gt;

&lt;p&gt;Now, it’s time to get your hands dirty with some real &lt;strong&gt;ethical&lt;/strong&gt; hacking.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://tryhackme.com/" rel="noopener noreferrer"&gt;TryHackMe&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hackthebox.com/" rel="noopener noreferrer"&gt;Hack The Box&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommended Book:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; "&lt;a href="https://amzn.to/4aNeomQ" rel="noopener noreferrer"&gt;Penetration Testing: A Hands-On Introduction to Hacking&lt;/a&gt;" by Georgia Weidman: A practical introduction to penetration testing, covering essential tools and techniques.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; Apply techniques on vulnerable VMs from &lt;a href="https://www.vulnhub.com/" rel="noopener noreferrer"&gt;VulnHub&lt;/a&gt; or try exercises on Hack The Box and TryHackMe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Study Vulnerability Types
&lt;/h2&gt;

&lt;p&gt;Learn about real-world vulnerabilities by reading and understanding case studies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.bugcrowd.com/hackers/bugcrowd-university/" rel="noopener noreferrer"&gt;Bugcrowd University&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommended Book:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;"&lt;a href="https://amzn.to/3USV29C" rel="noopener noreferrer"&gt;Real-World Bug Hunting&lt;/a&gt;" by Peter Yaworski&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; Try to replicate similar findings on public bug bounty programs or in your lab environment (more on this below).&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Hands-On Practice
&lt;/h2&gt;

&lt;p&gt;Put everything you’ve learned into practice by participating in Capture The Flag (CTF) competitions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ctftime.org/" rel="noopener noreferrer"&gt;CTFtime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://tryhackme.com/" rel="noopener noreferrer"&gt;TryHackMe&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hackthebox.com/" rel="noopener noreferrer"&gt;Hack The Box&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommended Book:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; "&lt;a href="https://amzn.to/3yEgaJp" rel="noopener noreferrer"&gt;Hacking: The Art of Exploitation&lt;/a&gt;" by Jon Erickson: An in-depth exploration of hacking techniques with a focus on hands-on practice and understanding the underlying principles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; Regularly participate in CTFs (Capture The Flag) and practical hacking challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8: Develop Reporting Skills
&lt;/h2&gt;

&lt;p&gt;Learning how to write clear and detailed reports is crucial for bug bounty success.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hackerone.com/hacktivity" rel="noopener noreferrer"&gt;HackerOne Hacktivity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommended Book:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; "&lt;a href="https://amzn.to/4bWj0I9" rel="noopener noreferrer"&gt;The Art of Software Security Assessment&lt;/a&gt;" by Mark Dowd, John McDonald, and Justin Schuh: A detailed guide on how to assess software security, including how to document and report findings effectively.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; Dedicate time each day to reading reports to grasp the elements of a well-crafted report. Engage in regular practice by writing comprehensive reports on vulnerabilities discovered during your practice sessions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 9: Build a Home Lab (Optional)
&lt;/h2&gt;

&lt;p&gt;Establish a home lab to hone your ethical hacking skills without legal risks. You can also revisit your previous resources for further practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/@S3Curiosity/building-your-own-ethical-hacking-lab-with-virtualbox-a-step-by-step-guide-e9c3098315d9" rel="noopener noreferrer"&gt;Medium: Building Your Own Ethical Hacking Lab with VirtualBox: A Step-by-Step Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommended Book:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; "&lt;a href="https://amzn.to/3V24R5j" rel="noopener noreferrer"&gt;Linux Basics for Hackers&lt;/a&gt;" by OccupyTheWeb:  A guide to setting up and using Linux for hacking purposes, including setting up a lab environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; Create a series of vulnerable machines to practice on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 10: Stay Updated
&lt;/h2&gt;

&lt;p&gt;The world of cybersecurity is always evolving. Stay informed by following industry blogs and news.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://krebsonsecurity.com/" rel="noopener noreferrer"&gt;Krebs on Security&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://thehackernews.com/" rel="noopener noreferrer"&gt;The Hacker News&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; Spend 15-30 minutes daily reading articles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 11: Legal and Ethical Considerations
&lt;/h2&gt;

&lt;p&gt;Understanding the legal and ethical aspects of hacking is crucial. You must know what you are dealing with.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.sans.org/white-papers/" rel="noopener noreferrer"&gt;SANS Reading Room&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommended Book:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; "&lt;a href="https://amzn.to/3Xj1KsH" rel="noopener noreferrer"&gt;Cybersecurity Ethics&lt;/a&gt;" by Mary Manjikian:  A comprehensive overview of the ethical and legal issues surrounding cybersecurity and hacking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; Always refer back to this knowledge when engaging in bug bounty hunting or ethical hacking activities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 12: Continuous Learning and Networking
&lt;/h2&gt;

&lt;p&gt;Online communities where cybersecurity professionals discuss trends and share knowledge. It connects you with like-minded individuals and professionals.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/netsec/" rel="noopener noreferrer"&gt;r/netsec&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Practice:&lt;/strong&gt; Participate in discussions and attend webinars regularly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 13: Start Hunting
&lt;/h2&gt;

&lt;p&gt;Finally, put your skills to the test by joining bug bounty programs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Platforms:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.hackerone.com/" rel="noopener noreferrer"&gt;HackerOne&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.bugcrowd.com/" rel="noopener noreferrer"&gt;Bugcrowd&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What are these?&lt;/strong&gt;: Platforms where companies offer bounties for finding security vulnerabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Why they're great?&lt;/strong&gt;: They provide real-world hunting opportunities and payouts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;How to use them?&lt;/strong&gt;: Start small, submit reports, and learn from feedback.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;To be a successful bug bounty hunter, you must transform yourself into a person of focus, commitment, and sheer will.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nah, you don't need to be John Wick.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;All it takes is dedication and sticking to the plan. I've provided you with a rough idea of how your journey might unfold. This guide doesn't cover every detail since each step deserves its own article, but you'll learn them on your own, and that will make your learning journey more enjoyable (&lt;em&gt;I sound crazy, I know&lt;/em&gt;). &lt;/p&gt;

&lt;p&gt;It will be full of obstacles, as you must break free from the matrix to buy your colorful Bugatti (&lt;em&gt;Spoiler Alert: &lt;strong&gt;S&lt;/strong&gt;ome &lt;strong&gt;W&lt;/strong&gt;holesome &lt;strong&gt;A&lt;/strong&gt;ngry &lt;strong&gt;T&lt;/strong&gt;ourists might visit you if you don't follow the rules&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;So, gear up, start learning, and happy hunting!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember, the journey of a thousand miles begins with a single step—or in this case, a single bug!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>cybersecurity</category>
      <category>beginners</category>
      <category>learning</category>
      <category>roadmap</category>
    </item>
  </channel>
</rss>
