<?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: Andrew Irorere</title>
    <description>The latest articles on DEV Community by Andrew Irorere (@andreyscott).</description>
    <link>https://dev.to/andreyscott</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%2F552414%2F998c5576-670c-4682-a60b-a6647b763415.jpg</url>
      <title>DEV Community: Andrew Irorere</title>
      <link>https://dev.to/andreyscott</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andreyscott"/>
    <language>en</language>
    <item>
      <title>How to DoS A server</title>
      <dc:creator>Andrew Irorere</dc:creator>
      <pubDate>Sat, 17 Jan 2026 20:17:13 +0000</pubDate>
      <link>https://dev.to/andreyscott/how-to-dos-a-server-452h</link>
      <guid>https://dev.to/andreyscott/how-to-dos-a-server-452h</guid>
      <description>&lt;p&gt;&lt;em&gt;disclamer&lt;/em&gt;&lt;br&gt;
This experiment was done in a controlled home lab on systems I own. No real-world systems were harmed. oh and educational purposes only&lt;/p&gt;
&lt;h2&gt;
  
  
  How It Started
&lt;/h2&gt;

&lt;p&gt;Like many people learning cybersecurity, I used to think Denial of Service (DoS) attacks required massive botnets, insane bandwidth, and Hollywood-level hacking. Turns out, it doesn't. All you need is a vulnerable server and a way to exploit that vulnerability. No malware. No exploits. Just bad application design and a can-do attitude.&lt;/p&gt;
&lt;h2&gt;
  
  
  DoS vs DDoS
&lt;/h2&gt;

&lt;p&gt;A DoS attack (Denial of Service) attack uses a single source to overwhelm a target, making it simpler to execute and ultimately block, while DDoS (Distributed Denial of Service) uses a network of compromised devices called a &lt;em&gt;botnet&lt;/em&gt; to generate massive, distributed traffic, making it far harder to detect, mitigate, and more impactful. The key difference is distribution. DoS is one-to-one, while DDoS is many-to-one, leveraging a "distributed" network for greater power and stealth. Since I am using one machine to attack a target Dos&lt;/p&gt;
&lt;h2&gt;
  
  
  The Lab I Built
&lt;/h2&gt;

&lt;p&gt;I set up a small, isolated lab using Oracle VirtualBox&lt;br&gt;
&lt;strong&gt;Kali Linux&lt;/strong&gt; → attacker machine&lt;br&gt;
&lt;strong&gt;Ubuntu Linux&lt;/strong&gt; → target machine&lt;/p&gt;

&lt;p&gt;Both VMs were connected using a Host-only network, so that they could communicate with each other, so nothing was exposed to the internet for security reasons, and most importantly, everything stayed legal and safe. This was the “real” environment: two machines, communicating two roles, one goal.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Vulnerable Server
&lt;/h2&gt;

&lt;p&gt;Let's play a game. Can you spot what is wrong with the Python code below?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from http.server import BaseHTTPRequestHandler, HTTPServer
import time

a = 0

class VulnerableHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        global a
        time.sleep(3)
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(bytes(f"Request processed. Count: {a}", "utf-8"))
        a += 1

def run(server_class=HTTPServer, handler_class=VulnerableHTTPRequestHandler, port=8080):
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    print(f"Starting vulnerable server on port {port}...")
    httpd.serve_forever()

if __name__ == "__main__":
    run()

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

&lt;/div&gt;



&lt;p&gt;Did you see it?&lt;br&gt;
&lt;code&gt;time.sleep(3)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This was added to simulate “heavy processing,” and this single line would become the entire vulnerability. Why is this server vulnerable?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is single-threaded&lt;/li&gt;
&lt;li&gt;Each request blocks for 3 seconds&lt;/li&gt;
&lt;li&gt;No rate limiting&lt;/li&gt;
&lt;li&gt;No concurrency handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it an ideal target for an application-layer DoS attack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting the Server
&lt;/h2&gt;

&lt;p&gt;On Ubuntu, when I run the command&lt;br&gt;
&lt;code&gt;python3 vulnerable_server1.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The server is running on port 8080.&lt;/p&gt;

&lt;p&gt;which I can verify on my Kali by running:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl http://192.168.56.103:8080&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The server should respond correctly, and each request increases the counter.&lt;/p&gt;

&lt;h2&gt;
  
  
  The attack
&lt;/h2&gt;

&lt;p&gt;On Kali, I ran this command:&lt;br&gt;
&lt;code&gt;ab -n 50 -c 10 http://192.168.56.103:8080/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;At first glance, it didn’t look dangerous, but if you look closely, you will see that 50 total requests, 10 requests at a time, which in most development is nothing, but in the test development, almost immediately Responses slowed down, and requests started queuing. The server felt “stuck” I hadn’t flooded the network. and I hadn’t crashed the OS. I had simply asked the server to do more than it was designed to handle.&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%2F8p0c789c20970j2wpbvx.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%2F8p0c789c20970j2wpbvx.png" alt=" " width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Happened
&lt;/h2&gt;

