<?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>Forem: Arham Rumi</title>
    <description>The latest articles on Forem by Arham Rumi (@arhamrumi).</description>
    <link>https://forem.com/arhamrumi</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%2F1055443%2Fb68ca2a2-d890-49ae-b892-9a15edaaec6e.jpeg</url>
      <title>Forem: Arham Rumi</title>
      <link>https://forem.com/arhamrumi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/arhamrumi"/>
    <language>en</language>
    <item>
      <title>Building a Production Server from Scratch: The Ultimate Guide</title>
      <dc:creator>Arham Rumi</dc:creator>
      <pubDate>Fri, 10 Oct 2025 20:57:35 +0000</pubDate>
      <link>https://forem.com/arhamrumi/building-a-production-server-from-scratch-the-ultimate-guide-5ep6</link>
      <guid>https://forem.com/arhamrumi/building-a-production-server-from-scratch-the-ultimate-guide-5ep6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Deploy like a pro — set up, secure, and scale your own production-ready VPS with zero DevOps experience.&lt;/p&gt;

&lt;p&gt;This article is originally published at my Medium account.&lt;br&gt;
&lt;a href="https://medium.com/@arhamrumi/building-a-production-server-from-scratch-the-ultimate-guide-637a77d9dc2d" rel="noopener noreferrer"&gt;Read this article on Medium&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In a world obsessed with managed services and serverless stacks, understanding how to manage your own Virtual Private Server (VPS) is a timeless skill.&lt;/p&gt;

&lt;p&gt;Running your own server gives you:&lt;/p&gt;

&lt;p&gt;✅ Full control over your infrastructure&lt;br&gt;
✅ Lower long-term costs compared to managed platforms&lt;br&gt;
✅ Real DevOps insight that translates across all cloud providers&lt;/p&gt;

&lt;p&gt;Whether you’re launching a startup MVP, a SaaS app, or your personal project, this guide will take you from a blank VPS to a fully deployed, production-grade environment.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Note: This guide doesn’t focus on any specific cloud provider — the steps are exactly the same no matter where you host your VPS. You can go with AWS EC2, DigitalOcean, Vultr, Linode, or any other provider that fits your budget, region, or performance needs.&lt;/p&gt;

&lt;p&gt;I’ll dive deeper into comparing different VPS providers in a future article, but for now, let’s stay focused on setting up your server the right way.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Initial Server Access
&lt;/h2&gt;

&lt;p&gt;First, connect to your VPS using SSH or the built-in web terminal provided by your hosting service. In this guide, I’ll be using the provider’s integrated web terminal to connect to my VPS.&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%2Freg9fx8hmfk9xaagtpjt.webp" 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%2Freg9fx8hmfk9xaagtpjt.webp" alt="Connect to VPS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will see the integrated terminal of your VPS like this after connecting successfully.&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%2Frtkcenklhenxnpbnyrs2.webp" 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%2Frtkcenklhenxnpbnyrs2.webp" alt="Connected to VPS"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Check System Codename
&lt;/h2&gt;

&lt;p&gt;Run this command to see the codename of your VPS OS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lsb_release -a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will see something like this.&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%2F71vyainjh6j3v5s62yxa.webp" 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%2F71vyainjh6j3v5s62yxa.webp" alt="VPS codename"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My VPS codename is &lt;code&gt;noble&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identifying System’s Init System
&lt;/h2&gt;

&lt;p&gt;Before managing services like MongoDB or Node.js applications, it’s important to know which init system your Linux distribution uses. The init system is responsible for starting and managing processes after the system boots.&lt;/p&gt;

&lt;p&gt;Run the following command to identify your init system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ps --no-headers -o comm 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will display your init system. Mine is &lt;code&gt;systemd&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Why It Matters:&lt;br&gt;
    Service management commands (like starting, stopping, and enabling MongoDB or PM2) depend on the init system. Most VPS providers today use systemd, so if your output shows systemd, you can safely follow all systemctl commands in this guide.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Update System Packages
&lt;/h2&gt;

&lt;p&gt;Always update a fresh VPS — this closes known vulnerabilities in the base image. Run these commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt autoremove -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install Essentials
&lt;/h2&gt;

&lt;p&gt;These tools are vital for fetching remote files and deploying your app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install curl git -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install Core Runtime — Node.js (LTS Version)
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://deb.nodesource.com/" rel="noopener noreferrer"&gt;https://deb.nodesource.com/&lt;/a&gt; to get the latest LTS (Long Term Support) version.&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%2Ftbrh3156j2tcalhfp8rg.webp" 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%2Ftbrh3156j2tcalhfp8rg.webp" alt="Nodesource homepage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the following commands one by one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install -y nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might have noticed that our command includes an extra &lt;code&gt;-E&lt;/code&gt; flag compared to the official NodeSource installation command.&lt;/p&gt;

&lt;p&gt;Normally, when you use &lt;code&gt;sudo&lt;/code&gt;, your environment variables — like proxy settings (&lt;code&gt;HTTP_PROXY&lt;/code&gt;, &lt;code&gt;HTTPS_PROXY&lt;/code&gt;, etc.) or custom configuration paths — are not passed to the root environment. This is a security measure to prevent unexpected privilege escalation through environment manipulation.&lt;/p&gt;

&lt;p&gt;By using &lt;code&gt;sudo -E&lt;/code&gt;, we ensure that your existing environment (especially proxy-related settings) stays intact during the installation.&lt;/p&gt;

&lt;p&gt;✅ If you’re behind a proxy, using &lt;code&gt;-E&lt;/code&gt; prevents download failures caused by missing proxy configurations.&lt;/p&gt;

&lt;p&gt;✅ If you’re on a direct internet connection, it doesn’t hurt — the command works the same as &lt;code&gt;sudo&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🧠 In short: &lt;code&gt;sudo -E&lt;/code&gt; is just a safety net. You can omit it if your VPS has direct internet access, but it’s good practice to include it to avoid proxy-related issues during installations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Verify Installation
&lt;/h3&gt;

&lt;p&gt;Run these commands to verify your runtime installations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node -v
npm -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fxirnd728n7gy5edtk22v.webp" 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%2Fxirnd728n7gy5edtk22v.webp" alt="verify node js installation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚙️ Why LTS? LTS releases are battle-tested and receive security updates for years — perfect for production stability.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Install MongoDB
&lt;/h2&gt;

&lt;p&gt;Modern applications need modern databases. Here’s how to install MongoDB Community Edition. This includes several steps, which we’ll go through one by one with short descriptions for better understanding.&lt;/p&gt;

&lt;p&gt;First, make sure you have &lt;code&gt;GnuPG&lt;/code&gt; installed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install gnupg -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, the actual installation will start. I’ll follow the official instructions mentioned at this link. You can follow the link directly if you prefer, or stay here — I’ll walk you through each necessary step.&lt;/p&gt;

&lt;p&gt;

Liquid error: internal&lt;/p&gt;
&lt;h3&gt;
  
  
  Import the Public Key
&lt;/h3&gt;

&lt;p&gt;Run this command to import the official keys.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create the List File
&lt;/h3&gt;

&lt;p&gt;You need to run only one of these commands according to your VPS codename. My VPS codename is &lt;code&gt;noble&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For &lt;code&gt;noble&lt;/code&gt; run this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.2.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For &lt;code&gt;jammy&lt;/code&gt; run this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.2.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For &lt;code&gt;focal&lt;/code&gt; run this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/8.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.2.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Reload the Package Database
&lt;/h3&gt;

&lt;p&gt;Run the following command to reload the package database.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install MongoDB Community Server
&lt;/h3&gt;

&lt;p&gt;Install the latest stable version of MongoDB using the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install -y mongodb-org
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Start MongoDB
&lt;/h3&gt;

&lt;p&gt;You can start the &lt;code&gt;mongod&lt;/code&gt; process by issuing the following command according to your init system. if you have an older init system, follow this link:&lt;/p&gt;

&lt;p&gt;

Liquid error: internal&lt;/p&gt;

&lt;p&gt;My init system is &lt;code&gt;systemd&lt;/code&gt;, so I will use the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start mongod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you receive an error similar to the following when starting &lt;code&gt;mongod&lt;/code&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Failed to start mongod.service: Unit mongod.service not found.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Run the following command first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl daemon-reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run the start command above again.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check MongoDB Status
&lt;/h3&gt;

