<?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: İbrahim SEZER</title>
    <description>The latest articles on DEV Community by İbrahim SEZER (@ibrahimsezer).</description>
    <link>https://dev.to/ibrahimsezer</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%2F2899409%2Fa82147d5-bb5b-4193-8b13-0bb2363959a2.png</url>
      <title>DEV Community: İbrahim SEZER</title>
      <link>https://dev.to/ibrahimsezer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ibrahimsezer"/>
    <language>en</language>
    <item>
      <title>The Day the Internet Died: What kind of world would digital silence bring about?</title>
      <dc:creator>İbrahim SEZER</dc:creator>
      <pubDate>Fri, 30 Jan 2026 15:25:58 +0000</pubDate>
      <link>https://dev.to/ibrahimsezer/the-day-the-internet-died-what-kind-of-world-would-digital-silence-bring-about-obh</link>
      <guid>https://dev.to/ibrahimsezer/the-day-the-internet-died-what-kind-of-world-would-digital-silence-bring-about-obh</guid>
      <description>&lt;p&gt;If the world were to wake up to a morning without the internet, the first sensation would be a deafening digital silence—like blood draining from the veins of the modern age—followed immediately by global panic. As the instant data flow of stock markets is cut off, financial systems would lock up in seconds; the fear of empty shelves would loom as logistics networks collapse, and everyone from ships in the middle of the ocean to couriers in city traffic would lose their way and drift into chaos as GPS signals became useless. While the noise of social media is replaced by the rumor mill born of uncertainty, people would pour into the streets in the void created by screens that no longer light up with notifications, driven by the desperation of being unable to access their funds or hear from distant loved ones. Yet, amidst the dust and smoke of this technological apocalypse, humanity might remember the long-forgotten reflex of "knocking on a neighbor's door," entering a process of reacquaintance that is slower and harder, but inherently much more physical and mandatory, forcing us to look into each other's eyes instead of the cold light of a screen.&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%2F8h6xfvbcrlnn0bg1k6px.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%2F8h6xfvbcrlnn0bg1k6px.png" alt="Knowledge is offline" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This digital silence would bring with it a shattering identity crisis within the individual's inner world; as "like" counts and filtered lives suddenly lose their meaning, people would face the nakedness of being unable to hide behind their digital avatars. Our attention, constantly fragmented by a stream of notifications, would give way to a jarring necessity for focus; minds going into dopamine withdrawal would be forced to rediscover that boredom is actually the seed of creativity and genuine conversation. As no one lives to eat or travel just "so others can see," but rather to experience it for themselves, social status would vanish from virtual vitrines, transforming back into a human condition based on trust, verbal communication, and eye contact—slower, perhaps, but far more authentic.&lt;/p&gt;

&lt;p&gt;Over to You&lt;br&gt;
Now, I turn the question to you. If we pulled the plug tomorrow, what is the very first thing you would do? Would you panic, or would you feel a strange sense of relief? And perhaps the scariest question for us developers: How would we survive without access to documentation or Stack Overflow?&lt;/p&gt;

&lt;p&gt;Share your "offline survival scenarios" in the comments below!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>programming</category>
    </item>
    <item>
      <title>How I Built a High-Performance CS2 Leaderboard Using Antigravity &amp; GitHub Actions 🚀</title>
      <dc:creator>İbrahim SEZER</dc:creator>
      <pubDate>Sat, 24 Jan 2026 14:08:57 +0000</pubDate>
      <link>https://dev.to/ibrahimsezer/how-i-built-a-high-performance-cs2-leaderboard-using-antigravity-github-actions-31o7</link>
      <guid>https://dev.to/ibrahimsezer/how-i-built-a-high-performance-cs2-leaderboard-using-antigravity-github-actions-31o7</guid>
      <description>&lt;p&gt;As developers, we often over-engineer. We reach for React, a Node.js backend, and a PostgreSQL database before we even define the problem. For my latest project—a Counter-Strike 2 Leaderboard—I decided to go the opposite way: Lean, Mean, and Blazing Fast.&lt;/p&gt;

&lt;p&gt;I wanted to build a platform that tracks player stats, rankings, and match history without paying a dime for hosting or managing a heavy backend.&lt;/p&gt;

&lt;p&gt;🚀 Live Demo: &lt;a href="//ibrahimsezer.github.io/cs2-leaderboard"&gt;ibrahimsezer.github.io/cs2-leaderboard&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;💻 Source Code: &lt;a href="//github.com/ibrahimsezer/cs2-leaderboard"&gt;github.com/ibrahimsezer/cs2-leaderboard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧐 The Challenge: Dynamic Data on a Static Budget&lt;br&gt;
Leaderboards are inherently dynamic. Ratings change after every match. Usually, this requires a database. However, I wanted to leverage GitHub Pages for hosting.&lt;/p&gt;

&lt;p&gt;The solution? Treating my repository as a database using JSON and automating the "write" process with GitHub Actions.&lt;/p&gt;

&lt;p&gt;🛠️ The Tech Stack&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: (React + Tailwind CSS + Vite). &lt;/li&gt;
&lt;li&gt;Backend : Python for data parse.&lt;/li&gt;
&lt;li&gt;Steam WEB API 

&lt;ul&gt;
&lt;li&gt;steam documents : &lt;a href="https://steamcommunity.com/dev" rel="noopener noreferrer"&gt;Check it out&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;IDE : Antigravity&lt;/li&gt;
&lt;li&gt;Data Storage: Structured data.json files.&lt;/li&gt;
&lt;li&gt;Automation: GitHub Actions for scheduled data fetching.&lt;/li&gt;
&lt;li&gt;Styling: Custom CSS with a "Steam/Valve" inspired aesthetic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🎨 UI/UX: Designed for Gamers&lt;br&gt;
I wanted the leaderboard to feel like an extension of the CS2 game menu. This meant high-contrast typography, dark themes, and subtle gradients.&lt;/p&gt;

&lt;p&gt;Responsive Design&lt;br&gt;
Gamers check stats on their phones during match breaks. I used a mobile-first approach to ensure the tables scale beautifully on any device.&lt;/p&gt;

