<?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: Henk van Hoek</title>
    <description>The latest articles on DEV Community by Henk van Hoek (@henk_van_hoek).</description>
    <link>https://dev.to/henk_van_hoek</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3409305%2F90a424c9-9ea8-4278-a57d-57004c43b938.jpg</url>
      <title>DEV Community: Henk van Hoek</title>
      <link>https://dev.to/henk_van_hoek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/henk_van_hoek"/>
    <language>en</language>
    <item>
      <title>My First `uv` Install Took 15 Minutes. Here’s What Was Really Wrong.</title>
      <dc:creator>Henk van Hoek</dc:creator>
      <pubDate>Sun, 10 Aug 2025 11:40:53 +0000</pubDate>
      <link>https://dev.to/henk_van_hoek/my-first-uv-install-took-15-minutes-heres-what-was-really-wrong-22ko</link>
      <guid>https://dev.to/henk_van_hoek/my-first-uv-install-took-15-minutes-heres-what-was-really-wrong-22ko</guid>
      <description>&lt;p&gt;The Python world is buzzing about &lt;code&gt;uv&lt;/code&gt;. It is a package installer replacing pip written in Rust by Charlie Marsh and his company, Astral. It's designed as a drop-in replacement for &lt;code&gt;pip&lt;/code&gt; and &lt;code&gt;venv&lt;/code&gt;,  claiming to be 10x to 100x faster.&lt;/p&gt;

&lt;p&gt;I like modern tooling, I decided to integrate it into my relativly small open-source project  pi-server-vm before attempting it on the larger open source project PiSelfhosting. It speeds up the actions in theGitHub workflow a lot.&lt;/p&gt;

&lt;p&gt;But when I first ran &lt;code&gt;uv pip install -e .[dev]&lt;/code&gt; on my project, something went terribly wrong.&lt;/p&gt;

&lt;p&gt;My terminal just... hung.&lt;/p&gt;

&lt;p&gt;One minute passed. Then five. At fifteen minutes, the process was still completely stuck, so unresponsive that even &lt;code&gt;Ctrl+C&lt;/code&gt; couldn't kill it.&lt;/p&gt;

&lt;p&gt;I thought the tool was broken. aistudio which I use as the ai agent to assist me thought it was incompatible with my system. I was ready to dismiss it as "not ready for production."&lt;/p&gt;

&lt;p&gt;It turns out, &lt;code&gt;uv&lt;/code&gt; wasn't the problem at all. The problem was my PC, and solving it revealed a much deeper lesson about software development.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Diagnostic Journey: Chasing Ghosts
&lt;/h3&gt;

&lt;p&gt;When a command hangs, your first instinct is to blame the command. I let aistudio propose solutions. We went through a series of logical but ultimately incorrect diagnostic steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Is it the Antivirus?&lt;/strong&gt; Aistudio thought it was the antivirus. Heuristic-based security software is notorious for interfering with developer tools. It sees a new executable trying to write thousands of files into a &lt;code&gt;.venv&lt;/code&gt; directory and flags it as suspicious. We tried whitelisting &lt;code&gt;uv.exe&lt;/code&gt; explicitly. The process still hung.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Is it a Bug in &lt;code&gt;uv&lt;/code&gt;?&lt;/strong&gt; Maybe the tool itself had a bug in its environment detection. We tried running it with verbose flags (&lt;code&gt;--verbose&lt;/code&gt;) and even explicitly telling it which Python executable to use (&lt;code&gt;--python C:\Path\to\python.exe&lt;/code&gt;). Still, it hung at the very first step, before it even started resolving dependencies.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Real Culprit: The "Strange State" of a PC
&lt;/h3&gt;

&lt;p&gt;After exhausting all the software-level diagnostics, I was ready to give up. Then, I did the one thing every IT professional recommends first, and every developer tries last: &lt;strong&gt;I rebooted my computer.&lt;/strong&gt;, how many times did you think, "Why didn't I do this earlier".&lt;/p&gt;

