<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: The Builder</title>
    <description>The latest articles on DEV Community by The Builder (@iamthebuilder).</description>
    <link>https://dev.to/iamthebuilder</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%2F544205%2F18038158-0aa5-4fe7-8bac-05011154303e.jpeg</url>
      <title>DEV Community: The Builder</title>
      <link>https://dev.to/iamthebuilder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iamthebuilder"/>
    <language>en</language>
    <item>
      <title>Stop Searching Your Tabs: Auto-Rename Terminator Tabs with Neovim &amp; Zsh</title>
      <dc:creator>The Builder</dc:creator>
      <pubDate>Wed, 25 Mar 2026 17:51:46 +0000</pubDate>
      <link>https://dev.to/iamthebuilder/stop-searching-your-tabs-auto-rename-terminator-tabs-with-neovim-zsh-19n6</link>
      <guid>https://dev.to/iamthebuilder/stop-searching-your-tabs-auto-rename-terminator-tabs-with-neovim-zsh-19n6</guid>
      <description>&lt;p&gt;If you’re like me, you usually have ten different terminal tabs open: one for the server, one for Neovim, a folder, one for the database, and maybe a few others for "vibe coding" sessions. &lt;/p&gt;

&lt;p&gt;The problem? &lt;strong&gt;Terminator&lt;/strong&gt; (and most emulators) defaults to showing the process name like &lt;code&gt;zsh&lt;/code&gt; or &lt;code&gt;nvim&lt;/code&gt;. It's a nightmare to find the right project! &lt;/p&gt;

&lt;p&gt;Here is how I configured my &lt;strong&gt;Linux&lt;/strong&gt; setup to automatically show the &lt;strong&gt;Folder Name&lt;/strong&gt; in the tab whenever I run &lt;code&gt;nvim .&lt;/code&gt; or move between projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Goal
&lt;/h2&gt;

&lt;p&gt;When I’m in &lt;code&gt;/home/user/projects/project_name&lt;/code&gt; and I hit &lt;code&gt;nvim .&lt;/code&gt;, I want my tab to say &lt;strong&gt;project_name&lt;/strong&gt;, not &lt;code&gt;nvim&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Force Neovim to Talk to Your Terminal
&lt;/h2&gt;

&lt;p&gt;Neovim is powerful enough to send "escape sequences" to your terminal emulator. We want it to set the &lt;code&gt;titlestring&lt;/code&gt; to our current folder name on startup.&lt;/p&gt;

&lt;p&gt;Open your Neovim config (e.g., &lt;code&gt;init.lua&lt;/code&gt; or your custom config) and add this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- 1. Enable title support&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="c1"&gt;-- 2. Create a function to grab the folder name and set the title&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_create_autocmd&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;"VimEnter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"DirChanged"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;callback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="c1"&gt;-- This gets the "tail" of the current working directory (the folder name)&lt;/span&gt;
    &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;folder_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fnamemodify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getcwd&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="s2"&gt;":t"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;titlestring&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;folder_name&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;-- 3. Reset the title when you quit Neovim&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_create_autocmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"VimLeave"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;callback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;titlestring&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt; 
  &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Fix Your Shell (Zsh)
&lt;/h2&gt;

&lt;p&gt;What if you aren't in Neovim? You still want your tabs to be labeled correctly. Add this "hook" to your &lt;code&gt;~/.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Auto-rename tab to current folder name&lt;/span&gt;
&lt;span class="k"&gt;function &lt;/span&gt;chpwd&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;# This escape sequence \e]2; sets the window/tab title&lt;/span&gt;
  &lt;span class="c"&gt;# ${PWD##*/} is a Zsh shortcut to get just the current folder name&lt;/span&gt;
  print &lt;span class="nt"&gt;-Pn&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;]2;&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="p"&gt;##*/&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\a&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# Set the title immediately when you open a new terminal&lt;/span&gt;