&lt;p&gt;⚙️ How It Works: The "Static-Dynamic" Loop&lt;br&gt;
The magic happens in three steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Data Fetcher
Instead of the client (the browser) calling heavy APIs, a GitHub Action runs on a schedule (Cron job). It fetches the latest player data and updates the leaderboard.json file in the repo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;for workflow update-stats.yml&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Update Stats &amp;amp; Deploy to Pages

on:
  schedule:
    #- cron: '0 */12 * * *'
    - cron: '0 */6 * * *' 
    #- cron: '0 0 * * *' # Her gece çalışır
  workflow_dispatch:      # Manuel tetikleme
  push:
    branches: ["main"]    # Kod değişikliği yaparsan da tetiklensin

permissions:
  contents: write
  pages: write      # GitHub Pages'e yazma izni
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  # 1. GÖREV: Verileri Güncelle ve Build Al
  build-and-update:
    runs-on: ubuntu-latest
    steps:
      - name: Depoyu Çek
        uses: actions/checkout@v4

      # --- PYTHON KISMI (Veri Çekme) ---
      - name: Python Kurulumu
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'

      - name: Python Paketlerini Yükle
        run: pip install requests python-dotenv

      - name: İstatistik Scriptini Çalıştır
        env:
          API_KEY: ${{ secrets.STEAM_API_KEY }}
        run: python scripts/data-parse.py

      # --- REACT KISMI (Build) ---
      - name: Node.js Kurulumu
        uses: actions/setup-node@v4
        with:
          node-version: 18

      - name: NPM Paketlerini Yükle
        run: npm ci

      - name: React Projesini Derle (Build)
        run: npm run build

      # --- COMMIT KISMI (Verileri Repoya Kaydet) ---
      # Bu adım data.json'ı repoda da güncel tutar, böylece geçmişi görürsün.
      - name: Güncel Veriyi Commit ve Push Et
        run: |
          git config --global user.name 'github-actions[bot]'
          git config --global user.email 'github-actions[bot]@users.noreply.github.com'
          git add src/data.json scripts/baseline.json src/hall_of_fame.json
          # Değişiklik yoksa hata vermeden devam et, varsa pushla
          git diff --quiet &amp;amp;&amp;amp; git diff --staged --quiet || (git commit -m "Auto-update stats [skip ci]" &amp;amp;&amp;amp; git push)

      # --- ARTIFACT OLUŞTURMA ---
      # Build edilen 'dist' klasörünü bir sonraki adıma aktarır
      - name: Upload Pages Artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: './dist'

  # 2. GÖREV: Yayına Al (Deploy)
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build-and-update
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Live Filtering
I implemented a real-time search feature. As you type, the table filters instantly without any server-side delay. It also has a versus mode where you can compare users with each other.&lt;/li&gt;
&lt;/ol&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%2F4b7e7o07s6uinam6boqd.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%2F4b7e7o07s6uinam6boqd.png" alt="Versus Mode" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn1zd5fdynf0v7iwnow6c.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%2Fn1zd5fdynf0v7iwnow6c.png" alt="Versus" width="800" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Detailed Player Cards
Clicking on a player reveals a deeper dive into their stats—Win rates, ADR (Average Damage per Round), and recent match history.&lt;/li&gt;
&lt;/ol&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%2F83ezgoad4qsirxo99hcx.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%2F83ezgoad4qsirxo99hcx.png" alt="Detailed Player Cards" width="800" height="726"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀 Performance Benchmarks&lt;/p&gt;

&lt;p&gt;Since we use the Steam web API, you need to close the game for the game data to synchronize. You can then retrieve the data using the data-parse.py file. The site goes live on GitHub Actions in about 1-2 minutes, and the data retrieval process takes approximately 5 to 10 seconds.&lt;/p&gt;

&lt;p&gt;💡 What I Learned&lt;br&gt;
This project actually came about after a conversation among friends. That's why I wanted to move forward quickly. I created a React project using Antigravity AI and the Steam Web API. With Vite, I was able to build the foundation of the project very quickly, and the rest was just development.&lt;/p&gt;

&lt;p&gt;Key Takeaway: Focus on the data structure first. If your JSON is clean, your frontend logic becomes trivial.&lt;/p&gt;

&lt;p&gt;💬 Let's Discuss!&lt;br&gt;
How do you handle data updates for static sites? Do you prefer GitHub Actions, or do you think a serverless function (like Vercel/Netlify) is the better route?&lt;/p&gt;

&lt;p&gt;If you liked it, don't forget to leave a star ! ⭐&lt;/p&gt;

&lt;p&gt;Check out the repo and let me know your thoughts in the comments! 👇&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>Solving XOR without Backpropagation: A Genetic Algorithm Approach 🧬</title>
      <dc:creator>İbrahim SEZER</dc:creator>
      <pubDate>Tue, 06 Jan 2026 18:08:00 +0000</pubDate>
      <link>https://dev.to/ibrahimsezer/solving-xor-without-backpropagation-a-genetic-algorithm-approach-163c</link>
      <guid>https://dev.to/ibrahimsezer/solving-xor-without-backpropagation-a-genetic-algorithm-approach-163c</guid>
      <description>&lt;p&gt;We usually hear about &lt;strong&gt;Backpropagation&lt;/strong&gt; and &lt;strong&gt;Gradient Descent&lt;/strong&gt; when talking about training Neural Networks. They are the industry standards, the "calculus" way of learning.&lt;/p&gt;

&lt;p&gt;But what if we took a step back and looked at how &lt;em&gt;nature&lt;/em&gt; learns? 🌿&lt;/p&gt;

&lt;p&gt;In this post, we are going to solve the classic &lt;strong&gt;XOR problem&lt;/strong&gt; (a problem that a single neuron cannot solve) using a &lt;strong&gt;Genetic Algorithm (GA)&lt;/strong&gt;. We won't calculate a single gradient. Instead, we will simulate "survival of the fittest."&lt;/p&gt;