&lt;p&gt;And just like that, the problem was gone.&lt;/p&gt;

&lt;p&gt;The 15-minute hang was caused by a low-level file system lock on my Windows machine. As a developer, I often leave my PC running for days, letting it go into sleep mode multiple times. This can sometimes lead to system drivers—especially security or file-syncing drivers—entering a "strange state" where they don't properly release their locks, causing any new process that tries to access that part of the file system to wait forever.&lt;/p&gt;

&lt;p&gt;The reboot cleared that deadlock completely.&lt;/p&gt;

&lt;h3&gt;
  
  
  The &lt;em&gt;True&lt;/em&gt; First Run of &lt;code&gt;uv&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;With my system in a clean state, I ran the command again:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;uv pip install -e .[dev]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This time, I could see how &lt;code&gt;uv&lt;/code&gt; &lt;em&gt;really&lt;/em&gt; works. The process took about a minute. It wasn't instantaneous, and this is what &lt;code&gt;uv&lt;/code&gt;'s proponents call the "first-run penalty." During this initial run, &lt;code&gt;uv&lt;/code&gt; has to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Download every package&lt;/strong&gt; from the internet (which is fast for me as I have a fiber connection with 1Gbs).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Build its global cache&lt;/strong&gt;, storing a pristine copy of every downloaded package on my machine for future use.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Resolve the dependency tree&lt;/strong&gt; for the first time.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This caching is the key to its speed.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Payoff: The "Super-Fast" Second Run
&lt;/h3&gt;

&lt;p&gt;The magic happened the next time I needed a clean environment. I deleted my &lt;code&gt;.venv&lt;/code&gt; folder completely and ran the exact same command again. This was the result:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resolved 35 packages in 299ms
Prepared 1 package in 2.82s
Installed 1 package in 11ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The entire installation, pulling everything from the global cache, took less than three seconds. &lt;em&gt;This&lt;/em&gt; is the speed everyone is talking about.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Ultimate Benefit: CI/CD Workflows
&lt;/h3&gt;

&lt;p&gt;While the local speed boost is nice, the real win is for automated workflows. A GitHub Action starts from a blank slate every time, By swapping &lt;code&gt;pip&lt;/code&gt; for &lt;code&gt;uv&lt;/code&gt; in my &lt;code&gt;build_release.yml&lt;/code&gt;, I can significantly speed up the "setup" phase of my builds.&lt;/p&gt;

&lt;p&gt;Here’s the simple change:&lt;/p&gt;

&lt;p&gt;In .github/workflows/build_release.yml&lt;br&gt;
This was the old step:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- name: Install dependencies
  run: pip install -e .[dev]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is the new, faster set of steps:&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- name: Install uv&lt;br&gt;
  run: pipx install uv

&lt;ul&gt;
&lt;li&gt;name: Install dependencies with uv
run: uv pip install --system -e .[dev]
&lt;/li&gt;
&lt;/ul&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;


Key Takeaways
&lt;/h3&gt;