&lt;p&gt;Run this command to verify MongoDB is actually running.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl status mongod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fma12l3bakc8sd9kwwm1r.webp" 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%2Fma12l3bakc8sd9kwwm1r.webp" alt="Mongodb status check"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then press &lt;code&gt;CTRL + C&lt;/code&gt; to exit MongoDB status view and return to the normal terminal.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔒 Pro Tip: Enabling MongoDB ensures it restarts automatically after reboots.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl enable mongod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart MongoDB&lt;/p&gt;

&lt;p&gt;You can restart the &lt;code&gt;mongod&lt;/code&gt; process by issuing the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl restart mongod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Application Deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pull Your Code
&lt;/h3&gt;

&lt;p&gt;I have a public repository for learning purposes. You can also check it out, star it, or fork it if you’d like to start from there. Since it’s public, I don’t need to set up SSH to clone it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/arham-rumi/social-app.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Move inside the repository using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd social-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fsk7070nnp2j80j29hdyp.webp" 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%2Fsk7070nnp2j80j29hdyp.webp" alt="Inside the repo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔒 Pro Tip: Never ever public your code unless you actually want to make it OpenSource.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Setup Environment
&lt;/h3&gt;

&lt;p&gt;Install packages using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create &lt;code&gt;.env&lt;/code&gt; file using &lt;code&gt;nano&lt;/code&gt; utility. Please make sure you use the same filename for environment variables as the one imported in your code. For now, my code imports the environment variables from &lt;code&gt;.env&lt;/code&gt;, so I’ll create the file with the same name like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nano .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll enter the editor mode. Simply copy all the variables that you’ve defined in your local &lt;code&gt;.env&lt;/code&gt; file, like this:&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%2Fyefbd19vlzkh73wp38v4.webp" 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%2Fyefbd19vlzkh73wp38v4.webp" alt="Edit Env"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, press &lt;code&gt;CTRL + O&lt;/code&gt; to write out changes. It will ask you to confirm. Press &lt;code&gt;ENTER&lt;/code&gt;.&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%2Fgrirjz7rtuxq4n7cep5q.webp" 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%2Fgrirjz7rtuxq4n7cep5q.webp" alt="Saving Env"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will then show you the number of written lines as confirmation that your file has been saved.&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%2F7onaknscd8usuw6bckzp.webp" 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%2F7onaknscd8usuw6bckzp.webp" alt="Saved Env"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then move out of the editor using &lt;code&gt;CTRL + X&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Production Process Management
&lt;/h3&gt;

&lt;p&gt;Install &lt;code&gt;PM2&lt;/code&gt; globally using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo npm install -g pm2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;🚀 Why PM2? It ensures zero-downtime restarts, load balancing, and monitoring — ideal for production-grade stability.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Run our app’s process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 start npm --name "social-app-prod" -- run start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, the word &lt;code&gt;start&lt;/code&gt; after &lt;code&gt;run&lt;/code&gt; refers to the script name defined in your &lt;code&gt;package.json&lt;/code&gt; file. You can replace the name with yours. Now it will look like this.&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%2Fswm0l8ycyxtsgrlg182q.webp" 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%2Fswm0l8ycyxtsgrlg182q.webp" alt="Run app’s process"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Monitor your application using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 logs social-app-prod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;social-app-prod&lt;/code&gt; is the name of the process — change it if you’re using a different name. It will show the logs like this:&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%2Fz1luz0uyvh2xvhbz6o86.webp" 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%2Fz1luz0uyvh2xvhbz6o86.webp" alt="App logs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can exit the logs using &lt;code&gt;CTRL + C&lt;/code&gt;. Check the status of your processes using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or by using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will show your processes.&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%2F1qdey40a6ajc9119mx6n.webp" 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%2F1qdey40a6ajc9119mx6n.webp" alt="pm2 list - processes list"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensure your application survives server restarts using these commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 startup systemd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Validation &amp;amp; Testing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Health Check Verification
&lt;/h3&gt;

&lt;p&gt;Test your application internally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl http://127.0.0.1:7000/api/v1/healthcheck
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fshft972f2honk4gwnvrf.webp" 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%2Fshft972f2honk4gwnvrf.webp" alt="Local test"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  External Access Testing
&lt;/h3&gt;

&lt;p&gt;Access your application via the server’s public IP. I am using postman.&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%2F994peos1a4j0esussl4t.webp" 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%2F994peos1a4j0esussl4t.webp" alt="API verification with Postman"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s great — your server is working properly!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🌐 Network Configuration: If inaccessible, configure your cloud provider’s firewall rules to allow TCP traffic on your application port. For example:&lt;/p&gt;
&lt;/blockquote&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%2Fzi13crl0vkwz5rxywnh3.webp" 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%2Fzi13crl0vkwz5rxywnh3.webp" alt="Allow TCP on port 80"&gt;&lt;/a&gt;&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%2Fz41k0ln3nkcf1a6py261.webp" 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%2Fz41k0ln3nkcf1a6py261.webp" alt="Allow TCP on port 7000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There may be other ports or rules you’ll need to configure. However, for this article, I’ve kept it as simple as possible for demonstration purposes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outro: From Command Line to Confidence
&lt;/h2&gt;

&lt;p&gt;You’ve just built more than a server — you’ve built independence. By setting up and securing your own VPS from scratch, you’ve gained control over your infrastructure and the confidence to deploy applications like a pro.&lt;/p&gt;

&lt;p&gt;You now know how to:&lt;br&gt;
✅ Secure your server with updates and best practices&lt;br&gt;
✅ Install Node.js and MongoDB the professional way&lt;br&gt;
✅ Deploy and manage production apps with PM2&lt;br&gt;
✅ Keep everything running through reboots and scaling demands&lt;/p&gt;

&lt;p&gt;Your VPS is now your personal cloud — custom, optimized, and truly yours. Every configuration command you’ve run is a building block toward mastering modern DevOps and backend scalability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;In the next guides, we’ll take this setup even further — configuring &lt;strong&gt;Nginx&lt;/strong&gt; as a &lt;strong&gt;reverse proxy&lt;/strong&gt;, enabling &lt;strong&gt;free SSL certificates&lt;/strong&gt; with &lt;strong&gt;Let’s Encrypt&lt;/strong&gt;, and &lt;strong&gt;automating secure backups&lt;/strong&gt; to ensure your application is not just live, but resilient.&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;Own your stack. Master your craft. Deploy with confidence.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From here, explore &lt;strong&gt;containerization&lt;/strong&gt; with &lt;strong&gt;Docker&lt;/strong&gt;, implement &lt;strong&gt;CI/CD pipelines&lt;/strong&gt;, or add &lt;strong&gt;monitoring&lt;/strong&gt; — but remember: every enterprise-scale application starts with the solid foundation you just built.&lt;/p&gt;

&lt;p&gt;💪 You didn’t just deploy an app — you built the foundation for scalable, self-managed infrastructure.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>Adding Version Information to a PyInstaller Onefile Executable</title>
      <dc:creator>Arham Rumi</dc:creator>
      <pubDate>Fri, 23 May 2025 21:17:06 +0000</pubDate>
      <link>https://forem.com/arhamrumi/adding-version-information-to-a-pyinstaller-onefile-executable-6n8</link>
      <guid>https://forem.com/arhamrumi/adding-version-information-to-a-pyinstaller-onefile-executable-6n8</guid>
      <description>&lt;p&gt;If you’ve ever created a standalone Windows executable using &lt;strong&gt;PyInstaller&lt;/strong&gt;, you might have noticed that your &lt;code&gt;.exe&lt;/code&gt; file lacks version details like &lt;strong&gt;File Description, Product Name,&lt;/strong&gt; or &lt;strong&gt;Company Info&lt;/strong&gt;. While it works perfectly fine, it looks unpolished and unbranded — especially if you’re shipping your app to clients or distributing it publicly.&lt;/p&gt;

&lt;p&gt;In this article, you’ll learn how to embed version information into your one-file executable built with PyInstaller. This is a small detail that goes a long way in giving your app a professional edge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Add Version Info to Your EXE?
&lt;/h3&gt;