&lt;p&gt;Let's breed some brains! 🧠&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the XOR Problem?
&lt;/h2&gt;

&lt;p&gt;Before we dive into the code, let's remember our target. The XOR (Exclusive OR) gate is a non-linear problem.&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%2Frh7djh9tn726jgbipzm5.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%2Frh7djh9tn726jgbipzm5.png" alt="Image of XOR logic gate truth table" width="223" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A simple linear line cannot separate these outputs. We need a Neural Network.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Evolutionary Recipe
&lt;/h2&gt;

&lt;p&gt;In a Genetic Algorithm, we treat our Neural Networks as "individuals" in a population.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Fitness:&lt;/strong&gt; How well does the network solve XOR?&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Selection:&lt;/strong&gt; The best networks get to reproduce.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Crossover:&lt;/strong&gt; We mix the weights of two parents.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Mutation:&lt;/strong&gt; We add random noise to keep genetic diversity.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's look at the Python implementation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Note: This code assumes you have a basic &lt;code&gt;NeuralNetwork&lt;/code&gt; class setup with a &lt;code&gt;.forward()&lt;/code&gt; method and weight matrices &lt;code&gt;W1&lt;/code&gt;, &lt;code&gt;W2&lt;/code&gt;, etc.)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Determining "Fitness"
&lt;/h3&gt;

&lt;p&gt;In nature, fitness might mean "speed" or "strength." In our code, fitness is the inverse of error. We want the Mean Squared Error (MSE) to be as low as possible.&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%2F98mnsegp3ecozwilua1m.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%2F98mnsegp3ecozwilua1m.png" alt="Fitness" width="206" height="69"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;basic_neural_network&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;NeuralNetwork&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calculate_fitness&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Measures the XOR performance of the network.
    The lower the error, the higher the Fitness (Score).
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;X_xor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
    &lt;span class="n"&gt;y_target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;

    &lt;span class="n"&gt;predictions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forward&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_xor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;mse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;y_target&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;predictions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Mean Squared Error
&lt;/span&gt;
    &lt;span class="c1"&gt;# We add 1e-9 to avoid dividing by zero if we hit a perfect score
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mse&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1e-9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Mutation: The Spark of InnovationIf we only bred the best existing networks, we would eventually get stuck. We need random "oopsies" to discover new, better weights. This is Mutation.We iterate through the weights ($W1, W2...$) and occasionally nudge them with random values.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;mutate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mutation_rate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;strength&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Adds random noise to the network&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s weights.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;parameters&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;param&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;mutation_rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# Add random Gaussian noise
&lt;/span&gt;            &lt;span class="n"&gt;noise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;param&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;strength&lt;/span&gt;
            &lt;span class="n"&gt;param&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;noise&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Crossover: Breeding
This is where the magic happens. We take two parent networks and create a child. In this simple implementation, the child's brain is literally the average of its parents.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;crossover&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parent1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;parent2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Produces a child by taking the average of two parents&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; weights.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;child&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;NeuralNetwork&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="c1"&gt;# Averaging weights acts as a simple way to combine traits
&lt;/span&gt;    &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parent1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;parent2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parent1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;parent2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parent1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;parent2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parent1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;parent2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parent1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;parent2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;W3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parent1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;parent2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Main Loop: Evolution in Action&lt;br&gt;
Now we run the simulation. We are using Elitism here—meaning the top 5 performers move to the next generation automatically. This guarantees our AI never gets "dumber" across generations.&lt;/p&gt;

&lt;p&gt;Here is the strategy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sort population by score.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep the top 5 (Elites).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fill the rest of the population by breeding the top 20%.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mutate the children.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repeat!&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# --- MAIN LOOP ---
&lt;/span&gt;
&lt;span class="c1"&gt;# 1. Initial Population
&lt;/span&gt;&lt;span class="n"&gt;population_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="n"&gt;population&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;NeuralNetwork&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;population_size&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="n"&gt;generation_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Evolution starting...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;gen&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;generation_count&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# 2. Calculate scores for everyone and sort (Highest score first)
&lt;/span&gt;    &lt;span class="n"&gt;population&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;population&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;calculate_fitness&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;best_individual&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;population&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;best_error&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;calculate_fitness&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;best_individual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;gen&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gen &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;gen&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: Lowest Error (MSE): &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;best_error&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# Early exit if error is low enough
&lt;/span&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;best_error&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.001&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solution found!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Create New Generation (Elitism + Crossover)
&lt;/span&gt;    &lt;span class="n"&gt;new_population&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

    &lt;span class="c1"&gt;# Carry over the top 5 individuals directly (Elitism)
&lt;/span&gt;    &lt;span class="n"&gt;new_population&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;population&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="c1"&gt;# Fill the remaining 45 by breeding from the top performers
&lt;/span&gt;    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_population&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;population_size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Select 2 parents randomly from the top 10 (top 20%)
&lt;/span&gt;        &lt;span class="n"&gt;parent1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;population&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
        &lt;span class="n"&gt;parent2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;population&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;

        &lt;span class="n"&gt;child&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;crossover&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parent1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;parent2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# High mutation rate helps explore the search space faster
&lt;/span&gt;        &lt;span class="nf"&gt;mutate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mutation_rate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;strength&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;new_population&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;population&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new_population&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The Result?&lt;br&gt;
After running this, the "Best Individual" should have weights perfectly tuned to solve XOR without ever calculating a derivative!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# --- FINAL TEST ---
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;--- Training Complete ---&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;X_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;population&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;forward&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XOR Inputs:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Trained Network Predictions:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why use this over Backpropagation?&lt;br&gt;
To be honest, for XOR, Backpropagation is faster. However, Genetic Algorithms shine in scenarios where:&lt;/p&gt;

&lt;p&gt;The reward is sparse: (e.g., You only know if you won the game at the very end).&lt;/p&gt;

&lt;p&gt;The problem is not differentiable: You can't calculate gradients on discrete logic or complex physical simulations.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;br&gt;
We just simulated natural selection to teach a computer logic. If that isn't cool, I don't know what is!&lt;/p&gt;