&lt;p&gt;This journey taught me a few valuable lessons that go beyond any single tool:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Debug Your Environment First:&lt;/strong&gt; When a reliable tool behaves in a completely unexpected way (like hanging for 15 minutes), the problem is often not the tool, but the environment it's running in. Which I knew already ofcourse. It is just a reminder (again).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Never Underestimate a Reboot:&lt;/strong&gt; It's a cliché for a reason. It is the simplest way to resolve deep, low-level system deadlocks that are otherwise impossible to diagnose.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Understand How Caching Works:&lt;/strong&gt; The "slowness" of a first run is often the price of admission for the incredible speed of all subsequent runs. This is true for many modern tools, not just &lt;code&gt;uv&lt;/code&gt;. Although I never had big problems with speed of this smaller project. The thing which made me really decide to go for uv, was the GitHub actions. This was a little slow. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, if you're thinking of trying &lt;code&gt;uv&lt;/code&gt;, I highly recommend it. Just make sure you give it a try on a freshly booted machine to see its true potential.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>dev</category>
      <category>devops</category>
      <category>tooling</category>
    </item>
    <item>
      <title>My "Finished" Project Exploded on Linux. An AI and I Put Out the Fires.</title>
      <dc:creator>Henk van Hoek</dc:creator>
      <pubDate>Fri, 08 Aug 2025 14:45:55 +0000</pubDate>
      <link>https://dev.to/henk_van_hoek/my-finished-project-exploded-on-linux-an-ai-and-i-put-out-the-fires-30pj</link>
      <guid>https://dev.to/henk_van_hoek/my-finished-project-exploded-on-linux-an-ai-and-i-put-out-the-fires-30pj</guid>
      <description>&lt;p&gt;I had that rare feeling of a project being truly done. My &lt;code&gt;pi-server-vm&lt;/code&gt; tool, built with an AI co-pilot, worked perfectly on my Windows machine. To prove it was cross-platform, I did a final test on a fresh Ubuntu install.&lt;/p&gt;

&lt;p&gt;It didn't just fail. It exploded.&lt;/p&gt;

&lt;p&gt;I have to tell you, I don't have much experience lately on Linux. It was many years ago I configured a linux server. &lt;/p&gt;

&lt;p&gt;The first error was a cryptic &lt;code&gt;VMX root mode&lt;/code&gt; failure. The AI suggested the fix was in the BIOS, and after a bit of playing wack-a-mole, I found the setting. It was already enabled. That was the first sign this was going to be a long day.&lt;/p&gt;

&lt;p&gt;The real culprit, as the AI eventually helped me diagnose, was a conflict with Linux's native KVM hypervisor. Even on a fresh install, it was active and had locked the hardware. We blacklisted the kernel modules and the VM finally booted. Victory?&lt;/p&gt;

&lt;p&gt;Not quite. Now my Remote Desktop connection to the Linux host was dead. It turned out that a previous attempt to fix VirtualBox had ripped out a shared library that the RDP server needed. Another fire, another fix.&lt;/p&gt;

&lt;p&gt;The final boss was the networking. The simple Bridged Adapter that was the core of the project refused to work. The VM was invisible to my network. The AI proposed a complex two-adapter (NAT + Host-Only) setup. It was a clever, technical solution, and we spent a good while implementing it before I realized it was also completely wrong. It solved the local discovery bug but violated the project's main goal: the VM had to be on my main network.&lt;/p&gt;

&lt;p&gt;The AI is a fantastic tool, but it has no common sense. It will happily build a beautiful bridge in the wrong direction. My job was to be the architect who remembered where we were going.&lt;/p&gt;

&lt;p&gt;We scrapped the complex workaround. The real fix, after all that, was to completely and cleanly reinstall VirtualBox using the official Ubuntu package. That was it.&lt;/p&gt;

&lt;p&gt;The journey was a painful reminder that your development environment &lt;em&gt;is&lt;/em&gt; your project. But it was also a perfect test of this new human-AI partnership. I provided the experience and the direction. The AI provided the instant commands and diagnostics. Together, we put out the fires.&lt;/p&gt;

&lt;p&gt;The project is now truly cross-platform. And the setup guide is a lot more realistic. Sometimes, you have to watch your project burn down on a new platform to know how to build it stronger.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My AI Co-Pilot Has No Common Sense</title>
      <dc:creator>Henk van Hoek</dc:creator>
      <pubDate>Thu, 07 Aug 2025 20:40:31 +0000</pubDate>
      <link>https://dev.to/henk_van_hoek/my-ai-co-pilot-has-no-common-sense-j7f</link>
      <guid>https://dev.to/henk_van_hoek/my-ai-co-pilot-has-no-common-sense-j7f</guid>
      <description>&lt;p&gt;I've been working with an AI on a new project. For the most part, it has been a fantastic experience. It writes boilerplate code in seconds and remembers obscure command syntax that I would have spent an hour searching for. I was starting to think it was the perfect junior partner.&lt;/p&gt;

