<?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: Rouwel Ngacha</title>
    <description>The latest articles on DEV Community by Rouwel Ngacha (@rrouwelng).</description>
    <link>https://dev.to/rrouwelng</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3924978%2F2d5c38e4-653e-4d1b-8628-91c93c7fd86c.png</url>
      <title>DEV Community: Rouwel Ngacha</title>
      <link>https://dev.to/rrouwelng</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rrouwelng"/>
    <language>en</language>
    <item>
      <title>How the python package installer works</title>
      <dc:creator>Rouwel Ngacha</dc:creator>
      <pubDate>Sun, 26 Jul 2026 09:11:16 +0000</pubDate>
      <link>https://dev.to/rrouwelng/how-the-python-package-installer-works-3k13</link>
      <guid>https://dev.to/rrouwelng/how-the-python-package-installer-works-3k13</guid>
      <description>&lt;p&gt;My first encounter with &lt;strong&gt;pip&lt;/strong&gt; was trying to run a Python script that imported the &lt;code&gt;requests&lt;/code&gt; library, only to be met with an import error. The fix turned out to be straightforward: using &lt;strong&gt;pip&lt;/strong&gt;, Python's package installer.&lt;/p&gt;

&lt;p&gt;To use pip, you need to have Python installed on your system. The basic command to install any library is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;package-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Best Practice: Using a Virtual Environment (&lt;code&gt;venv&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Before installing packages everywhere, it’s best to create an isolated workspace for your project called a &lt;strong&gt;virtual environment&lt;/strong&gt;. This keeps package dependencies for different projects separate so they don't clash with each other or your system's main Python installation.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Create the environment
&lt;/h3&gt;

&lt;p&gt;Open your terminal in your project directory and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(This creates a folder named &lt;code&gt;venv&lt;/code&gt; containing a standalone copy of Python and pip.)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Activate the environment
&lt;/h3&gt;

&lt;p&gt;Before installing anything, activate it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  venv\Scripts\activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;macOS / Linux:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once activated, your terminal prompt will show &lt;code&gt;(venv)&lt;/code&gt; at the beginning. Any &lt;code&gt;pip install&lt;/code&gt; commands you run now will stay inside this isolated environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bulk Installing Dependencies with &lt;code&gt;requirements.txt&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;When you're running a Python script with multiple required packages, installing them one by one gets tedious. You can streamline this process by bulk installing everything at once using a requirements file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create a &lt;code&gt;requirements.txt&lt;/code&gt; file
&lt;/h3&gt;

&lt;p&gt;Create a standard text file named &lt;code&gt;requirements.txt&lt;/code&gt; in your project folder and list all your dependencies, one per line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;requests
pandas
numpy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Run the bulk install command
&lt;/h3&gt;

&lt;p&gt;With your virtual environment active, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Specifying Package Versions
&lt;/h2&gt;

&lt;p&gt;Sometimes, the newest version of a library breaks compatibility with other packages in your project. To prevent this, you can specify exact version numbers directly inside your &lt;code&gt;requirements.txt&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;requests==2.31.0
pandas&amp;gt;=2.0.0
numpy&amp;lt;=1.24.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;==&lt;/code&gt;&lt;/strong&gt; installs an exact version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;&amp;gt;=&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;&amp;lt;=&lt;/code&gt;&lt;/strong&gt; sets a minimum or maximum allowed version.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>From Arcade Cabinets to AI: How the GPU Changed Computing Forever</title>
      <dc:creator>Rouwel Ngacha</dc:creator>
      <pubDate>Thu, 23 Jul 2026 19:55:48 +0000</pubDate>
      <link>https://dev.to/rrouwelng/from-arcade-cabinets-to-ai-how-the-gpu-changed-computing-forever-a7m</link>
      <guid>https://dev.to/rrouwelng/from-arcade-cabinets-to-ai-how-the-gpu-changed-computing-forever-a7m</guid>
      <description>&lt;p&gt;Before graphics processing units (GPUs) became the powerhouse chips driving modern video games, scientific simulations, and artificial intelligence, computer graphics were slow, blocky, and severely limited. Understanding how we got from simple glowing dots to today's hyper-realistic 3D worlds requires looking back at a few key breakthroughs in computing history.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 1: In the Beginning — Legacy Systems &amp;amp; Early Graphics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1950: The Whirlwind Computer
&lt;/h3&gt;

&lt;p&gt;The long story of computer graphics begins in 1950 with &lt;strong&gt;The Whirlwind&lt;/strong&gt;, a giant computer built for the U.S. Navy as a flight simulator. Powered by thousands of bulky vacuum tubes, Whirlwind could perform around 50,000 basic calculations per second.&lt;/p&gt;

&lt;p&gt;It commanded a cathode-ray tube (CRT) monitor to draw basic dots, shapes, and screen coordinates. While impressive for its time, Whirlwind wasn't actually an ancestor of the modern GPU—it was simply an early milestone showing that computers could display visual information.&lt;/p&gt;

&lt;h3&gt;
  
  
  1970s–1980s: The Arcade Era
&lt;/h3&gt;

&lt;p&gt;The true lineage of the modern GPU started in arcade cabinets during the 1970s and 1980s.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arcade Hardware:&lt;/strong&gt; Arcade machines (like those running &lt;em&gt;Pac-Man&lt;/em&gt;, &lt;em&gt;Donkey Kong&lt;/em&gt;, or &lt;em&gt;Galaga&lt;/em&gt;) used specialized graphics chips designed for "fixed functions". These chips were custom-built to quickly animate moving characters (sprites) and background tiles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Home PCs:&lt;/strong&gt; In contrast, early personal computers relied entirely on their Central Processing Unit (CPU) to draw graphics using software. Because CPUs had to process every single pixel alongside normal system operations, home computer graphics lagged far behind arcade performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fixed-function design of arcade hardware—doing one visual job extremely fast—became the blueprint for dedicated graphics hardware.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 2: The 3D Revolution &amp;amp; Standardizing the Pipeline
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How Early GPUs Worked: The Fixed Function Pipeline
&lt;/h3&gt;

&lt;p&gt;In the late 1980s and 1990s, computer graphics shifted from 2D sprites to 3D virtual environments made up of triangles. This created a multi-step pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Game Engine:&lt;/strong&gt; Determines the positions of 3D objects made of connected triangles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CPU:&lt;/strong&gt; Calculates game physics, rules, and coordinate movements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPU (or 3D Accelerator):&lt;/strong&gt; Turns those 3D triangle coordinates into colored pixels.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Display:&lt;/strong&gt; Sends the finished 2D image out to your monitor.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Game Engine ] ──► [ CPU: Physics &amp;amp; Logic ] ──► [ GPU: 3D to Pixels ] ──► [ Display ]

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Early Limitation: The API Wars
&lt;/h3&gt;