&lt;p&gt;Have you experimented with Evolutionary code? Let me know in the comments below! 👇&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@warrenumoh?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Warren Umoh&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/a-chain-link-fence--qycBqByWIY?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>machinelearning</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Optimizing Factory Efficiency with Genetic Algorithms &amp; Tabu Search</title>
      <dc:creator>İbrahim SEZER</dc:creator>
      <pubDate>Thu, 01 Jan 2026 12:19:22 +0000</pubDate>
      <link>https://dev.to/ibrahimsezer/beyond-loops-optimizing-factory-efficiency-with-genetic-algorithms-tabu-search-2eb9</link>
      <guid>https://dev.to/ibrahimsezer/beyond-loops-optimizing-factory-efficiency-with-genetic-algorithms-tabu-search-2eb9</guid>
      <description>&lt;p&gt;Optimization is not just a buzzword; in the manufacturing world, it is the thin line between profit and loss. While writing nested loops can solve small problems, what happens when you have 50 machines, 1000 orders, strict deadlines, and mandatory maintenance windows?&lt;/p&gt;

&lt;p&gt;Welcome to the world of NP-Hard problems, where Genetic Algorithms (GA) and Tabu Search become your best friends.&lt;/p&gt;

&lt;p&gt;The Scenario: "The Chaos Floor" ⚠️&lt;br&gt;
Imagine a smart factory producing automotive parts.&lt;/p&gt;

&lt;p&gt;Resources: CNC Machines, Welding Robots, Assembly Lines.&lt;/p&gt;

&lt;p&gt;Tasks: 500 different orders with varying durations.&lt;/p&gt;

&lt;p&gt;Constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;❌ Hard Constraint: A machine cannot process two parts at once.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;❌ Hard Constraint: Machine #3 must undergo maintenance every Tuesday between 14:00-16:00.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⚠️ Soft Constraint: Minimize energy consumption (don't turn machines on/off frequently).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⚠️ Soft Constraint: Finish high-priority orders first.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Brute-forcing this? If you check every combination, the universe might end before your code finishes running. This is where Heuristics come in.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. The Scoreboard: The Fitness Function 📊
&lt;/h3&gt;

&lt;p&gt;Before we solve the problem, we need to know what "good" looks like. In AI, this is the Fitness Function (or Cost Function). It converts a complex schedule into a single number.&lt;/p&gt;

&lt;p&gt;For our factory, the mathematical model might look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwwr6yx1roo9pvza4yyzu.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%2Fwwr6yx1roo9pvza4yyzu.png" alt="Fitness Function Equation" width="607" height="58"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;TotalTime (Makespan): How long to finish all orders?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;EnergyCost: Cost of electricity based on machine idle time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Penalty: 10,000 points added for every Maintenance Violation!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Minimize the Fitness Score. (0 is perfection, but rarely achievable).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Schedule ID&lt;/th&gt;
&lt;th&gt;Completion Time&lt;/th&gt;
&lt;th&gt;Maintenance Breach?&lt;/th&gt;
&lt;th&gt;Fitness Score&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Schedule A&lt;/td&gt;
&lt;td&gt;8 Hours&lt;/td&gt;
&lt;td&gt;Yes (1)&lt;/td&gt;
&lt;td&gt;10,5&lt;/td&gt;
&lt;td&gt;❌ INVALID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schedule B&lt;/td&gt;
&lt;td&gt;12 Hours&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;800&lt;/td&gt;
&lt;td&gt;✅ VALID (Slow)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schedule C&lt;/td&gt;
&lt;td&gt;8.5 Hours&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;250&lt;/td&gt;
&lt;td&gt;🏆 OPTIMAL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  2. Evolution in Action: Genetic Algorithms (GA) 🧬
&lt;/h3&gt;

&lt;p&gt;GA treats production schedules like DNA strands. It relies on the principle of "Survival of the Fittest".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works on the Factory Floor:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Population:&lt;/strong&gt; Create 50 random schedules. Most will be terrible (machines crashing, maintenance skipped).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Selection:&lt;/strong&gt; Pick the best 10 schedules based on the Fitness Function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Crossover:&lt;/strong&gt; Combine Schedule A and Schedule B.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Take morning shift from A + Afternoon shift from B.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Mutation:&lt;/strong&gt; Introduce chaos.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Randomly move Order #55 from Machine 1 to Machine 2.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step ID&lt;/th&gt;
&lt;th&gt;Current Stage (İşlem)&lt;/th&gt;
&lt;th&gt;Condition / Action (Koşul/Eylem)&lt;/th&gt;
&lt;th&gt;Next Step (Sonraki Adım)&lt;/th&gt;
&lt;th&gt;Description (Açıklama)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Random Schedules&lt;/td&gt;
&lt;td&gt;Initial Creation&lt;/td&gt;
&lt;td&gt;--&amp;gt; B (Calculate Fitness)&lt;/td&gt;
&lt;td&gt;The process starts by generating random solutions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Calculate Fitness&lt;/td&gt;
&lt;td&gt;If Bad Solution&lt;/td&gt;
&lt;td&gt;--&amp;gt; C (Discard)&lt;/td&gt;
&lt;td&gt;The algorithm evaluates the schedule. Poor results are rejected.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Calculate Fitness&lt;/td&gt;
&lt;td&gt;If Good Solution&lt;/td&gt;
&lt;td&gt;--&amp;gt; D (Parents)&lt;/td&gt;
&lt;td&gt;Successful schedules are selected to be "Parents".&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;Discard&lt;/td&gt;
&lt;td&gt;Stop&lt;/td&gt;
&lt;td&gt;End of Path&lt;/td&gt;
&lt;td&gt;Bad solutions are removed from the pool.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;Parents&lt;/td&gt;
&lt;td&gt;Selection&lt;/td&gt;
&lt;td&gt;--&amp;gt; E (Crossover)&lt;/td&gt;
&lt;td&gt;Selected parents prepare to combine their features.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;Crossover&lt;/td&gt;
&lt;td&gt;Mixing&lt;/td&gt;
&lt;td&gt;--&amp;gt; F (Mutation)&lt;/td&gt;
&lt;td&gt;Parents' attributes are mixed to create a new solution.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;Mutation&lt;/td&gt;
&lt;td&gt;Alteration&lt;/td&gt;
&lt;td&gt;--&amp;gt; G (New Generation)&lt;/td&gt;
&lt;td&gt;Small random changes are made to maintain diversity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;G&lt;/td&gt;
&lt;td&gt;New Generation&lt;/td&gt;
&lt;td&gt;Loop Back (🔄)&lt;/td&gt;
&lt;td&gt;--&amp;gt; B (Calculate Fitness)&lt;/td&gt;
&lt;td&gt;The new generation is sent back to be evaluated again.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why Mutation Matters:&lt;/strong&gt; Without mutation, your factory schedule might get stuck in a "Local Optima"—a solution that looks good but isn't the best. Mutation forces the algorithm to try weird combinations, potentially finding a hidden shortcut in production.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. The Memory Master: Tabu Search 🧠
&lt;/h3&gt;