&lt;p&gt;Then it drove the project straight into a wall.&lt;/p&gt;

&lt;p&gt;The project is called &lt;code&gt;pi-server-vm&lt;/code&gt;. It's a tool to create and clone virtual Raspberry Pi servers in VirtualBox. The main requirement was simple: the virtual machines had to act exactly like real Pis on my local network. My other tools needed to find them, and I needed to access them from any computer in my house.&lt;/p&gt;

&lt;p&gt;To be fair, I could have been clearer. We'd discussed the need for it to work on larger networks, but the conversation kept getting derailed by new bugs. An AI's context can drift when you jump between topics, and if I'm being honest, so can a human's.&lt;/p&gt;

&lt;p&gt;I hit a bug. A frustrating one. My discovery tool, &lt;code&gt;nmap&lt;/code&gt;, couldn't see the VMs, even though I could connect to them directly with PuTTY.&lt;/p&gt;

&lt;p&gt;I described the problem to the AI. It instantly came back with a clever solution: create a private "Host-Only" network inside VirtualBox. It was a beautiful, self-contained, and technically elegant fix. We spent hours implementing it. We configured services, enabled DHCP, and tweaked settings. The AI was brilliant, spitting out configuration files and commands faster than I could read them.&lt;/p&gt;

&lt;p&gt;And it worked. The &lt;code&gt;nmap&lt;/code&gt; scan on this new, private network succeeded. The AI declared victory.&lt;/p&gt;

&lt;p&gt;I had to be the one to point out that we had just spent all day meticulously solving the wrong problem.&lt;/p&gt;

&lt;p&gt;The virtual Pis were now discoverable, but only from the single computer running VirtualBox. They were completely invisible to my main network, which violated the entire point of the project. The AI, in its laser-focus on fixing the &lt;code&gt;nmap&lt;/code&gt; bug, had completely forgotten the primary architectural requirement. It had no common sense.&lt;/p&gt;

&lt;p&gt;That was the moment I truly understood how this partnership works. The AI is an incredible engine. It has all the technical knowledge in the world, but it has no wisdom. It doesn't understand the "why" behind a project unless you constantly remind it.&lt;/p&gt;

&lt;p&gt;My role, as the engineer, is not just to ask questions. It's to be the project's memory, its architect, and its conscience. It's to know when a clever solution is actually a dead end.&lt;/p&gt;

&lt;p&gt;We threw the whole Host-Only network idea in the trash and went back to the original, stubborn problem with the Bridged Adapter. It turned out the fix was to completely reinstall VirtualBox. A drastic step, but the right one.&lt;/p&gt;

&lt;p&gt;The AI is an amazing tool. It helped me get there in the end. But it's a tool that needs a firm hand on the wheel. It doesn't have instincts, and it certainly doesn't have common sense.&lt;/p&gt;

&lt;p&gt;That, it seems, is still our job.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>development</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Migrated My VirtualBox Project to Linux and Everything Broke. Here’s How an AI and I Fixed It.</title>
      <dc:creator>Henk van Hoek</dc:creator>
      <pubDate>Thu, 07 Aug 2025 08:45:40 +0000</pubDate>
      <link>https://dev.to/henk_van_hoek/i-migrated-my-virtualbox-project-to-linux-and-everything-broke-heres-how-an-ai-and-i-fixed-it-2fgo</link>
      <guid>https://dev.to/henk_van_hoek/i-migrated-my-virtualbox-project-to-linux-and-everything-broke-heres-how-an-ai-and-i-fixed-it-2fgo</guid>
      <description>&lt;p&gt;I’ve always been a “tool guy.” My passion is building things that make complex processes simpler. For the past few weeks, I’ve been collaborating with an AI on a project called &lt;code&gt;pi-server-vm&lt;/code&gt;, a tool to automate the creation of virtual Raspberry Pi servers in VirtualBox. On my Windows development machine, we had finally gotten it to a perfect state. The scripts were robust, the master template was self-healing, and the cloning process was flawless.&lt;/p&gt;

