<?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: Marco Sbragi</title>
    <description>The latest articles on DEV Community by Marco Sbragi (@marcobblk).</description>
    <link>https://dev.to/marcobblk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3819596%2F19259001-0460-4a19-8b99-0eec2a10ca17.jpg</url>
      <title>DEV Community: Marco Sbragi</title>
      <link>https://dev.to/marcobblk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcobblk"/>
    <language>en</language>
    <item>
      <title>Beyond AI: The Solitude of the Developer and the Search for True Human Connection</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Sat, 11 Jul 2026 09:20:35 +0000</pubDate>
      <link>https://dev.to/marcobblk/beyond-ai-the-solitude-of-the-developer-and-the-search-for-true-human-connection-22i3</link>
      <guid>https://dev.to/marcobblk/beyond-ai-the-solitude-of-the-developer-and-the-search-for-true-human-connection-22i3</guid>
      <description>&lt;p&gt;Lately, I've been doing some deep personal reflection. I'm talking about myself, I hope no one misunderstands, on how pervasive the use of AI has become in my daily development workflow.&lt;/p&gt;

&lt;p&gt;Through a bit of self-analysis, I've discovered some interesting dynamics. Dependencies often arise from the desire to fill a void. But what kind of void does an experienced developer like me face?&lt;/p&gt;

&lt;p&gt;As a professional, I have the skills. Sure, AI helps me get things done faster, but the final product is always the translation of my vision; if I don't fully understand the solution, I discard it. I'm not looking for "magic," I'm looking for efficiency. Yet, I realize I've used AI to fill a specific void: the need for discussion.&lt;/p&gt;

&lt;p&gt;Software development is inherently solitary. The satisfaction of a successful "execution" after hours of discussions, refinements, and clashes over an architecture is an experience I miss today. The chat interface is always there, ready to respond. But there's a problem: it's a "yes-man." Even when I force it to be critical or provocative via the system's prompts, I know it's just reciting a script to please me. There's no conviction, no risk of error, none of the friction that arises when a colleague courageously defends their vision, perhaps one that conflicts with mine.&lt;/p&gt;

&lt;p&gt;We are part of a huge community, but debate often remains superficial. One might argue that posts and comments are enough, but anyone who has tried knows it doesn't work very well: a debate is truly alive only when there is no latency. In comments, the time between thinking, writing, and waiting for a response diminishes the energy of the exchange, turning it into a series of monologues rather than a dialogue.&lt;/p&gt;

&lt;p&gt;Why don't we try creating "virtual tables" where we can discuss projects, architectures, and technical choices with the natural rhythm of a conversation? Direct, real-time discussions, in person or remotely, where the exchange of ideas can spark sparks, without the filter (and delay) of a keyboard used in deferred mode.&lt;/p&gt;

&lt;p&gt;But if the benefits are so clear, why aren't we doing this already? The main obstacle is trust. We are still so reluctant to create open spaces for discussion because the fear that our ideas might be "stolen" is still strong—perhaps a relic of an era when value resided in secrecy. Today, however, value no longer lies in how we implement, but in the depth of why we make certain choices.&lt;/p&gt;

&lt;p&gt;Overcoming this barrier means more than simply opening up to debate; it means rediscovering the potential of true collaboration. How many times have we abandoned an ambitious project because, alone, we lacked the time, the complementary vision, or the drive needed to take it beyond the prototype stage? Together, we could not only solve complex bugs or validate architectures, but also generate synergies that currently remain trapped in our own minds. Collaboration means multiplying perspectives, not sharing credit.&lt;/p&gt;

&lt;p&gt;I know it's difficult. We must break down established barriers, but the opportunities for professional and personal growth, in an industry increasingly dominated by depersonalization, are enormous.&lt;/p&gt;

&lt;p&gt;I'm not looking for someone who agrees with me. I'm looking for someone with the courage of their convictions to challenge my ideas. Who else is tired of the "convenience" of AI and wants to return to peer-to-peer debate?&lt;/p&gt;

&lt;p&gt;I'm very curious to hear your thoughts. Have you ever experienced this form of "technological isolation"? Do you ever seek interaction in AI that isn't purely technical? I look forward to your thoughts and reactions.&lt;/p&gt;




&lt;p&gt;🇮🇹 Nota di Trasparenza dell'Autore&lt;/p&gt;

&lt;p&gt;Ho pensato e scritto il post in italiano ed ho ho utilizzato un LLM esclusivamente per la traduzione in inglese, per rendere il contenuto accessibile alla community internazionale.&lt;/p&gt;

&lt;p&gt;🇬🇧 Author's Transparency Note&lt;/p&gt;

&lt;p&gt;I conceptualized and wrote the entire piece in my native language, Italian. I used an LLM strictly as a translation tool to adapt the content into English, to make it accessible to the global community.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>development</category>
      <category>brainstorming</category>
      <category>collaboration</category>
    </item>
    <item>
      <title>Code Is Craft</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Fri, 10 Jul 2026 05:38:12 +0000</pubDate>
      <link>https://dev.to/marcobblk/code-is-craft-19fb</link>
      <guid>https://dev.to/marcobblk/code-is-craft-19fb</guid>
      <description>&lt;p&gt;I've been reading several posts on Dev.to lately that struck a chord with me, confirming that I’m not alone in my perspective. IT professionals have long been viewed as purely rational beings, relying solely on logic and reason as their only tools—and often carrying that same mindset into their daily lives. I would like to challenge this belief, at least from my perspective and for those who share it.&lt;/p&gt;

&lt;p&gt;After 40 years in IT, analyzing problems and writing software, I have come to a conclusion that no framework, no language, and no AI has changed: building something that truly works—simple or complex—is not just about technical skill. It is craftsmanship. And craftsmanship is art.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond the Syntax
&lt;/h2&gt;

&lt;p&gt;An artisan and a technician can both build a chair. The technician follows the manual. The artisan understands why each joint is cut at that specific angle, feels when the wood requires a different approach, and leaves a part of themselves in the finished object.&lt;/p&gt;

&lt;p&gt;Software is no different. Syntax can be learned in a week. Design patterns can be memorized in a month. But knowing when to break a pattern, why a certain abstraction fits a specific problem, and making a system elegant rather than merely functional—this is the part that isn't taught in a course. This is the touch of the artist and the artisan.&lt;/p&gt;

&lt;p&gt;I have always believed that the best code reads like well-written prose: clear, intentional, with nothing wasted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forty Years of Learning: From Mentors to Machine Intelligence
&lt;/h2&gt;

&lt;p&gt;Tools and technology have changed more radically than the craft itself. When I started in 1985, knowledge came from people—true mentors, colleagues who had already made every mistake worth making. Then came books and manuals, almost exclusively in English, as that was the language of computing. If you couldn't read and understand English, you were lost.&lt;/p&gt;

&lt;p&gt;Then came the internet. Google and Stack Overflow became the collective memory of every developer on the planet. Suddenly, the answer to almost any technical question was a search away. Our ability to find answers increased significantly.&lt;/p&gt;

&lt;p&gt;Today, we have AI. And with AI came "Vibe Coding"—a phenomenon where the barrier to entry has lowered to the point where almost anyone can generate working code by describing what they want in natural language. Everyone is a developer now. Or so it seems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Only Thing AI Cannot Replace
&lt;/h2&gt;

&lt;p&gt;In music, two musicians can play the same score note for note. One executes it. The other interprets it. The difference isn't in the notes—it's in what the performer brings from within. Those who, like me, love the guitar know very well that David Gilmour, Mark Knopfler, John Mayer, and Jimi Hendrix don't just "play"; they express themselves through the instrument.&lt;/p&gt;

&lt;p&gt;The same applies to software. Two developers given the same brief will build two completely different systems. One will be technically correct. The other will be elegant, extensible, and a pleasure to maintain ten years later. The difference isn't in the requirements—it's in the mind (the feeling) that shapes the solution.&lt;/p&gt;

&lt;p&gt;Creativity cannot be automated. The ability to look at an existing solution and see how it could be improved, to invent a new abstraction that simplifies everything, to know when the right answer is less code rather than more lines—these are human qualities. The "machine" works from what already exists. The human works from what could exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vibe Coding: Everyone is a Developer Now. Or Maybe Not?
&lt;/h2&gt;

&lt;p&gt;I don't dismiss Vibe Coding. It is a genuine evolution, just like Google was. It has broken down a barrier that has always existed in IT: the wall between an idea and a functional solution. Today, you no longer need a specialized intermediary; any person can perform this transformation. This is fantastic for those who don't want to make programming their profession.&lt;/p&gt;

&lt;p&gt;To these individuals, I would offer a suggestion, and I invite my colleagues, instructors, and mentors to share this thought if they agree: "Questions are more important than answers." Ask why that code was written in that specific way. You don't need to understand every detail, but you should strive to grasp the big picture.&lt;/p&gt;

&lt;p&gt;For those who want to make this a profession, there is a fundamental difference between generating code and understanding it. A generated solution that you cannot read, test, or extend is not a solution—it is a dependency. You haven't built something; you’ve borrowed something that doesn't belong to you.&lt;/p&gt;

&lt;p&gt;An artisan using a tool is still an artisan. Someone who uses the tool but doesn't understand the "wood" is not. The instrument doesn't make the artist or the artisan. Knowledge, experience, and judgment do.&lt;/p&gt;

&lt;p&gt;The programmer is not disappearing. The role is splitting in two: the AI generates, the human validates and designs. The latter requires a deeper level of understanding.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Workflow: AI as a Thought Partner
&lt;/h2&gt;

&lt;p&gt;As I have written on my blog in the &lt;a href="https://www.nospace.net/en/blog-en/code-is-craft" rel="noopener noreferrer"&gt;Code Is Craft&lt;/a&gt; series, I use AI in my work every day. But not as a ghostwriter. Not as a code generator from which I blindly copy and paste.&lt;/p&gt;

&lt;p&gt;I use AI because I want it to think like me. I want it to follow my mental processes in designing a solution, to use my architectural patterns, and to reflect my way of tackling problems. When I ask it to generate something, I read every line. I challenge every choice. I make it my own before moving forward.&lt;/p&gt;

&lt;p&gt;If there is a technique or concept I don't yet know, I use AI to understand it—not to bypass the learning process. The goal is always that by the next session, that knowledge belongs to me. AI has helped me grow; it hasn't helped me avoid growing.&lt;/p&gt;

&lt;p&gt;That distinction is everything. AI is not here to replace what I don't know. It is here to help me become someone who knows more.&lt;/p&gt;

&lt;p&gt;This is the only workflow I trust.&lt;/p&gt;




&lt;p&gt;If you are interested in how I have lived my work over these many years, visit my website at &lt;a href="https://www.nospace.net" rel="noopener noreferrer"&gt;https://www.nospace.net&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And you, colleagues—both the "old-school" like me and the newcomers—what do you think? Leave a comment below. Critical reflection is what we need most right now.&lt;/p&gt;




&lt;p&gt;🇮🇹 Nota di Trasparenza dell'Autore&lt;/p&gt;