&lt;p&gt;Here’s the problem, since the server is single-threaded, each requests is blocks for 3 seconds&lt;br&gt;
Only one request can be processed at a time, so when 10 requests arrive simultaneously. &lt;br&gt;
One request ran while the other 9 waited.d New requests piled on top. This wasn’t a bandwidth attack. It was an application-layer DoS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watching the Attack in Wireshark
&lt;/h2&gt;

&lt;p&gt;As a Bonus and to truly understand what was happening, I opened Wireshark on my Kali Linux and captured traffic during the attack.&lt;/p&gt;

&lt;p&gt;I applied this filter:&lt;br&gt;
&lt;code&gt;ip.addr == 192.168.56.103 &amp;amp;&amp;amp; tcp.port == 8080&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;What I saw:&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%2Fcdptnhbcgw5xdrnvj1cm.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%2Fcdptnhbcgw5xdrnvj1cm.png" alt=" " width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repeated HTTP GET requests&lt;/li&gt;
&lt;li&gt;Delayed responses&lt;/li&gt;
&lt;li&gt;TCP retransmissions&lt;/li&gt;
&lt;li&gt;Congestion builds up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the real world, this kind of vulnerability exists in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal tools&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Microservices&lt;/li&gt;
&lt;li&gt;Custom dashboards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Attackers don’t always break things. Sometimes they just wait for your code to break itself, such a vulnerability would never make it way to production, and if it did, it would be fixed or patched almost immediatialy but still this makes for a good learning exercise.&lt;/p&gt;

&lt;p&gt;This could have been prevented by using async or multi-threaded servers, adding rate limiting and or placing a reverse proxy (like Nginx) &lt;/p&gt;

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

&lt;p&gt;Breaking my own server was one of the most valuable lessons I’ve learned so far. It showed me how application-layer DoS really works, why design choices matter and what attack traffic actually looks like. If you’re learning cybersecurity, I highly recommend building labs like this. They’re safe, legal, and incredibly eye-opening.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Add on&lt;/em&gt;, I made this blog post without a plan on how to finish it I also tested out, and http spray DoS attack, but the blog was getting too long for that. If you want to check out the tool, it's on my github. I'm planning on improving it later in the coming days if I ever get the time to do that&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>programming</category>
      <category>security</category>
      <category>linux</category>
    </item>
    <item>
      <title>Inspecting SSL Traffic Using FortiGate</title>
      <dc:creator>Andrew Irorere</dc:creator>
      <pubDate>Sun, 04 Jan 2026 20:11:55 +0000</pubDate>
      <link>https://dev.to/andreyscott/inspecting-ssl-traffic-using-fortigate-22jn</link>
      <guid>https://dev.to/andreyscott/inspecting-ssl-traffic-using-fortigate-22jn</guid>
      <description>&lt;p&gt;&lt;em&gt;Secure Sockets Layer&lt;/em&gt; (SSL) is a critical feature in modern networks which rely heavily on encrypted communication. Today, over 90% of web traffic is encrypted using SSL/TLS, which protects sensitive information, including credentials, financial data, and personal records. While encryption provides privacy and security for users, it also introduces a major challenge for security teams as threats are now hidden inside encrypted traffic.&lt;/p&gt;

&lt;p&gt;In the blog/article, we are going to be talking about &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Why SSL traffic must be inspected&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How SSL inspection works&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How FortiGate performs SSL inspection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Step-by-step configuration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security, privacy, and performance considerations&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is SSL Inspection 🧩
&lt;/h2&gt;

&lt;p&gt;SSL Inspection is the process of decrypting encrypted traffic, inspecting it for threats, and re-encrypting it before forwarding it to the intended destination.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Types of SSL Inspection&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Certificate&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inspect the SSL/TLS handshake&lt;/li&gt;
&lt;li&gt;Verifies the identity of the web server&lt;/li&gt;
&lt;li&gt;Used in web filtering &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%2F2a3g77agu3f5367ju781.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%2F2a3g77agu3f5367ju781.png" alt=" " width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deep Inspection&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decrypts incoming traffic to inspect it &lt;/li&gt;
&lt;li&gt;If safe, re-encrypts the traffic and sends it to the recipients&lt;/li&gt;
&lt;li&gt;Used with all types of security scanning&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%2Fzn27riv1meiq48hbj4ze.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%2Fzn27riv1meiq48hbj4ze.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why SSL traffic must be inspected 🤖
&lt;/h2&gt;