&lt;p&gt;While GA creates new solutions by breeding, Tabu Search improves a single solution by exploring its neighbors.&lt;/p&gt;

&lt;p&gt;Imagine you are climbing a mountain in the fog (searching for the peak efficiency).&lt;/p&gt;

&lt;p&gt;1- You take a step.&lt;/p&gt;

&lt;p&gt;2- If it's higher (better), you keep going.&lt;/p&gt;

&lt;p&gt;3- The Twist: To prevent walking in circles, you keep a "Tabu List" (Forbidden List).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"I just moved Machine 4's task to 2 PM. I cannot move it back for the next 10 iterations."&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Genetic Algorithm (GA)&lt;/th&gt;
&lt;th&gt;Tabu Search (TS)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Strategy&lt;/td&gt;
&lt;td&gt;Population-based (Evolution)&lt;/td&gt;
&lt;td&gt;Single-solution (Local Search)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strength&lt;/td&gt;
&lt;td&gt;Explores the whole search space widely.&lt;/td&gt;
&lt;td&gt;Fine-tunes and polishes a solution.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mechanism&lt;/td&gt;
&lt;td&gt;Crossover &amp;amp; Mutation&lt;/td&gt;
&lt;td&gt;Tabu List (Memory)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Factory Use Case&lt;/td&gt;
&lt;td&gt;Generating the initial weekly plan.&lt;/td&gt;
&lt;td&gt;Handling a sudden machine breakdown &amp;amp; re-optimizing.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Real-World Impact 🚀
&lt;/h3&gt;

&lt;p&gt;Applying these algorithms to factory floors results in tangible ROI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Predictive Maintenance:&lt;/strong&gt; Instead of fixed schedules, algorithms schedule maintenance when the impact on production is lowest (low downtime cost).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Energy Efficiency:&lt;/strong&gt; Grouping high-energy tasks together to reduce peak load penalties.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agility:&lt;/strong&gt; When a rushed order comes in, GA can re-calculate the schedule in minutes, not days.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sample Python Logic (Conceptual)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def calculate_factory_cost(schedule):
    cost = 0

    # 1. Check Maintenance (Hard Constraint)
    if check_maintenance_conflict(schedule):
        cost += 10000 # Massive Penalty!

    # 2. Check Efficiency (Soft Constraint)
    cost += calculate_idle_time(schedule) * 10 

    return cost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Whether it's arranging university timetables or managing a gigafactory, the logic remains the same: Define the constraints, penalize the errors, and let evolution find the path.&lt;/p&gt;

&lt;p&gt;Next time you see a factory running smoothly, remember: it's not just mechanics; it's mathematics.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>📊 Visualize Your Coding Journey: Check Your GitHub Stats</title>
      <dc:creator>İbrahim SEZER</dc:creator>
      <pubDate>Sat, 27 Dec 2025 12:09:59 +0000</pubDate>
      <link>https://dev.to/ibrahimsezer/visualize-your-coding-journey-check-your-github-stats-2cdo</link>
      <guid>https://dev.to/ibrahimsezer/visualize-your-coding-journey-check-your-github-stats-2cdo</guid>
      <description>&lt;p&gt;Have you ever wondered what your coding timeline &lt;em&gt;really&lt;/em&gt; looks like beyond the standard green contribution squares on GitHub?&lt;/p&gt;

&lt;p&gt;We all love seeing those green squares light up, but sometimes they don't tell the whole story. They don't tell you &lt;strong&gt;which languages&lt;/strong&gt; dominate your repos, &lt;strong&gt;how your tech stack has evolved&lt;/strong&gt; over the years, or &lt;strong&gt;which specific repositories&lt;/strong&gt; earn the most stars.&lt;/p&gt;

&lt;p&gt;I recently stumbled upon a tool that turns your GitHub profile into a beautiful visual report, and I had to share it.&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%2Fshfc5lmsn9hd79mwsz8k.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%2Fshfc5lmsn9hd79mwsz8k.png" alt="Profile Summary For Github" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Meet "Profile Summary for GitHub"
&lt;/h2&gt;

&lt;p&gt;It is an open-source tool that analyzes your public repositories and generates a comprehensive dashboard of your coding habits.&lt;/p&gt;

&lt;p&gt;Instead of just counting commits, it breaks down your profile into actionable insights.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🔗 Check it out here:&lt;/strong&gt; &lt;a href="https://profile-summary-for-github.com/" rel="noopener noreferrer"&gt;profile-summary-for-github.com&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  ✨ Key Features
&lt;/h3&gt;