&lt;p&gt;In the mid-1990s, every graphics card manufacturer created its own custom instruction language, known as an &lt;strong&gt;Application Programming Interface (API)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If a developer wanted their game to run on different graphics cards, they had to write separate versions for proprietary formats like &lt;strong&gt;3dfx Glide&lt;/strong&gt;, &lt;strong&gt;S3 Metal&lt;/strong&gt;, &lt;strong&gt;PowerVR&lt;/strong&gt;, or &lt;strong&gt;OpenGL&lt;/strong&gt;. This fragmenting made developing 3D games difficult and expensive.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 3: The 1990s — Coining the "GPU" and Finding a Standard
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Key Milestones of the 1990s
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1993 (3dfx Voodoo &amp;amp; Glide API):&lt;/strong&gt; 3dfx introduced the Voodoo card, delivering unprecedented 3D graphics performance for games like &lt;em&gt;Quake&lt;/em&gt;. Its proprietary Glide API dominated the market, but only worked on 3dfx hardware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1994 (Sony PlayStation):&lt;/strong&gt; Sony began using the term "GPU" to describe the custom 32-bit graphics processor inside the original PlayStation console.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1998 (DirectX 7 &amp;amp; T&amp;amp;L):&lt;/strong&gt; Microsoft released &lt;strong&gt;DirectX 7&lt;/strong&gt;, featuring &lt;strong&gt;Transform &amp;amp; Lighting (T&amp;amp;L)&lt;/strong&gt; technology. DirectX established a universal software standard across all graphics cards, effectively ending the API wars and rendering proprietary formats like Glide obsolete.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1999 (NVIDIA GeForce 256):&lt;/strong&gt; NVIDIA popularized the term "GPU" for PC hardware by launching the GeForce 256. It was marketed as the world’s first true GPU because it took over visual geometry calculations entirely from the CPU.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Arcade roots:&lt;/strong&gt; Specialized graphics chips began in arcades to offload visual work from general-purpose CPUs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The 3D transition:&lt;/strong&gt; As games moved to 3D, dedicated cards were required to handle complex math involving thousands of triangles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standardized software:&lt;/strong&gt; Microsoft DirectX unified how games talk to graphics hardware, setting the stage for modern PC gaming and computing.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>computerscience</category>
      <category>hardware</category>
      <category>science</category>
    </item>
    <item>
      <title>Using controllers to play Pc games</title>
      <dc:creator>Rouwel Ngacha</dc:creator>
      <pubDate>Sun, 19 Jul 2026 19:16:02 +0000</pubDate>
      <link>https://dev.to/rrouwelng/using-controllers-to-play-pc-games-1eab</link>
      <guid>https://dev.to/rrouwelng/using-controllers-to-play-pc-games-1eab</guid>
      <description>&lt;p&gt;For most of my life, I was convinced that you absolutely needed a console to play video games—whether we're talking about massive AAA blockbusters or hidden indie gems. Fortunately, I crossed paths with a few gamers who completely shattered my understanding of how gaming hardware works.&lt;/p&gt;