&lt;p&gt;When a user right-clicks your &lt;code&gt;.exe&lt;/code&gt; and selects &lt;strong&gt;Properties → Details&lt;/strong&gt;, Windows shows metadata like:&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%2Fn0tgzhnos1i68dg9dat1.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%2Fn0tgzhnos1i68dg9dat1.png" alt="Unify Exe properties"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This same metadata also appears as a small tool-tip when the user hovers over the &lt;code&gt;.exe&lt;/code&gt; file in File Explorer, giving your application a polished and professional touch.&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%2Fmlqhx0s72xooe15n64bn.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%2Fmlqhx0s72xooe15n64bn.png" alt="Exe properties on hover"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: In this guide, we’ll focus specifically on &lt;em&gt;&lt;strong&gt;adding version information to a one-file executable&lt;/strong&gt;&lt;/em&gt;. If you’re not familiar with creating an &lt;code&gt;.exe&lt;/code&gt; file using PyInstaller, be sure to check out the following guide first to get started.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/arhamrumi/build-a-one-file-exe-with-pyinstaller-including-binaries-resources-3o00" class="crayons-story__hidden-navigation-link"&gt;Build a One-File EXE with PyInstaller (Including Binaries &amp;amp; Resources)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/arhamrumi" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F1055443%2Fb68ca2a2-d890-49ae-b892-9a15edaaec6e.jpeg" alt="arhamrumi profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/arhamrumi" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Arham Rumi
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Arham Rumi
                
              
              &lt;div id="story-author-preview-content-2499688" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/arhamrumi" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F1055443%2Fb68ca2a2-d890-49ae-b892-9a15edaaec6e.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Arham Rumi&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/arhamrumi/build-a-one-file-exe-with-pyinstaller-including-binaries-resources-3o00" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 18 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/arhamrumi/build-a-one-file-exe-with-pyinstaller-including-binaries-resources-3o00" id="article-link-2499688"&gt;
          Build a One-File EXE with PyInstaller (Including Binaries &amp;amp; Resources)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/python"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;python&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/pyinstaller"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;pyinstaller&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/uv"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;uv&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/arhamrumi/build-a-one-file-exe-with-pyinstaller-including-binaries-resources-3o00" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/arhamrumi/build-a-one-file-exe-with-pyinstaller-including-binaries-resources-3o00#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/blockquote&gt;

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

&lt;p&gt;Before we dive in, make sure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Python&lt;/em&gt; installed&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;PyInstaller&lt;/em&gt; installed&lt;/strong&gt;
&lt;em&gt;(Run&lt;/em&gt; &lt;code&gt;pip install pyinstaller&lt;/code&gt; &lt;em&gt;if you haven’t already)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your main Python script ready&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  But What Does the Version File Look Like?
&lt;/h2&gt;

&lt;p&gt;At this point, you might be wondering:&lt;br&gt;
&lt;em&gt;“Okay, I can add a version info file… but what exactly does that file look like? Is it just plain text? Does it involve some kind of programming language?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Great questions!&lt;/p&gt;

&lt;p&gt;Let’s start by looking at a real-world example — a Windows &lt;code&gt;.exe&lt;/code&gt; that already contains version information. This will give us a clear idea of what the version file should look like.&lt;/p&gt;
&lt;h2&gt;
  
  
  Extracting Version Info from &lt;code&gt;cmd.exe&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;We’ll use PyInstaller’s handy tool &lt;code&gt;pyi-grab_version&lt;/code&gt; to extract version information from a well-known Windows executable like &lt;code&gt;cmd.exe&lt;/code&gt;. Run the following command in your terminal or by opening cmd window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pyi-grab_version C:\Windows\System32\cmd.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will generate a &lt;code&gt;file_version_info.txt&lt;/code&gt; file containing all the embedded metadata. The file will be saved in your current working directory (where the terminal or command prompt was opened).&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%2Flqezgg8usu4kivu5yzu4.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%2Flqezgg8usu4kivu5yzu4.png" alt="Getting version info of cmd.exe"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So in my case, the generated version info file — &lt;code&gt;file_version_info.txt&lt;/code&gt; — was saved to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Users\RUMI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with the following content.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# UTF-8