print &lt;span class="nt"&gt;-Pn&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\e&lt;/span&gt;&lt;span class="s2"&gt;]2;&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="p"&gt;##*/&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\a&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reload with &lt;code&gt;source ~/.zshrc&lt;/code&gt; and you're good to go!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Check Your Terminator Preferences
&lt;/h2&gt;

&lt;p&gt;If it’s still not working, Terminator might be overriding your titles.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Right-click&lt;/strong&gt; in Terminator &amp;gt; &lt;strong&gt;Preferences&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Profiles&lt;/strong&gt; &amp;gt; &lt;strong&gt;General&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Ensure &lt;strong&gt;"Show terminal title"&lt;/strong&gt; is checked.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;"Title Bar"&lt;/strong&gt; to &lt;strong&gt;"Initial Title"&lt;/strong&gt; or ensure it isn't set to a static string like "Terminal."&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>programming</category>
      <category>terminal</category>
      <category>shell</category>
    </item>
    <item>
      <title>Is Node.js your best introduction to the Backend?</title>
      <dc:creator>The Builder</dc:creator>
      <pubDate>Mon, 05 Jan 2026 19:00:03 +0000</pubDate>
      <link>https://dev.to/iamthebuilder/is-nodejs-your-best-introduction-to-the-backend-4nck</link>
      <guid>https://dev.to/iamthebuilder/is-nodejs-your-best-introduction-to-the-backend-4nck</guid>
      <description>&lt;p&gt;Most new developers are told to start their backend journey with &lt;strong&gt;Node.js&lt;/strong&gt;. The logic seems flawless: "You already know JavaScript from the frontend, so why learn a new language?"&lt;/p&gt;

&lt;p&gt;But here’s the reality: learning backend development with Node.js is like learning how to drive in a &lt;strong&gt;Formula 1 car&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It’s incredibly fast, highly optimized, and capable of extreme performance. But it also lacks power steering, the brakes are touchy, and if you don’t know exactly what you’re doing, you’ll spin out before you even reach the first turn.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Challenge: Speed Without Structure
&lt;/h3&gt;

&lt;p&gt;Node.js (and its popular frameworks like Express) is &lt;strong&gt;unopinionated&lt;/strong&gt;. This is a fancy way of saying it doesn't care how you organize your house. For a pro, that’s freedom. For a beginner, it’s a trap.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The "Wild West" Problem:&lt;/strong&gt; Without a traditional framework to guide you, beginners often write "spaghetti code." You’re forced to decide how to handle folders, routing, and database connections from scratch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Async Trap:&lt;/strong&gt; JavaScript’s non-blocking nature is its superpower, but managing "Promises" and "Async/Await" while &lt;em&gt;also&lt;/em&gt; trying to learn how a database works is a recipe for cognitive overload.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Alternative: The "Reliable Sedan" Approach
&lt;/h3&gt;

&lt;p&gt;If you want to understand how a server actually runs, you need a stack that is &lt;strong&gt;challenging but understandable&lt;/strong&gt;. You need an environment that teaches you the patterns used by professional engineers for decades.&lt;/p&gt;

&lt;p&gt;This is why I often recommend the &lt;strong&gt;Python and Django&lt;/strong&gt; stack as the "Gold Standard" for traditional learning. It isn't just about Python being easier to read (though it is); it’s about the &lt;strong&gt;Architectural Blueprint&lt;/strong&gt; the framework provides.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Django is the Ultimate Teacher
&lt;/h3&gt;

&lt;p&gt;Django is "batteries-included." It doesn't just give you a motor; it gives you the whole car, a GPS, and a manual.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The MVT Pattern:&lt;/strong&gt; Django forces you to learn the &lt;strong&gt;Model-View-Template&lt;/strong&gt; pattern which is based off the well known MVC pattern. This structure teaches you exactly where data lives, how it’s processed, and how it’s displayed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Built-in ORM:&lt;/strong&gt; In the JS world, you have to choose between five different libraries to talk to a database. Django has a world-class ORM built-in. It teaches you how &lt;strong&gt;data relationships&lt;/strong&gt; (like "One-to-Many") work without you having to write raw SQL on day one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The "Secret Weapon" Admin:&lt;/strong&gt; One of the hardest parts of backend is that you can’t "see" your work. Django automatically generates a professional dashboard for your database. Being able to see your data immediately provides that "instant feedback" that turns "garbage input" into "comprehensible learning."&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Roadmap
&lt;/h3&gt;