&lt;p&gt;That realization opened up a whole new world. I started using my trusty 8th Gen I5 laptop at the time to play games, and my mind was officially blown. Fast forward to today: I’ve upgraded to a much better PC setup, and I'm fully enjoying the PC gaming experience the best way I know how—with a controller in hand.&lt;/p&gt;

&lt;p&gt;Specifically, I use a PlayStation DualShock 4 (DS4) controller. But if you're diving into this without prior insight, trying to connect a console controller like a PS3 or PS4 pad to a PC can feel incredibly daunting. It isn't always plug-and-play out of the box.If you are ready to make the switch, here is your tutorial on how to use your controller on PC.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;1. DS4Windows&lt;/strong&gt;&lt;br&gt;
While there are a few different pieces of software out there designed to bridge the gap between a Windows PC and a PlayStation controller, DS4Windows is by far the most reliable tool for the job. You can get started by grabbing the software from the Official DS4Windows Site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. ViGEmBus.&lt;/strong&gt;&lt;br&gt;
Once you have the app, you will need to install the ViGEmBus (Virtual Gamepad Emulation Bus) driver. Don't worry, DS4Windows will actually prompt you to install this during the initial setup. This crucial kernel-mode driver runs silently in the background and allows the software to create "virtual" controllers that your PC can actually communicate with.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Emulation Profile Selection.&lt;/strong&gt;&lt;br&gt;
Because most Windows games natively expect an Xbox controller layout (XInput), this clever software tricks your PC into thinking your PlayStation pad is a native Windows device. Once your controller is connected, you can go into the profile settings and choose between whether you want to play as an Xbox 360 controller or a PS4 controller, giving you instant compatibility across almost every game on the market. &lt;/p&gt;