&lt;p&gt;HTTPS offers protection by applying encryption to web traffic; however, it also introduces a potential security risk because attackers may attempt to use encrypted traffic to get around your network's normal defences. Attackers use HTTPS to bypass traditional security controls. Without SSL inspection, Malware downloads appear as normal HTTPS sessions, and phishing pages load without detection. SSL inspection allows security devices to decrypt, inspect, and re-encrypt traffic in real-time.&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%2Firw3li09i4yvnkzmty2k.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%2Firw3li09i4yvnkzmty2k.png" alt=" " width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Moreover&lt;/strong&gt;, Zero-Trust &amp;amp; Modern Security Models Require Visibility. Security models depend on continuous verification and inspection. Without SSL visibility, the security stack cannot: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apply antivirus scanning&lt;/li&gt;
&lt;li&gt;Enforce content filtering&lt;/li&gt;
&lt;li&gt;Detect intrusion signatures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
Client → Encrypted Traffic → FortiGate → Decrypt → Inspect → Re-Encrypt → Server&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How FortiGate Performs SSL Inspection
&lt;/h2&gt;

&lt;p&gt;FortiGate acts as a trusted intermediary between client and server using a controlled Man-in-the-Middle (MITM) approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Client initiates HTTPS connection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FortiGate intercepts the handshake&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FortiGate presents its own certificate to the client&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FortiGate establishes a secure session with the server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Traffic is decrypted inside FortiGate&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security profiles inspect traffic&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Traffic is re-encrypted and forwarded&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is possible only if client devices trust FortiGate’s CA certificate.&lt;/p&gt;
&lt;h2&gt;
  
  
  Certificate Warnings ⚠️
&lt;/h2&gt;

&lt;p&gt;A common challenge when deploying Full SSL Inspection is the appearance of certificate warnings on client devices. These warnings occur because FortiGate dynamically generates certificates for each HTTPS site and signs them using its own internal Certificate Authority (CA). If the client device does not trust this CA, the browser interprets the connection as untrusted and displays warnings such as “Your connection is not private.” From the browser’s perspective, this looks identical to a malicious man-in-the-middle attack, even though it is a legitimate enterprise security process.&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%2Fwzzw4mdy9vo6pnvbvq2r.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%2Fwzzw4mdy9vo6pnvbvq2r.png" alt=" " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To eliminate these warnings, the FortiGate CA certificate must be exported from the firewall and installed into the Trusted Root Certification Authorities store on all client devices (Windows, macOS, mobile devices, and in some cases, individual browsers). Once the CA is trusted, browsers accept the dynamically generated certificates without errors and encrypted traffic can be inspected transparently. This step is mandatory for any stable SSL inspection deployment.&lt;/p&gt;
&lt;h2&gt;
  
  
  Configuration Walkthrough: FortiGate GUI
&lt;/h2&gt;

&lt;p&gt;Step 1: Create SSL Inspection Profile&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%2Fgbu9k931ljd1wgdystag.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%2Fgbu9k931ljd1wgdystag.png" alt=" " width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Security Profiles → SSL/SSH Inspection → Create New&lt;br&gt;
Choose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Full SSL Inspection for high security&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Certificate Inspection for lightweight environments&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enable:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;HTTPS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SMTPS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FTPS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;POP3S / IMAPS (if required)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Install FortiGate CA Certificate on Clients&lt;/strong&gt;&lt;br&gt;
System → Certificates → Export Fortinet_CA_SSL&lt;br&gt;
Install certificate in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Windows Trusted Root Certification Authorities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;macOS Keychain&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mobile Device MDM&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Browser trust store (if needed)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-Without this step, users will receive certificate warnings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Apply SSL Inspection in Firewall Policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Policy &amp;amp; Objects → Firewall Policy → Edit Policy&lt;br&gt;
Under Security Profiles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enable SSL Inspection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select your created SSL profile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable AV, IPS, Web Filter, Application Control, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Traffic flow now becomes fully inspectable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Configuring SSL Inspection in Firewall Policy 🪛
&lt;/h2&gt;

&lt;p&gt;Why It Matters: SSL inspection does nothing until applied to a firewall policy. This is where enforcement actually happens.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Policy Example
Source: Internal Network
Destination: Internet
Service: HTTPS
Action: Accept
Security Profiles: Enabled
SSL Inspection Profile: Full_SSL_Inspection

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

&lt;/div&gt;