&lt;p&gt;If you want to avoid mental stagnation, stop chasing the "fastest" tool and start using the "clearest" one.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with the "Sedan" (Django):&lt;/strong&gt; Let the framework teach you the rules of the road—architecture, security, and data modeling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graduate to the "F1 Car" (Node.js):&lt;/strong&gt; Once you have that mental blueprint, moving to a high-speed, unopinionated environment will feel like a natural power-up rather than a confusing wreck.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In 2026, the best developers aren't the ones who know the most tools; they are the ones who understand the &lt;strong&gt;fundamental patterns&lt;/strong&gt; of how software is built.&lt;/p&gt;

</description>
      <category>node</category>
      <category>python</category>
      <category>django</category>
      <category>backenddevelopment</category>
    </item>
    <item>
      <title>Django Tip: Why Your Static Files Disappear When DEBUG = False</title>
      <dc:creator>The Builder</dc:creator>
      <pubDate>Tue, 16 Sep 2025 21:31:42 +0000</pubDate>
      <link>https://dev.to/iamthebuilder/django-tip-why-your-static-files-disappear-when-debug-false-4p4k</link>
      <guid>https://dev.to/iamthebuilder/django-tip-why-your-static-files-disappear-when-debug-false-4p4k</guid>
      <description>&lt;p&gt;If you’ve ever been happily styling your Django project and then suddenly lost all your CSS and JavaScript after setting &lt;code&gt;DEBUG = False,&lt;/code&gt; you’re not alone. This “disappearing static files” issue is one of the first surprises many Django developers run into when moving from development to production.&lt;/p&gt;

&lt;p&gt;Let’s unpack why this happens, and how to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it works with &lt;code&gt;DEBUG = True&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;When you’re building locally with &lt;code&gt;DEBUG = True,&lt;/code&gt; Django’s runserver is designed to make your life easier. It automatically serves your static files using the django.contrib.staticfiles app. You don’t need to configure anything special — your CSS, JavaScript, and images just show up.&lt;/p&gt;

&lt;p&gt;This is fine for development. But Django’s philosophy is that in production you should use a dedicated web server or middleware for serving static files. Why? Because web servers like Nginx or Apache (or CDNs) are optimized for serving static assets efficiently, while Django is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens when DEBUG = False
&lt;/h2&gt;

&lt;p&gt;Once you flip that setting, Django stops serving static files altogether. If you haven’t set up an alternative way to serve them, you’ll instantly notice that your site is broken — no styles, no images, no scripts.&lt;/p&gt;

&lt;p&gt;This isn’t a bug; it’s by design. It’s Django’s way of reminding you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“In production, static file handling is your responsibility.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How to fix it (the right way)&lt;/p&gt;