#
# For more details about fixed file info 'ffi' see:
# http://msdn.microsoft.com/en-us/library/ms646997.aspx
VSVersionInfo(
  ffi=FixedFileInfo(
    # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
    # Set not needed items to zero 0.
    filevers=(10, 0, 19041, 4355),
    prodvers=(10, 0, 19041, 4355),
    # Contains a bitmask that specifies the valid bits 'flags'r
    mask=0x3f,
    # Contains a bitmask that specifies the Boolean attributes of the file.
    flags=0x0,
    # The operating system for which this file was designed.
    # 0x4 - NT and there is no need to change it.
    OS=0x40004,
    # The general type of file.
    # 0x1 - the file is an application.
    fileType=0x1,
    # The function of the file.
    # 0x0 - the function is not defined for this fileType
    subtype=0x0,
    # Creation date and time stamp.
    date=(0, 0)
    ),
  kids=[
    StringFileInfo(
      [
      StringTable(
        '040904B0',
        [StringStruct('CompanyName', 'Microsoft Corporation'),
        StringStruct('FileDescription', 'Windows Command Processor'),
        StringStruct('FileVersion', '10.0.19041.4355 (WinBuild.160101.0800)'),
        StringStruct('InternalName', 'cmd'),
        StringStruct('LegalCopyright', '© Microsoft Corporation. All rights reserved.'),
        StringStruct('OriginalFilename', 'Cmd.Exe'),
        StringStruct('ProductName', 'Microsoft® Windows® Operating System'),
        StringStruct('ProductVersion', '10.0.19041.4355')])
      ]), 
    VarFileInfo([VarStruct('Translation', [1033, 1200])])
  ]
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the version file we’ll use (and modify) to embed metadata into our own Python &lt;code&gt;.exe&lt;/code&gt;. As you can see, it’s not too difficult to understand — many fields are self-explanatory, and some even come with helpful comments.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Good news: you don’t need to fill out or modify every single field.&lt;/em&gt;&lt;br&gt;
Being a smart developer, we’ll take the generated &lt;code&gt;file_version_info.txt&lt;/code&gt;, copy it, and then customize only the parts that matter for our app.&lt;/p&gt;
&lt;h2&gt;
  
  
  Adding Version Info to Our App
&lt;/h2&gt;

&lt;p&gt;Let’s say our application is called &lt;code&gt;unify.exe&lt;/code&gt;. At this point, your folder structure might look like this:&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%2F5cxm76jvicby8lg9rtt6.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%2F5cxm76jvicby8lg9rtt6.png" alt="Added version.txt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, we have added &lt;code&gt;version.txt&lt;/code&gt; file with the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# UTF-8
#
# For more details about fixed file info 'ffi' see:
# http://msdn.microsoft.com/en-us/library/ms646997.aspx
VSVersionInfo(
  ffi=FixedFileInfo(
    # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
    # Set not needed items to zero 0.
    filevers=(1, 0, 0, 0),
    prodvers=(1, 0, 0, 0),
    # Contains a bitmask that specifies the valid bits 'flags'r
    mask=0x3f,
    # Contains a bitmask that specifies the Boolean attributes of the file.
    flags=0x0,
    # The operating system for which this file was designed.
    # 0x4 - NT and there is no need to change it.
    OS=0x40004,
    # The general type of file.
    # 0x1 - the file is an application.
    fileType=0x1,
    # The function of the file.
    # 0x0 - the function is not defined for this fileType
    subtype=0x0,
    # Creation date and time stamp.
    date=(0, 0)
    ),
  kids=[
    StringFileInfo(
      [
      StringTable(
        '040904B0',
        [StringStruct('CompanyName', 'Rumi Softs'),
        StringStruct('FileDescription', 'A small tool to combine video clips.'),
        StringStruct('FileVersion', '1.0.0.0'),
        StringStruct('InternalName', 'unify'),
        StringStruct('LegalCopyright', 'Rumi Softs. All rights reserved.'),
        StringStruct('OriginalFilename', 'unify.exe'),
        StringStruct('ProductName', 'Unify'),
        StringStruct('ProductVersion', '1.0.0.0')])
      ]), 
    VarFileInfo([VarStruct('Translation', [1033, 1200])])
  ]
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Linking the Version File
&lt;/h2&gt;

&lt;p&gt;Now that we have our &lt;code&gt;version.txt&lt;/code&gt; file ready with the necessary content, it’s time to update our existing &lt;code&gt;unify.spec&lt;/code&gt; file to link it. Here’s the updated &lt;code&gt;unify.spec&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# -*- mode: python ; coding: utf-8 -*-


a = Analysis(
    ['main.py'],
    pathex=["E:\\unify\\.venv\\Lib\\site-packages"],
    binaries=[('E:\\unify\\ffmpeg_build\\bin\\ffmpeg.exe','bin'), ('E:\\unify\\ffmpeg_build\\bin\\ffprobe.exe','bin')],
    datas=[],
    hiddenimports=["easygui","tqdm"],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='unify',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon=['favicon.ico'],
    version='version.txt'
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The only change we made is adding the version file path at the end of the &lt;code&gt;exe&lt;/code&gt; tuple — nothing else was modified.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the Executable
&lt;/h2&gt;

&lt;p&gt;With everything set, let’s build the &lt;code&gt;.exe&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;Before doing that, it’s a good idea to clean up the previous build just to avoid any unexpected conflicts. So go ahead and delete the existing &lt;code&gt;build/&lt;/code&gt; and &lt;code&gt;dist/&lt;/code&gt; folders.&lt;/p&gt;

&lt;p&gt;Now, open your terminal in the project root (where &lt;code&gt;main.py&lt;/code&gt; resides), and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pyinstaller unify.spec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After a successful build, you’ll see freshly created &lt;code&gt;build/&lt;/code&gt; and &lt;code&gt;dist/&lt;/code&gt; directories.&lt;/p&gt;

&lt;p&gt;Navigate to the &lt;code&gt;dist/&lt;/code&gt; folder and locate your &lt;code&gt;unify.exe&lt;/code&gt;.&lt;br&gt;
Right-click on it → &lt;strong&gt;Properties → Details&lt;/strong&gt;, and you’ll now see the version info and metadata you've added.&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%2Fbpkcd5cepjh4mzhf4eq2.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%2Fbpkcd5cepjh4mzhf4eq2.png" alt="Exe properties"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusions
&lt;/h3&gt;

&lt;p&gt;Adding version info might seem minor, but it’s one of those professional touches that elevate your app — especially in production environments or when sharing with non-technical users.&lt;/p&gt;

&lt;p&gt;With just a few extra lines and a version file, your app transforms from &lt;em&gt;“just another Python script”&lt;/em&gt; into a &lt;strong&gt;&lt;em&gt;well-branded&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;traceable&lt;/em&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;em&gt;polished product&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let’s Hear From You!
&lt;/h2&gt;

&lt;p&gt;If you found this guide helpful, don’t forget to &lt;strong&gt;_share _&lt;/strong&gt;it with fellow developers who might benefit too!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have questions, suggestions&lt;/em&gt;, or ran into any _issues _while adding version info to your &lt;code&gt;.exe&lt;/code&gt;?&lt;br&gt;
👇 &lt;strong&gt;Drop a comment below&lt;/strong&gt; — I’d love to hear your thoughts and help you out.&lt;/p&gt;

&lt;p&gt;Your &lt;strong&gt;feedback&lt;/strong&gt; not only helps &lt;strong&gt;improve&lt;/strong&gt; the content, but also &lt;strong&gt;supports others in the community&lt;/strong&gt; facing the same challenges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Thanks for reading, and happy coding!&lt;/em&gt;&lt;/strong&gt; 🚀&lt;/p&gt;

</description>
      <category>pyinstaller</category>
      <category>python</category>
      <category>pytoexe</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Build a One-File EXE with PyInstaller (Including Binaries &amp; Resources)</title>
      <dc:creator>Arham Rumi</dc:creator>
      <pubDate>Sun, 18 May 2025 18:48:53 +0000</pubDate>
      <link>https://forem.com/arhamrumi/build-a-one-file-exe-with-pyinstaller-including-binaries-resources-3o00</link>
      <guid>https://forem.com/arhamrumi/build-a-one-file-exe-with-pyinstaller-including-binaries-resources-3o00</guid>
      <description>&lt;p&gt;Packaging Python projects into standalone executables can be incredibly useful for sharing your work with non-developers. In this guide, we'll walk through how to convert your Python script — even one that depends on additional binaries like &lt;code&gt;ffmpeg&lt;/code&gt; or modules like &lt;code&gt;easygui&lt;/code&gt; — into a single &lt;code&gt;.exe&lt;/code&gt; file using &lt;code&gt;PyInstaller&lt;/code&gt;. Let’s have a look at the project structure.&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%2Fhu910pac1k0kkqdd2tj8.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%2Fhu910pac1k0kkqdd2tj8.png" alt="Project structure" width="600" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s have a quick overview of this project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.venv&lt;/code&gt;: The virtual environment that keeps your project isolated and independent.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ffmpeg_build&lt;/code&gt;: Contains the &lt;code&gt;ffmpeg&lt;/code&gt; binaries used in the project. You might not need this specific folder if you’re using other binaries, but the concept of including external binaries remains the same.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;favicon.ico&lt;/code&gt;: The icon file for your application.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;main.py&lt;/code&gt;: The main script containing all the core logic of your application.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pyproject.toml&lt;/code&gt;: Project configuration file created by &lt;code&gt;uv&lt;/code&gt;, specifying dependencies and metadata.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this guide, we’re using &lt;code&gt;uv&lt;/code&gt; as the package and project manager. It automatically generates some boilerplate files during initialization. Don’t worry if you’re using a different virtual environment or package manager — the steps in this guide still apply.&lt;/p&gt;

&lt;p&gt;Now, let’s move on to the core of the guide. Here’s what we’ll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;PyInstaller&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.spec&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Manual updates to the &lt;code&gt;.spec&lt;/code&gt; file to correctly handle paths and packages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ll begin by generating a basic &lt;code&gt;.spec&lt;/code&gt; file using PyInstaller. Then, we’ll manually edit it to suit our project’s structure and rebuild the package using the updated .spec file. That’s the overall process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Install PyInstaller&lt;/strong&gt;&lt;br&gt;
Run the following command in your terminal or command prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install pyinstaller
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To confirm that PyInstaller was installed successfully, run the following command in a new command prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pyinstaller -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it returns the version number, congratulations — PyInstaller is installed correctly. If not, review the error message and resolve the issue accordingly. You can comment the issue and I will respond to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Creating &lt;code&gt;.spec&lt;/code&gt; file&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the root folder of your project (where your main script is located), and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pyinstaller --onefile --name "unify" main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s break down the command:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--onefile&lt;/code&gt;: Tells PyInstaller to bundle everything into a single &lt;code&gt;.exe&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--name&lt;/code&gt;: Specifies the desired name for both the output &lt;code&gt;.exe&lt;/code&gt; and the generated &lt;code&gt;.spec&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;main.py&lt;/code&gt;: This is the entry point of your application—the script containing your project’s logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After running the command, PyInstaller will execute and display logs ending with something like:&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%2F7uird0k4u9grpvv1u0ic.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%2F7uird0k4u9grpvv1u0ic.png" alt="Command logs" width="753" height="248"&gt;&lt;/a&gt;&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%2Fd3j2w4dvnezyygdfzzjn.webp" 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%2Fd3j2w4dvnezyygdfzzjn.webp" alt="Updated project structure" width="288" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should now see new folders like &lt;code&gt;build/&lt;/code&gt;, &lt;code&gt;dist/&lt;/code&gt;, and a &lt;code&gt;unify.spec&lt;/code&gt; file in your project directory. These are generated automatically by PyInstaller after the initial build.&lt;/p&gt;

&lt;p&gt;Among these, the &lt;code&gt;unify.spec&lt;/code&gt; file is the most important for us—it defines how PyInstaller bundles your application. At this point, it contains the default configuration, which we will now customize to properly include paths, external binaries, and required packages.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;unify.spec&lt;/code&gt; file contains this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# -*- mode: python ; coding: utf-8 -*-


a = Analysis(
    ['main.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='unify',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the basic &lt;code&gt;.spec&lt;/code&gt; file and we will update it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Updating the &lt;code&gt;.spec&lt;/code&gt; File for Paths and Packages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s edit the &lt;code&gt;.spec&lt;/code&gt; file to tell PyInstaller exactly what it needs to include for your application to work correctly in a single &lt;code&gt;.exe&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# -*- mode: python ; coding: utf-8 -*-


a = Analysis(
    ['main.py'],
    pathex=["E:\\unify\\.venv\\Lib\\site-packages"],
    binaries=[('E:\\unify\\ffmpeg_build\\bin\\ffmpeg.exe','bin'), ('E:\\unify\\ffmpeg_build\\bin\\ffprobe.exe','bin')],
    datas=[],
    hiddenimports=["easygui","tqdm"],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='unify',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon=['favicon.ico'],
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, you’ll notice we’ve updated several key variables in the &lt;code&gt;.spec&lt;/code&gt; file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pathex&lt;/code&gt;: Specifies additional paths to search for imports.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;binaries&lt;/code&gt;: Points to external binary files (e.g., &lt;code&gt;ffmpeg.exe&lt;/code&gt;, &lt;code&gt;ffprobe.exe&lt;/code&gt;) that need to be bundled with your application.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;hiddenimports&lt;/code&gt;: Lists any modules that are dynamically imported in your code but may not be automatically detected by PyInstaller. Adding them here helps avoid _ModuleNotFoundError _at runtime.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;icon&lt;/code&gt;: Path to your &lt;code&gt;.ico&lt;/code&gt; file. In many cases, a relative path will work fine. However, if you encounter an error or your &lt;code&gt;.exe&lt;/code&gt; file doesn’t show the icon as expected, try using the full absolute path. On Windows, note that icon updates may not be immediately visible due to icon caching behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: All these options can also be provided as flags when running the &lt;code&gt;pyinstaller&lt;/code&gt; command. However, we kept the initial command simple because you’ll likely need to tweak the .spec file manually anyway—even if you pass all options up front.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, delete the &lt;code&gt;build/&lt;/code&gt; and &lt;code&gt;dist/&lt;/code&gt; directories to clean up the old build, and run this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pyinstaller unify.spec 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The build process will take some time to complete. During this, you’ll see logs detailing the packaging steps.&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%2Fwmllh2u17ntt8d0bo636.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%2Fwmllh2u17ntt8d0bo636.png" alt="Command logs" width="753" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once finished, navigate to the &lt;code&gt;dist/&lt;/code&gt; directory — you’ll find your one-file &lt;code&gt;.exe&lt;/code&gt; there, complete with the custom icon (if everything was set correctly). It should look something like this:&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%2Ffgv8bz31bkaeq8noholc.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%2Ffgv8bz31bkaeq8noholc.png" alt="One file EXE" width="297" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🎉 That’s it! Your project is now bundled into a single executable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you run into any issues, feel free to drop a &lt;strong&gt;comment&lt;/strong&gt; — I’ll do my best to help you troubleshoot and resolve them.&lt;/p&gt;

</description>
      <category>python</category>
      <category>pyinstaller</category>
      <category>tutorial</category>
      <category>uv</category>
    </item>
    <item>
      <title>Running Puppeteer on a Server: A Complete Tutorial</title>
      <dc:creator>Arham Rumi</dc:creator>
      <pubDate>Fri, 20 Dec 2024 18:17:10 +0000</pubDate>
      <link>https://forem.com/arhamrumi/running-puppeteer-on-a-server-a-complete-tutorial-2f4d</link>
      <guid>https://forem.com/arhamrumi/running-puppeteer-on-a-server-a-complete-tutorial-2f4d</guid>
      <description>&lt;p&gt;Puppeteer is a Node.js library that provides a high-level API to control Chrome or Chromium browsers over the DevTools Protocol. It's a powerful tool for web scraping, automated testing, capturing screenshots etc. While using Puppeteer locally is straightforward, running it on a server requires additional considerations. This guide will walk you through the steps to get Puppeteer up and running on a server.&lt;/p&gt;




&lt;h2&gt;
  
  
  Preparing Server for Puppeteer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Update Server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This step is crucial for the successful execution of Puppeteer. Execute the following commands.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update -y
sudo apt upgrade -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Install Dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install the following dependencies to ensure Puppeteer runs smoothly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install libpangocairo-1.0-0 libx11-xcb1 libxcomposite1 libxcursor1 libxdamage1 libxi6 libxtst6 libnss3 libcups2 libxss1 libxrandr2 libatk1.0-0 libgtk-3-0 libasound2t64 libgbm-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Install Puppeteer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Execute the following command to install the latest version of Puppeteer, which is always recommended for optimal performance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i puppeteer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using Puppeteer
&lt;/h2&gt;

&lt;p&gt;You can use the following code snippet to verify that Puppeteer is functioning correctly by invoking this function at your desired route.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const puppeteer = require("puppeteer");

/**
 * Launches a Puppeteer browser, navigates to a webpage, and then closes the browser.
 *
 * Launch Options:
 * - headless: Run the browser in headless mode (no GUI).
 * - args:
 *   - "--no-sandbox": Required if running as the root user.
 *   - "--disable-setuid-sandbox": Optional, try if you encounter sandbox errors.
 */

const runPuppeteer = async () =&amp;gt; {
  try {
    // Launch a Puppeteer browser instance with custom arguments
    const browser = await puppeteer.launch({
      headless: true,
      args: [
        "--no-sandbox",
        "--disable-setuid-sandbox",
      ],
    });

    // Open a new page in the browser
    const page = await browser.newPage();

    // Navigate to the specified URL
    await page.goto("https://www.google.com");

    console.log("Navigation to Google completed.");

    // Close the browser
    await browser.close();
    console.log("Browser closed successfully.");
  } catch (error) {
    console.error("An error occurred:", error);
  }
};

// Execute the function
runPuppeteer();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Running Puppeteer on a server requires careful setup to handle dependencies, permissions, and resources. By following this guide, you can effectively deploy Puppeteer for tasks such as web scraping or automated testing in a server environment. For more advanced use cases, consider using tools like PM2 for process management and Docker for containerization.&lt;/p&gt;

&lt;p&gt;Feel free to share this guide with others, and let us know in the comments if you encounter any issues after following the instructions.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>puppeteer</category>
      <category>devops</category>
    </item>
    <item>
      <title>Installing Node.js on Windows: A Complete Tutorial</title>
      <dc:creator>Arham Rumi</dc:creator>
      <pubDate>Sun, 20 Oct 2024 14:16:52 +0000</pubDate>
      <link>https://forem.com/arhamrumi/installing-nodejs-on-windows-a-complete-tutorial-3m6j</link>
      <guid>https://forem.com/arhamrumi/installing-nodejs-on-windows-a-complete-tutorial-3m6j</guid>
      <description>&lt;p&gt;Node.js, a powerful JavaScript runtime built on Chrome's V8 engine, is a popular choice for developing scalable and high-performance web applications. Whether you're a front-end developer looking to expand your skills or a back-end developer diving into server-side JavaScript, setting up Node.js is the first step. This guide will walk you through the process of installing Node.js on your Windows machine, ensuring a smooth setup for your development environment. By the end of this tutorial, you’ll be ready to start building and running Node.js applications with ease.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installing Node.js
&lt;/h2&gt;

&lt;p&gt;Follow these steps to successfully install Node.js on Windows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 - Download Node.js&lt;/strong&gt;&lt;br&gt;
Download the LTS (Long Term Support) version of Node.js by clicking the "Download Node.js (LTS)" button on the homepage at &lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;https://nodejs.org/en&lt;/a&gt;. Alternatively, if you prefer to download a different version, you can visit &lt;a href="https://nodejs.org/en/download/prebuilt-installer" rel="noopener noreferrer"&gt;https://nodejs.org/en/download/prebuilt-installer&lt;/a&gt;.&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%2F4w67rfifl7gwtr271qzx.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%2F4w67rfifl7gwtr271qzx.png" alt="Node.js Home Page" width="631" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 - Installing Node.js&lt;/strong&gt;&lt;br&gt;
Now, let's proceed with installing Node.js. Be sure to follow each step closely to stay in sync.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locate the downloaded file and double-click it to launch the installer. If a security prompt appears, confirm to proceed. You will then see the following screen; click "Next":&lt;/li&gt;
&lt;/ul&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%2Fpv9ae08jh3xw5miz5aet.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%2Fpv9ae08jh3xw5miz5aet.png" alt="Node.js Welcome Screen" width="504" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accept the License Agreement by checking the box, then click "Next."&lt;/li&gt;
&lt;/ul&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%2Fnl2o57uey69uif0zm2qi.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%2Fnl2o57uey69uif0zm2qi.png" alt="Node.js License Agreement Acceptance Screen" width="504" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the destination folder for the installation. It's recommended to leave the default location as is, then click "Next."&lt;/li&gt;
&lt;/ul&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%2Fnmhvwit9uclsm2ld9n99.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%2Fnmhvwit9uclsm2ld9n99.png" alt="Node.js Destination Folder" width="502" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the features you want to install. It’s recommended to keep the default selection, then click "Next."&lt;/li&gt;
&lt;/ul&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%2Fc6o6z62pfcks4ehadgr5.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%2Fc6o6z62pfcks4ehadgr5.png" alt="Node.js Custom Setup" width="504" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I recommend checking the box for "Automatically install the necessary tools." Otherwise, you will need to set them up manually. Let the setup handle it for you, then click "Next."&lt;/li&gt;
&lt;/ul&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%2F8jklwjswadjbp9l1jjjw.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%2F8jklwjswadjbp9l1jjjw.png" alt="Node.js Agree to Install additional tools" width="502" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click "Install" to begin the installation process.&lt;/li&gt;
&lt;/ul&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%2F0w3e0vcqj5cmuempyrg2.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%2F0w3e0vcqj5cmuempyrg2.png" alt="Node.js Start Installation" width="503" height="396"&gt;&lt;/a&gt;&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%2Fdg678ffib6yqh1qce77w.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%2Fdg678ffib6yqh1qce77w.png" alt="Node.js Installation in Progress" width="502" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click "Finish" to proceed to the next step.&lt;/li&gt;
&lt;/ul&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%2Fua83arj2jo3hzhpixmxz.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%2Fua83arj2jo3hzhpixmxz.png" alt="Node.js Installation Finsih" width="503" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read the prompt and press any key, such as "Enter," to proceed to the next step.&lt;/li&gt;
&lt;/ul&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%2Fxf97d4msbgz4outp6qyt.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%2Fxf97d4msbgz4outp6qyt.png" alt="Node.js Installing Additional Tools" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read the prompt and press any key, such as "Enter," to proceed to the next step. This will initiate the download and installation of the required tools.&lt;/li&gt;
&lt;/ul&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%2Fdb9xsvxvuo3uvhirepd9.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%2Fdb9xsvxvuo3uvhirepd9.png" alt="Node.js Installing Additional Tools" width="800" height="422"&gt;&lt;/a&gt;&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%2F4nh82jc2588andoyyxol.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%2F4nh82jc2588andoyyxol.png" alt="Node.js Installing Additional Tools" width="800" height="354"&gt;&lt;/a&gt;&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%2F9ps2tmk5cgs6iczbk260.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%2F9ps2tmk5cgs6iczbk260.png" alt="Node.js Installing Additional Tools" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The following screen will appear once the tool installation is complete. Press "Enter" to finish the process, and be sure to restart your system.&lt;/li&gt;
&lt;/ul&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%2Fu3vtvw4bv7pojgkcqijc.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%2Fu3vtvw4bv7pojgkcqijc.png" alt="Node.js Additional Tools Installation Finished" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Congratulations! You have successfully installed Node.js on your Windows machine. With Node.js set up, you can now start building and running JavaScript applications efficiently. Whether you're developing server-side applications, creating RESTful APIs, or exploring the world of full-stack development, Node.js opens up a realm of possibilities.&lt;/p&gt;

&lt;p&gt;If you encounter any issues during the installation or have questions about getting started with Node.js, feel free to leave a comment below. Don’t forget to share this guide with others. Happy coding!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>node</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>MongoDB Installation on Windows: Your 2024 Guide</title>
      <dc:creator>Arham Rumi</dc:creator>
      <pubDate>Mon, 14 Oct 2024 11:47:36 +0000</pubDate>
      <link>https://forem.com/arhamrumi/mongodb-installation-on-windows-your-2024-guide-4p4m</link>
      <guid>https://forem.com/arhamrumi/mongodb-installation-on-windows-your-2024-guide-4p4m</guid>
      <description>&lt;p&gt;MongoDB, known for its flexible schema design and robust scalability, is a popular choice for developers and database administrators working on modern web and mobile applications. Setting up MongoDB on a Windows machine involves two main components: the MongoDB Server, which handles data storage, and MongoDB Compass, a graphical user interface for managing databases. This step-by-step guide will walk you through the complete installation process, ensuring a smooth setup for your development environment. Follow these steps carefully to avoid any errors during the installation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installing MongoDB Server
&lt;/h2&gt;

&lt;p&gt;MongoDB Server is a robust back-end solution for storing and managing your data efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 - Download MongoDB Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Download the latest version of MongoDB Server by following these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Visit the MongoDB Download Center and scroll down to find "MongoDB Community Server" under the "MongoDB Community Edition" section. Alternatively, you can go directly to the MongoDB Community Server download page by clicking on this official link: &lt;a href="https://www.mongodb.com/try/download/community" rel="noopener noreferrer"&gt;https://www.mongodb.com/try/download/community&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scroll down slightly to find the "Download" button. Ensure that you have selected the same options (your version may be the latest one) as shown below, then click the "Download" button.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2F2lk45sig8of6zfb30xn2.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%2F2lk45sig8of6zfb30xn2.png" alt="MongoDB Community Server Download Section" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 - Installing MongoDB Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, it’s time to install MongoDB Community Server. Make sure to follow along closely and stay in sync with each step.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locate the downloaded file and double-click it to launch the installer. If a security prompt appears, confirm to proceed. You will then see the following screen; click "Next":&lt;/li&gt;
&lt;/ul&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%2Fihe8b4bwvcrzvlro1vbq.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%2Fihe8b4bwvcrzvlro1vbq.png" alt="MongoDB Community Server - Welcome Screen" width="498" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accept the License Agreement by checking the box, then click "Next":&lt;/li&gt;
&lt;/ul&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%2Fqndcbwfqhunybj3aa2ej.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%2Fqndcbwfqhunybj3aa2ej.png" alt="MongoDB Community Server - License Agreement Acceptance Screen" width="499" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click "Complete" to install all features.&lt;/li&gt;
&lt;/ul&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%2F21hfavwzza6t7ij5y6ag.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%2F21hfavwzza6t7ij5y6ag.png" alt="MongoDB Community Server - Installation Type Screen" width="503" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the options as shown in the image below (these should be selected by default), and then click "Next":&lt;/li&gt;
&lt;/ul&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%2Fn6tlwpkriyenam3dtpbm.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%2Fn6tlwpkriyenam3dtpbm.png" alt="MongoDB Community Server - Service Configurations Screen" width="501" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure that the "Install MongoDB Compass" checkbox is unchecked, then click "Next."&lt;/li&gt;
&lt;/ul&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%2Fv2sf213fbl5o6ni2o18m.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%2Fv2sf213fbl5o6ni2o18m.png" alt="MongoDB Community Server - Install MongoDB Compass Screen" width="502" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finally, click "Install" to begin the installation process.&lt;/li&gt;
&lt;/ul&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%2Fnk11p27ogzuv08jka1qb.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%2Fnk11p27ogzuv08jka1qb.png" alt="MongoDB Community Server - Confirm Install Screen" width="499" height="392"&gt;&lt;/a&gt;&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%2Fuw07vpqdkuy8qvpkwgpi.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%2Fuw07vpqdkuy8qvpkwgpi.png" alt="MongoDB Community Server - Installation Screen" width="499" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;During the installation, you may encounter the following dialog; click "OK" to continue the installation process.&lt;/li&gt;
&lt;/ul&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%2F53q7lbnhqsp4zxx2shnm.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%2F53q7lbnhqsp4zxx2shnm.png" alt="MongoDB Community Server - Reboot Alert Dialog" width="366" height="171"&gt;&lt;/a&gt;&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%2Ft5wzr9k7wqf9kx377zmm.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%2Ft5wzr9k7wqf9kx377zmm.png" alt="MongoDB Community Server - Installation In Progress Screen" width="502" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After a short while, the installation will be completed; simply click "Finish."&lt;/li&gt;
&lt;/ul&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%2Fcon0memopacuwjmkaf1b.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%2Fcon0memopacuwjmkaf1b.png" alt="MongoDB Community Server - Installation Finish Screen" width="501" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You will now be prompted to restart your system. I recommend restarting to avoid any potential issues; however, if you are installing other software, you can select "No" for now. Just ensure that you start using MongoDB after restarting the system.&lt;/li&gt;
&lt;/ul&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%2Frj0ruyin6lp1hgzzgpj6.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%2Frj0ruyin6lp1hgzzgpj6.png" alt="MongoDB Community Server - Reboot Now Screen" width="366" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations! You have successfully installed MongoDB Server. Now, it’s time to complete the final step.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installing MongoDB Compass
&lt;/h2&gt;

&lt;p&gt;MongoDB Compass is a graphical tool for interacting with your MongoDB data visually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 - Download MongoDB Compass&lt;/strong&gt;&lt;br&gt;
Download latest version of MongoDB Compass by following these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Visit the MongoDB Download Center and scroll down to find MongoDB Compass (GUI) under the Tools section. Alternatively, you can go directly to the MongoDB Compass (GUI) download page by clicking this this official link: &lt;a href="https://www.mongodb.com/try/download/compass" rel="noopener noreferrer"&gt;https://www.mongodb.com/try/download/compass&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scroll down slightly to find the "Download" button. Ensure that you have selected the same options (your version may be the latest one) as shown below, then click the "Download" button.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Fzzev269zoz82awcfwjvz.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%2Fzzev269zoz82awcfwjvz.png" alt="MongoDB Compass Download Section" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 - Installing MongoDB Compass&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, it's time to install MongoDB Compass.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locate the downloaded file and double-click it to launch the installer. If a security prompt appears, confirm to proceed, and the installation will begin.&lt;/li&gt;
&lt;/ul&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%2Ftou7cevcusc7flqatvdq.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%2Ftou7cevcusc7flqatvdq.png" alt="MongoDB Compass - Installation Screen" width="632" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once the installation is complete, MongoDB Compass will launch automatically. Click "Start" to begin using it. That's it!&lt;/li&gt;
&lt;/ul&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%2Fpkn1cr7g7a6nmprqu3wf.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%2Fpkn1cr7g7a6nmprqu3wf.png" alt="MongoDB Compass - Launch Screen" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Remember, this is the minimal setup required for every developer or database administrator. You can always download additional tools, such as MongoDB Shell, based on your needs from the official website at &lt;a href="https://www.mongodb.com/" rel="noopener noreferrer"&gt;https://www.mongodb.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please comment below if you encounter any issues during the installation, and I will do my best to respond to your queries promptly. This will also help new developers in the future.&lt;/p&gt;

&lt;p&gt;Don't forget to share this guide. Thank you!&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>database</category>
      <category>productivity</category>
      <category>learning</category>
    </item>
    <item>
      <title>Replacing Digits in a Number Without Converting to String</title>
      <dc:creator>Arham Rumi</dc:creator>
      <pubDate>Mon, 22 Apr 2024 05:56:52 +0000</pubDate>
      <link>https://forem.com/arhamrumi/replacing-digits-in-a-number-without-converting-to-string-1jl4</link>
      <guid>https://forem.com/arhamrumi/replacing-digits-in-a-number-without-converting-to-string-1jl4</guid>
      <description>&lt;p&gt;In technical interviews, candidates are often challenged with problems that require creative solutions and efficient problem-solving techniques. One such problem is replacing occurrences of a digit in a number without converting the number to a string or using string operations. In this article, we'll explore a simple solution to this problem using JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem Statement:&lt;/strong&gt;&lt;br&gt;
Given a number and two digits (one to be replaced and one to replace with), the task is to replace all occurrences of the digit to be replaced in the number with the replacement digit without converting the number to string or using string operation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br&gt;
We'll approach this problem by iterating through each digit of the number and replacing the specified digit without converting the number to a string. Here's how we'll do it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Determine the length of the number to set the limit of the divisor.&lt;/li&gt;
&lt;li&gt;Initialize a new number variable to store the result.&lt;/li&gt;
&lt;li&gt;Iterate through each digit of the number using a while loop.&lt;/li&gt;
&lt;li&gt;Extract the first digit of the remaining number by dividing it with the current divisor.&lt;/li&gt;
&lt;li&gt;If the extracted digit matches the digit to be replaced, replace it with the replacement digit.&lt;/li&gt;
&lt;li&gt;Multiply the modified digit with the current divisor to get its place value.&lt;/li&gt;
&lt;li&gt;Add the modified digit to the new number.&lt;/li&gt;
&lt;li&gt;Update the original number by taking the remainder after division by the divisor.&lt;/li&gt;
&lt;li&gt;Reduce the divisor by a factor of 10 to move to the next digit.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;34645644&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Original Number&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;digit_to_be_replaced&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Digit to be replaced&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;digit_replace_with&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Digit to replace with&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;len&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ceil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log10&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&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="c1"&gt;// Length of the number&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lim&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="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;len&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="c1"&gt;// Divisor&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;new_num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// New number&lt;/span&gt;

&lt;span class="c1"&gt;// Loop through each digit of the number&lt;/span&gt;
&lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;quotient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;lim&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Extract the first digit&lt;/span&gt;
    &lt;span class="c1"&gt;// Check if the digit matches the digit to be replaced&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;quotient&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nx"&gt;digit_to_be_replaced&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;quotient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;digit_replace_with&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Replace the digit&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;quotient&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="nx"&gt;lim&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Multiply with place value&lt;/span&gt;
    &lt;span class="nx"&gt;new_num&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;quotient&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Add to new number&lt;/span&gt;
    &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;%=&lt;/span&gt; &lt;span class="nx"&gt;lim&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Update number&lt;/span&gt;
    &lt;span class="nx"&gt;lim&lt;/span&gt; &lt;span class="o"&gt;/=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Reduce divisor&lt;/span&gt;
&lt;span class="p"&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;New Number:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;new_num&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
In this article, we've demonstrated a JavaScript solution to the problem of replacing occurrences of a digit in a number without converting the number to a string. By understanding the problem statement and applying an efficient algorithm, we've successfully solved the problem using only numerical operations. This approach demonstrates critical thinking and problem-solving skills, which are essential in technical interviews.&lt;/p&gt;

&lt;p&gt;By practicing similar problems and understanding different problem-solving techniques, candidates can enhance their problem-solving abilities and improve their performance in technical interviews.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>interview</category>
      <category>node</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Resolving "File cannot be loaded because running scripts is disabled on this system" Error in Nodemon</title>
      <dc:creator>Arham Rumi</dc:creator>
      <pubDate>Tue, 21 Nov 2023 16:24:45 +0000</pubDate>
      <link>https://forem.com/arhamrumi/resolving-file-cannot-be-loaded-error-in-nodemon-1j7a</link>
      <guid>https://forem.com/arhamrumi/resolving-file-cannot-be-loaded-error-in-nodemon-1j7a</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nodemon : File C:\Users\MyUser\AppData\Roaming\npm\nodemon.ps1 cannot be loaded because running scripts is disabled on this system. For more 
information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ nodemon app
+ ~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Developers using Nodemon to enhance their Node.js development experience may encounter a common hurdle when attempting to execute the tool within a PowerShell environment. The stumbling block manifests as the error message, "File cannot be loaded because running scripts is disabled on this system," creating a roadblock in an otherwise smooth development process.&lt;/p&gt;

&lt;p&gt;This error is a consequence of PowerShell's robust security features, specifically designed to safeguard systems from potentially harmful script execution. While these protections are vital for maintaining a secure computing environment, they can occasionally impede the seamless execution of legitimate development tools like Nodemon. There are different levels of execution policy as below:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Restricted&lt;/em&gt;&lt;/strong&gt;: No scripts can be run. Default for the highest level of security.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;AllSigned&lt;/strong&gt;&lt;/em&gt;: Only scripts that are digitally signed by a trusted publisher can be run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;RemoteSigned&lt;/em&gt;&lt;/strong&gt;: Allows local scripts but requires downloaded scripts to be signed by a trusted publisher.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Unrestricted&lt;/em&gt;&lt;/strong&gt;: Allows the execution of all scripts with warnings in some cases, regardless of source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Bypass&lt;/em&gt;&lt;/strong&gt;: Allows us to run scripts from anywhere without warning regardless of the source.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, in order to resolve this issue, you have to change the execution policy. For that follow the given steps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open PowerShell as Administrator&lt;/strong&gt; - In Start Menu, search for PowerShell. Right-click on the PowerShell icon and choose "Run as Administrator." This ensures that you have the necessary permissions to change the execution policy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Get Execution Policy&lt;/strong&gt; - Run the following command to get the current execution policy.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Get-ExecutionPolicy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Change the Execution Policy&lt;/strong&gt; - Run the following command to set the execution policy to RemoteSigned. This allows locally created scripts to run but requires scripts from the internet to be signed by a trusted publisher
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Set-ExecutionPolicy RemoteSigned
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are prompted like below then simply type &lt;code&gt;A&lt;/code&gt; to accept all the changes or you can choose to accept them individually by typing &lt;code&gt;Y&lt;/code&gt;.&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%2Fd5o1j8fhmwfggevxtxm1.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%2Fd5o1j8fhmwfggevxtxm1.png" alt="Changing Execution Policy" width="800" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's all. Now Run your script with &lt;code&gt;nodemon&lt;/code&gt; again and enjoy.&lt;/p&gt;

&lt;p&gt;Note: You may need to restart your system in some cases.&lt;/p&gt;

</description>
      <category>node</category>
      <category>nodemon</category>
      <category>remotepolicy</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Audio Resampling in Node.js - JavaScript</title>
      <dc:creator>Arham Rumi</dc:creator>
      <pubDate>Fri, 07 Apr 2023 05:43:16 +0000</pubDate>
      <link>https://forem.com/arhamrumi/audio-resampling-in-nodejs-javascript-4h7m</link>
      <guid>https://forem.com/arhamrumi/audio-resampling-in-nodejs-javascript-4h7m</guid>
      <description>&lt;p&gt;In various applications—whether web, mobile, or desktop—there are often times when you need to save audio files. Depending on your requirements, you might prioritize minimizing storage space over sound quality. Audio files can vary significantly in size based on their format; for instance, WAV files are uncompressed and tend to be much larger than MP3 files.&lt;/p&gt;

&lt;p&gt;In many cases, the specific file format may not be critical; what matters most is the audio content itself. Converting WAV files to MP3 format is an effective solution for reducing storage usage.&lt;/p&gt;

&lt;p&gt;Another approach to consider is resampling, where you adjust the bit depth and frequency of the audio file. While resampling serves various purposes, we will focus on using it primarily to conserve storage space.&lt;/p&gt;

&lt;p&gt;Without further ado, let’s explore how this process works. Before executing the code below, ensure that you have installed the FFmpeg tool on your system.&lt;/p&gt;

&lt;p&gt;Here is the quick guide to install &lt;code&gt;ffmpeg&lt;/code&gt; on Windows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@arhamrumi/step-by-step-guide-how-to-install-ffmpeg-on-windows-and-unleash-your-multimedia-potential-2ecda8ed4cf" rel="noopener noreferrer"&gt;https://medium.com/@arhamrumi/step-by-step-guide-how-to-install-ffmpeg-on-windows-and-unleash-your-multimedia-potential-2ecda8ed4cf&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Assuming that you have successfully installed &lt;code&gt;ffmpeg&lt;/code&gt; tool on your system, let's dig into the code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Import required modules&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const path = require("path");
const ffmpeg = require("fluent-ffmpeg");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You have to install &lt;code&gt;fluent-ffmpeg&lt;/code&gt; module using this command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i fluent-ffmpeg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Create a function to resample audio file&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this process, &lt;code&gt;fluent-ffmpeg&lt;/code&gt; will handle the core tasks, including resampling the audio. Within the &lt;code&gt;audioFrequency()&lt;/code&gt; method, you can specify your desired sample rate, and the &lt;code&gt;save()&lt;/code&gt; method will save the converted file to the designated path. This conversion operation returns a wealth of information about the process, which is why we store it in the &lt;code&gt;result&lt;/code&gt; variable. This allows us to perform additional operations based on that information if needed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const compressAudio = async (inputFile, outputFile) =&amp;gt; {
  const result = ffmpeg(inputFile).audioFrequency(16000).save(outputFile);
  if (result) {
    console.log("Audio compressed successfully");
  }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Calling the function&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now we have to call it by giving two arguments. i.e. the first one will be the path to input file and the second one will be the path to our output file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let inputFile = "path/to/source_file.wav";
let dir_name = path.dirname(inputFile);
let file_name = path.parse(inputFile).name;

let outputFile = dir_name + "\\" + file_name + ".mp3";

await compressAudio(inputFile, outputFile);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all. You will see that in your given directory a new file is created.&lt;/p&gt;




&lt;p&gt;In conclusion, managing audio files efficiently is essential for optimizing storage and ensuring the best user experience in your applications. By leveraging tools like Fluent-FFmpeg, you can easily convert audio formats and resample files to meet your specific needs. Whether you’re developing web, mobile, or desktop applications, understanding how to handle audio files effectively can enhance your project’s overall functionality.&lt;/p&gt;

&lt;p&gt;If you have any questions or encounter any challenges while implementing these techniques, feel free to leave a comment below. Don't forget to share this article with fellow developers who may benefit from it. Happy coding!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Stand Out on GitHub: How to Create an Eye-Catching Profile README</title>
      <dc:creator>Arham Rumi</dc:creator>
      <pubDate>Tue, 04 Apr 2023 04:34:55 +0000</pubDate>
      <link>https://forem.com/arhamrumi/stand-out-on-github-how-to-create-an-eye-catching-profile-readme-4fh0</link>
      <guid>https://forem.com/arhamrumi/stand-out-on-github-how-to-create-an-eye-catching-profile-readme-4fh0</guid>
      <description>&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%2Fhxz7d30zn7bqxb26ho1n.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%2Fhxz7d30zn7bqxb26ho1n.png" alt="Header Image" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your GitHub profile is your virtual identity in the coding community. But how can you make it stand out? By adding a profile README! In this step-by-step guide, we'll show you how to create an engaging profile README that will showcase your skills, projects, social media and much more to the world.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a new repository:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Go to your GitHub profile page&lt;/li&gt;
&lt;li&gt;Click on the "Repositories" tab&lt;/li&gt;
&lt;li&gt;Click the green "New" button&lt;/li&gt;
&lt;li&gt;Name your repository "username" (replace "username" with your actual GitHub username. This is the most important thing)&lt;/li&gt;
&lt;li&gt;Select "Public" and check "Add a README file"&lt;/li&gt;
&lt;li&gt;Choose a license if you want&lt;/li&gt;
&lt;li&gt;Click "Create repository"&lt;/li&gt;
&lt;/ul&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%2F52alv3m83amwnafqcika.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%2F52alv3m83amwnafqcika.png" alt="Creating New Repository" width="755" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2. Edit your README file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your newly created repository&lt;/li&gt;
&lt;li&gt;Click on the README file&lt;/li&gt;
&lt;li&gt;Click on the pencil icon to edit the file&lt;/li&gt;
&lt;li&gt;Add your content using Markdown syntax&lt;/li&gt;
&lt;li&gt;Preview your changes by clicking the "Preview changes" tab&lt;/li&gt;
&lt;li&gt;When you're done, click the "Commit changes" button at the bottom of the page&lt;/li&gt;
&lt;/ul&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%2F3o5hssekzov33ka9puex.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%2F3o5hssekzov33ka9puex.png" alt="Editing Readme" width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Customize your Profile ReadMe
You can generate awesome profile ReadMe from many online tools. Some of them are:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://rahuldkjain.github.io/gh-profile-readme-generator/" rel="noopener noreferrer"&gt;https://rahuldkjain.github.io/gh-profile-readme-generator/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gprm.itsvg.in/" rel="noopener noreferrer"&gt;https://gprm.itsvg.in/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://profilinator.rishav.dev/" rel="noopener noreferrer"&gt;https://profilinator.rishav.dev/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://profile-readme-generator.com/" rel="noopener noreferrer"&gt;https://profile-readme-generator.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Generate the ReadMe file from your selected resource. Copy the code, repeat the step 2 again and commit changes. Congratulations! You have successfully added a profile README to your GitHub profile.&lt;br&gt;
Here is the link to my GitHub profile &lt;a href="https://github.com/arham-rumi" rel="noopener noreferrer"&gt;https://github.com/arham-rumi&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubprofile</category>
      <category>githubreadme</category>
      <category>career</category>
    </item>
  </channel>
</rss>