&lt;p&gt;This ensures every HTTPS session passing through that policy is inspected.&lt;br&gt;
You can also create exceptions for certain conditions, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Bypass inspection for banking sites&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exempt healthcare portals&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exclude sensitive internal systems&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best practices 🚔
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Use hardware acceleration (CP9 / NP6 / NP7 chips)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apply inspection only where necessary&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid decrypting low-risk traffic&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Monitor system resources&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Encrypted traffic is now the dominant carrier of modern cyber threats. Without SSL inspection, organisations operate blind to the majority of malicious activity on their networks.&lt;br&gt;
FortiGate’s SSL inspection capabilities provide the visibility and control required to defend against modern attack techniques when implemented responsibly, securely, and efficiently.&lt;br&gt;
By combining proper configuration, performance tuning, legal compliance, and best practices, security teams can fully leverage SSL inspection as a powerful defence mechanism in today’s threat landscape.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>cybersecurity</category>
      <category>cloud</category>
      <category>firewall</category>
    </item>
    <item>
      <title>Flutter State Management for Rookies</title>
      <dc:creator>Andrew Irorere</dc:creator>
      <pubDate>Tue, 11 Feb 2025 12:44:33 +0000</pubDate>
      <link>https://dev.to/andreyscott/state-management-in-dart-flutter-in-2025-3acp</link>
      <guid>https://dev.to/andreyscott/state-management-in-dart-flutter-in-2025-3acp</guid>
      <description>&lt;p&gt;When it comes to state management in Flutter, I believe there are only three ways to do it: the right way, the smart way, and my way. That's what I'm here to discuss. State management is one of the most important concepts of Flutter. It defines how an app’s data changes over time and how different widgets and UI grow and interact. Before we begin, let's discuss the basics so that we are all on the same Page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fluter 101 😒
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Flutter&lt;/em&gt; is an open-source cross-platform Framework think of React Native but better.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;State&lt;/em&gt; pretty much refers to the current condition or data of an application at any given moment.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Management&lt;/em&gt; is the act of managing something.&lt;/p&gt;

&lt;p&gt;I don't have any plans for Valentine's day 💔 just putting that out there.&lt;/p&gt;

&lt;p&gt;State management in Dart and Flutter is all about managing the data that the app will render and how it will respond to user input. It’s about tracking changes to the state and updating the UI to reflect these changes. Understanding this concept is the first step towards mastering state management.&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%2Fzmxb9u6p2b2c9huys0e0.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%2Fzmxb9u6p2b2c9huys0e0.png" alt="joke meme" width="500" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's important to note that Flutter is declarative. Now what does that mean? It means that Flutter builds its user interface to reflect the current state of the app. When the state of the app changes (for example, the user flips a switch in the settings screen), you change the state, and that triggers a redraw of the user interface. There is no imperative changing of the UI itself (like.widget.setText) you change the state, and the UI rebuilds from scratch. Now, the Declarative state model is further classified into &lt;strong&gt;Ephemeral State&lt;/strong&gt; (local state) and &lt;strong&gt;App State&lt;/strong&gt; (global state) but let's not get too technical&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%2F642j4su37szjdgst05et.gif" 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%2F642j4su37szjdgst05et.gif" alt="working on it dev" width="498" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Manage state 😎
&lt;/h2&gt;

&lt;p&gt;&lt;del&gt;The Right Way&lt;/del&gt;&lt;br&gt;
Flutter comes with &lt;code&gt;setState()&lt;/code&gt; for basic state updates. It is the most basic form of state management in Flutter.  It's like the trusty Swiss Army knife of state management – useful for simple tasks. You would use it in a StatefulWidget by calling &lt;code&gt;setState()&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;int _counter = 0;