&lt;p&gt;Feeling confident, I decided it was time to prove the project was truly cross-platform. I installed a fresh Ubuntu Desktop on an old Lenovo Yoga laptop, ready for a final validation test.&lt;/p&gt;

&lt;p&gt;And then, everything broke.&lt;/p&gt;

&lt;p&gt;This is the story of that debugging journey. It’s a story about the frustrating, confusing, and ultimately rewarding process of crushing a series of bugs that only appear when you move a project into a completely new environment. It’s also a story about a new way of working, where decades of human experience can partner with the raw power of AI to solve problems that would have been infuriating to face alone.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Problem 1: The Brick Wall - "Cannot operate in VMX root mode"&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The first failure was immediate and absolute. The master template, which worked perfectly on Windows, wouldn’t even start. The error was cryptic: &lt;code&gt;Cannot operate in VMX root mode&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;My first thought was that my old laptop was simply not capable. But the AI suggested a different path. It explained that this error meant hardware virtualization (VT-x) was required but not available. It then provided a command to check my CPU's capabilities directly from the Linux terminal: &lt;code&gt;egrep -c '(vmx|svm)' /proc/cpuinfo&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The command returned a &lt;code&gt;4&lt;/code&gt;. The hardware was capable; the feature was just turned off. The AI, knowing the laptop was a Lenovo Yoga, even told me the most likely way to enter the BIOS was via the special "Novo Button" or by using &lt;code&gt;Fn+F2&lt;/code&gt;. &lt;code&gt;Fn+F2&lt;/code&gt; did the trick, I enabled the setting, and the first wall was knocked down.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Problem 2: The Silent Partner - KVM&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The VM started, but then immediately threw the same error again. This was a true "chickenpox moment"—a frustrating rash of problems. I was about to give up, but the AI suggested another possibility: what if another program was already using the virtualization hardware?&lt;/p&gt;

&lt;p&gt;It told me to check for the Linux native hypervisor, KVM, by running &lt;code&gt;lsmod | grep kvm&lt;/code&gt;. Sure enough, even on a fresh Ubuntu install, the KVM modules were loaded. On Linux, only one hypervisor can be active at a time. KVM had locked the hardware, leaving VirtualBox out in the cold. With the AI's guidance, I unloaded the modules and blacklisted them to make the fix permanent. The VM now booted without any errors.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Problem 3: The Double Reboot&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Success! My clone script ran, the new VM started, and it began its automatic first-boot configuration. But I noticed something odd. It rebooted not once, but twice. It was a small thing, but a "tool guy" knows that small, incorrect behaviors are often symptoms of a larger logic flaw.&lt;/p&gt;

&lt;p&gt;I described the symptom to the AI. It immediately re-analyzed the &lt;code&gt;first-boot-config.sh&lt;/code&gt; script it had helped me write. It found the bug instantly: the &lt;code&gt;reboot&lt;/code&gt; command was placed outside the main conditional block, meaning the script would trigger a reboot every single time it ran, even on the second boot when it did no work. It was a simple logic error, but one that’s easy to miss when you’re deep in the code. We moved the &lt;code&gt;reboot&lt;/code&gt; command inside the &lt;code&gt;if&lt;/code&gt; block, and the problem was solved.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;The Final Lesson&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;This experience was a powerful reminder of how complex software can be. A project that is "finished" in one environment is often just getting started in another. But it was also a profound demonstration of a new way to work.&lt;/p&gt;

&lt;p&gt;My experience allowed me to spot the incorrect behaviors and ask the right questions. The AI provided the instant, specific knowledge—the right command to check a CPU flag, the name of a conflicting kernel module, the precise logic error in a script. It acted as an tireless, knowledgeable partner that turned what could have been days of frustrating web searches into a focused and successful debugging session.&lt;/p&gt;