&lt;p&gt;Here is why I think this tool stands out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Language Breakdown:&lt;/strong&gt; It doesn't just show your top language; it visualizes the ratio of every language you use across all repositories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repository Insights:&lt;/strong&gt; You can see which repos have the most stars and forks in a clean bar chart.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeline Analysis:&lt;/strong&gt; It shows a "Commits per Repository" chart over time, which is great for seeing which projects you were obsessed with during specific years.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Sign-up Required:&lt;/strong&gt; You just enter your GitHub username, and it generates the report instantly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧐 How to Use It
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; Go to &lt;a href="https://profile-summary-for-github.com/" rel="noopener noreferrer"&gt;profile-summary-for-github.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; Enter your &lt;strong&gt;GitHub username&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; Analyze your charts!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can also view your profile directly via this URL pattern:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://profile-summary-for-github.com/user/YOUR_USERNAME&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Why It Matters
&lt;/h3&gt;

&lt;p&gt;As developers, we often forget how much we've learned or how our interests have shifted. Seeing a visual representation of your move from, say, Java to Python, or seeing that side project you worked on for three months straight in 2021, is incredibly validating.&lt;/p&gt;

&lt;p&gt;It is also a great link to include in your portfolio or resume to give recruiters a quick snapshot of your technical focus.&lt;/p&gt;




&lt;h3&gt;
  
  
  👇 Let's Connect!
&lt;/h3&gt;

&lt;p&gt;Give it a try and let me know in the comments: &lt;strong&gt;What is your #1 most used language according to the tool?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>productivity</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>I built my Portfolio as a Computer Engineer. Roast my design! 🚀</title>
      <dc:creator>İbrahim SEZER</dc:creator>
      <pubDate>Sat, 27 Dec 2025 12:00:29 +0000</pubDate>
      <link>https://dev.to/ibrahimsezer/i-built-my-portfolio-as-a-computer-engineer-roast-my-design-1d36</link>
      <guid>https://dev.to/ibrahimsezer/i-built-my-portfolio-as-a-computer-engineer-roast-my-design-1d36</guid>
      <description>&lt;p&gt;A look into my personal portfolio hosted on GitHub Pages, showcasing my work in AI, Flutter, and Web Development.&lt;/p&gt;

&lt;p&gt;Hi everyone! 👋&lt;/p&gt;

&lt;p&gt;I'm &lt;strong&gt;Ibrahim Sezer&lt;/strong&gt;, a Computer Engineering graduate and entrepreneur passionate about &lt;strong&gt;Generative AI&lt;/strong&gt;, &lt;strong&gt;Mobile Development (Flutter)&lt;/strong&gt;, and &lt;strong&gt;Web Technologies&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After working on various projects ranging from chess visualization tools to file transfer interfaces, I decided to develop my portfolio to showcase my journey. I wanted something fast, clean, and easy to maintain without dealing with complex server setups.&lt;/p&gt;

&lt;p&gt;Here is the result: &lt;strong&gt;&lt;a href="https://ibrahimsezer.github.io/" rel="noopener noreferrer"&gt;https://ibrahimsezer.github.io/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ The Tech Stack (Simplicity is Key)
&lt;/h2&gt;

&lt;p&gt;I decided to go with a "Static First" approach.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; &lt;a href="https://docs.github.com/en/pages" rel="noopener noreferrer"&gt;GitHub Pages&lt;/a&gt; (Free, reliable, and integrated with my workflow).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; HTML5, CSS3, and Vanilla JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version Control:&lt;/strong&gt; Git (obviously).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why this stack?&lt;/strong&gt;&lt;br&gt;
As an engineer, I love over-engineering things, but for a portfolio, &lt;strong&gt;content is king&lt;/strong&gt;. Hosting it on GitHub Pages allows for automatic deployment. Every time I push a change to the &lt;code&gt;main&lt;/code&gt; branch, the site updates instantly. No DevOps headaches!&lt;/p&gt;

&lt;h2&gt;
  
  
  📂 What's Inside?
&lt;/h2&gt;

&lt;p&gt;My portfolio is designed to be a gateway to my technical world. It includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;About Me:&lt;/strong&gt; My background in Computer Engineering and my entrepreneurial goals.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Project Showcase:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI &amp;amp; RAG Projects:&lt;/strong&gt; Such as my "Chat with Docs" LLM implementation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flutter Apps:&lt;/strong&gt; Like "Seezme", a voice/chat messaging app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Tools:&lt;/strong&gt; Including my open-source Chess Vision trainer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Social Links:&lt;/strong&gt; Direct access to my GitHub, LinkedIn, and Medium articles.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🤝 I Need Your Feedback!
&lt;/h2&gt;

&lt;p&gt;I am constantly looking to improve the UX and the content strategy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the design feel professional enough for an entrepreneur?&lt;/li&gt;
&lt;li&gt;Is the navigation intuitive?&lt;/li&gt;
&lt;li&gt;Should I add a blog section directly to the site or keep linking to Medium?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to check out the code and star ⭐ the repo if you like it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.github.com/ibrahimsezer/ibrahimsezer.github.io" rel="noopener noreferrer"&gt;https://www.github.com/ibrahimsezer/ibrahimsezer.github.io&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks for stopping by! 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>portfolio</category>
      <category>career</category>
    </item>
    <item>
      <title>High-Throughput IoT Log Aggregator</title>
      <dc:creator>İbrahim SEZER</dc:creator>
      <pubDate>Thu, 25 Dec 2025 19:47:17 +0000</pubDate>
      <link>https://dev.to/ibrahimsezer/high-throughput-iot-log-aggregator-3gjg</link>
      <guid>https://dev.to/ibrahimsezer/high-throughput-iot-log-aggregator-3gjg</guid>
      <description>&lt;p&gt;Imagine an industrial monitoring system receiving telemetry packets from thousands of sensors every second. The system must:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ingest a batch of raw data packets.&lt;/li&gt;
&lt;li&gt;Filter inactive sensors.&lt;/li&gt;
&lt;li&gt;Aggregate temperature readings by Device ID.&lt;/li&gt;
&lt;li&gt;Generate a textual summary log for the dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Challenge: Since this runs continuously, any inefficiency (like unnecessary memory allocation) will cause "Garbage Collection" pauses, causing data loss. We must use memory-efficient patterns.&lt;/p&gt;