void _incrementCounter() {
  setState(() {
    _counter++;
  });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, for more complex apps, &lt;code&gt;setState()&lt;/code&gt; can become unwieldy. Imagine using a Swiss Army knife to build a house – doable, but you'd probably want a proper toolbox. it's best suited for simple and localized state not meant to be shared across widgets.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Smart way 🤓
&lt;/h2&gt;

&lt;p&gt;There are several techniques for managing State in Flutter Each of them having significant strengths and weaknesses some of the most effective ways of state management approaches in Flutter include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Provider&lt;/strong&gt; 🪛: A simple and flexible package that makes state accessible throughout your widget tree. This is a mixture of dependency injection (DI) and state management, built with widgets for widgets. It’s a powerful and flexible way to manage state in Flutter. Think of it like having a shared whiteboard where everyone can see and update the state.&lt;/p&gt;

&lt;p&gt;📝sidebar: &lt;em&gt;Dependency Injection (DI) is a design pattern in programming that helps you write more modular, testable, and maintainable code.  Think of it as instead of a class creating its own dependencies (like a car building its engine), it receives those dependencies from the outside (like the engine being delivered to the car factory).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Provider wraps the InheritedWidget and hence makes state changes easier. It is one of the most suggested and prevalent approaches. Mostly used with medium to large apps for sharing app state in multiple widgets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BLoC (Business Logic Component)&lt;/strong&gt; 🧱: It’s a library that allows for predictable state management. It separates the business logic from the UI, where the state changes are managed through streams. making your code cleaner and easier to test. It's like having a dedicated team handling the data, while the UI team focuses on displaying it.&lt;/p&gt;

&lt;p&gt;This is mostly used in large-scale apps where one wants a clean separation of concerns and has to deal with complex state transitions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Riverpod&lt;/strong&gt; 🤖: A compile-safe and testable alternative to Provider. Think of it as Provider 2.0, it's an advanced version of Provider. In some sense, it’s designed to overcome some limitations of Provider while adding better flexibility and testability.&lt;/p&gt;

&lt;p&gt;Perfect for complex applications that require a robust and scalable state management solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GetX&lt;/strong&gt; ❎: It provides high performance and is used when the app requires a large UI update. it is very simple and easy and offers state management, dependency injection, and route management together in just one package.&lt;/p&gt;

&lt;p&gt;Best for small and medium apps. Use if you need a really fast and easy solution with just a bit of boilerplate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing State Management 👽
&lt;/h2&gt;

&lt;p&gt;Once you’ve chosen a state management technique, the next step is to implement it in your app. This involves creating a state object, updating the state, and listening for state changes. For example, if you’re using the Provider technique, you would create a ChangeNotifierProvider and use the Consumer widget to listen for changes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

// Model to hold the counter value
class CounterModel extends ChangeNotifier {
  int _count = 0;
  int get count =&amp;gt; _count;

  void increment() {
    _count++;
    notifyListeners(); // Important: Notify listeners of the change
  }
}

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (context) =&amp;gt; CounterModel(), // Create the model
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: CounterScreen(),
    );
  }
}

class CounterScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Provider Counter')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: &amp;lt;Widget&amp;gt;[
            Text(
              'Count:',
              style: TextStyle(fontSize: 24),
            ),
            // Consumer rebuilds only when the count changes
            Consumer&amp;lt;CounterModel&amp;gt;(
              builder: (context, counter, child) {
                return Text(
                  '${counter.count}',
                  style: TextStyle(fontSize: 48, fontWeight: FontWeight.bold),
                );
              },
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // Access the model and increment
          Provider.of&amp;lt;CounterModel&amp;gt;(context, listen: false).increment();
        },
        child: Icon(Icons.add),
      ),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Testing your State Management 🧪
&lt;/h2&gt;

&lt;p&gt;After implementing state management, it’s important to test it to ensure it’s working as expected. This involves creating unit tests, widget tests, and integration tests. Testing is a crucial part of the development process, ensuring that your code works correctly and helping to prevent bugs and errors.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
void main() {
  test('should increment counter', () {
    final myModel = MyModel();
    myModel.increment();
    expect(myModel.counter, 1);
  });
}

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Choosing a Flutter State Management Approach 🚛
&lt;/h2&gt;

&lt;p&gt;Choosing the right state management approach depends on several factors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The complexity of an App: Is your app complex? If it is simple, then setState will do. For medium to higher-complexity apps, though, you need a stronger method, such as Bloc or Riverpod.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability: Think about how your approach will scale when your app grows. Provider and Riverpod are highly scalable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ease of use: Now, if you are on the search for something easy to implement and fast, then comes into play GetX with its simplicity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Community support: It helps to have the approach that has the community — behind with good documentation. Provider is very well documented, and it has a large community due to being a part of the Flutter ecosystem.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Some Mobile Development Jokes (Because Why Not?) 🃏
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Why did the Flutter developer bring a ladder to the project meeting? Because they heard the app needed to be cross-platform!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What's the difference between a good programmer and a bad programmer? The good one worries about the code, and the bad one worries about the deployment. (And the Flutter developer worries about both, while also trying to figure out why the layout is breaking on Android)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion 💁🏽‍♂️
&lt;/h2&gt;

&lt;p&gt;State management might seem daunting at first, but it's a crucial skill for any Flutter developer. It allows you to create more efficient, scalable, and maintainable apps. While it can be challenging to grasp at first, with practice and understanding, you can become proficient in it.  By understanding the basics and exploring different solutions, you can tame the widget zoo and build robust, performant apps. Remember, the key to mastering state management is understanding the concept, choosing the right technique, implementing it correctly, testing it thoroughly, and optimizing it for the best performance.&lt;/p&gt;

&lt;p&gt;PS: What's your Valentine plan if any?&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>mobile</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why is Python so Slow?</title>
      <dc:creator>Andrew Irorere</dc:creator>
      <pubDate>Fri, 05 Apr 2024 20:36:11 +0000</pubDate>
      <link>https://dev.to/andreyscott/why-is-python-so-slow-3go4</link>
      <guid>https://dev.to/andreyscott/why-is-python-so-slow-3go4</guid>
      <description>&lt;p&gt;Why is Python so slow, I know a lot of people expect me to shit all over Python but that's not what this post is all about sure I could talk about how stupid it's for having indentation instead of curly braces, or the ugly, built-in global functions. and don't even get me started on all the multiple Python versions. but I'm not even going to mention it. cause at the end of the day Python is still a beloved programming language for its readability, vast libraries, and beginner-friendly syntax. &lt;/p&gt;