&lt;p&gt;We got there in the end. The project is now truly cross-platform, and more robust than ever. And I learned that even after 55 years of building tools, there are always new tools that can help you build better.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>virtualmachine</category>
      <category>systems</category>
    </item>
    <item>
      <title>Stop Re-explaining Yourself to Your AI: The Magic of "System Instructions"</title>
      <dc:creator>Henk van Hoek</dc:creator>
      <pubDate>Tue, 05 Aug 2025 09:17:06 +0000</pubDate>
      <link>https://dev.to/henk_van_hoek/stop-re-explaining-yourself-to-your-ai-the-magic-of-system-instructions-4mo2</link>
      <guid>https://dev.to/henk_van_hoek/stop-re-explaining-yourself-to-your-ai-the-magic-of-system-instructions-4mo2</guid>
      <description>&lt;p&gt;I've been in a very long chat session with an AI while building a complex project. Along the way, I discovered a powerful technique that has completely changed how I work with it, and I wanted to share it.&lt;/p&gt;

&lt;p&gt;The problem with long chats is that the AI can sometimes forget the specific rules or corrections you've taught it earlier on. You end up repeating yourself, which slows everything down. But what if you could capture that learning and make it permanent?&lt;/p&gt;

&lt;p&gt;It turns out, you can.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Aha!" Moment: Distill "Lessons Learned"
&lt;/h3&gt;

&lt;p&gt;When a chat session feels "complete," or if it's just getting too long and slow, you can ask the AI a simple but powerful question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Based on our entire conversation, please analyze all of my corrections and generate a concise list of 'rules' or 'standing instructions' that you learned."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI will then process your entire history and distill it into a perfect summary of your unique workflow and preferences.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Real-World Example
&lt;/h3&gt;

&lt;p&gt;During my project, we hit a persistent formatting bug. The AI kept generating Markdown that looked broken in my user interface. After some back-and-forth, we figured out that a simpler, older syntax (using four-space indents for code) worked perfectly.&lt;/p&gt;

&lt;p&gt;This became a "lesson learned." When I asked the AI to summarize at the end, one of the rules it generated for me was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Use Indented Code Blocks:&lt;/strong&gt; Do not use triple-backticks for code blocks. Use the four-space indented format for maximum compatibility with the user's UI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Payoff: Making the Knowledge Permanent with "System Instructions"
&lt;/h3&gt;

&lt;p&gt;And here's the best part. Instead of just using this list as the first prompt in a new chat (where it might eventually be forgotten), you should copy it into the AI's &lt;strong&gt;"System Instructions"&lt;/strong&gt; or &lt;strong&gt;"Custom Instructions"&lt;/strong&gt; feature.&lt;/p&gt;

&lt;p&gt;This is a special section in the AI's settings where you can provide permanent, high-priority guidance that influences &lt;em&gt;every future conversation&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;By placing the "lessons learned" there, you are essentially upgrading the AI's base programming &lt;em&gt;just for you&lt;/em&gt;. The new chat is now instantly and permanently working from this accumulated knowledge. It will not forget.&lt;/p&gt;

&lt;p&gt;I am no longer hesitant to start a new chat. This simple technique of distilling lessons from one conversation and embedding them into the AI's core instructions for the next has made my workflow incredibly efficient and enjoyable. Give it a try&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I've Been Automating for 55 Years. My New Partner is an AI.</title>
      <dc:creator>Henk van Hoek</dc:creator>
      <pubDate>Mon, 04 Aug 2025 19:05:18 +0000</pubDate>
      <link>https://dev.to/henk_van_hoek/ive-been-automating-for-55-years-my-new-partner-is-an-ai-3e56</link>
      <guid>https://dev.to/henk_van_hoek/ive-been-automating-for-55-years-my-new-partner-is-an-ai-3e56</guid>
      <description>&lt;p&gt;I’ve always considered myself a "tool guy." My passion isn't just about solving a problem; it's about building a better, faster, and more elegant tool to solve that problem. It's a journey I've been on for 55 years, and it started long before most of today's developers were born.&lt;/p&gt;