&lt;p&gt;We used Go language for this performance test&lt;/p&gt;

&lt;p&gt;System Flow Diagram&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    A[Raw Data Ingestion] --&amp;gt;|Slice Pre-allocation| B(Batch Processing)
    B --&amp;gt;|Value Semantics| C{Filter Inactive}
    C --&amp;gt;|Map Pre-allocation| D[Aggregation]
    D --&amp;gt;|strings.Builder| E[Log Generation]
    E --&amp;gt; F[Final Report]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code Segment&lt;/th&gt;
&lt;th&gt;Optimization Technique&lt;/th&gt;
&lt;th&gt;Why it matters in this scenario?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;type SensorPacket struct&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Struct Alignment&lt;/td&gt;
&lt;td&gt;Millions of packets are kept in RAM. Saving 8 bytes per packet saves ~8MB of RAM per million records.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make([]SensorPacket, 0, n)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Slice Pre-allocation&lt;/td&gt;
&lt;td&gt;The simulation loads 100,000 items. Without this, Go would resize the array ~18 times, copying memory each time.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make(map[int32]float64, 100)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Map Size Hint&lt;/td&gt;
&lt;td&gt;We aggregate by device. Allocating buckets upfront prevents expensive "rehashing" when the map fills up.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;var sb strings.Builder&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;String Builder&lt;/td&gt;
&lt;td&gt;Generating the report log involves many string additions. Builder prevents creating hundreds of temporary trash strings.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;func processBatch(...)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Value vs Pointer&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;config&lt;/code&gt; is passed by Value (fast stack access). The &lt;code&gt;Report&lt;/code&gt; is returned by Pointer (avoids copying the big map).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Optimized (Current Code):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Timestamp (8) ] [ Value (8) ] [ DeviceID (4) | Active (1) | Pad (3) ]
Total: 24 Bytes / Block
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Unoptimized (If mixed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Active (1) | Pad (7) ] [ Timestamp (8) ] [ DeviceID (4) | Pad (4) ] [ Value (8) ]
Total: 32 Bytes / Block (33% Wasted Memory!)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example Results
&lt;/h3&gt;



&lt;p&gt;&lt;code&gt;--- Processing Complete in 6.5627ms ---&lt;br&gt;
--- BATCH REPORT ---&lt;br&gt;
Batch ID: 1766689634&lt;br&gt;
Device 79: Avg Temp 44.52&lt;br&gt;
Device 46: Avg Temp 46.42&lt;br&gt;
Device 57: Avg Temp 45.37&lt;br&gt;
Device 11: Avg Temp 44.54&lt;br&gt;
Device 15: Avg Temp 46.43&lt;br&gt;
... (truncated)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  📊 Benchmark Results
&lt;/h2&gt;

&lt;p&gt;The following benchmarks compare the performance of "naive" implementations versus "optimized" patterns using Go's best practices. The tests were run on an Intel Core i5-10300H CPU @ 2.50GHz.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation Type&lt;/th&gt;
&lt;th&gt;Implementation&lt;/th&gt;
&lt;th&gt;Time (ns/op)&lt;/th&gt;
&lt;th&gt;Memory (B/op)&lt;/th&gt;
&lt;th&gt;Allocations (op)&lt;/th&gt;
&lt;th&gt;Performance Gain&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Slice Append&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inefficient&lt;/td&gt;
&lt;td&gt;66,035 ns&lt;/td&gt;
&lt;td&gt;357,626 B&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Efficient (Pre-alloc)&lt;/td&gt;
&lt;td&gt;15,873 ns&lt;/td&gt;
&lt;td&gt;81,920 B&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;~4.1x Faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;String Build&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inefficient (+)&lt;/td&gt;
&lt;td&gt;8,727 ns&lt;/td&gt;
&lt;td&gt;21,080 B&lt;/td&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Efficient (Builder)&lt;/td&gt;
&lt;td&gt;244.7 ns&lt;/td&gt;
&lt;td&gt;416 B&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;~35.6x Faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Map Insert&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inefficient&lt;/td&gt;
&lt;td&gt;571,279 ns&lt;/td&gt;
&lt;td&gt;591,485 B&lt;/td&gt;
&lt;td&gt;79&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Efficient (Size hint)&lt;/td&gt;
&lt;td&gt;206,910 ns&lt;/td&gt;
&lt;td&gt;295,554 B&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;~2.7x Faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Struct Pass&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;By Value (Copy)&lt;/td&gt;
&lt;td&gt;0.26 ns&lt;/td&gt;
&lt;td&gt;0 B&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;By Pointer (Ref)&lt;/td&gt;
&lt;td&gt;0.25 ns&lt;/td&gt;
&lt;td&gt;0 B&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Similar&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Note on Structs: In micro-benchmarks with tight loops, the Go compiler heavily optimizes (inlines) function calls, making the difference between Value and Pointer negligible. However, in real-world applications with complex call stacks, passing large structs by Pointer significantly reduces CPU usage by avoiding memory copy operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 Key Takeaways&lt;br&gt;
String Concatenation: Never use + in loops. The strings.Builder approach is over 35 times faster and uses 98% less memory because it avoids creating intermediate garbage strings.&lt;/p&gt;

&lt;p&gt;Memory Pre-allocation: Telling Go how much memory you need upfront (for Slices and Maps) eliminates the overhead of resizing and copying data (Rehashing/Reallocation).&lt;/p&gt;

&lt;p&gt;Slice: Reduced allocations from 19 to 1.&lt;/p&gt;

&lt;p&gt;Map: Reduced allocations from 79 to 33.&lt;/p&gt;