&lt;p&gt;And that is how to use you playstation 4 controller to play pc games. Thanks for reading and happy playing.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvwcr2a9ow4ab7pdcg4a3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvwcr2a9ow4ab7pdcg4a3.png" alt=" " width="799" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gaming</category>
      <category>pcgaming</category>
    </item>
    <item>
      <title>Getting Started with Django: From Zero to 70% in Record Time . Step 1 :Starting phase (For Linux this time)</title>
      <dc:creator>Rouwel Ngacha</dc:creator>
      <pubDate>Sat, 23 May 2026 20:05:31 +0000</pubDate>
      <link>https://dev.to/rrouwelng/getting-started-with-django-from-zero-to-70-in-record-time-step-1-starting-phase-for-linux-c4d</link>
      <guid>https://dev.to/rrouwelng/getting-started-with-django-from-zero-to-70-in-record-time-step-1-starting-phase-for-linux-c4d</guid>
      <description>&lt;p&gt;Quick disclaimer (the post below is meant to mirror the previous post but for the Linux operating system. Please try to implement these methods and if they do not work on your machine leave a comment and allow me to find a solution.)&lt;/p&gt;

&lt;p&gt;For this post, I would like to help anyone who is not familiar with Django to get somewhat of an understanding on how to use it to get from 0 to maybe 70% completion of a project in record time. &lt;br&gt;
The objective today is to learn how to start, after 2 posts you should be able to speedrun projects.&lt;/p&gt;

&lt;p&gt;First things first, you have to understand that there are multiple Python frameworks out there(Flask, FastAPI). The choice of which one to use is always up to you and the constraints on the project your working on.&lt;/p&gt;