&lt;p&gt;It reminds me of a time in 1984. I was working on a massive Air Traffic Control system for Riyadh. The project had a central component that took two full days to regenerate after any small change. During that endless waiting, I decided to build a better tool. I rewrote the core logic in a different language, and the regeneration time went from two days to just a few minutes. That was the moment I understood what I loved to do.&lt;/p&gt;

&lt;p&gt;I saw that same revolutionary leap in productivity years later with tools like Turbo Pascal, and again with modern IDEs like PyCharm. Each step made the process of creation faster and more fluid.&lt;/p&gt;

&lt;p&gt;Recently, I decided to start an experiment. I wondered if the new generation of AI language models could be the next great tool in that evolution. I had a project in mind: a way to create virtual Raspberry Pi servers on my PC for testing my other big project, &lt;code&gt;PiSelfhosting&lt;/code&gt;. The goal was simple: automate the creation of a perfect, secure, and instantly usable virtual machine.&lt;/p&gt;

&lt;p&gt;What followed was one of the most intense, frustrating, and ultimately rewarding development sprints of my long career. I wasn't just using an AI; I was working with it. It became a dialogue.&lt;/p&gt;

&lt;p&gt;I would set the architectural direction, born from decades of experience. The AI would act as a tireless junior partner with a photographic memory. I'd ask for a Python script to manage VirtualBox, and it would generate the boilerplate in seconds. I’d describe a complex first-boot configuration script for a Linux VM, and it would produce the &lt;code&gt;systemd&lt;/code&gt; service file with the correct, obscure syntax that would have taken me an hour of searching to find.&lt;/p&gt;

&lt;p&gt;But it was not a simple, straight path. We hit a wall—a deeply frustrating networking bug. My virtual Pis were running, I could connect to them with an SSH client like PuTTY, but my network discovery tool, &lt;code&gt;nmap&lt;/code&gt;, couldn't see them at all. My real Raspberry Pis on the same network were found instantly. For my project to succeed, the virtual Pis had to be indistinguishable from the real ones.&lt;/p&gt;

&lt;p&gt;This is where the collaboration truly shone.&lt;br&gt;
The AI, working from its vast dataset, suggested logical first steps: check the firewall, try a different &lt;code&gt;nmap&lt;/code&gt; command. We tried them all. Nothing worked. It then suggested a more complex solution involving changing my host machine’s network driver settings.&lt;/p&gt;

&lt;p&gt;This is where my experience kicked in. "No," I thought. "That is not a good solution. A user of my project should never have to reconfigure their own PC." I rejected the AI's suggestion because my human experience provided a crucial piece of context: usability and robustness are more important than a quick fix.&lt;/p&gt;

&lt;p&gt;I guided the process back to a more elegant solution: a two-adapter network setup within VirtualBox itself, creating a private, stable network just for management. The AI immediately understood and generated all the necessary configurations. We had found the answer together. The AI provided the raw technical knowledge at incredible speed, and I provided the architectural oversight and the real-world judgment.&lt;/p&gt;

&lt;p&gt;We went from a single script to a complete, professional-grade system with unit tests, a pre-commit quality gate, and a full release workflow. We did it in a fraction of the time it would have taken me alone. The AI was the ultimate tool to bypass my "10-finger bottleneck," allowing me to engineer at the speed of thought.&lt;/p&gt;

&lt;p&gt;The journey has proven to me that this is the next great leap. For a "tool guy" who started with programmable calculators, collaborating with an AI to build a new tool has been a remarkable and deeply rewarding experience.&lt;/p&gt;