&lt;p&gt;However, what most developers don't know is that Python can take a backseat to languages like C++ when it comes to raw speed. But why exactly is this the case? Well, that's why you are here.&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%2Fcn5ynmjk2qohn2iu7onv.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%2Fcn5ynmjk2qohn2iu7onv.PNG" alt="Funny memes about python" width="771" height="826"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Context&lt;/em&gt;&lt;br&gt;
Before talking about why Python is so slow, I feel it's important to know just how slow Python is Compared to other programming languages. An easy way would be to write a function that counts from one to one billion and track how long each language takes to complete the task. let's say we decide to use C++ and Python for this. well assuming all parameters are the same it would take 2.6 seconds for the C++ code and 1 minute 53 seconds for the Python code approximately 50 times slower. There's &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%2Fms4b9eq6bbwlrsrcx9q0.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%2Fms4b9eq6bbwlrsrcx9q0.PNG" alt="More memes" width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But why exactly is this the case? Let's dive into the three main reasons:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1 Interpretation vs Compilation
&lt;/h2&gt;

&lt;p&gt;Unlike compiled languages that are converted directly into machine code, Python is interpreted. This means the code is executed line by line instead of translating into machine code before executing, adding an extra layer of processing compared to pre-compiled instructions. There are plenty of tests out there but this paints a clear picture&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Benefits:&lt;br&gt;
Faster development cycle: Changes in the code are reflected immediately without recompiling.&lt;br&gt;
Portability: Interpreted code can run on any machine with the interpreter installed, regardless of the underlying architecture.&lt;/p&gt;

&lt;p&gt;Drawbacks:&lt;br&gt;
Generally slower: The translation overhead adds extra processing time compared to pre-compiled machine code.&lt;br&gt;
Limited control: Less control over memory management and hardware interaction compared to compiled languages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2 Dynamic Typing
&lt;/h2&gt;

&lt;p&gt;Python is dynamically typed, meaning variable data types are determined at runtime. While this offers flexibility, it requires extra checks during execution to ensure data compatibility whereas Statically typed languages, where types are declared upfront, can be optimized more efficiently.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Benefits of Dynamic Typing:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Rapid Prototyping: You can experiment with different data types without worrying about type declarations, allowing for quicker exploration during development.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Drawbacks of Dynamic Typing:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Potential Performance Overhead: Runtime type checks can add a slight overhead compared to statically typed languages where types are known beforehand.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Global Interpreter Lock (GIL)
&lt;/h2&gt;

&lt;p&gt;Python's GIL ensures only one thread can execute Python bytecode at a time. This prevents race conditions (multiple threads trying to modify data simultaneously) but limits true parallel processing capabilities.&lt;/p&gt;

&lt;p&gt;What is the GIL?&lt;/p&gt;

&lt;p&gt;Imagine a playground with a single swing. The GIL is like that swing – only one person(thread) can be on it (executing Python bytecode) at a time. Even if you have a fancy playground with multiple swings (multiple CPU cores), the GIL restricts threads to take turns on a single one.&lt;/p&gt;

&lt;p&gt;Impact of the GIL:&lt;/p&gt;

&lt;p&gt;Limits True Parallelism: Python programs can't fully use multi-core processors for CPU-bound tasks because only one thread can execute Python bytecode at a time.&lt;/p&gt;

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

&lt;p&gt;Now, before you completely write off Python for performance-critical tasks, here's the truth of the matter&lt;/p&gt;

&lt;p&gt;Speed Isn't Always King. Often, development speed and programmer productivity outweigh raw execution time. Python's ease of use can lead to faster development cycles. while optimizations and Libraries techniques like profiling (identifying bottlenecks) and using optimized libraries like NumPy for numerical computing can significantly improve Python's performance.&lt;br&gt;
Also in the case of multiprocessing, While the GIL limits true multithreading, Python offers multiprocessing, where separate processes can leverage multiple cores for tasks that can be broken down independently.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Extras&lt;/em&gt; ✨&lt;br&gt;
As some of you could have guessed I'm pretty new to this writing not coding and I write about whatever idea pops into my head I'm pretty sure this is probably my third blog post ever so I would appreciate some feedback. Just make sure they are constructive nothing about my height or the fact I'm still single &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>python</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>The 9 types of Programmers in 2024</title>
      <dc:creator>Andrew Irorere</dc:creator>
      <pubDate>Sat, 30 Mar 2024 20:58:01 +0000</pubDate>
      <link>https://dev.to/andreyscott/the-9-types-of-programmers-in-2024-294l</link>
      <guid>https://dev.to/andreyscott/the-9-types-of-programmers-in-2024-294l</guid>
      <description>&lt;p&gt;Ah, programmers. The backbone of the digital age, and the unseen weavers of our online world. An offshoot of the Great Ape family closely related to humans usually distinguished by their bad postures, anti-social tendency and their ability to solve any problem using Google, just don't ask them to fix your printer. Within this vast tribe, there lurks a delightful diversity, each easily identifiable coding styles and personalities.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Full-stack Developer