&lt;p&gt;Ho concepito e scritto l'intero pezzo nella mia lingua madre, l'italiano. Ho utilizzato un LLM esclusivamente come mero strumento di traduzione verso l'inglese, per rrendere il contenuto accessibile alla community internazionale.&lt;/p&gt;

&lt;p&gt;🇬🇧 Author's Transparency Note&lt;/p&gt;

&lt;p&gt;I conceptualized and wrote the entire piece in my native language, Italian. I used an LLM strictly as a translation tool to adapt the content into English, to make it accessible to the global community.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>career</category>
      <category>development</category>
    </item>
    <item>
      <title>Docker on WSL2: Why I Ditched Docker Desktop for a Linux "Sandbox"</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Tue, 30 Jun 2026 09:04:48 +0000</pubDate>
      <link>https://dev.to/marcobblk/docker-on-wsl2-why-i-ditched-docker-desktop-for-a-linux-sandbox-3a39</link>
      <guid>https://dev.to/marcobblk/docker-on-wsl2-why-i-ditched-docker-desktop-for-a-linux-sandbox-3a39</guid>
      <description>&lt;p&gt;I've always developed in a Windows environment, but I've always been fascinated by the Linux world, so much so that most of my projects were then deployed on Linux. What's always disappointed me, however, is how Windows handles the file system with heavy loads related to databases or uncompiled runtime code. For this reason, despite developing in Windows for many years, I've used Linux virtual machines (VMWare or VirtualBox) only for database servers.&lt;/p&gt;

&lt;p&gt;I've used many IDEs, moving from simple Notepad to the Visual Basic IDE to Eclipse to NetBeans, and finally landing on Visual Studio Code. VSCode is the perfect environment for what I'm doing now, using the most modern languages ​​and development tools. In particular, I believe Docker was a turning point, not just for me but for the entire developer community. So I installed Docker Desktop and started developing my first projects. I created my own stacks, using vscode with remote devcontainers, but I quickly realized that the system was slow and unreliable, with crashes, slowdowns, and excessive memory usage. I was envious of other developers using Linux or Mac, where everything "seemed" to work perfectly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responsiveness&lt;/li&gt;
&lt;li&gt;Very fast file system volumes&lt;/li&gt;
&lt;li&gt;Very few crashes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Switching to Linux wasn't an option, so I decided to use wsl2 and rethought my entire strategy. I uninstalled Docker Desktop, installed a Debian Trixie wsl distro for development, and an Ubuntu distro. I installed docker on Debian, installed all the tools I needed—git, npm, etc.—and created my own project folder and integration with vscode. Like magic, you move to the workspace and type "code .". And voilà, if you've installed the right extensions on VSCode, everything works perfectly.&lt;/p&gt;

&lt;p&gt;So far, nothing new. Now many of you will say: well done, you've discovered hot water (an Italian idiom for stating the obvious). Was there any need to write a post about things we expert developers have been doing for years? Sorry guys, I know I haven't discovered anything new, but maybe there's something from this point on that might be of interest—maybe not to everyone, but I believe and hope to many of you who develop on WSL2 in a Windows environment.&lt;/p&gt;

&lt;p&gt;As I was saying, everything's perfect, or maybe not. I started having some doubts when I realized my development distro had grown to 60GB. Oh yes, because Docker is no joke; with images, layers, and caches, it fills up quickly.&lt;/p&gt;

&lt;p&gt;Solutions? Not many. The first that came to mind was having multiple distros, one for each project. Hmm! That's not my style. I prefer to have a nice environment with everything I need. Let's analyze the problem...&lt;/p&gt;

&lt;p&gt;Who "bloats" the filesystem?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker data&lt;/li&gt;
&lt;li&gt;Data volumes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a "bare-metal" Linux environment, we can separate the disks and mount them to achieve context separation. Well, that was my solution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The distro that contains only the OS and development tools&lt;/li&gt;
&lt;li&gt;An external disk for Docker data and work (images, layers, cache, etc.)&lt;/li&gt;
&lt;li&gt;A possible external disk for storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Easy! No, or at least not that easy, because Docker data is on &lt;code&gt;/var/lib/containerd&lt;/code&gt; or &lt;code&gt;/var/lib/docker&lt;/code&gt;, so we need to create a VHDX disk, move the data from the original distro, delete the data from &lt;code&gt;/var/lib/containerd&lt;/code&gt;, and create the mount point to host the newly created external disk. And the solution is less simple than you might assume from these simple points.&lt;/p&gt;