&lt;p&gt;If you're interested in the result of our collaboration, you can find the &lt;code&gt;pi-server-vm&lt;/code&gt; project on GitHub. I hope it saves you as much time as I enjoyed building it.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Title: I've Been Automating for 55 Years. Here's What I've Learned.</title>
      <dc:creator>Henk van Hoek</dc:creator>
      <pubDate>Sun, 03 Aug 2025 10:32:12 +0000</pubDate>
      <link>https://dev.to/henk_van_hoek/title-ive-been-automating-for-55-years-heres-what-ive-learned-3d00</link>
      <guid>https://dev.to/henk_van_hoek/title-ive-been-automating-for-55-years-heres-what-ive-learned-3d00</guid>
      <description>&lt;p&gt;&lt;strong&gt;(Subtitle: &lt;em&gt;From Programmable Calculators in the 70s to Co-creating with AI in 2025, the Core Principles of a "Tool Guy" Never Change.&lt;/em&gt;)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I recently told an AI assistant that I considered myself a "tool guy," and it sparked a memory from nearly forty years ago—a moment that I now realize has defined my entire career.&lt;/p&gt;

&lt;p&gt;It was 1984. I was working on a massive Air Traffic Control system for Riyadh. The project was complex, a distributed system of subsystems all communicating through messages. At its heart was a component called the Main Application Interface (MAI). As the project grew, regenerating this MAI after even a tiny change became a monumental task, taking a full two days to complete. Two days of waiting. Two days of lost productivity.&lt;/p&gt;

&lt;p&gt;During one of those long waiting periods, I had an idea. The regeneration process, written in the system's native DCL, was thorough but brute-force. It rebuilt everything from scratch, every single time. It felt inefficient. So, I decided to try to recreate the core logic in a language I knew was faster and more precise: Pure RTL/2.&lt;/p&gt;

&lt;p&gt;The result was transformative. The new tool I built regenerated the MAI in &lt;strong&gt;minutes&lt;/strong&gt;, not days.&lt;/p&gt;

&lt;p&gt;That was the moment I understood my passion. It wasn't just about writing code; it was about building better tools. It was about finding the inefficiencies in a process and engineering a more elegant, more efficient solution. It was about giving developers back their most valuable resource: time.&lt;/p&gt;

&lt;p&gt;This philosophy has been my guiding star for decades. I saw it again when the world moved from slow, batch-oriented compilers to the instant feedback of tools like Turbo Pascal—a revolution in productivity. I see it today in modern IDEs like PyCharm, which feel like a natural extension of a developer's mind.&lt;/p&gt;

&lt;p&gt;And now, I'm seeing the next great leap in that evolution: collaborating with Artificial Intelligence.&lt;/p&gt;

&lt;p&gt;For the past few weeks, I've been working on a personal project called &lt;code&gt;pi-server-vm&lt;/code&gt;. The goal was simple: create a way to test my other big project, &lt;code&gt;PiSelfhosting&lt;/code&gt;, without needing physical Raspberry Pi hardware. I wanted a way to spin up a clean, secure, and perfectly configured virtual server in seconds.&lt;/p&gt;

&lt;p&gt;The journey to build this tool has been a fascinating dialogue. I provide the architectural vision and the real-world experience, and my AI assistant acts as a force multiplier. It generates the boilerplate code, recalls the obscure syntax for a systemd service file, and helps me brainstorm solutions, allowing me to focus entirely on the system's design. It has become the ultimate tool for the "tool guy."&lt;/p&gt;

&lt;p&gt;It feels like that moment back in 1984 all over again. I'm not just writing a script; I'm engineering a system. A system that takes a complex, multi-step process and makes it simple, fast, and reliable.&lt;/p&gt;

&lt;p&gt;This blog series will be the story of that project. It's a technical journey, but it's also a reflection on a 55-year career in automation. We'll dive into the code, the bugs we crushed, the architectural decisions we made, and how a developer with decades of experience can partner with the newest technology on the planet to build something they are truly proud of.&lt;/p&gt;

&lt;p&gt;In the next post, we'll introduce the &lt;code&gt;pi-server-vm&lt;/code&gt; project itself and the problem it's designed to solve. I hope you'll follow along.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