&lt;/h2&gt;

&lt;p&gt;Fueled by copious amounts of cold brew and an ever-growing stack of hoodies, this programmer is typically a back-end developer who learnt how to centre a div. He now prides himself on being a master of both Frontend and backend and everything in between. Their workspace? A cluttered coffee shop where the only constant is the frantic clatter of their keyboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Bros and Tech Baes
&lt;/h2&gt;

&lt;p&gt;This programmer is the archetype that launched a thousand memes. They embody a certain brand of bravado, often sporting expensive gadgets and the latest tech apparel like the Apple Vision Pro, Big curve monitors, Standing Desk and mechanical keyboards. often the first one to use the newest and most trending piece of tech in the market. They might drop tech buzzwords liberally and have an inflated sense of their importance. But, beneath the bravado often lies a genuine passion for technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Hater
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftglh4ro3l8qdn455w9ee.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%2Ftglh4ro3l8qdn455w9ee.jpg" alt=" " width="500" height="375"&gt;&lt;/a&gt;&lt;br&gt;
This is a type of programmer who knows how unreliable &amp;amp; dangerous some technology can be and feels like AI is someday going to take their job. They mostly use Linux and spend a significant amount of time building software that the average developer has never heard of you will never find much about them online cause they are mostly security conscious and go to great lengths to hide their digital footprint can be found using 5 VPNs at a time and they usually have a surprising ability in Hacking.&lt;/p&gt;

&lt;h2&gt;
  
  
  The DevOps
&lt;/h2&gt;

&lt;p&gt;This is a programmer who appears to have no particular skills in the sense that no one knows much about what they do but they are usually in every team and are mostly your boss all we know is that this programmer thrives in chaos. They can troubleshoot server crashes with ninja-like reflexes and automate entire workflows with a single script. maybe that's why they are always so smug.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Introvert
&lt;/h2&gt;

&lt;p&gt;This is the Hollywood cliche programmer variant and most times it's mostly spot on this is the type of programmer with little to no social skills and pretty much spends their entire free time coding and playing video games and is usually blessed with exceptional coding. In the 1990s people like this were bullied at school for being nerds but now thanks to the magic of the internet they have high-paying jobs and girlfriends who love them and not because they are now rich.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Codefluencer
&lt;/h2&gt;

&lt;p&gt;Its natural habitat is not a code editor like VsCode or an open-source platform like GitHub but a social media platform most likely Twitter after spending a day learning how to display Hello World in HTML this type of programmer thinks they are the best in the world and tries to makes the world a better place by posting memes and hot takes all day long and they probably will end up with a higher paying job than you as a "developer Associate" because he masters the act of virtue-signalling. not to be mistaken for &lt;/p&gt;

&lt;h2&gt;
  
  
  The AI-Powered Programmer
&lt;/h2&gt;

&lt;p&gt;Over the past few years, Artificial Intelligence has completely changed how things are done in the modern world and no one knows this more than the AI-powered programmer most of them are even all for it they use the best and latest AI tools available like GitHub-copilot, Chat GPT, Gemini and so on. And with that, they can do their job five times faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 10x Developer
&lt;/h2&gt;

&lt;p&gt;There's a legend whispered among programmers of the mythical 10x developer. This elusive creature is a rare breed said to be ten times more productive than the average dev, churning out flawless code at lightning speed! Some say they're a myth, others pretend to be them but their natural problem-solving ability and their knowledge of codebase transcends beyond that of normal devs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Ancient Coder
&lt;/h2&gt;

&lt;p&gt;The last of its kind some say there are only about 900 left in the world imagine a developer that is so old they saw the fall of the Roman empire, this particular type of developer is usually older than the internet and has Long silver hair with a big white beard like  Gandalf the grey only codes in C or Assembly their favourite IDE is VIM and their Depth of knowledge transcends that of normal human; which is rumoured to have been discovered through psychedelics that are no longer available today.&lt;/p&gt;

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