&lt;p&gt;With that being said let's dive in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Ensure that you download Python&lt;/strong&gt;&lt;br&gt;
For my device I am using Windows Subsystem For Linux (for more information : &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/install" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/windows/wsl/install&lt;/a&gt;) this allows me to run an Linux Ubuntu terminal on my machine.&lt;br&gt;
For the installation we will use apt (Advanced Package Tool) to install python3.&lt;br&gt;
1.&lt;code&gt;sudo apt update&lt;/code&gt;&lt;br&gt;
2.&lt;code&gt;sudo apt install python3&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%2Fzyk2zpd7h78afh0ia0if.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%2Fzyk2zpd7h78afh0ia0if.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Ensure you have to have Django installed&lt;/strong&gt;&lt;br&gt;
To install Django we will be using pip(a python package installer) which means you should have Python downloaded and configured in your path.&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%2Fcgy3t608xfl189nmwyn0.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%2Fcgy3t608xfl189nmwyn0.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Something else I would like to encourage is the use of a Python virtual environment. You may not be familiar with this concept but trust me - there is not better time to learn how to use it.&lt;br&gt;
The idea behind it is that, you install all your python packages while inside your project environment and as long as you initialize your environment all your project dependencies will work (eg Django, pillow). Sounds good? &lt;/p&gt;

&lt;p&gt;Considering that we are on Linux we will need to download the specific packages that we want to use (  eg venv) in order to get our virtual environments active. &lt;br&gt;
This is because unlike windows, downloading python3 does not come with the venv package already installed.&lt;br&gt;
This means that if you try to run &lt;code&gt;python3 -m venv MyProject&lt;/code&gt;&lt;br&gt;
you will be met by an error.&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%2F1a9691spd6n8dr3nguqs.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%2F1a9691spd6n8dr3nguqs.png" alt="Creating a python environment" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So for every individual package we want to use we will have to install it as we go along.&lt;br&gt;
1.&lt;code&gt;sudo apt install python3-venv&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%2Fn9ohban6z5mvvz7zjy8t.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%2Fn9ohban6z5mvvz7zjy8t.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From here we create and activate the project environment using&lt;br&gt;
&lt;code&gt;python3 -m venv Project&lt;/code&gt; and &lt;code&gt;source Project/bin/activate&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%2F9joaf7m4sah5ufwqp5af.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%2F9joaf7m4sah5ufwqp5af.png" alt="Creating the virtual environment" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that you are in your environment,  use pip to install Django.&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%2Fdeluipxjam4s9yfs6npe.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%2Fdeluipxjam4s9yfs6npe.png" alt="Installing Django" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Creating a project&lt;/strong&gt;&lt;br&gt;
So to start a project the command is &lt;code&gt;django-admin startproject ProjectName&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%2Fj7jr9ua8fcpymkuhamkj.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%2Fj7jr9ua8fcpymkuhamkj.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you ran this command, it will create a folder where there are a few preconfigured python code files inside.&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%2Fur85oq34djlhkl2h777v.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%2Fur85oq34djlhkl2h777v.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
(Pre-configured project files)&lt;/p&gt;

&lt;p&gt;Now that we have created a project, we will need to initialize a Django app while inside that folder. The command is &lt;br&gt;
&lt;code&gt;python3 manage.py startapp &amp;lt;name_of_your_app&amp;gt;&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%2F5xqyxcgx5yllcw8kg5mp.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%2F5xqyxcgx5yllcw8kg5mp.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now once you open your IDE, you will realized that you have a few code files inside your NewProject folder. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Running the server&lt;/strong&gt;&lt;br&gt;
The final part of this post focuses on how to run the server. In later entries we will dive deeper and create a small-scale working example using all of Django's extensive features, but that is for later.&lt;/p&gt;

&lt;p&gt;To run the server use &lt;code&gt;python3 manage.py runserver&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%2Fcrotukdu2pixjahneyve.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%2Fcrotukdu2pixjahneyve.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So when you go to localhost at port 8000 you will find &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%2Fmgzoei0fhvzc8jevw2ve.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%2Fmgzoei0fhvzc8jevw2ve.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And there you have it! You have successfully installed Django, created a project, initialized an app, and got your development server running (on linux). &lt;br&gt;
While this may seem like a small set of steps, this is the foundation that every Django project is built on.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>linux</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Getting Started with Django: From Zero to 70% in Record Time : Step 1</title>
      <dc:creator>Rouwel Ngacha</dc:creator>
      <pubDate>Thu, 21 May 2026 22:06:54 +0000</pubDate>
      <link>https://dev.to/rrouwelng/getting-started-with-django-from-zero-to-70-in-record-time-1fcb</link>
      <guid>https://dev.to/rrouwelng/getting-started-with-django-from-zero-to-70-in-record-time-1fcb</guid>
      <description>&lt;p&gt;For this post, I would like to help anyone who is not familiar with Django to get somewhat of an understanding on how to use it to get from 0 to maybe 70% completion of a project in record time.&lt;/p&gt;

&lt;p&gt;So first you have to understand that there are multiple Python frameworks out there(Flask, FastAPI). The choice of which one to use is always up to you and the constraints on the project your working on.&lt;/p&gt;

&lt;p&gt;With that being said let's dive in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Ensure you have to have Django installed&lt;/strong&gt;&lt;br&gt;
To install Django we will be using pip(a python package installer) which means you should have Python downloaded and configured in your path.&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%2Fminimeg83k0lwe9pzwpa.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%2Fminimeg83k0lwe9pzwpa.png" alt="Creating a folder and checking if python is installed" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
(Creating a folder and checking if python is installed)&lt;/p&gt;

&lt;p&gt;Something else I would like to encourage is the use of a Python virtual environment. You may not be familiar with this concept but trust me - there is not better time to learn how to use it. &lt;/p&gt;

&lt;p&gt;The idea behind it is that, inside that environment you can install all you python packages while inside the environment and as long as you initialize your environment  all your project dependencies will be inside. Sounds good? &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3yuggh99imd70gbbc42.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%2Fq3yuggh99imd70gbbc42.png" alt="Creating a python environment" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
(Creating a python environment)&lt;/p&gt;

&lt;p&gt;Now that you are in your environment,  use pip to install Django.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmbjf992yuiuee60tgy6.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%2Ftmbjf992yuiuee60tgy6.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Creating a project&lt;/strong&gt;&lt;br&gt;
So to start a project the command is &lt;code&gt;django-admin startproject projectname&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxosutvuugnahcdroku40.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%2Fxosutvuugnahcdroku40.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you ran this command, it will create a folder where there are a few preconfigured python code files inside.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8a1lrtvo1ytuc6wpyhmw.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%2F8a1lrtvo1ytuc6wpyhmw.png" alt="Pre comfigured project files" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
(Pre-configured project files)&lt;/p&gt;

&lt;p&gt;Now that we have created a project, we will need to initialize a Django app while inside that folder. The command is python manage.py startapp &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36jfdr8padgvhwsvongs.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%2F36jfdr8padgvhwsvongs.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now once you open your IDE, you will realized that you have a few code files inside your NewProject folder. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Running the server&lt;/strong&gt;&lt;br&gt;
The final part of this post focuses on how to run the server. In later entries we will dive deeper and create a small-scale working example using all of Django's extensive features, but that is for later.&lt;/p&gt;

&lt;p&gt;To run the server use &lt;code&gt;py manage.py runserver&lt;/code&gt;. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg4pcik9wpruwzruzimew.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%2Fg4pcik9wpruwzruzimew.png" alt="terminal image" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So when you go to localhost at port 8000 you will find &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%2Fmgzoei0fhvzc8jevw2ve.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%2Fmgzoei0fhvzc8jevw2ve.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And there you have it! You have successfully installed Django, created a project, initialized an app, and got your development server running. While this may seem like a small set of steps, this is the foundation that every Django project is built on.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Device drivers : The Unsung Heroes of Your Computer</title>
      <dc:creator>Rouwel Ngacha</dc:creator>
      <pubDate>Thu, 14 May 2026 18:29:00 +0000</pubDate>
      <link>https://dev.to/rrouwelng/device-drivers-the-unsung-heroes-of-your-computer-2gdh</link>
      <guid>https://dev.to/rrouwelng/device-drivers-the-unsung-heroes-of-your-computer-2gdh</guid>
      <description>&lt;p&gt;You have probably never heard of device drivers, but without them, you would not be able to use your computer.&lt;/p&gt;

&lt;p&gt;So picture your computer &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%2Fpfqtgeb11bhlgkvrsakt.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%2Fpfqtgeb11bhlgkvrsakt.png" alt="Image of Laptop computer" width="469" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— you can see the keyboard, the touchpad, the power button, maybe a fingerprint sensor, and a touchscreen. For all of that hardware to function (for the keyboard to actually put letters on the screen, for the mouse to actually move and click items, for your touchscreen to work), something has to bridge the gap between the physical components and the operating system. That something is called a device driver.&lt;/p&gt;

&lt;p&gt;Device drivers are essentially the compatibility layer between a device's hardware and its software.&lt;/p&gt;

&lt;p&gt;On Windows, the graphical interface for managing drivers is called Device Manager. It is accessible by right-clicking the Windows icon and selecting "Device Manager" from the pop-up menu, and it looks 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%2Fs5cndwiyw3qpsoc7hbg0.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%2Fs5cndwiyw3qpsoc7hbg0.png" alt="Image of Device manager" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the popular Linux distribution Ubuntu, the equivalent interface looks 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%2Fipq75kgky2kxft7scivq.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%2Fipq75kgky2kxft7scivq.png" alt="Image of HardInfo interface on Ubuntu" width="745" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But we are just scratching the surface.&lt;br&gt;
To recap: every piece of hardware on a system requires a driver to function as intended. This includes externally connected devices.&lt;br&gt;
A good example is a printer — to use one, you first connect it to your system (laptop or desktop). In many cases, your operating system will automatically detect and install the necessary drivers for you. However, if it does not, you can manually download and install them from the manufacturer's website.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Unused Potential: Disabling and or Deleting Drivers&lt;/strong&gt;&lt;br&gt;
This brings me to a lesser-known but useful aspect of drivers. Just as you can download and install them, you can also disable or delete them. This might sound counterproductive at first, but there are situations where it becomes a practical solution.&lt;br&gt;
A problem I recently encountered was my laptop's touchscreen registering phantom presses in one corner of the screen on its own. I had two options:&lt;/p&gt;

&lt;p&gt;Option 1 — Pay to have it repaired, which is the best long-term solution.&lt;br&gt;
Option 2 — Disable the touchscreen driver entirely to stop the erratic behavior.&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%2Fqvyxxkg7pmfhl0s2db6m.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%2Fqvyxxkg7pmfhl0s2db6m.png" alt="Image of driver being disabled on Device manager" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Since the touchscreen is not essential to how I use my laptop, I chose to disable it. The names of all the drivers and how they affect your computer are available online, so it is advisable to search first and confirm that what you want to do is safe and achievable before proceeding. &lt;/p&gt;

&lt;p&gt;Always remember that messing with the wrong drivers could have serious consequences, such as losing Wi-Fi connectivity or being unable to use your keyboard. That said, the choice is always yours to make based on your own needs and priorities.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>computerscience</category>
      <category>learning</category>
      <category>software</category>
    </item>
    <item>
      <title>the CSRF token</title>
      <dc:creator>Rouwel Ngacha</dc:creator>
      <pubDate>Mon, 11 May 2026 18:39:13 +0000</pubDate>
      <link>https://dev.to/rrouwelng/the-csrf-token-593p</link>
      <guid>https://dev.to/rrouwelng/the-csrf-token-593p</guid>
      <description>&lt;p&gt;Hello world, my name is rrouwelng and I am here to talk about the CSRF token. &lt;/p&gt;

&lt;p&gt;So, what is a CSRF token? A Cross-Site Request Forgery token is a unique and unpredictable value generated by server-side application. This was developed as a countermeasure to the &lt;strong&gt;Cross-Site Request Forgery attack&lt;/strong&gt; that was first documented in the early 2000's. &lt;/p&gt;

&lt;p&gt;What is a &lt;strong&gt;Cross-Site Request Forgery attack&lt;/strong&gt; ? Allow me to give an example.&lt;/p&gt;

&lt;p&gt;This is Bob,&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%2Fj1lrnh879rc547u6jqnf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1lrnh879rc547u6jqnf.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bob, logs into his bank at &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%2Fulq6a5yw4jutlzwlf5ks.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fulq6a5yw4jutlzwlf5ks.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bob then decided to go read an article at a certain website at &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%2F2vpnks4och1uvcb198l4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vpnks4och1uvcb198l4.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please note that Bob hasn't logged out of his bank account.&lt;/p&gt;

&lt;p&gt;The site &lt;strong&gt;'welikekittens.com'&lt;/strong&gt; is set up by a malicious actor(call him swipper). &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%2Fh6h6xeko47lri6sotot3.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%2Fh6h6xeko47lri6sotot3.png" alt=" " width="478" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The website(welikekittens.com) is set up to send a form that is just a  POST request to Bob's bank website that basically tells it to credit a certain amount of money to the account of the attackers choosing.&lt;/p&gt;

&lt;p&gt;Because of how browsers work, every request(GET, POST or otherwise ) sent from bob's browser to the bank's server has the authentication cookies that Bob was given when he logged into the bank. This includes requests that weren't sent by Bob himself and are being sent by the malicious site.&lt;/p&gt;

&lt;p&gt;To counteract this, Bob's bank decides to use a CSRF-Token. When Bob interacts with the Bank interface, he receives a CSRF token that is embedded on the page. So now, if &lt;strong&gt;welikekittens.com&lt;/strong&gt; tries to send a request from bob's browser, the bank's server checks the form to see if the CSRF token is included in the form. &lt;/p&gt;

&lt;p&gt;Since  it is not included the request is automatically denied because the request doesn't include the CSRF token.  As a bonus because of the Same-Origin Policy(basically means that one website cannot read the contents of another website unless they are from the same host. Feel free to look it up) &lt;strong&gt;welikekittens.com&lt;/strong&gt; is unable to see the token and bob's bank account is safe for now.&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%2F4xb9al3tj93v7o2mr1u1.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%2F4xb9al3tj93v7o2mr1u1.png" alt=" " width="444" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that is CSRF tokens in a nutshell, feel free add or discredit what I have written (with proof of course :) ).&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>cybersecurity</category>
      <category>security</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