&lt;p&gt;Here’s the proper workflow once you’re ready to run with &lt;code&gt;DEBUG = False:&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tell Django where to collect your static files
In your settings.py, add:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
STATIC_ROOT = BASE_DIR / "staticfiles"&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run the collectstatic command
This command gathers all static files from your apps and places them into the &lt;code&gt;STATIC_ROOT&lt;/code&gt;`folder.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;br&gt;
python manage.py collectstatic&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serve those files with a proper solution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Web server option: Configure Nginx or Apache to serve the contents of your &lt;code&gt;&lt;/code&gt;STATIC_ROOT.&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Middleware option: Use Whitenoise, which allows Django to serve static files in production without an external server. This is a common approach for simpler deployments (like on Heroku).&lt;/p&gt;

&lt;h3&gt;
  
  
  Key takeaway
&lt;/h3&gt;

&lt;p&gt;Django makes static files easy to work with during development, but it hands over the responsibility once you go to production. That’s why your static files vanish when you set &lt;code&gt;&lt;/code&gt;DEBUG = False&lt;code&gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Understanding this behavior early on saves hours of confusion and makes your deployment process much smoother.&lt;/p&gt;

&lt;p&gt;So next time you see your CSS disappear, don’t panic, just remember: Django doesn’t serve static files in production; you do.&lt;/p&gt;

</description>
      <category>python</category>
      <category>django</category>
      <category>programming</category>
      <category>backenddevelopment</category>
    </item>
    <item>
      <title>Fixing XAMMP "phpMyAdmin tried to connect to the MySQL" Error: A Guide to Configuring phpMyAdmin and MySQL connection</title>
      <dc:creator>The Builder</dc:creator>
      <pubDate>Thu, 25 Apr 2024 20:06:23 +0000</pubDate>
      <link>https://dev.to/iamthebuilder/fixing-phpmyadmin-tried-to-connect-to-the-mysql-server-error-a-guide-to-configuring-mysql-port-3306-2m6g</link>
      <guid>https://dev.to/iamthebuilder/fixing-phpmyadmin-tried-to-connect-to-the-mysql-server-error-a-guide-to-configuring-mysql-port-3306-2m6g</guid>
      <description>&lt;p&gt;If you're experiencing the error "phpMyAdmin tried to connect to the MySQL server, and the server rejected the connection," there's a good chance that the issue is related to incorrect configuration settings in your MySQL server. This error can happen due to various reasons, including incorrect host, username, password, or port settings or a faulty phpMyAdmin configuration. One common solution is to ensure that MySQL is configured to use the correct port. In this article, we'll walk you through the steps to resolve this error by configuring MySQL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Error
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Check phpMyAdmin connection
&lt;/h3&gt;

&lt;p&gt;When phpMyAdmin is unable to connect to the MySQL server, it typically suggests a misconfiguration in one or more of the following areas:&lt;/p&gt;

&lt;p&gt;Host: The MySQL server's address.&lt;br&gt;
Username: The MySQL username used to connect.&lt;br&gt;
Password: The corresponding password.&lt;br&gt;
Port: The port number on which MySQL is listening (typically 3306).&lt;/p&gt;

&lt;p&gt;To fix this error, we'll focus on ensuring that MySQL is listening on port 3306, which is the default port for MySQL and having a proper phpMyAdmin configuration. If this port is commented out or not correctly set in the MySQL configuration, or phpMyAdmin is not configured properly, it may fail to connect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-Step Guide to Fix the Error
&lt;/h2&gt;

&lt;p&gt;Here’s a simple step-by-step guide to resolve this connection error by configuring MySQL to use port 330##&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Access MySQL Configuration File
&lt;/h3&gt;

&lt;p&gt;To start, you need to access the MySQL configuration file, which is generally located at /etc/mysql/my.cnf. You can use a text editor to open and edit this file. In this guide, we use nvim (NeoVim), but you can also use other editors like vim or nano.&lt;/p&gt;

&lt;p&gt;Open a terminal and enter the following command to edit the configuration file in any text editor of your choice, I'm using Neovim text editor here:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo nvim /etc/mysql/my.cnf&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Check and Configure the Port
&lt;/h3&gt;

&lt;p&gt;Once you've opened the configuration file, look for the following line:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#port = 3306&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If the port setting is commented out (with a # at the beginning), it means that MySQL is using the default port but may not explicitly specify it. Uncomment this line by removing the #, ensuring that it reads as follows:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;port = 3306&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Save and Restart MySQL
&lt;/h3&gt;

&lt;p&gt;After making the change, save the file and exit the text editor. Then, restart the MySQL server to apply the changes:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl restart mysql&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Check phpMyAdmin configuration
&lt;/h3&gt;

&lt;p&gt;XAMPP might need a different phpmyadmin configuration from what it comes with. Download phpmydamin separately and unzip it, and then replace the phpmyadmin folder in XAMMP with this new download. Configure the hostname, username and password as required to match and connect with you mySQL database. Restart XAMPP and the connection will be well established. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Check phpMyAdmin Connection
&lt;/h3&gt;

&lt;p&gt;With the port correctly set and MySQL restarted, try accessing phpMyadmin again to see if the error is resolved. If the connection works, you've successfully fixed the problem.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;br&gt;
If you encounter the error "phpMyAdmin tried to connect to the MySQL server, and the server rejected the connection," the problem is likely due to misconfigured MySQL settings. By following the steps outlined in this guide, you can quickly resolve this issue by ensuring MySQL is listening on port 3306. With this solution, you should be able to restore phpMyAdmin's functionality and resume managing your MySQL databases without any interruptions.&lt;/p&gt;

&lt;p&gt;And if these steps do not work, you remove the XAMPP folder completely and do a fresh stand-alone installation of XAMMP into phpmyadmin to replace the old XAMMP folder because XAMMP itself could be corrupt or just use XAMMP and MySQL by itself directly from the terminal to reach the database without ever using PHPmyAdmin. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Can't Access Files in XAMPP "public" Folder on Linux? Fix Permissions with chmod</title>
      <dc:creator>The Builder</dc:creator>
      <pubDate>Wed, 17 Apr 2024 20:37:39 +0000</pubDate>
      <link>https://dev.to/iamthebuilder/cant-access-files-in-xampp-public-folder-on-linux-fix-permissions-with-chmod-4bgo</link>
      <guid>https://dev.to/iamthebuilder/cant-access-files-in-xampp-public-folder-on-linux-fix-permissions-with-chmod-4bgo</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwklrn5snkoubp3lq4xc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwklrn5snkoubp3lq4xc.jpg" alt='photo of pc screen showing termianl command with "ubuntu" and dollar sign as part of the command' width="414" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having trouble accessing your website files in XAMPP on Linux? The browser might not have read permissions. A simple fix is to adjust file permissions using chmod&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding File Permissions: The Key to Access
&lt;/h2&gt;

&lt;p&gt;Your operating system controls how users and applications interact with files and folders. These permissions dictate who can view, edit, or execute them. In the case of XAMPP on Linux, the web server process (often running as the user "apache") needs permission to access your website files.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Fix: Granting Read Access with chmod
&lt;/h3&gt;

&lt;p&gt;Here's where the chmod command comes in. It allows you to modify file permissions. To grant read access to the web server process for your website files, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open a terminal window. You can find this by searching for "Terminal" in your applications menu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to the directory containing your website files. Use the cd command to change directories. For example, if your files are in a subfolder named "public" under your XAMPP htdocs directory, you would use cd /opt/lampp/htdocs/public. (Replace the path with your actual location).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run the chmod command. Here's the command to grant read (access) and execute (needed for some scripts) permissions for everyone (user, group, and others) on the public folder&lt;br&gt;
&lt;code&gt;&lt;br&gt;
chmod 755 public&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
(Replace the "public" with folder(s) name that you want to grant access).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check for change or restart XAMPP&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open your web browser and attempt to access your website files. You should now be able to view them successfully.&lt;br&gt;
Important Note: While granting 755 permissions is common for website directories, it's crucial to understand file permissions and adjust them based on your specific security requirements.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By following these steps and comprehending the role of file permissions, you can ensure your XAMPP website files are accessible on Linux.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>xammp</category>
      <category>webdev</category>
      <category>php</category>
    </item>
    <item>
      <title>Knowledge Ascent: A Stairway Where Plateaus Lead to Descent</title>
      <dc:creator>The Builder</dc:creator>
      <pubDate>Fri, 15 Dec 2023 11:53:18 +0000</pubDate>
      <link>https://dev.to/iamthebuilder/knowledge-ascent-a-stairway-where-plateaus-lead-to-descent-194e</link>
      <guid>https://dev.to/iamthebuilder/knowledge-ascent-a-stairway-where-plateaus-lead-to-descent-194e</guid>
      <description>&lt;p&gt;Imagine a staircase, not of wood or stone, but of knowledge. Each step represents a new concept, a deeper understanding, a climb towards mastery. As with any staircase, there are landings, moments of respite where you can pause, catch your breath, and admire the view you've ascended to. But unlike a physical staircase, this one holds a hidden trap: stagnation.&lt;/p&gt;

&lt;p&gt;The moment you stop actively climbing, the steps beneath your feet begin to crumble. Concepts fade, connections loosen, and what was once solid ground becomes slippery sand. This isn't just a passive descent; it's an active erosion. Knowledge, like a muscle, needs constant exercise to remain strong.&lt;/p&gt;

&lt;p&gt;Consistency, then, becomes the fuel that propels you upward. Every deliberate step, every intentional review, every moment spent actively engaging with the material, reinforces the foundation under your feet. It's not about relentless sprinting; it's about the steady rhythm of one step after another, a mindful climb that chips away at the mountain of ignorance.&lt;/p&gt;

&lt;p&gt;Think of it like this: every time you revisit a concept, you're not just refreshing your memory, you're building a sturdier step. You're adding context, weaving connections, and anchoring the knowledge deeper into the fabric of your understanding. This constant reinforcement ensures that even when you take a break, your footing remains secure, ready to propel you further on your ascent.&lt;/p&gt;

&lt;p&gt;So, embrace the landings, but don't linger. Use them as opportunities to reflect, to consolidate your gains, and to strategize the next leg of your climb. Remember, knowledge ascent is a journey, not a destination. The true reward lies in the continuous act of learning, of taking one step after another, of building a stairway of understanding that reaches towards the ever-expanding horizon of knowledge.&lt;/p&gt;

&lt;p&gt;And never forget, even the smallest step, taken consistently, can lead to the greatest heights. So, climb on, learn on, and savor the breathtaking view from every step of your knowledge ascent.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>knowledge</category>
      <category>consistency</category>
      <category>studying</category>
    </item>
    <item>
      <title>Piriformis Pain and the Vim Epiphany: A Journey to Ergonomic Typing</title>
      <dc:creator>The Builder</dc:creator>
      <pubDate>Wed, 13 Dec 2023 13:10:01 +0000</pubDate>
      <link>https://dev.to/iamthebuilder/piriformis-pain-and-the-vim-epiphany-a-journey-to-ergonomic-typing-5779</link>
      <guid>https://dev.to/iamthebuilder/piriformis-pain-and-the-vim-epiphany-a-journey-to-ergonomic-typing-5779</guid>
      <description>&lt;p&gt;It all started with a nagging pain in my right hip. Turns out, it was my piriformis muscle, a deep muscle located in the buttocks that helps rotate the hip. Apparently, years of hunching over my laptop and reaching for the touchpad of my laptop had taken their toll.&lt;/p&gt;

&lt;p&gt;This wasn't just a minor inconvenience; it was a wake-up call that my relationship with technology needed a serious overhaul. I couldn't ignore the pain, and I certainly didn't want to spend my future hunched over a keyboard, destined for a life of chronic pain.&lt;/p&gt;

&lt;p&gt;So, I embarked on a quest for ergonomic solutions. I invested in a supportive chair, a monitor, an external mouse and keyboard. While these helped alleviate some of the discomfort, they didn't address the root cause: my reliance on the mouse and the touchpad and the constant reaching it demanded.&lt;/p&gt;

&lt;p&gt;That's when I stumbled upon the world of Vim key bindings. Vim, a powerful text editor known for its steep learning curve, promised a different way of interacting with text. Instead of reaching for the mouse, I could navigate and manipulate text entirely with the keyboard.&lt;/p&gt;

&lt;p&gt;Intrigued by the potential for ergonomic typing, I took the plunge into the world of Vim tutorials and cheat sheets. It wasn't easy. My fingers fumbled over unfamiliar keys, and the cryptic commands felt like another language. But with each struggle, came a small victory. I learned to move around the text with surprising agility, my fingers dancing across the keyboard.&lt;/p&gt;

&lt;p&gt;The real revelation came when I began to feel the difference in my body. My hunched posture improved as I leaned back in my chair, no longer forced to contort myself to reach the touchpad. The pain in my hip gradually subsided, replaced by a sense of newfound freedom.&lt;/p&gt;

&lt;p&gt;Learning Vim wasn't just about avoiding pain; it was about reclaiming control over my work environment. It forced me to be more intentional about my movements, to be mindful of my posture, and to prioritize my well-being.&lt;/p&gt;

&lt;p&gt;This journey has taught me a valuable lesson: technology should adapt to us, not the other way around. By embracing new tools and learning new skills, we can create a more comfortable and sustainable work environment, one that prioritizes both productivity and well-being.&lt;/p&gt;

&lt;p&gt;So, if you find yourself struggling with pain or discomfort from technology use, I encourage you to explore new possibilities. Whether it's Vim or another ergonomic solution, there's a way to work smarter, not harder, and create a future free from pain and discomfort. Your body will thank you for it.&lt;/p&gt;

</description>
      <category>vim</category>
      <category>ergonomic</category>
      <category>typing</category>
      <category>programming</category>
    </item>
    <item>
      <title>Preventing Button Hover from Disrupting Layout in CSS: A Detailed Guide</title>
      <dc:creator>The Builder</dc:creator>
      <pubDate>Mon, 27 Nov 2023 21:45:41 +0000</pubDate>
      <link>https://dev.to/iamthebuilder/preventing-button-hover-from-disrupting-layout-in-css-a-detailed-guide-1k8c</link>
      <guid>https://dev.to/iamthebuilder/preventing-button-hover-from-disrupting-layout-in-css-a-detailed-guide-1k8c</guid>
      <description>&lt;p&gt;When building a website, ensuring a seamless and consistent user experience is paramount. Layout shifts, abrupt changes in the positioning of elements on a page, can be jarring and disruptive to the user's flow. A common culprit of layout shifts is the dynamic behaviour of elements, particularly buttons, upon hover interaction.&lt;/p&gt;

&lt;p&gt;A frequently encountered scenario involves buttons. When a button's border style or thickness changes during hover, it can cause the button to expand slightly, disrupting the surrounding elements' layout. This can result in a flickering effect as the user interacts with the button, making the page appear unstable and unprofessional.&lt;/p&gt;

&lt;p&gt;To effectively address this issue and prevent button hover from causing layout shifts, we can leverage CSS to maintain consistent button dimensions throughout any hover interaction. Here's a comprehensive guide to resolving this layout shift problem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Establishing a Transparent Border as Default&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Begin by defining a transparent border for the button in its default state. This ensures that the button has a defined size without affecting the surrounding elements.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;button {&lt;br&gt;
  border: 1px solid transparent;&lt;br&gt;
  padding: 10px 20px; /* Adjust padding as needed */&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Implementing the Desired Border on Hover&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next, apply the desired border style or thickness, such as a green border, only when the user hovers over the button. This maintains the button's consistent size while providing the visual feedback of the hover interaction.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;button:hover {&lt;br&gt;
  border: 1px solid green;&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;By implementing these CSS rules, you can effectively prevent button hover interactions from causing layout shifts, ensuring a smooth and consistent user experience on your web pages. Remember, attention to detail in CSS can significantly enhance the overall user experience of your website.&lt;/p&gt;

</description>
      <category>css</category>
      <category>button</category>
      <category>html</category>
      <category>stylesheet</category>
    </item>
    <item>
      <title>JavaScript reduce method and how it works</title>
      <dc:creator>The Builder</dc:creator>
      <pubDate>Wed, 21 Dec 2022 09:11:45 +0000</pubDate>
      <link>https://dev.to/iamthebuilder/javascript-reduce-575h</link>
      <guid>https://dev.to/iamthebuilder/javascript-reduce-575h</guid>
      <description>&lt;p&gt;The &lt;code&gt;reduce&lt;/code&gt; array method is an interesting method because unlike &lt;code&gt;filter&lt;/code&gt; and &lt;code&gt;map&lt;/code&gt;that takes one parameter during it's most basic usage, the &lt;code&gt;reduce&lt;/code&gt; method takes two parameters. The first one is the accumulator and the other is the parameter of the current value that will be worked on.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;reduce&lt;/code&gt;allows for items to be summed up or brought together.&lt;/p&gt;

&lt;p&gt;Let's see a few examples on it. &lt;/p&gt;

&lt;p&gt;Were going to try to sum up the numbers in the following array:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const nums = [1, 2, 3, 4, 5]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Solution&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const sumNumbers = nums.reduce((sum, num)=&amp;gt; sum + num, 0)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;console.log(sumNumbers)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;//output is 15&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Here, you will see that apart from &lt;code&gt;num&lt;/code&gt; which is the current value parameter that we will work on according to every number in the array, the &lt;code&gt;sum&lt;/code&gt; which is another parameter and the accumulator taken in by &lt;code&gt;reduce&lt;/code&gt; and it is being set to an initial value of &lt;code&gt;0&lt;/code&gt;at the end of the &lt;code&gt;reduce&lt;/code&gt;method so that it can be added to the current value &lt;code&gt;num&lt;/code&gt;and accumulated as it moves along the from one  number to the other in the array. &lt;/p&gt;

&lt;p&gt;Example 2&lt;/p&gt;

&lt;p&gt;Apply reduce and add "-" at the end of every city in the array. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;const cities = ["Lagos", "Paris", "Miami", "Mumbai" ]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Solution &lt;/p&gt;

&lt;p&gt;&lt;code&gt;const dashCities = cities.reduce((result, city)=&amp;gt; result + city + "-", "")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;console.log(dashCities)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;//output is Lagos-Paris-Miami-Mumbai-&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;Here we can see that the cities are brought together with dashes after them and made into a string because &lt;code&gt;result&lt;/code&gt; which is a parameter and the accumulator has an initial value that is set to an empty string at the end of the &lt;code&gt;reduce&lt;/code&gt;method. &lt;/p&gt;

&lt;p&gt;I hope you enjoyed the explanation and now  understand how &lt;code&gt;reduce&lt;/code&gt;works now. Please like, share, comment and follow for more. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>discuss</category>
    </item>
    <item>
      <title>My web dev journey.</title>
      <dc:creator>The Builder</dc:creator>
      <pubDate>Wed, 20 Jan 2021 12:22:25 +0000</pubDate>
      <link>https://dev.to/iamthebuilder/my-web-dev-journey-9k3</link>
      <guid>https://dev.to/iamthebuilder/my-web-dev-journey-9k3</guid>
      <description>&lt;p&gt;Web development has always been more of a curiosity for me. I never thought that I would take it on up until I built an interest for it sometime in June 2020. I had just saved enough to get myself a laptop so I could learn how to edit photos because photography was my main focus at the time. &lt;/p&gt;

&lt;p&gt;The real journey to web development began when I stumbled upon a crash course on web design on YouTube by this bald headed guy, "Bring your own laptop". The Video lasted for about 3 hours and then I was hooked! Then I thought to myself hey, I can actually do this. Fast forward to today and I just started learning JavaScript after getting access to udemy courses and just pure consistency on my part to practice almost every day, getting familiar with HTML and CSS and building a few projects, some of which are in my GitHub. &lt;/p&gt;

&lt;p&gt;It has been quite a journey so far and I am looking forward to where this road leads. I'm open to tips from anyone who is willing to share. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>html</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