&lt;p&gt;so what do you think of these types of developers and how many have you meant in person? If you feel like I missed one let me know in the comments.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>programming</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to PWA you App like a pro</title>
      <dc:creator>Andrew Irorere</dc:creator>
      <pubDate>Sat, 23 Mar 2024 21:24:32 +0000</pubDate>
      <link>https://dev.to/andreyscott/how-to-pwa-you-app-like-a-pro-3hod</link>
      <guid>https://dev.to/andreyscott/how-to-pwa-you-app-like-a-pro-3hod</guid>
      <description>&lt;p&gt;Hello gang welcome to the place where you are currently reading this so I'm going to be talking about how to turn your React or Next.js app into a PWA which as I'm sure you know stands for Progressive web app.&lt;/p&gt;

&lt;p&gt;Progressive Web Apps (PWAs) have become a game-changer in the world of web development. They offer the best of both worlds: the accessibility of a website and the capabilities of a native mobile app.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Progressive Web App?
&lt;/h2&gt;

&lt;p&gt;some of you might be wondering what's a PWA? well, google that sh*t what do you think this is? introduction to Computer Science instead here are some of the reasons why you should PWA your website&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Reliable: They work offline and in low network conditions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fast: They load quickly and respond faster to user interactions smoothly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Engaging: They provide a rich, app-like experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Discoverable: They can be easily indexed by search engines. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps to Transform Your Next.js App into a PWA
&lt;/h2&gt;

&lt;p&gt;Some Prerequisites:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A Next.js Project&lt;/li&gt;
&lt;li&gt;next-pwa Installed&lt;/li&gt;
&lt;li&gt;A Manifest.json file&lt;/li&gt;
&lt;li&gt;Configured next.config.js&lt;/li&gt;
&lt;li&gt;Service Worker&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Creating a Next.js project
&lt;/h2&gt;

&lt;p&gt;Now create a Next.js project I believe in you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install the PWA dependency:
&lt;/h2&gt;

&lt;p&gt;Some libraries simplify the PWA setup process for Next.js. A popular option is next-pwa. You can install it using npm, yarn or whatever you think makes your life easier.&lt;br&gt;
&lt;code&gt;yarn add next-pwa&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a manifest file:
&lt;/h2&gt;

&lt;p&gt;The manifest file provides information about your PWA, including its name, icons, and theme colour. You can create a manifest.json file in your project's root directory with details like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
  "short_name": "My PWA",&lt;br&gt;
  "name": "My Progressive Web App",&lt;br&gt;
  "icons": [&lt;br&gt;
    {&lt;br&gt;
      "src": "/icons/icon-72x72.png",&lt;br&gt;
      "sizes": "72x72",&lt;br&gt;
      "type": "image/png"&lt;br&gt;
    },&lt;br&gt;
    // Add icons for different sizes&lt;br&gt;
  ],&lt;br&gt;
  "start_url": "/",&lt;br&gt;
  "display": "standalone",&lt;br&gt;
  "theme_color": "#007bff",&lt;br&gt;
  "background_color": "#fafafa"&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
you can also add a description and pay attention to the image sizes &lt;/p&gt;

&lt;h2&gt;
  
  
  Configure next.config.js
&lt;/h2&gt;

&lt;p&gt;in your Next.js config file, import and configure next-pwa.&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%2Fcrdbuup13plq8c00j3q6.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%2Fcrdbuup13plq8c00j3q6.PNG" alt=" " width="515" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note strict mode might be optional. After running next build, this will generate two files in your public: workbox-*.js and sw.js, which will automatically be served statically.&lt;/p&gt;

&lt;p&gt;**If you didn't use the next-pwa commands then you will have to register the service worker manually which is a drag *&lt;/p&gt;

&lt;h2&gt;
  
  
  Extras
&lt;/h2&gt;

&lt;p&gt;Add an Offline Access Page (Optional):&lt;/p&gt;

&lt;p&gt;For a better user experience offline, you can create a custom page (/offline.html) that displays when the network is unavailable.&lt;/p&gt;

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

&lt;p&gt;Now you have a working PWA app once deployed you can validate your PWA with Next.js using dev tools in the lighthouse. you can also add push notifications but that's for another blog maybe😉;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;About the Author&lt;/em&gt;&lt;br&gt;
I'm Andrey and I wrote this blog because I remember trying to do this myself some years ago and all the resources I could find were either outdated or specific to react.js this is my first Blog post ever so tell me what you think.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>nextjs</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Hello world</title>
      <dc:creator>Andrew Irorere</dc:creator>
      <pubDate>Sun, 03 Jan 2021 12:07:41 +0000</pubDate>
      <link>https://dev.to/andreyscott/hello-world-2o7f</link>
      <guid>https://dev.to/andreyscott/hello-world-2o7f</guid>
      <description>&lt;p&gt;Currently looking for a paying job.&lt;br&gt;
I'm mainly a front-end javascript developer &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>career</category>
      <category>react</category>
      <category>html</category>
    </item>
  </channel>
</rss>