&lt;p&gt;Allocations matter: Every allocation (allocs/op) forces the Garbage Collector to work harder. Keeping this number low makes the entire application more stable and responsive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contact 📧
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;If anyone is interested, I can also share the code blocks I used for the performance test. You can contact me via &lt;a href="https://github.com/ibrahimsezer" rel="noopener noreferrer"&gt;my GitHub profile&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>go</category>
      <category>performance</category>
      <category>testing</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I launched a Prayer Times web app. What would make you use this daily? 🚀(Built with React &amp; Tailwind)</title>
      <dc:creator>İbrahim SEZER</dc:creator>
      <pubDate>Wed, 24 Dec 2025 11:16:12 +0000</pubDate>
      <link>https://dev.to/ibrahimsezer/i-launched-a-prayer-times-web-app-what-would-make-you-use-this-daily-2ojm</link>
      <guid>https://dev.to/ibrahimsezer/i-launched-a-prayer-times-web-app-what-would-make-you-use-this-daily-2ojm</guid>
      <description>&lt;p&gt;Hi community!&lt;/p&gt;

&lt;p&gt;I just deployed my latest project: &lt;a href="https://ezannamaz.netlify.app/" rel="noopener noreferrer"&gt;https://ezannamaz.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My goal was to create a distraction-free interface for checking prayer times. It works smoothly, but I feel like it needs that "extra" touch to make it a daily driver for users.&lt;/p&gt;

&lt;p&gt;I need your creativity: Aside from the standard features (times, location), what is a unique feature you haven't seen in other apps?&lt;/p&gt;

&lt;p&gt;Maybe an integration with Google Calendar?&lt;/p&gt;

&lt;p&gt;A minimal "focus mode" for reading?&lt;/p&gt;

&lt;p&gt;Or something completely different?&lt;/p&gt;

&lt;p&gt;I’m ready to code the most upvoted suggestion this weekend! Let me know your thoughts. 👇&lt;/p&gt;

&lt;h2&gt;
  
  
  Prayer Times - Main Page
&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%2Fknus49g4m35dp5bmk6nr.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%2Fknus49g4m35dp5bmk6nr.png" alt="Prayer Times - Main Page" width="800" height="915"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Islamic Insights &amp;amp; Articles
&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%2Fgfq6rtpxqmy9ztsdkmc4.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%2Fgfq6rtpxqmy9ztsdkmc4.png" alt="Islamic Insights &amp;amp; Articles" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>beginners</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I built a free, open-source tool to improve my Chess Vision and Coordinate memory. Looking for feature ideas!</title>
      <dc:creator>İbrahim SEZER</dc:creator>
      <pubDate>Fri, 19 Dec 2025 18:17:26 +0000</pubDate>
      <link>https://dev.to/ibrahimsezer/i-built-a-free-open-source-tool-to-improve-my-chess-vision-and-coordinate-memory-looking-for-h83</link>
      <guid>https://dev.to/ibrahimsezer/i-built-a-free-open-source-tool-to-improve-my-chess-vision-and-coordinate-memory-looking-for-h83</guid>
      <description>&lt;p&gt;Hi everyone,&lt;br&gt;
I've been trying to improve my calculation skills, but I realized I was struggling with visualizing the board (knowing instantly if 'e4' is white or black) and finding coordinates quickly without looking at the numbers.&lt;br&gt;
So, I decided to build a simple web app to train these specific skills. &lt;/p&gt;

&lt;p&gt;It’s called Chess Warmup.&lt;/p&gt;

&lt;p&gt;It currently has 4 modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Color Memory: Guess if a square is White or Black.
&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%2Fkc3il7uiyfv0d22vw5vl.png" alt="Color Memory" width="554" height="490"&gt;
&lt;/li&gt;
&lt;li&gt;Coordinate Finder: Click the correct square as fast as possible.
&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%2F3ycmk8wuc202dri8zr49.png" alt="Coordinate Finder" width="539" height="776"&gt;
&lt;/li&gt;
&lt;li&gt;Piece Movement: Coordinate work with the appropriate moves of chess pieces.
&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%2F7mrjsfzo2udzwvqz6xuz.png" alt="Piece Movement" width="550" height="784"&gt;
&lt;/li&gt;
&lt;li&gt;Ghost Mode: The hardest one! Coordinates are hidden, forcing you to use your instinct.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also tracks your stats and shows a heatmap of your weak squares after each session. It's completely free, no ads, and no sign-up required.&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%2F4fm4bxmk7bmfialjt08n.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%2F4fm4bxmk7bmfialjt08n.png" alt="Main Page" width="800" height="695"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F611ykl7847fvqcra8q2v.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%2F611ykl7847fvqcra8q2v.png" alt="Chess Pieces" width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzicvv4knufwjlooz1vx.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%2Fyzicvv4knufwjlooz1vx.png" alt="Chess News" width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazi66q8acytdutvii8qs.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%2Fazi66q8acytdutvii8qs.png" alt="Chess Openings" width="478" height="647"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would love to hear your feedback: What other training modes or features would help you as a beginner?&lt;/p&gt;

&lt;p&gt;Here is the link to try it: &lt;a href="https://chesswarmup.netlify.app" rel="noopener noreferrer"&gt;Live Site&lt;/a&gt; And here is the source code on GitHub if you want to contribute: &lt;a href="https://github.com/ibrahimsezer/chess-warmup" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>antigravity</category>
    </item>
    <item>
      <title>Flutter MediaPlayer</title>
      <dc:creator>İbrahim SEZER</dc:creator>
      <pubDate>Wed, 26 Feb 2025 15:52:27 +0000</pubDate>
      <link>https://dev.to/ibrahimsezer/flutter-mediaplayer-cf</link>
      <guid>https://dev.to/ibrahimsezer/flutter-mediaplayer-cf</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5v3uxg4b43moca5coob.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%2Fi5v3uxg4b43moca5coob.png" alt="MediaPlayer" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello everyone, I would like to share an open source project about &lt;strong&gt;Flutter MediaPlayer&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;My goal in this application is to create an open source and free MediaPlayer application. I'm trying to design an application for Android. I am waiting for everyone who wants to support open source starting projects. &lt;/p&gt;

&lt;p&gt;Thanks for your help. 💫&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/ibrahimsezer/mediaplayer.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can click on my profile to connect with me. 👇&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://ibrahimsezer.github.io/" rel="noopener noreferrer"&gt;https://ibrahimsezer.github.io/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
