<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" >
<channel>
  <title>Vincent's blog</title>
  <link>https://vincentdelft.be/rss</link>
  <description>Vincent's ideas</description>
  <atom:link href="https://vincentdelft.be/rss" rel="self" type="application/rss+xml" />
  <lastBuildDate>Sun, 08 Nov 2026 12:25:00 +0100</lastBuildDate>
  
   <item>
      <pubDate>Sun, 08 Nov 2026 12:25:00 +0100</pubDate>
      <link>https://vincentdelft.be/post/post_20261108</link> 
      <guid>https://vincentdelft.be/post/post_20261108</guid> 
      <title>Locking the screen and running vdcron when the lid closes on Void Linux</title>
      <description><![CDATA[<p><img alt="Give a shoutout to Ales Nesetril on unsplash.com" src="/static/post/post_20261108/laptop.jpg" title="Give a shoutout to Ales Nesetril on unsplash.com" />
My laptop runs <a href="https://voidlinux.org/">Void Linux</a> with the lightweight <a href="https://www.pekwm.se/">pekwm</a> window manager, started by the <a href="https://github.com/canonical/lightdm">LightDM</a> display manager. I use it like most people use a laptop: I close the lid, put it in my bag, and open it again a few hours later. Two things bothered me about this cycle. First, the desktop came back exactly as I had left it, with no password asked. Second, I wanted my small scheduler, <a href="https://repo.vincentdelft.be/?action=summary&amp;path=vdcron.git">vdcron</a>, to catch up with its pending tasks every time the machine wakes up. This post explains where these things happen on a Void system, and how a single shell script now takes care of both.</p>]]></description>
   </item>
   
   <item>
      <pubDate>Sat, 24 Oct 2026 17:43:00 +0100</pubDate>
      <link>https://vincentdelft.be/post/post_20261024</link> 
      <guid>https://vincentdelft.be/post/post_20261024</guid> 
      <title>Tuning log2table rules with real logs, and with an AI looking over my shoulder</title>
      <description><![CDATA[<p><img alt="Give a shoutout to Zach M on unsplash.com" src="/static/post/post_20261024/ai.jpg" title="Give a shoutout to Zach M on unsplash.com" />
log2table is a small daemon I wrote: it watches log files, recognizes attack patterns with regular expressions, and puts the offending IP addresses in a PF table so the firewall blocks them. The whole behavior is driven by one file: <code>parameters.py</code>.</p>
<p>Writing rules is easy. Knowing whether they are <em>good</em> rules is harder: do they catch what is really hitting my server today? Do they ban innocent visitors? Do two rules count the same attack twice?</p>
<p>This post explains the new version of <code>parameters.py</code> in the repository, its built-in checker that runs against your real log files, and how I used an AI (Claude, through Claude Code) to read the checker's output and propose improvements.</p>]]></description>
   </item>
   
   <item>
      <pubDate>Sat, 17 Oct 2026 22:17:00 +0100</pubDate>
      <link>https://vincentdelft.be/post/post_20261017</link> 
      <guid>https://vincentdelft.be/post/post_20261017</guid> 
      <title>A parallel ZIP archiver in Zig — full AI in 17 minutes of code</title>
      <description><![CDATA[<p><img alt="Give a shoutout to Tony Chen on unsplash.com" src="/static/post/post_20261017/zip.jpg" title="Give a shoutout to Tony Chen on unsplash.com" />
I'm checking what AI can provide. For such investigation, I've installed Claude code on my VoidLinux setup. Since several months I'm interested by the Zig program language and their objectives. So, I've stated to ask Claude if he knows zig. Then I was thinking, what I can ask such robot to build in Zig. Finaly, my request was to perform a zip program using massively parallel computing. And, for sure, to stay compatible with the zip format. 
Amazingly, after 6 cycles code - compile - test, Claude proposed a working code after 17 minutes. 
Then I've asked him to compare this tool with other equivalent compression tools. 
This blog present results. </p>]]></description>
   </item>
   
   <item>
      <pubDate>Sun, 11 Oct 2026 08:50:00 +0100</pubDate>
      <link>https://vincentdelft.be/post/post_20261011</link> 
      <guid>https://vincentdelft.be/post/post_20261011</guid> 
      <title>Fapws4 0.7 and 0.8: PEP 3333 for real, a test suite, and a clean shutdown</title>
      <description><![CDATA[<p><img alt="Give a shoutout to Jakub Żerdzicki on unsplash.com " src="/static/post/post_20261011/checklist.jpg" title="Give a shoutout to  Jakub Żerdzicki on unsplash.com" /></p>
<p>Fapws4 is my small and fast Python web server: a single C file built on
libuv and picohttpparser, embedding Python, with one process, one thread
and one event loop. Over the last few days it received its biggest batch
of changes in a long time: two releases, 0.7 on 9 October and 0.8 on
10 October 2026.</p>
<p>This post summarises what changed, why, and what you have to check if
you run an application on top of it.</p>]]></description>
   </item>
   
   <item>
      <pubDate>Sat, 10 Oct 2026 22:18:00 +0100</pubDate>
      <link>https://vincentdelft.be/post/post_202610103</link> 
      <guid>https://vincentdelft.be/post/post_202610103</guid> 
      <title>Cloning FreeBSD Jails with ZFS: Fast Copies, Hidden Dependencies</title>
      <description><![CDATA[<p><img alt="Give a shoutout to  Claude.ai " src="/static/post/post_202610103/typewriter.jpg" title="Give a shoutout to  Claude.ai" />
In my previous post I built a minimal thick jail from pkgbase packages and ended with a baseline ZFS snapshot. That snapshot is more than a safety net: it is a template. With a single command you can stamp out as many jails as you need, each one ready in a second and using almost no extra disk space.</p>
<p>But clones come with a property that surprises people: a ZFS clone is not a plain copy. It stays linked to the snapshot it came from, and that link decides what you can and cannot destroy later. In this post I clone one jail into four, list the few things that must be changed in each copy, explain how upgrades behave, and show three ways to deal with the dependency between a clone and its origin.</p>]]></description>
   </item>
   
  </channel>
</rss>