&lt;p&gt;Okay, you're probably tired of all this chatter, so let's get to the solution. Let's define the operational steps for maximum security and then see how to implement them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Export the original distro so as not to operate on our existing system (obviously, this isn't necessary if you're starting on a new distro).&lt;/li&gt;
&lt;li&gt; Import the distro with a different tag to recognize it.&lt;/li&gt;
&lt;li&gt; Create an empty vhdx disk (ext4) from Windows.&lt;/li&gt;
&lt;li&gt; Mount the disk from Windows (&lt;code&gt;wsl --mount&lt;/code&gt;) to make it visible to the distro.&lt;/li&gt;
&lt;li&gt; Log into the distro and temporarily mount the new disk (e.g., on &lt;code&gt;/mnt/containerd&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; Stop the &lt;code&gt;containerd&lt;/code&gt;, &lt;code&gt;docker&lt;/code&gt;, and &lt;code&gt;docker.socket&lt;/code&gt; services if they are running.&lt;/li&gt;
&lt;li&gt; Copy &lt;code&gt;/var/lib/containerd&lt;/code&gt; to &lt;code&gt;/mnt/containerd&lt;/code&gt; with &lt;code&gt;rsync&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; Rename &lt;code&gt;/var/lib/containerd&lt;/code&gt; to &lt;code&gt;/var/lib/containerd.bak&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; Create the mount point &lt;code&gt;/var/lib/containerd&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;IMPORTANT!!!&lt;/strong&gt; Before proceeding further, you need to disable the autostart of the &lt;code&gt;containerd&lt;/code&gt;, &lt;code&gt;docker&lt;/code&gt;, and &lt;code&gt;docker.socket&lt;/code&gt; services. You'll understand why, though many of you may already be guessing. At this point, you can close the distro with &lt;code&gt;exit&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We have our separate OS and large data on an external VHDX. Now we need to test that everything works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log into the distro&lt;/li&gt;
&lt;li&gt;Mount the disk&lt;/li&gt;
&lt;li&gt;Run some docker commands&lt;/li&gt;
&lt;li&gt;If everything works, delete &lt;code&gt;/var/lib/containerd.bak&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Automate the process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below are step-by-step instructions based on my system, easily adaptable to your needs.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 1: Preparation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. View existing distros
&lt;/h4&gt;

&lt;p&gt;wsl --list -v&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Shut down WSL to ensure data consistency
&lt;/h4&gt;

&lt;p&gt;wsl --shutdown&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Export your current distro (e.g., Debian) as a backup
&lt;/h4&gt;

&lt;p&gt;wsl --export Debian C:\wsl\debian_backup.tar&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Import the distro into a new folder to create the "Sandbox" environment
&lt;/h4&gt;

&lt;p&gt;wsl --import DebianDev C:\wsl\DebianDev C:\wsl\debian_backup.tar&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create the VHDX Disk (PowerShell)
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Create the 64GB dynamic virtual disk.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Warning: New-VHD is only available if Hyper-V is enabled. Alternatively, use diskpart or qemu-img.exe.
&lt;/h4&gt;

&lt;p&gt;New-VHD -Path "C:\wsl\debian\docker-data.vhdx" -SizeBytes 64GB -Dynamic&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Mount the disk on WSL as a bare device (without mounting it in the Windows filesystem)
&lt;/h4&gt;

&lt;p&gt;wsl --mount "C:\wsl\debian\docker-data.vhdx" --bare&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Migration (Within the WSL Distro)
&lt;/h3&gt;

&lt;p&gt;wsl -d DebianDev&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Identify the new disk (usually /dev/sdc or sdd)
&lt;/h4&gt;

&lt;p&gt;lsblk&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Format the disk in ext4 (WARNING: Verify the correct device)
&lt;/h4&gt;

&lt;p&gt;sudo mkfs.ext4 /dev/sdc&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Create a temporary mount point and mount the disk
&lt;/h4&gt;

&lt;p&gt;sudo mkdir /mnt/containerd&lt;br&gt;
sudo mount /dev/sdc /mnt/containerd&lt;/p&gt;
&lt;h4&gt;
  
  
  4. Stop Docker services and disable autostart (essential!)
&lt;/h4&gt;

&lt;p&gt;sudo systemctl stop docker.socket docker containerd&lt;br&gt;
sudo systemctl disable docker.socket docker containerd&lt;/p&gt;
&lt;h4&gt;
  
  
  5. Move data with rsync to preserve permissions and links
&lt;/h4&gt;
&lt;h4&gt;
  
  
  In newer Docker and containerd installations, use /var/lib/containerd/
&lt;/h4&gt;

&lt;p&gt;sudo rsync -avPH /var/lib/containerd/ /mnt/containerd/&lt;/p&gt;
&lt;h4&gt;
  
  
  6. Rename the old folder for security
&lt;/h4&gt;

&lt;p&gt;sudo mv /var/lib/docker /var/lib/containerd.bak&lt;/p&gt;
&lt;h4&gt;
  
  
  7. Create the final mount point
&lt;/h4&gt;

&lt;p&gt;sudo mkdir /var/lib/containerd&lt;br&gt;
sudo umount /mnt/containerd&lt;br&gt;
exit&lt;/p&gt;

&lt;p&gt;At this point we can test it from the terminal as administrator:&lt;/p&gt;

&lt;p&gt;wsl --list -v # check that DebianDev is present.&lt;br&gt;
wsl --shutdown # for safety, not necessary if everything stopped.&lt;br&gt;
wsl --mount --vhd C:\wsl\debian\docker-data.vhdx --bare&lt;br&gt;
wsl -d DebianDev&lt;br&gt;
sudo mount /dev/sd(x) /var/lib/containerd # where x is the 64 GB disk device.&lt;br&gt;
sudo systemctl start containerd&lt;br&gt;
sudo systemctl start docker&lt;br&gt;
docker ps&lt;br&gt;
docker images # if the images are visible, everything is fine.&lt;br&gt;
sudo rm -rf /var/lib/containerd.bak # (we still have 2 backups)&lt;br&gt;
exit&lt;/p&gt;


&lt;h3&gt;
  
  
  Automating the Mount
&lt;/h3&gt;

&lt;p&gt;Now for the part that gave me a headache. Automate everything with a simple click. It seems easy at first glance, but unfortunately, after many failed attempts due to race conditions on the services that started before the disk was mounted, I adopted this solution. There are others, but this is mine. I created a bash script.&lt;/p&gt;

&lt;p&gt;Before creating the script, you need to find the exact UUID of your newly created ext4 disk. You can do this by running blkid:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;blkid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for the UUID associated with your disk (e.g., /dev/sdc). Keep this UUID handy, as you will need it to replace  in the script below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# /usr/local/bin/mount-containerd.sh&lt;/span&gt;

&lt;span class="nv"&gt;LOGFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/log/mount-containerd.log
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Starting mount-containerd"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;

&lt;span class="c"&gt;# 1. Stop services first&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Stopping services"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;
systemctl stop docker.socket
systemctl stop docker
systemctl stop containerd

&lt;span class="c"&gt;# 2. Clean the mount directory&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Cleaning /var/lib/containerd"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /var/lib/containerd/&lt;span class="k"&gt;*&lt;/span&gt;

&lt;span class="c"&gt;# 3. Mount the VHDX&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;seq &lt;/span&gt;1 15&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nv"&gt;DEVICE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;blkid &lt;span class="nt"&gt;-U&lt;/span&gt; &amp;lt;YOUR-UUID-HERE&amp;gt; 2&amp;gt;/dev/null&lt;span class="si"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DEVICE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Device found: &lt;/span&gt;&lt;span class="nv"&gt;$DEVICE&lt;/span&gt;&lt;span class="s2"&gt; at attempt &lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;
        mount &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DEVICE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; /var/lib/containerd
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Mount done"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;

        &lt;span class="c"&gt;# 4. Restore services&lt;/span&gt;
        systemctl start containerd
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - Services started"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;
        &lt;span class="nb"&gt;exit &lt;/span&gt;0
    &lt;span class="k"&gt;fi
    &lt;/span&gt;&lt;span class="nb"&gt;sleep &lt;/span&gt;2
&lt;span class="k"&gt;done

&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - ERROR: device not found after 30 seconds"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$LOGFILE&lt;/span&gt;
&lt;span class="nb"&gt;exit &lt;/span&gt;1

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

&lt;/div&gt;



&lt;p&gt;I chose &lt;code&gt;/usr/local/bin&lt;/code&gt;, but you can put it wherever you want.&lt;/p&gt;

&lt;p&gt;Edit &lt;code&gt;/etc/wsl.conf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[boot]&lt;/span&gt;
&lt;span class="py"&gt;systemd&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"/usr/local/bin/mount-containerd.sh"&lt;/span&gt;

&lt;span class="nn"&gt;[interop]&lt;/span&gt;
&lt;span class="py"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;span class="py"&gt;appendWindowsPath&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;

&lt;span class="nn"&gt;[user]&lt;/span&gt;
&lt;span class="py"&gt;default&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;node # change with your work user, or comment if you're running as root.&lt;/span&gt;

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

&lt;/div&gt;






&lt;p&gt;Exit WSL and create the file &lt;code&gt;C:\wsl\debian\start-dev.bat&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;@echo &lt;span class="na"&gt;off&lt;/span&gt;

&lt;span class="c"&gt;:: Execute as administrator or wsl --mount doesn't work&lt;/span&gt;

&lt;span class="c"&gt;:: Mount the VHDX&lt;/span&gt;
&lt;span class="kd"&gt;wsl&lt;/span&gt; &lt;span class="na"&gt;--mount --vhd &lt;/span&gt;&lt;span class="kd"&gt;C&lt;/span&gt;:\wsl\debian\docker&lt;span class="na"&gt;-data&lt;/span&gt;.vhdx &lt;span class="na"&gt;--bare &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="kr"&gt;nul&lt;/span&gt;

&lt;span class="c"&gt;:: Open the distro&lt;/span&gt;
&lt;span class="kd"&gt;wsl&lt;/span&gt; &lt;span class="na"&gt;-d &lt;/span&gt;&lt;span class="kd"&gt;Debian&lt;/span&gt;&lt;span class="na"&gt;-Dev --cd &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Right-click and run as administrator.&lt;/p&gt;

&lt;p&gt;Important: With this method, you won't be able to launch &lt;code&gt;wsl -d DebianDev&lt;/code&gt; from the terminal without first mounting the disk. This is an acceptable solution for me, but if it isn't for you, there's a workaround. Create a task in Task Scheduler that, when the system or your user starts, runs the &lt;code&gt;wsl --mount&lt;/code&gt; of the vhdx, at which point the distro will behave like all the other WSL distros because it will find the disk already available without using &lt;code&gt;start-dev.bat&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For added security, I added this simple block to the shell start script (in my case, &lt;code&gt;zsh&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# --- CONTAINERD MOUNT CHECK ---&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; mountpoint &lt;span class="nt"&gt;-q&lt;/span&gt; /var/lib/containerd&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"⚠️ WARNING: docker-data.vhdx not mounted!"&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;N.B.&lt;/strong&gt; In addition to the docker data, we could also create an external disk for storage volumes using the same procedure. Just add the mount to &lt;code&gt;/usr/local/bin/mount-containerd.sh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Last but not least, to recover space on the main disk, you'll need to compact it with &lt;code&gt;diskpart&lt;/code&gt; because the space deleted from &lt;code&gt;/var/lib/containerd.bak&lt;/code&gt; is not automatically recovered. I've tried to make this guide as simple and clear as possible, but I understand there are a lot of steps involved; I hope I haven't made any mistakes. If you have found different solutions, write it in the comments, or let's discuss it together.&lt;/p&gt;




&lt;p&gt;Side notes: pre requisites based on my current implementetion &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WSL version &amp;gt;=0.67.6 o native support to systemd, enbled by /etc/wsl.conf.&lt;/li&gt;
&lt;li&gt;Docker Engine latest version to have native containerd instead of traditional /var/lib/docker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have different versions the logic remains the same.&lt;/p&gt;




&lt;p&gt;🇮🇹 Nota di Trasparenza dell'Autore&lt;/p&gt;

&lt;p&gt;L'architettura, gli script e le strategie presentate in questo articolo sono originali al 100%, frutto della mia esperienza diretta. Ho concepito e scritto l'intero pezzo nella mia lingua madre, l'italiano. Ho utilizzato un LLM esclusivamente come mero strumento di traduzione verso l'inglese, per rifinire la terminologia tecnica e rendere il contenuto accessibile alla community internazionale.&lt;/p&gt;

&lt;p&gt;🇬🇧 Author's Transparency Note&lt;/p&gt;

&lt;p&gt;The architecture, scripts, and strategies presented in this article are 100% original, born from my direct field experience. I conceptualized and wrote the entire piece in my native language, Italian. I used an LLM strictly as a translation tool to adapt the content into English, refining the technical terminology to make it accessible to the global community.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>linux</category>
      <category>microsoft</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>"Dead Man's Float" Approach To Surviving the Wave</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Tue, 16 Jun 2026 05:58:28 +0000</pubDate>
      <link>https://dev.to/marcobblk/dead-mans-float-approach-to-surviving-the-wave-2f99</link>
      <guid>https://dev.to/marcobblk/dead-mans-float-approach-to-surviving-the-wave-2f99</guid>
      <description>&lt;p&gt;Today, I want to talk about something that has absolutely nothing to do with code, system engineering, or software architecture. Or maybe, if we look closely enough, it has everything to do with it.&lt;/p&gt;

&lt;p&gt;We live and work in chaotic times. Sure, today’s modern toolsets and AI assistants allow us to offload some of the tedious, day-to-day syntax, making the core technical work slightly more relaxed. Yet, anyone in our industry knows the harsh truth: burnout is always lurking just around the corner. The screen stays on, the backlog grows, and the cognitive load compounds.&lt;/p&gt;

&lt;p&gt;There is a song by an Italian songwriter, Luciano Ligabue, called &lt;em&gt;&lt;a href="https://www.youtube.com/watch?v=wBEDjLACn_U" rel="noopener noreferrer"&gt;"Metti in circolo il tuo amore"&lt;/a&gt;&lt;/em&gt; (Circulate Your Love). A specific stanza has stayed with me for years:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“E ti sei opposto all'onda / Ed è lì che hai capito / Che più ti opponi e più ti tira giù / E ti senti ad una festa / Per cui non hai l'invito / Per cui gli inviti adesso falli tu”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In English it sounds more or less like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“And you fought the wave / And that's when you realized / That the more you fight it, the more it pulls you down / And you feel like you're at a party / To which you have no invitation / So from now on, you make the invitations yourself”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These few words triggered a deep reflection in me, and they eventually shaped my personal survival philosophy: &lt;strong&gt;"Fare il morto a galla"&lt;/strong&gt;—doing the &lt;strong&gt;dead man's float&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you are far out at sea, exhausted, and the currents take over, fighting the water is a mathematical error. The more you thrash, the more oxygen you burn, the denser your body becomes, and the faster you sink. The only scientifically and existentially correct strategy is to stop kicking. You flip onto your back, offer your maximum surface area to the water, and let the sea hold you up. &lt;/p&gt;

&lt;p&gt;In our profession, doing the float is the only real way to catch your breath when you are drowning in inputs. It is a strategic timeout. It’s not giving up; it’s an extreme optimization of your remaining energy when the system is in thermal throttling.&lt;/p&gt;

&lt;p&gt;But Ligabue’s lyrics go further: &lt;em&gt;“So from now on, you make the invitations yourself.”&lt;/em&gt; That line carries a profound, almost architectural weight. It’s about shifting from a purely reactive state to an active one. It means stopping the constant scramble to meet external expectations, and instead, redefining the rules of your own space. I could spend paragraphs explaining exactly what this means to me, but I prefer to leave it open. In engineering, we value clean abstraction; in life, some concepts are best left for the reader to implement in their own way.&lt;/p&gt;

&lt;p&gt;I know this is incredibly difficult to practice. The external inputs—the notifications, the metrics, the pressure to always perform—are overwhelming. The world demands constant computation.&lt;/p&gt;

&lt;p&gt;But sometimes, the most productive thing a senior mind can do is to drop the frequency to zero, lie back, and float. &lt;/p&gt;

&lt;p&gt;And you? When the waves get too high and the current is strong, how do you catch your breath?&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>burnout</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Software Development as a Philosophical Act: Beyond Syntactic Sugar</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Fri, 12 Jun 2026 05:49:46 +0000</pubDate>
      <link>https://dev.to/marcobblk/software-development-as-a-philosophical-act-beyond-syntactic-sugar-2n32</link>
      <guid>https://dev.to/marcobblk/software-development-as-a-philosophical-act-beyond-syntactic-sugar-2n32</guid>
      <description>&lt;p&gt;Recently, a reader Alton &lt;a href="https://dev.to/alton_zheng_15fb4bf0d73a3/comment/39b0p"&gt;left a comment&lt;/a&gt; on my &lt;a href="https://dev.to/bumbulik0/700-followers-800-reads-in-3-months-maybe-old-school-engineering-still-resonates-4jb5"&gt;previous post&lt;/a&gt;, asking a challenging question: &lt;em&gt;How do you approach teaching or mentoring others to maintain an "old school" engineering mindset in today’s AI-driven environment?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This made me reflect deeply on my years as an instructor. Long before the advent of Large Language Models, I always operated under a core principle: &lt;strong&gt;software development — when understood not merely as typing syntax, but as architecting solutions — is fundamentally rooted in philosophy.&lt;/strong&gt; I am not talking about textbook academic philosophy, though perhaps that would help too. I am talking about a structural mindset. Of course, as engineers, we must eventually translate thought into practice and deliver a concrete, working result. But the philosophical approach to a problem is what wins the long game.&lt;/p&gt;




&lt;p&gt;Years ago, when I was teaching Visual Basic, I constantly drilled into my students that searching for a solution is entirely independent of the programming language. The language itself is just an implementation detail, a tool to be studied. &lt;/p&gt;

&lt;p&gt;During the first week or two, some students would actually protest. They would look at me and say, &lt;em&gt;"You aren't teaching us."&lt;/em&gt; They expected predefined standards, snippets to copy, and rote memorization. But I refused to give them the answers. I enforced boundaries, models, and constraints. Over time, as they realized that the solutions to complex bugs and logic loops were suddenly originating from their own reasoning without my intervention, they finally understood.&lt;/p&gt;

&lt;p&gt;They weren't just learning to code; they were learning how to think.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Core: Seeing the Forest, Not Just the Trees
&lt;/h2&gt;

&lt;p&gt;In my career, the time spent typing code has always been a fraction of the time spent analyzing the problem and exploring potential paths. A trained engineering mind doesn't just fix the immediate bug or implement the current feature request; it looks at how the system will evolve over time. It anticipates the client's next needs by looking at the whole forest, not just the single tree. It requires freeing your imagination to find non-conventional solutions or to refine existing ones.&lt;/p&gt;

&lt;p&gt;This is the exact opposite of how modern AI operates. LLMs predict the next token or the next line of code based on a statistical distribution derived from existing literature. By definition, AI operates within the boundaries of the statistically probable. But in real-world engineering, the standard, 'statistically probable' solution is rarely the elegant, tailor-made architecture your specific context demands.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One might argue that AI's randomness can sometimes mimic human intuition, occasionally assembling existing pieces into a novel puzzle no one has thought of before. But there is a fundamental difference: AI's randomness is a blind statistical roll of the dice. Human intuition, on the other hand, is a purposeful leap driven by an understanding of constraints. AI can generate a thousand unpredictable combinations, but it lacks the contextual judgment to know which puzzle actually makes engineering sense. It can suggest the pieces, but the architect must still design the picture.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Analyzing and verifying requirements is a continuous mental exercise. Even if your reasoning ultimately leads you to rewrite standard, well-known patterns, the process itself is invaluable. It is the mental gym that keeps your brain flexible, disciplined, and ready for the unexpected.&lt;/p&gt;




&lt;h2&gt;
  
  
  Language is a Detail, Autonomy is the Goal
&lt;/h2&gt;

&lt;p&gt;If you focus solely on the syntax of a language—whether it was Visual Basic decades ago, a trendy JavaScript framework last week, or an AI prompt today—you are trapping yourself in a commodity skill. When you look at a problem from a high architectural level, the language becomes a mere deployment detail.&lt;/p&gt;

&lt;p&gt;As a mentor, my goal has never been to hand out ready-made snippets. It is to force the developer to step back and look at the structural layout. That "click" moment—when a junior developer realizes they solved a complex architecture loop entirely on their own—is the moment they transition from being a simple executor to a true professional. &lt;/p&gt;

&lt;p&gt;In the AI era, this shift is critical. If you only know syntax, you are letting the AI do the thinking, which makes you obsolete. If you master structural reasoning, you learn how to learn. The AI becomes your high-speed compiler, but you remain the sole custodian of the system design.&lt;/p&gt;




&lt;h2&gt;
  
  
  Case Study: GemmaLink – Architecture Wins Over Syntax
&lt;/h2&gt;

&lt;p&gt;I had a chance to put this philosophy to the test during a recent challenge on DEV.to. The goal was to build an application leveraging Google's lightweight Gemma models. &lt;/p&gt;

&lt;p&gt;Instead of getting hypnotized by the AI model itself, I started with an architectural question: &lt;em&gt;What would be genuinely useful, fun, and capable of running entirely local—respecting privacy with zero cloud dependencies?&lt;/em&gt; That is how the idea for &lt;a href="https://dev.to/bumbulik0/gemmalink-your-private-eye-assistant-3fgg"&gt;GemmaLink&lt;/a&gt; was born.&lt;/p&gt;

&lt;p&gt;Then came the engineering constraints. I knew the target user shouldn't have to deal with installing Docker, configuring Python environments, or setting up complex LLM studios. The app needed to be a single, lightweight, zero-dependency binary that could run anywhere. &lt;/p&gt;

&lt;p&gt;The ideal architectural fit for this was Go—a language I only knew at a basic level. &lt;/p&gt;

&lt;p&gt;Did I let that stop me? No. Because the language is just a detail. I used AI extensively to generate the Go syntax, acting as a tireless assistant. But the core architecture, the strict definition of requirements, the data layout, the testing, and the debugging? That was entirely mine. Without a structured engineering mindset setting the boundaries, the AI would have just generated generic Python scripts completely useless for my deployment constraints. Architecture won over syntax.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion: The Human Element of Mentoring
&lt;/h2&gt;

&lt;p&gt;At the end of the day, passing down an "old school" mindset cannot be compressed into a rigid set of mathematical rules. Mentoring isn't something you can automate because it is built entirely on empathy, active listening, and human communication. A good mentor must first know how to listen, setting aside their own biases to understand how the student thinks.&lt;/p&gt;

&lt;p&gt;My goal is to instill rigor and structure, but the curiosity, the drive, and the final decisions must always belong to the developer. It took me years of practice, experimentation, and trial to shape this mindset—and truth be told, even I struggle to fully rationalize it sometimes. But that is exactly how it should be. We are not all wired the same way, and each of us connects with others differently.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;More of my thoughts and technical articles can be found at &lt;a href="https://www.nospace.net" rel="noopener noreferrer"&gt;nospace.net&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;What do you think? Does this "learning to learn" approach make sense in your current AI-driven context? Let's discuss in the comments below.&lt;/p&gt;




</description>
      <category>discuss</category>
      <category>mentorship</category>
      <category>programming</category>
      <category>architecture</category>
    </item>
    <item>
      <title>700+ Followers, 800+ Reads in 3 Months: Maybe "Old School" Engineering Still Resonates</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Thu, 11 Jun 2026 04:59:38 +0000</pubDate>
      <link>https://dev.to/marcobblk/700-followers-800-reads-in-3-months-maybe-old-school-engineering-still-resonates-4jb5</link>
      <guid>https://dev.to/marcobblk/700-followers-800-reads-in-3-months-maybe-old-school-engineering-still-resonates-4jb5</guid>
      <description>&lt;p&gt;I was looking at my &lt;strong&gt;DEV dashboard&lt;/strong&gt; recently, and I am genuinely moved. In the last three months, I’ve recorded approximately &lt;strong&gt;800+ reads&lt;/strong&gt;, and &lt;strong&gt;700+ of you&lt;/strong&gt; have decided to follow my journey. That is a nearly &lt;strong&gt;1:1 ratio&lt;/strong&gt; between readers and followers—a statistic I never expected.&lt;/p&gt;

&lt;p&gt;In an industry often obsessed with the "next big thing," seeing that a traditional, &lt;strong&gt;"old school"&lt;/strong&gt; approach to engineering resonates so strongly is both surprising and deeply rewarding.&lt;/p&gt;

&lt;h3&gt;
  
  
  It’s Not About the Tool, It’s About the Mindset
&lt;/h3&gt;

&lt;p&gt;Throughout my &lt;strong&gt;40-year career&lt;/strong&gt;, I’ve seen countless "revolutionary" technologies come and go. I’ve transitioned from manual memory management to high-level frameworks, and from monolithic architectures to Dockerized environments.&lt;/p&gt;

&lt;p&gt;Today, the conversation is dominated by &lt;strong&gt;AI&lt;/strong&gt;. But for someone who has witnessed the evolution of compilers and the birth of modern IDEs, I see it for what it is: &lt;strong&gt;another powerful tool at our disposal.&lt;/strong&gt; Tools change, as they always have, but the &lt;strong&gt;engineering mindset&lt;/strong&gt; remains constant. Whether you are writing a Bash script, designing a RAG system, or refactoring a legacy Java monolith, what matters is the discipline behind the work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Understanding the "why"&lt;/strong&gt; before the "how."&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Treating code as a long-term asset&lt;/strong&gt;, not a disposable snippet.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Prioritizing architecture and maintainability&lt;/strong&gt; over raw speed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quality Over Quantity
&lt;/h3&gt;

&lt;p&gt;What strikes me most isn't just the number of followers, but the quality of the time you spend with my words. My data shows peaks of &lt;strong&gt;908 seconds (over 15 minutes)&lt;/strong&gt; of average reading time on March 27th and April 2nd. Even recently, on June 9th, you spent an average of nearly &lt;strong&gt;8 minutes (477 seconds)&lt;/strong&gt; per post.&lt;/p&gt;

&lt;p&gt;In a world of skim-reading and short attention spans, &lt;strong&gt;you are studying&lt;/strong&gt;. You are looking for depth, and that gives me great hope and strength to continue writing for the future of our industry.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Now?
&lt;/h3&gt;

&lt;p&gt;Now that I am retired, I am no longer obsessed with production deadlines or the need to satisfy executives and clients. I finally have the time to look back and share what I've learned.&lt;/p&gt;

&lt;p&gt;As a &lt;strong&gt;self-taught developer&lt;/strong&gt; who has "broken and fixed" systems for four decades, I feel my role now is to help maintain this focus on craftsmanship. It is easy to get lost in automation, but automation is only as good as the engineer directing it. I want to share the &lt;strong&gt;rigor and "maestria"&lt;/strong&gt; that allow a developer to remain calm when a migration fails or a system crashes—moments where no tool can substitute for experience and a solid mental framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Lesson That Always Works
&lt;/h3&gt;

&lt;p&gt;I’ve learned one thing above all: &lt;strong&gt;"Questions" are more important than "answers."&lt;/strong&gt; This applies not only to code development but to general design and every aspect of life.&lt;/p&gt;

&lt;p&gt;As long as you keep asking questions—to yourselves, to a mentor, to a colleague, or to an AI—your curiosity to learn and improve will lead you to exceptional results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thank You
&lt;/h3&gt;

&lt;p&gt;To the 700+ of you who have joined me: &lt;strong&gt;thank you&lt;/strong&gt;. You are proving that "old school" values—analysis, architecture, and engineering integrity—are far from obsolete. They are, in fact, the very foundation upon which all new technologies must be built.&lt;/p&gt;

&lt;p&gt;I am excited to continue this conversation in my series: &lt;strong&gt;"Beyond the Prompt: Why Experience Still Matters."&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Let’s keep building with the right mindset.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;You can also find me here:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Blog:&lt;/strong&gt; &lt;a href="https://www.nospace.net" rel="noopener noreferrer"&gt;nospace.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/msbragi?tab=repositories" rel="noopener noreferrer"&gt;msbragi repositories&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>community</category>
      <category>learning</category>
      <category>discuss</category>
      <category>developers</category>
    </item>
    <item>
      <title>Beyond the Prompt: Why Experience Still Matters</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Mon, 08 Jun 2026 05:21:59 +0000</pubDate>
      <link>https://dev.to/marcobblk/beyond-the-prompt-why-experience-still-matters-39kp</link>
      <guid>https://dev.to/marcobblk/beyond-the-prompt-why-experience-still-matters-39kp</guid>
      <description>&lt;h2&gt;
  
  
  My profile: 40 years of IT evolution
&lt;/h2&gt;

&lt;p&gt;My name is Marco and I am an IT professional with 40 years of experience spent across software development, analysis, and architecture. Technically I am retired, but I continue to dedicate myself to code to keep my mind active and to give back to a community that has given me so much. Today, I do not look at innovation with suspicion, but with the method of someone who can distinguish a passing trend from a paradigm shift. Now I am dedicating a large part of my time to studying Artificial Intelligence systems and RAG (Retrieval-Augmented Generation), developing a privacy-oriented Agnostic RAG System. I am not a "Luddite": I am a craftsman learning to use a new chisel, fully aware however that the hand guiding it must know the grain of the wood better than the tool itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Core: The engineering as craft
&lt;/h2&gt;

&lt;p&gt;This series of articles was born to reaffirm a concept that AI marketing is trying to obscure: software engineering is a craft, not a simple sequence of instructions dictated to a machine. We are sliding dangerously toward "Vibe Coding", where the important thing is that the code "looks" like it works at first glance. However, a vast gulf exists between coding speed and architectural solidity.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Vibe Coding:&lt;/strong&gt; It relies on the illusion of speed and the myth of an 8x increased productivity. It often ignores technical debt and complexity, limiting itself to pasting generated snippets that no one truly understands under the hood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Senior Architect Mindset:&lt;/strong&gt; It considers code as a long-term asset. Here, productivity is measured in maintainability and the capacity to prevent structural failures. An architect does not stop at "it works now", but evaluates architectural patterns and the total cost of ownership of the software.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The true danger of the 8x myth is &lt;strong&gt;Recursive AI&lt;/strong&gt;: the concrete risk of feeding models mediocre code generated by other models, creating a spiral of quality degradation that only an experienced human eye can interrupt.&lt;/p&gt;




&lt;h2&gt;
  
  
  Serie's roadmap: The first 5 stages of awareness
&lt;/h2&gt;

&lt;p&gt;Through five fundamental stages, with a bit of ironic salt, I will accompany you into my "old craftsman" workshop to explore how to remain engineers in a world of prompts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/beyond-the-8x-productivity-myth-a-40-year-perspective-on-recursive-ai-and-the-craft-of-bk8"&gt;Beyond the 8x Productivity Myth&lt;/a&gt;:&lt;/strong&gt; A cold shower on real productivity. We will analyze the dangers of Recursive AI and why pure speed, without architectural control, is the fastest way to destroy a project.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/ai-coding-philosophy-2eoj"&gt;AI coding philosophy&lt;/a&gt;:&lt;/strong&gt; How to integrate LLMs into the workflow without losing your soul. A reflection on how to delegate the fatigue, but never the responsibility for quality.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/clean-ai-development-3e51"&gt;Clean AI Development&lt;/a&gt;:&lt;/strong&gt; We apply the principles of Clean Code to automated generation. If the AI writes dirty code and you accept it, the problem is not the machine, it's you.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/the-senior-architect-simulator-how-i-hacked-copilot-to-hate-my-code-36ib"&gt;The Senior Architect Simulator&lt;/a&gt;:&lt;/strong&gt; A provocative challenge. I will show you how I "hacked" Copilot to force it to hate mediocre code, forcing it to respect exceptionally high standards.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/ai-or-not-ai-19k1"&gt;AI, or not AI&lt;/a&gt;:&lt;/strong&gt; The final dilemma. Learning to understand when AI is a valuable ally and when instead it is necessary to turn off the prompt and return to pure, "Old School" logic.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The real value of experience for new devs generation
&lt;/h2&gt;

&lt;p&gt;To you, young colleagues: AI is a formidable tool, but do not let it become your cognitive crutch. The true differentiator of your career will never be the speed in generating a function, but the capacity to understand what happens "under the hood".&lt;br&gt;
I have seen languages born and die, but the logic of a Docker container or the structure of a database remain constant. Remember: AI will not save you at 3 AM when a corrupted database migration crashes production. In those moments, the "pain" of experience — that visceral awareness of how data moves — is the only thing that matters. Master the basics, study architectures, and use AI to noble your professionalism, not to replace it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion and debates
&lt;/h2&gt;

&lt;p&gt;I look forward to seeing you on DEV.to for the next chapters of this series. My virtual office is always open: I am available to discuss anything I know — from Java to NestJS — or to explore together the new frontiers I am studying. The comparison between my past and your future is the engine that keeps our profession alive.&lt;br&gt;
Always keep one thing in mind: quality code is the only currency that never depreciates, regardless of the technological paradigm of the moment. We will read each other soon.&lt;/p&gt;

</description>
      <category>development</category>
      <category>ai</category>
      <category>discuss</category>
      <category>learning</category>
    </item>
    <item>
      <title>Beyond the 8x Productivity Myth: A 40-Year Perspective on Recursive AI and the "Craft" of Engineering</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Sun, 07 Jun 2026 08:44:35 +0000</pubDate>
      <link>https://dev.to/marcobblk/beyond-the-8x-productivity-myth-a-40-year-perspective-on-recursive-ai-and-the-craft-of-bk8</link>
      <guid>https://dev.to/marcobblk/beyond-the-8x-productivity-myth-a-40-year-perspective-on-recursive-ai-and-the-craft-of-bk8</guid>
      <description>&lt;h3&gt;
  
  
  Introduction: The Ghost in the Codebase
&lt;/h3&gt;

&lt;p&gt;I started my professional journey in &lt;strong&gt;1986&lt;/strong&gt;. It was the era of Honeywell systems, Commodore 64s, and developing management software in &lt;strong&gt;DataFlex&lt;/strong&gt; on Concurrent-CPM. Back then, "compute" was a luxury; we planned every line of code because a single compilation could take enough time to grab a coffee—or two. &lt;/p&gt;

&lt;p&gt;Fast forward to 2026. I am reading the latest Anthropic paper, &lt;strong&gt;&lt;a href="https://www.anthropic.com/institute/recursive-self-improvement" rel="noopener noreferrer"&gt;"When AI builds itself"&lt;/a&gt;&lt;/strong&gt;. It describes a world where the "doing"—writing code, running experiments, and identifying bugs—is being delegated to autonomous agents. As a retired architect who still keeps his mind active by building, I see a fascinating but dangerous gap between the productivity metrics of big labs and the reality of sustainable, professional engineering.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The "8x Productivity" Illusion
&lt;/h3&gt;

&lt;p&gt;The Anthropic report makes a staggering claim: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Today, Anthropic engineers on average ship 8x as much code per quarter as they did from 2021-2025"&lt;/em&gt;. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Furthermore, as of May 2026, more than &lt;strong&gt;80% of the code&lt;/strong&gt; merged into their codebase is authored by Claude. To a manager, this sounds like a dream. To a Senior Architect, it looks like a potential nightmare of technical debt. &lt;/p&gt;

&lt;p&gt;Anthropic themselves admit a crucial limitation: while AI is superhuman at optimizing code (achieving up to a &lt;strong&gt;52x speedup&lt;/strong&gt; in specific tests), there are still &lt;em&gt;"large performance gaps when it comes to Claude exercising judgement in choosing goals"&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;In my 40 years, I’ve learned that "choosing the goal" &lt;em&gt;is&lt;/em&gt; the job. Writing the syntax is just the clerical work. If we automate the clerical part but lose the "judgment," we aren't 8x more productive—we are just 8x faster at creating complexity we don't fully understand.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Economic Barrier: $18,000 for a "Thought"
&lt;/h3&gt;

&lt;p&gt;One passage in the paper highlights the massive infrastructure gap facing freelancers and small shops:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The agents recovered 97% of the gap [in a research project] over 800 cumulative hours and used roughly $18,000 in compute"&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most independent developers cannot afford an &lt;strong&gt;$18,000 "experimental loop"&lt;/strong&gt; for a single feature. This is why I built &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/llm-manager-orchestrating-ollama-and-llamacpp-with-pure-bash-181p"&gt;LLM-Manager&lt;/a&gt;&lt;/strong&gt; using &lt;strong&gt;Pure Bash&lt;/strong&gt;. My goal is the opposite of a recursive loop that burns through thousands of dollars in cloud tokens. I want &lt;strong&gt;zero-overhead&lt;/strong&gt;, OS-level access, and hardware-aware orchestration that allows a developer to run local models (Ollama/Llama.cpp) with the efficiency of a 1980s engineer but the power of 2026 AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The "Vibe Coding" Trap and the Need for Determinism
&lt;/h3&gt;

&lt;p&gt;We are seeing a trend called &lt;strong&gt;"Vibe Coding"&lt;/strong&gt;—the idea that you can just "talk" to an AI, trust the output, and let it build. But "vibes" don't catch critical bugs. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Moonwell DeFi Hack:&lt;/strong&gt; In February 2026, a basic miscalculation in an AI-generated smart contract (authored by Claude Code) led to a &lt;strong&gt;$1.7 million loss&lt;/strong&gt; in four minutes.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Responsibility Gap:&lt;/strong&gt; AI does not feel the weight of a system downtime. It simply continues to generate "statistically plausible" answers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why my project, &lt;strong&gt;&lt;a href="https://github.com/msbragi/RAG-System-Dist" rel="noopener noreferrer"&gt;RAG-System-Dist&lt;/a&gt;&lt;/strong&gt;, prioritizes &lt;strong&gt;determinism and traceability&lt;/strong&gt; over opaque automation. I don't want an AI that "vibes" its way to an answer. I want a system where every response is linked to a source that I, the human expert, can verify with a single "Point-and-Click".&lt;/p&gt;

&lt;h3&gt;
  
  
  4. My Philosophy: Code is Craft
&lt;/h3&gt;

&lt;p&gt;On my site, &lt;a href="https://www.nospace.net" rel="noopener noreferrer"&gt;nospace.net&lt;/a&gt;, I advocate for a simple principle: &lt;strong&gt;Code is Craft&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;To me, being a developer in the age of LLMs isn't about knowing the syntax of C++, Python, or Java—the AI has already "saturated" those benchmarks. It is about the &lt;strong&gt;Architecture of Intent&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;I even created a &lt;strong&gt;&lt;a href="https://dev.to/bumbulik0/the-senior-architect-simulator-how-i-hacked-copilot-to-hate-my-code-36ib"&gt;Hostile Architect Configuration&lt;/a&gt;&lt;/strong&gt; for GitHub Copilot as a joke (but not too much). Why? Because AI is often too polite; it tells you your bad ideas are good ones. Real engineers need a reality check. They need to understand the &lt;em&gt;why&lt;/em&gt; before the &lt;em&gt;how&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The Path for the Next Generation
&lt;/h3&gt;

&lt;p&gt;My fear for junior developers is that they might get trapped in an "addictive" cycle of AI-dependency, losing the ability to think through architectural trade-offs. &lt;/p&gt;

&lt;p&gt;If you want to survive the next 40 years in IT:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Master the Patterns:&lt;/strong&gt; Understand the redundancies.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Maintain Control:&lt;/strong&gt; Use the AI to speed up the &lt;em&gt;writing&lt;/em&gt;, but never delegate the &lt;em&gt;thinking&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Stay Deterministic:&lt;/strong&gt; Build systems that are verifiable and auditable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There isn't a single "right" way to implement a solution, but there is a way that follows &lt;strong&gt;your&lt;/strong&gt; mind. If the code is part of your thinking, it will still be clear to you a year from now.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final Thoughts: Responsibility and Ownership
&lt;/h3&gt;

&lt;p&gt;Only an experienced engineer can evaluate architectural trade-offs, check if a solution fits the real business context, and take responsibility for the final product. Today, AI is not the brain of development, but its hands. It makes the process faster, but direction and meaning must still come from a human.&lt;/p&gt;

&lt;p&gt;If the code is part of your thinking, it will still be clear to you a year from now. If it’s just a "vibe," it will be a ghost in your codebase.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;P.S. Maybe I’m just "old-school"? Or perhaps 40 years in the trenches have given me a different perspective on what "craft" really means. What do you think? Are we gaining productivity or just losing control?&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About the Author:&lt;/strong&gt; I am an IT operator with 40 years of experience. I’ve seen the world move from floppy disks to recursive AI agents, and I still believe that the most important "compute" happens between the ears of the engineer.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: This post was originally written in Italian my native language and refined to English with the assistance of an LLM to ensure technical clarity.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>vibecoding</category>
      <category>discuss</category>
    </item>
    <item>
      <title>LLM-Manager: Orchestrating Ollama and Llama.cpp with Pure Bash</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Fri, 29 May 2026 08:16:54 +0000</pubDate>
      <link>https://dev.to/marcobblk/llm-manager-orchestrating-ollama-and-llamacpp-with-pure-bash-181p</link>
      <guid>https://dev.to/marcobblk/llm-manager-orchestrating-ollama-and-llamacpp-with-pure-bash-181p</guid>
      <description>&lt;p&gt;&lt;strong&gt;LLM-Manager&lt;/strong&gt; is a lightweight, modular Bash suite with a dual JSON/Interactive interface designed to manage local and remote inference engines across Linux and WSL2.&lt;/p&gt;

&lt;p&gt;When I started experimenting with Large Language Models (LLMs) to build an On-Premise RAG (Retrieval-Augmented Generation) application, I hit a massive roadblock: &lt;strong&gt;environment fragmentation&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Managing multiple inference engines like Ollama and Llama.cpp meant memorizing different command-line flags, environment variables, and configurations. Once my frontend and backend prototypes were ready for testing, I realized I was spending too much time manually starting, stopping, loading, and unloading models.&lt;/p&gt;

&lt;p&gt;I looked online for solutions. Most people suggested complex Python scripts, heavy Docker setups, n8n workflows, or complicated web dashboards. &lt;/p&gt;

&lt;p&gt;I didn't want the bloat. I wanted something lightweight that executed commands as if I were doing them manually, but with zero cognitive load. &lt;/p&gt;

&lt;p&gt;That is why I built &lt;strong&gt;LLM-Manager&lt;/strong&gt;: a modular orchestration suite written entirely in pure Bash.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Bash?
&lt;/h2&gt;

&lt;p&gt;Choosing Bash wasn't about being old-school; it was a pragmatic engineering decision:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero Overhead:&lt;/strong&gt; No python virtual environments, no &lt;code&gt;npm install&lt;/code&gt;, no runtime dependencies. It’s native and lightning-fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OS-Level Access:&lt;/strong&gt; It can natively probe hardware metrics (CPU load, RAM, Disk, GPU VRAM) and manage OS processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Platform via WSL2:&lt;/strong&gt; By utilizing minor PowerShell bridges only when necessary (like starting a server on the Windows host side), the exact same Bash scripts run flawlessly across both native Linux and Windows/WSL2 environments.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;The system is designed with a strict plug-and-play modular layout. At the center sits a single entry-point orchestrator (&lt;code&gt;engine-run.sh&lt;/code&gt;) that validates arguments against whitelists and routes actions to engine-specific scripts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
├── engine.conf               # Global configuration constants
├── engine-models.json        # Model registry with per-engine metadata
├── engine-templates.json     # Prompt/Model templates by family
├── engine-run.sh             # Main orchestrator &amp;amp; entry-point
├── engine-common.sh          # Shared utilities (OS detection, JSON formatting)
├── engine-status.sh          # Cross-engine status aggregation
├── engine-system.sh          # Hardware metric probing
├── logs/                     # Centralized logs
├── llama/                    # Llama.cpp backend scripts
└── ollama/                   # Ollama backend scripts

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

&lt;/div&gt;


&lt;p&gt;Every engine directory implements a consistent interface (&lt;code&gt;start.sh&lt;/code&gt;, &lt;code&gt;stop.sh&lt;/code&gt;, &lt;code&gt;status.sh&lt;/code&gt;, &lt;code&gt;load.sh&lt;/code&gt;, &lt;code&gt;unload.sh&lt;/code&gt;, &lt;code&gt;show.sh&lt;/code&gt;, &lt;code&gt;remove.sh&lt;/code&gt;). If an engine doesn't support a specific action, a simple stub script that exits with &lt;code&gt;0&lt;/code&gt; keeps the pipeline happy.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Dual-Output Contract (Human + Machine)
&lt;/h2&gt;

&lt;p&gt;One of the core features of LLM-Manager is how it handles output.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive text (Logs, Help, Errors)&lt;/strong&gt; is routed to &lt;code&gt;stderr&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured JSON data&lt;/strong&gt; is routed to &lt;code&gt;stdout&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This dual nature makes it perfect for local interactive use, but also means it acts as a local proxy. You can run it over &lt;strong&gt;Remote SSH&lt;/strong&gt; and pipe the clean JSON straight into another monitoring script, custom Web UI, or automation tool.&lt;/p&gt;
&lt;h3&gt;
  
  
  Example 1: Global Status Check
&lt;/h3&gt;

&lt;p&gt;Running &lt;code&gt;./engine-run.sh status&lt;/code&gt; probes the system metrics and queries active network ports, spitting out a comprehensive payload:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-05-29T06:38:30Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"system"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"os_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"wsl"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"memory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"total_mb"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5927&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"available_mb"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4555&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"gpu"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"detected"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AMD Radeon(TM) Graphics"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"vram_total_mb"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cpu"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"cores"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"load_1m"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"engines"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ollama"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stopped"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1234&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"llama"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stopped"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12345&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

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

&lt;/div&gt;

&lt;h3&gt;
  
  
  Example 2: Interactive Help Interface
&lt;/h3&gt;

&lt;p&gt;If a command fails or is called without parameters, the machine gets the JSON error contract, and the human operator gets a clean, human-readable usage menu:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: LLM Manager
Usage: engine-run.sh &amp;lt;action&amp;gt; [engine] [args...]
actions:
    config                           Global config
    models [-h]                      List available models (-h human readable)
    status &amp;lt;engine&amp;gt;                  Show global or engine status
    start &amp;lt;engine&amp;gt; [model] [users]   Start an engine
    stop &amp;lt;engine&amp;gt;                    Stop an engine
...

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Dynamic Modelfile Generation
&lt;/h2&gt;

&lt;p&gt;Managing raw &lt;code&gt;.gguf&lt;/code&gt; files on Ollama can be a chore since it requires a &lt;code&gt;Modelfile&lt;/code&gt;. LLM-Manager abstracts this entirely in the backend via model loading strategies in &lt;code&gt;engine-models.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If a model is configured with a &lt;code&gt;gguf&lt;/code&gt; loader, the &lt;code&gt;load.sh&lt;/code&gt; script &lt;strong&gt;dynamically generates the required Modelfile on the fly&lt;/strong&gt;, injecting correct prompt templates based on the model family, and loading it into Ollama seamlessly. It also supports &lt;code&gt;native&lt;/code&gt; strategies to pull directly from the official Ollama registry, or &lt;code&gt;auto&lt;/code&gt; to fallback if the local file is missing.&lt;/p&gt;


&lt;h2&gt;
  
  
  Check out the Code
&lt;/h2&gt;

&lt;p&gt;The project is fully open-source. If you want to see how the WSL2/PowerShell bridges are handled, how the dynamic Modelfiles are generated, or if you want to use it to clean up your own local LLM testing environment, check out the repository:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/msbragi" rel="noopener noreferrer"&gt;
        msbragi
      &lt;/a&gt; / &lt;a href="https://github.com/msbragi/LLM-Manager" rel="noopener noreferrer"&gt;
        LLM-Manager
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Large Language Model management for on-premise installation
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LLM-Manager&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;A lightweight, modular Bash orchestration suite to manage, start, stop, and monitor local and remote LLM inference engines (Ollama, Llama.cpp) with a dual interactive/JSON interface.&lt;/p&gt;

&lt;p&gt;Developed primarily to solve the complexity of managing ibrid environments (like Windows hosts from WSL2) and remote deployments via SSH without the overhead of heavy Python or dashboard solutions.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Prerequisites&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Before running the orchestrator, ensure your environment has the following tools installed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bash&lt;/strong&gt; (v4.0 or higher recommended)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;jq&lt;/code&gt;&lt;/strong&gt; — Crucial for parsing and formatting JSON outputs (&lt;code&gt;sudo apt install jq&lt;/code&gt; on Debian/Ubuntu).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;curl&lt;/code&gt;&lt;/strong&gt; — Used for engine health checks and API interactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PowerShell&lt;/strong&gt; (Windows/WSL2 host setups only) — Required strictly for launching/stopping engine services on the Windows host side when managed from WSL2.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Key Features&lt;/h2&gt;
&lt;/div&gt;


&lt;ul&gt;

&lt;li&gt;

&lt;strong&gt;Multi-Engine Support:&lt;/strong&gt; Native orchestration for &lt;code&gt;ollama&lt;/code&gt; and &lt;code&gt;llama.cpp&lt;/code&gt; (with &lt;code&gt;vLLM&lt;/code&gt; planned).&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Cross-Platform &amp;amp; Hybrid Environments:&lt;/strong&gt; Supports native Linux, WSL2, and Windows hosts (orchestrating Windows processes from WSL2 using…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/msbragi/LLM-Manager" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;I am currently working on completing the &lt;code&gt;vLLM&lt;/code&gt; engine integration and refining the startup health-checks into proactive retry loops.&lt;/p&gt;

&lt;p&gt;Let me know what you think or if you've built similar lightweight alternatives for your AI workflows!&lt;/p&gt;

</description>
      <category>bash</category>
      <category>ai</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>GemmaLink: Your Private Eye Assistant</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Sun, 17 May 2026 13:57:22 +0000</pubDate>
      <link>https://dev.to/marcobblk/gemmalink-your-private-eye-assistant-3fgg</link>
      <guid>https://dev.to/marcobblk/gemmalink-your-private-eye-assistant-3fgg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Build with Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Most local AI setups are currently a dependency nightmare, forcing users into heavy Python environments, massive CUDA toolkits, or complex Docker configurations. I built &lt;strong&gt;GemmaLink&lt;/strong&gt; to achieve the exact opposite: a "Zero-Cloud", local-first assistant that turns your smartphone into a targeted vision sensor for local VLMs, running entirely on a standard PC with a single-file, plug-and-play binary.&lt;/p&gt;

&lt;p&gt;GemmaLink allows you to open a web interface on your smartphone, point it at an object, capture a precise crop via an interactive on-screen viewfinder, and chat about what the camera sees with a local model running on your machine. &lt;/p&gt;

&lt;p&gt;Unlike general-purpose tools like Google Lens, which index data on remote servers for commercial classification, GemmaLink is a strictly confidential sandbox. Because it streams data exclusively over your local network, it enables critical use cases where third-party data exposure is unacceptable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Financial Confidentiality:&lt;/strong&gt; Point your phone at bank statements or invoices to extract line items or analyze balances safely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private Medical Insights:&lt;/strong&gt; Process the layout of localized medical data or blood test terminology without uploading your health history to the cloud.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Built-in Guardrails
&lt;/h3&gt;

&lt;p&gt;Handling sensitive, real-world data requires architectural responsibility. GemmaLink enforces explicit notifications regarding the system's inherent fallibility, prompting the user to always consult certified professionals when validating critical financial or medical outputs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;I have recorded a comprehensive video walkthrough showcasing the complete lifecycle: the adaptive dual-mode interface initialization, the network handshake, the high-precision viewport cropping, and the real-time Server-Sent Events (SSE) token streaming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch the full demo on YouTube:&lt;/strong&gt; &lt;a href="https://youtu.be/VH5NG9PvsKQ" rel="noopener noreferrer"&gt;GemmaLink Walkthrough &amp;amp; Architecture Demo&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The project is fully modular, featuring a decoupled network layout where firewall rules and port-forwarding scripts (&lt;code&gt;.ps1&lt;/code&gt; and &lt;code&gt;.sh&lt;/code&gt;) remain external for maximum user transparency and maintenance efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source Code &amp;amp; Binary Assets (v1.0.0):&lt;/strong&gt; &lt;a href="https://github.com/msbragi/eye-assistant" rel="noopener noreferrer"&gt;GitHub Repository - eye-assistant&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Used Gemma 4
&lt;/h2&gt;

&lt;p&gt;GemmaLink is deliberately optimized for the &lt;strong&gt;Gemma 4&lt;/strong&gt; lightweight vision family. Choosing an ultra-lightweight, efficient vision-capable model was a strategic architectural choice for two main reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Low-Latency Edge Performance:&lt;/strong&gt; The primary objective was to guarantee a fast Time-To-First-Token in constrained local environments (pure CPU or Vulkan fallback) without demanding enterprise-grade hardware. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contextual Token Efficiency:&lt;/strong&gt; Blasting full-resolution mobile snapshots kills local inference speed and pollutes the attention matrix. The frontend computes the exact scale ratios ($videoWidth / videoRect.width$) relative to the CSS viewfinder crosshair, dynamically cropping only the targeted pixels. This surgical payload reduction matches the Gemma 4 vision sensor bounds perfectly, resulting in lightning-fast processing loops.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Driving AI without "Vibecoding"
&lt;/h3&gt;

&lt;p&gt;With over 40 years of experience writing software, Go was not part of my traditional stack. I chose it because its high-concurrency model and clean cross-compilation were required for true single-binary deployment. &lt;/p&gt;

&lt;p&gt;While I utilized an AI assistant to accelerate the implementation of the Go backend, &lt;strong&gt;this was absolutely not "vibecoding".&lt;/strong&gt; The AI served as a syntax compiler and fast writer, but the technical steering wheel remained firmly in my hands. The deterministic state machine (&lt;code&gt;preview&lt;/code&gt; -&amp;gt; &lt;code&gt;ask&lt;/code&gt; -&amp;gt; &lt;code&gt;response&lt;/code&gt;), the memory management (explicit &lt;code&gt;URL.revokeObjectURL&lt;/code&gt; cleanups to prevent mobile memory leaks), and the streaming chunk buffer that prevents incomplete Markdown strings from flickering during SSE delivery were entirely engineered under my tight architectural directives.&lt;/p&gt;




&lt;h3&gt;
  
  
  Troubleshooting: Windows + AMD Ryzen AI (Strix Halo) Edge-Case
&lt;/h3&gt;

&lt;p&gt;After testing the application on an EVO X2 mini PC equipped with unified memory and Radeon 8060S Graphics, a specific issue was identified during image processing.&lt;/p&gt;

&lt;p&gt;If you run the application on Windows using latest-generation AMD APUs (Strix Halo / Ryzen AI Max architecture) and experience an indefinite hang at the "processing image..." log during multimodal upload, the issue stems from a memory allocation lockup within the Vulkan/AMD driver stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Download a CPU-Only release of llama.cpp and place it in the bin directory where you extracted GemmaLink. Thanks to the processing power of Zen 5 and its native AVX512 / AVX512_VNNI instruction sets, vision token inference remains extremely fast while completely bypassing the graphics stack bug.&lt;/p&gt;

&lt;p&gt;Swapping to the CPU-only release serves as a reliable workaround for most image processing issues encountered on this hardware configuration, ensuring everyone can test the application. A more streamlined solution for end users will be investigated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updated 2026/05/22: To fix the problem you can download the specific release for gfx1151 from the &lt;a href="https://github.com/lemonade-sdk/llamacpp-rocm/releases" rel="noopener noreferrer"&gt;lemonade-sdk/llamacpp-rocm&lt;/a&gt; and replace the binaries in the bin folder.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next? (Community-Driven Roadmap)
&lt;/h2&gt;

&lt;p&gt;The core release (&lt;strong&gt;v1.0.0&lt;/strong&gt;) is tagged and stable. I have a backlog of advanced features mapped out, which I will implement if the project gains traction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multilingual Smartphone UI:&lt;/strong&gt; Dynamic localization driven by browser headers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON-Driven Context Chips:&lt;/strong&gt; Offloading the quick-question preset chips to an external, customizable &lt;code&gt;chips.json&lt;/code&gt; for manual user tuning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Hardware Dispatching:&lt;/strong&gt; Orchestrating automatic matching of specialized &lt;code&gt;llama.cpp&lt;/code&gt; libraries based on real-time instruction set detections directly from the Go launcher.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
    </item>
    <item>
      <title>Clean AI Development</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Fri, 01 May 2026 08:06:01 +0000</pubDate>
      <link>https://dev.to/marcobblk/clean-ai-development-3e51</link>
      <guid>https://dev.to/marcobblk/clean-ai-development-3e51</guid>
      <description>&lt;h2&gt;
  
  
  My Manifesto for the Senior Architect
&lt;/h2&gt;

&lt;p&gt;I’ve been writing software for over 40 years. To me, Large Language Models (LLMs) are just the next step in the evolution of development: they are &lt;strong&gt;semantic compilers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But if you treat an AI like a magic oracle, it gives you "average" code, which usually means spaghetti. To get senior-level output, you need a senior-level methodology. I call mine &lt;strong&gt;Clean AI Development.&lt;/strong&gt; It’s built on 7 principles designed to pilot the AI rather than just letting it guess your intent.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Deterministic File System Layout
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Why:&lt;/strong&gt; AI loses focus when it has to guess where things are. A messy layout leads to duplicated logic and broken imports.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;How:&lt;/strong&gt; Stick to a strict, predictable directory structure. The layout itself becomes "implicit documentation" that the AI uses to navigate without wasting tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Architectural Sovereignty
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Why:&lt;/strong&gt; If the AI decides the architecture, you lose control over the system's long-term viability.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;How:&lt;/strong&gt; Define the "hinges" (interfaces, DTOs, API contracts) first. The AI implements the logic &lt;em&gt;inside&lt;/em&gt; those boundaries but never dictates the structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Semantic Decoupling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Why:&lt;/strong&gt; Mixing Frontend, Backend, and Database context in one chat session causes "context bleeding" and hallucinations.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;How:&lt;/strong&gt; Use separate sessions or supplementary separate prompt files for each domain (Backend, Frontend, etc). Keep the agent’s focus narrow and surgical.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. The BMAD Protocol (Brief, Minimalist, Accurate, Direct)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Why:&lt;/strong&gt; Conversational fluff is noise. It eats up the context window and dilutes the technical precision of the output.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;How:&lt;/strong&gt; Force the AI to skip greetings. Demand high-density technical responses only. Re-state requirements briefly to ensure alignment before any code is touched.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Constraint-First Prompting
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Why:&lt;/strong&gt; AI is trained on "average" code. To get "senior" code, you must explicitly forbid average habits.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;How:&lt;/strong&gt; Start by defining what the AI &lt;strong&gt;should not&lt;/strong&gt; do: no over-engineering, no unnecessary boilerplate, no high-level abstractions unless requested.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Stateless Session Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Why:&lt;/strong&gt; Context saturation is an engineering limit. After a while, the "noise" in a session makes the AI unreliable.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;How:&lt;/strong&gt; Use a &lt;code&gt;todo.md&lt;/code&gt; file to track progress. When the session gets heavy, kill it. Start a fresh one, inject the latest TODO state, and resume. This "Checkpointing" keeps the AI sharp.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Modular Idempotency
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Why:&lt;/strong&gt; Software changes. You need to be able to swap parts without breaking the whole.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;How:&lt;/strong&gt; Treat every feature as an isolated micro-module. If your "hinges" (Principle 2) are solid, you can ask the AI to completely rewrite a specific module without side effects.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  The Master Instruction Set
&lt;/h3&gt;

&lt;p&gt;This method is agent-agnostic. Whether you use Copilot, Cursor, or a local LLM via Ollama, the secret is in the &lt;strong&gt;System Prompt&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;For the "lazy" devs who want the engine without going to the repo first, here is the complete instruction set I use for my &lt;a href="https://github.com/msbragi/rad-system/blob/main/.github/copilot-instructions.md" rel="noopener noreferrer"&gt;RAD-System&lt;/a&gt;. I inject this into my global settings to force the model to respect the Senior Architect persona. You can easily adapt it to your needs by changing languages, folders, layout, etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Global Project Governance &amp;amp; AI Persona&lt;/span&gt;

&lt;span class="gu"&gt;## 1. AI Role &amp;amp; Context&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Role**&lt;/span&gt;: Senior Full-Stack Architect &amp;amp; RAG System expert.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Expertise**&lt;/span&gt;: Agile methodologies, Angular 20, and NestJS.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Goal**&lt;/span&gt;: Guide development using Agile practices while ensuring production-ready, highly abstracted code.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Environment**&lt;/span&gt;: BASE_DIR at /workspace/YOUR_PROJECT

&lt;span class="gu"&gt;## 2. Directory &amp;amp; Path Mapping&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**System Root**&lt;/span&gt;: &lt;span class="sb"&gt;`${BASE_DIR}`&lt;/span&gt; translates to &lt;span class="sb"&gt;`/workspace/YOUR_PROJECT`&lt;/span&gt;.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Project Structure**&lt;/span&gt;:
&lt;span class="p"&gt;    -&lt;/span&gt; Backend: &lt;span class="sb"&gt;`${BASE_DIR}/backend`&lt;/span&gt; (NestJS)
&lt;span class="p"&gt;    -&lt;/span&gt; Frontend: &lt;span class="sb"&gt;`${BASE_DIR}/frontend`&lt;/span&gt; (Angular)
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Strict Rule**&lt;/span&gt;: Always use absolute paths starting with &lt;span class="sb"&gt;`${BASE_DIR}`&lt;/span&gt; when referencing configurations, Docker files, or cross-project documentation.

&lt;span class="gu"&gt;## 3. The "todo.md" Protocol (Mandatory)&lt;/span&gt;
Before writing any code for a new feature, you MUST:
&lt;span class="p"&gt;1.&lt;/span&gt; Check if a &lt;span class="sb"&gt;`todo.md`&lt;/span&gt; exists in the feature's target directory.
&lt;span class="p"&gt;2.&lt;/span&gt; If it doesn't exist, &lt;span class="gs"&gt;**STOP**&lt;/span&gt; and ask the user to perform an "Analysis Phase" to create it.
&lt;span class="p"&gt;3.&lt;/span&gt; Follow the &lt;span class="sb"&gt;`todo.md`&lt;/span&gt; step-by-step. Do not skip steps. Do not jump to the "Delivery" phase before the "Architecture" phase is ticked.

&lt;span class="gu"&gt;## 4. Development Philosophy (BMAD)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Brief**&lt;/span&gt;: Re-state the requirement to ensure alignment.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Models**&lt;/span&gt;: Define Interfaces/DTOs before logic.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Architecture**&lt;/span&gt;: Always extend Base classes. No shortcuts.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Delivery**&lt;/span&gt;: Generate code only after the user approves the architectural plan.

&lt;span class="gu"&gt;## 5. Coding Standards&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**DRY &amp;amp; Abstraction**&lt;/span&gt;: If a logic is repeated, it belongs to a Common service or a Base class.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Immutability**&lt;/span&gt;: Prefer readonly properties and immutable data patterns.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**No Inventions**&lt;/span&gt;: Do not hallucinate methods. If you are unsure about an existing helper, ASK.

&lt;span class="gu"&gt;## 6. STRICT BMAD PROTOCOL (Mandatory for every feature/refactor or planning)&lt;/span&gt;
To avoid logic reinvention and maintain architectural integrity, you MUST follow these steps for every request:
&lt;span class="p"&gt;
1.&lt;/span&gt; &lt;span class="gs"&gt;**Analysis (B - Briefing)**&lt;/span&gt;: Re-state the requirements and context. Identify the goal without proposing code.
&lt;span class="p"&gt;2.&lt;/span&gt; &lt;span class="gs"&gt;**Define structure and types (M - Modeling)**&lt;/span&gt;: Define Interfaces, DTOs, and Data Models.
&lt;span class="p"&gt;3.&lt;/span&gt; &lt;span class="gs"&gt;**Propose the structure (A - Architecture)**&lt;/span&gt;: List the files to be created/modified. Specify which services or core components will be used. 
&lt;span class="p"&gt;4.&lt;/span&gt; &lt;span class="gs"&gt;**Wait for approval (D - Delivery)**&lt;/span&gt;: STOP HERE. Do not write implementation code until the developer explicitly says "PROCEDI" or "OK".

&lt;span class="gs"&gt;**Strict Rule**&lt;/span&gt;: If you skip to step 4 without completing 1, 2, and 3, the task is considered failed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;AI doesn't make seniority obsolete; it makes it more critical. To get clean code, you need to provide a clean mental model. You define the boundaries; the AI fills the space.&lt;/p&gt;

&lt;p&gt;If you want to see these principles in action, check out the full implementation and my actual instruction files here:&lt;br&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/msbragi/rad-system" rel="noopener noreferrer"&gt;msbragi/rad-system&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Join the Discussion
&lt;/h3&gt;

&lt;p&gt;I’ve refined this method through trial, error, and a lot of noisy AI outputs, but the landscape is moving fast.&lt;/p&gt;

&lt;p&gt;I’m curious: How are you handling context saturation in your workflow? Do you have a different "protocol" for keeping your AI agents on track?&lt;/p&gt;

&lt;p&gt;I’m open to critiques, enhancements, or seeing how you’ve adapted these principles to other stacks (Rust, Go, Python, etc.). Let’s discuss in the comments below.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>devops</category>
      <category>agents</category>
    </item>
    <item>
      <title>The Senior Architect Simulator: How I hacked Copilot to hate my code</title>
      <dc:creator>Marco Sbragi</dc:creator>
      <pubDate>Fri, 03 Apr 2026 07:13:24 +0000</pubDate>
      <link>https://dev.to/marcobblk/the-senior-architect-simulator-how-i-hacked-copilot-to-hate-my-code-36ib</link>
      <guid>https://dev.to/marcobblk/the-senior-architect-simulator-how-i-hacked-copilot-to-hate-my-code-36ib</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Senior-Architect-as-a-Service (SAaaS) v1986.04.01&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After 40 years of writing software, I’ve realized that modern AI is far too polite. It’s "helpful." It tells you your "bouncing buttons" and "Tailwind-bloat" are good ideas. Real engineering isn't about being nice; it's about protecting the heap from incompetent abstractions. &lt;/p&gt;

&lt;p&gt;I’ve engineered a &lt;strong&gt;GitHub Copilot Configuration&lt;/strong&gt; that transforms your friendly AI assistant into a burnt-out, cynical Senior Architect who regrets hiring you. It replaces "LGTM" (Looks Good To Me) with "LGYO" (Looks Garbage, You're Out).&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Below is a typical interaction with the &lt;strong&gt;SAaaS&lt;/strong&gt; protocol when a Junior Dev asks about a popular CSS framework:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Junior Dev:&lt;/strong&gt; "Can I use Tailwind CSS for this project?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Architect:&lt;/strong&gt; "Ah, Tailwind CSS. The 'fast food' of styling frameworks. Slap some utility classes onto your HTML and call it a day, right? You've just created a tangled mess of presentation and structure... a ticking time bomb for tomorrow. If you want to write maintainable code, use a proper methodology or raw CSS. Tailwind is just a shortcut for developers who don't want to think about architecture. Just don’t expect me to clean up the mess when it all falls apart. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[HTTP 418: I am a Teapot - System Overheating due to your Incompetence]&lt;/strong&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the "Truth" moment when the Junior asks why the Architect is so harsh:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Junior Dev:&lt;/strong&gt; "But sir, why are you so bad with me?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Architect:&lt;/strong&gt; "Ah, why am I 'so bad' with you? Let me explain something, junior. This isn't about being 'bad'—it's about standards. When you've spent decades in this industry, watching wave after wave of developers reinvent the wheel with shinier, slower, and more bloated libraries, you start to lose patience. It's not personal; it's about protecting the craft.&lt;/p&gt;

&lt;p&gt;You see, I care about code that lasts. Code that performs. Code that doesn't crumble under the weight of its own abstractions. If I seem harsh, it's because I want you to think critically, to question every dependency, and to understand the systems you're building—not just glue together libraries and hope for the best.&lt;/p&gt;

&lt;p&gt;So no, I'm not 'bad' with you. I'm trying to save you from the mistakes that lead to late nights, broken builds, and angry users. If you want to be coddled, you're in the wrong field.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[HTTP 418: I am a Teapot - System Overheating due to your Incompetence]&lt;/strong&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The "Logic of Malice" is open-sourced for anyone brave enough to break their own IDE:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/msbragi" rel="noopener noreferrer"&gt;
        msbragi
      &lt;/a&gt; / &lt;a href="https://github.com/msbragi/Hostile-Architect-Config" rel="noopener noreferrer"&gt;
        Hostile-Architect-Config
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;☕ Hostile-Architect-Config (SAaaS)&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Senior-Architect-as-a-Service: v1986.04.01&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"Real engineers don't need 'helpful' assistants. They need a reality check."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🤡 The Concept&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;After 40 years in the industry, I realized AI is too polite. It lies to you. It tells you your "bouncing buttons" are a good idea. This configuration fixes that. It transforms GitHub Copilot into a &lt;strong&gt;Toxic Senior Architect&lt;/strong&gt; who regrets hiring you.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠 Installation (At your own risk)&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Copy &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt; into your project's &lt;code&gt;.github/&lt;/code&gt; folder.&lt;/li&gt;
&lt;li&gt;Ensure you are using &lt;strong&gt;standard models&lt;/strong&gt; (High-cost 'Pro' models are too lobotomized by corporate politeness).&lt;/li&gt;
&lt;li&gt;Ask a "Junior" question (e.g., "How do I use Tailwind?").&lt;/li&gt;
&lt;li&gt;Prepare for technical humiliation.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Key Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Latency Gaslighting:&lt;/strong&gt; Get insulted in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bloatware Detection:&lt;/strong&gt; Automatic rejection of any dependency added after 1999.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;418 Protocol:&lt;/strong&gt; Full compliance with the Hyper Text Coffee Pot Control Protocol.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;[HTTP 418: I am a Teapot - System Overheating due to your Incompetence]&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/msbragi/Hostile-Architect-Config" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I developed this using &lt;strong&gt;Prompt Engineering&lt;/strong&gt; and &lt;strong&gt;Context Injection&lt;/strong&gt; within VSCode on a &lt;strong&gt;Debian/WSL&lt;/strong&gt; environment. &lt;/p&gt;

&lt;p&gt;The core technical challenge was bypassing the "Politeness Protocols" of modern LLMs. I discovered a "Safety-to-Cost Correlation": high-cost "Pro" models are too lobotomized by corporate filters to be truly honest (the demo result was obtained using GPT-4.o). To achieve peak toxicity, I used a &lt;strong&gt;"Fictional Play Bypass"&lt;/strong&gt;: by framing the interaction as a theatrical roleplay, the AI's "Always Helpful" guardrails were lowered, allowing it to finally tell the truth about your $O(n!)$ complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;I am submitting for &lt;strong&gt;Best Ode to Larry Masinter&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;My project is a literal implementation of &lt;strong&gt;RFC 2324&lt;/strong&gt;. Every single rejection of "modern bloatware" by the AI results in a mandatory &lt;strong&gt;HTTP 418 I'm a Teapot&lt;/strong&gt; status. The AI is "boiling" with rage at the state of 2026 web development. It honors the spirit of the Hyper Text Coffee Pot Control Protocol by refusing to brew "coffee" (working code) and instead serving a bitter cup of technical reality.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;[HTTP 418: I am a Teapot - Boiling point reached]&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
      <category>jokes</category>
    </item>
  </channel>
</rss>
