<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Emile (ツ)</title><description>Tech coaching, code and opinions by Emile.</description><link>https://emilebosch.com/</link><atom:link href="https://emilebosch.com/feed.xml" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Jul 2026 12:36:57 +0200</pubDate><lastBuildDate>Sun, 12 Jul 2026 12:36:57 +0200</lastBuildDate><generator>Hugo 0.164.0</generator><item><title>Independent IT advice for good causes</title><description>&lt;p&gt;Through &lt;a href="https://digitaalgoed.nl"&gt;Digitaalgoed.nl&lt;/a&gt; I&amp;rsquo;m helping build an initiative that gives charities and non-profits independent IT advice, funded without reseller margins or vendor commitments.&lt;/p&gt;
&lt;p&gt;Charities often overpay for IT or sign restrictive contracts because they lack the budget and in-house expertise to evaluate the options. The advice covers software, infrastructure, and digital strategy, translating the technical trade-offs into terms a board can decide on. Money a charity saves on IT can go to its mission.&lt;/p&gt;
&lt;p&gt;More here: &lt;a href="https://emilebosch.com/cases/digitaalgoed-it-advice-for-charities/"&gt;Setting up IT advice for charities via Digitaalgoed.nl&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Sat, 30 May 2026 11:45:00 +0200</pubDate><link>https://emilebosch.com/2026/05/30/it-advice-for-good-causes/</link><guid isPermaLink="true">https://emilebosch.com/2026/05/30/it-advice-for-good-causes/</guid><category>tech-for-good</category><category>charity</category><category>IT</category><category>advice</category><category>Digitaalgoed</category></item><item><title>Copilot vs Claude vs ChatGPT, without the hype</title><description>&lt;p&gt;I evaluated Copilot, Claude, and ChatGPT for Aan de Stegge (ASVB) and wrote a vendor-neutral report recommending which tool to use for which tasks.&lt;/p&gt;
&lt;p&gt;I scored each tool on quality, security, privacy, cost, and ease of use, testing them on real tasks from the organization&amp;rsquo;s daily work. The report documents where each tool sends data, its compliance status, and its cost at full rollout.&lt;/p&gt;
&lt;p&gt;No single assistant scored best across all criteria, so the report assigns different tools to different jobs.&lt;/p&gt;
&lt;p&gt;The case: &lt;a href="https://emilebosch.com/cases/evaluating-ai-assistants-van-de-stegge/"&gt;Evaluating Copilot, Claude and ChatGPT for Aan de Stegge&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 16:20:00 +0200</pubDate><link>https://emilebosch.com/2026/05/28/copilot-vs-claude-vs-chatgpt/</link><guid isPermaLink="true">https://emilebosch.com/2026/05/28/copilot-vs-claude-vs-chatgpt/</guid><category>AI</category><category>Copilot</category><category>Claude</category><category>ChatGPT</category><category>evaluation</category><category>ASVB</category></item><item><title>Teaching a construction company to actually use Copilot</title><description>&lt;p&gt;At Lithos I ran hands-on workshops that taught employees how to use Copilot and AI assistants on their own projects, including prompt design, output review, and model limitations.&lt;/p&gt;
&lt;p&gt;I assessed each role&amp;rsquo;s workflows to find where AI could save time, then built a role-specific curriculum around those tasks. We also set guidelines for handling sensitive data, so employees know what not to paste into a hosted model.&lt;/p&gt;
&lt;p&gt;After the program, employees use Copilot independently and review its output for quality and security.&lt;/p&gt;
&lt;p&gt;Full write-up: &lt;a href="https://emilebosch.com/cases/training-lithos-employees-copilot/"&gt;Training program for Lithos employees on Copilot&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 26 May 2026 14:00:00 +0200</pubDate><link>https://emilebosch.com/2026/05/26/teaching-a-construction-company-copilot/</link><guid isPermaLink="true">https://emilebosch.com/2026/05/26/teaching-a-construction-company-copilot/</guid><category>AI</category><category>Copilot</category><category>training</category><category>coaching</category><category>Lithos</category></item><item><title>When a fix at one company becomes a group-wide rollout</title><description>&lt;p&gt;I&amp;rsquo;m rolling out the tender process I built at &lt;a href="https://emilebosch.com/cases/simplifying-tender-process-lithos/"&gt;Lithos&lt;/a&gt; across all the construction companies in the Aan de Stegge group (ASVB).&lt;/p&gt;
&lt;p&gt;Scaling the process means turning the Lithos workflow into a blueprint other companies can adopt while keeping their own local practices. The rollout standardizes the steps that improved results at Lithos and leaves company-specific details configurable.&lt;/p&gt;
&lt;p&gt;Most of the effort goes into coaching teams through the change, the step that determines whether a new process is actually used.&lt;/p&gt;
&lt;p&gt;More on the group-wide rollout here: &lt;a href="https://emilebosch.com/cases/tender-process-van-de-stegge-asvb/"&gt;Rolling out tender processes group-wide at Aan de Stegge (ASVB)&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 19 May 2026 10:15:00 +0200</pubDate><link>https://emilebosch.com/2026/05/19/fix-becomes-group-wide-rollout/</link><guid isPermaLink="true">https://emilebosch.com/2026/05/19/fix-becomes-group-wide-rollout/</guid><category>tender</category><category>construction</category><category>process</category><category>scaling</category><category>ASVB</category><category>Aan de Stegge</category></item><item><title>Untangling the tender process in construction</title><description>&lt;p&gt;At Lithos I mapped the tender process to find where the time and errors were concentrated. Much of the work repeated on every bid: documents spread across multiple folders, content copied from the previous bid, and stakeholders adding input at different stages.&lt;/p&gt;
&lt;p&gt;I standardized and automated the repeating work so the team produces a bid without reassembling the same documents each time. Removing the duplicated steps shortened the process and made each bid&amp;rsquo;s status easier to track.&lt;/p&gt;
&lt;p&gt;I wrote up the full story here: &lt;a href="https://emilebosch.com/cases/simplifying-tender-process-lithos/"&gt;Simplifying the tender process at Lithos&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 12 May 2026 09:30:00 +0200</pubDate><link>https://emilebosch.com/2026/05/12/untangling-the-tender-process/</link><guid isPermaLink="true">https://emilebosch.com/2026/05/12/untangling-the-tender-process/</guid><category>tender</category><category>construction</category><category>process</category><category>automation</category><category>Lithos</category></item><item><title>Running OCI/Docker images on Sprite.dev</title><description>&lt;p&gt;Sometimes you want to run your existing docker images in Sprite&amp;rsquo;s firecracker vms. You&amp;rsquo;ll quickly come to the conclusion that it&amp;rsquo;s a pretty stripped kernel and Docker will complain a lot.&lt;/p&gt;
&lt;p&gt;Since Sprite is sandboxed I don&amp;rsquo;t need any of the Docker features in terms of isolation, it&amp;rsquo;s just one sprite per role. But i do want the docker images i&amp;rsquo;ve created before.&lt;/p&gt;
&lt;p&gt;You can just skip docker and pull the images and run them by using &lt;a href="https://github.com/containers/skopeo"&gt;skopeo&lt;/a&gt; (registry management), &lt;a href="https://umo.ci"&gt;umoci&lt;/a&gt; (oci image management) and &lt;a href="https://github.com/opencontainers/runc"&gt;runc&lt;/a&gt; (container management).&lt;/p&gt;
&lt;p&gt;Quick way of running images on &lt;a href="http://sprites.dev"&gt;sprite.dev&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y skopeo umoci runc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;skopeo copy docker://alpine:latest oc:alpine_oci:latest
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;umoci unpack --image alpine_oci:latest my_bundle
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo runc run -b my_bundle rootless-tr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Eaaasy&amp;hellip;&lt;/p&gt;</description><pubDate>Sun, 01 Mar 2026 11:43:00 +0100</pubDate><link>https://emilebosch.com/2026/03/01/oci-docker-images-on-sprite-dev/</link><guid isPermaLink="true">https://emilebosch.com/2026/03/01/oci-docker-images-on-sprite-dev/</guid><category>sprite.dev</category><category>docker</category><category>oci</category><category>umoci</category><category>runc</category><category>firecracker</category></item><item><title>Deepseeks 3FS' FUSE hackery is super interesting</title><description>&lt;p&gt;&lt;a href="https://github.com/deepseek-ai/3FS"&gt;Deepseek released 3FS&lt;/a&gt; some time ago, a filesystem to blast tons of data to your GPU cluster for efficient training since GPU&amp;rsquo;s needs to go BRRRRR and not wait on IO.&lt;/p&gt;
&lt;p&gt;I was checking out their &lt;a href="https://arxiv.org/html/2408.14158v1#S6"&gt;paper&lt;/a&gt; and docs and went found this &lt;a href="https://github.com/deepseek-ai/3FS/blob/main/src/lib/api/UsrbIo.md"&gt;cool hack for FUSE&lt;/a&gt; that they employ.
FUSE makes it possible to have a Filesystem in UsErspace so that us mere mortals don&amp;rsquo;t have to hack the kernel too much in order to pretend we can build filesystems.&lt;/p&gt;
&lt;p&gt;This allows you to, for instance, access a database as a filesystem. Not saying you should, but you can, if you feel the urge.&lt;/p&gt;
&lt;p&gt;What they want at Deepseek when training, is fast fast fast throughput. As fast as possible to get data from the clusters onto your GPU.&lt;/p&gt;
&lt;p&gt;In order to do this they do some tricks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use FUSE for file listing, directory semantics talking to 3FS&lt;/li&gt;
&lt;li&gt;For &lt;code&gt;read()&lt;/code&gt; sidestep the whole thing and open a door to a magic portal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The portal works like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get data from NIC (infiniband) (don&amp;rsquo;t go to the kernel, but put it in shared memory region)&lt;/li&gt;
&lt;li&gt;Read the shared data from the memory in another process via a ringbuffer&lt;/li&gt;
&lt;li&gt;Let the process consume the data directly&lt;/li&gt;
&lt;li&gt;Celebrate! Look ma no kernel!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also made me go down into the rabbithole of &lt;a href="https://docs.ebpf.io/linux/concepts/af_xdp/"&gt;AF_XDP&lt;/a&gt; where we can build this ourselves. Since i don&amp;rsquo;t have an infiniband card. The upside = SUPERFAST PACKETS, downside rebuilding the whole TCP/IP networkstack.&lt;/p&gt;
&lt;p&gt;If you want to read more on their tricks, here is &lt;a href="https://maknee.github.io/blog/2025/3FS-Performance-Journal-1/"&gt;another great article&lt;/a&gt; and &lt;a href="https://maknee.github.io/blog/2025/3FS-Performance-Journal-2/"&gt;one more!&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sat, 14 Feb 2026 11:03:00 +0100</pubDate><link>https://emilebosch.com/2026/02/14/deepseeks-3fs-fuse-hack-is-super-smart/</link><guid isPermaLink="true">https://emilebosch.com/2026/02/14/deepseeks-3fs-fuse-hack-is-super-smart/</guid><category>FUSE</category><category>AF_XDP</category><category>infiniband</category><category>no-kernel</category><category>HPC</category><category>Networking</category><category>OMGFAST</category></item><item><title>StarGZ fast docker snapshotter is low-key magic</title><description>&lt;p&gt;Sometimes you run into tech that makes you go “Heh?”, which is the positive variant of its cousin, “Wtf?”. My newest addition, &lt;a href="https://github.com/containerd/stargz-snapshotter/tree/main"&gt;Stargz snapshotter&lt;/a&gt;, is exactly that kind of tech.&lt;/p&gt;
&lt;p&gt;Without immediately spoiling how the magic works: Stargz snapshotter is something you install on your Docker host that causes the daemon to download only the files your workload &lt;strong&gt;actually uses, just in time&lt;/strong&gt;. Heh? I know right. Instead of gobbling down a 9GB CUDA container during &lt;code&gt;docker pull&lt;/code&gt; only to use a fraction of it, it fetches precisely what’s needed, when it’s needed.&lt;/p&gt;
&lt;p&gt;To pull off that trick, it has to solve a few problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Know which files are being accessed by your workload or processes inside the container&lt;/li&gt;
&lt;li&gt;Know where to fetch those files from&lt;/li&gt;
&lt;li&gt;Perform some additional sleight of hand&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So how does it do that? It’s a combination of things working together:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A FUSE layer that observes file access and fetches content on demand&lt;/li&gt;
&lt;li&gt;A gz/tar/toc index on where to exactly find those files in the image (and download them)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now, this is already cool but your containers would suffer from a slow start/unpredictable run times. You can also choose to optimize the images.&lt;/p&gt;
&lt;p&gt;StarGz then profiles your workloads (by running them) and puts the most frequently asked and most used files first, bundles them up so that you have a quick first fetch with range requests.&lt;/p&gt;
&lt;p&gt;Now isn&amp;rsquo;t that awesome?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/containerd/stargz-snapshotter/blob/main/docs/estargz.md"&gt;Its internals are really worth reading&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also, seems that &lt;a href="https://github.com/dragonflyoss/nydus?tab=readme-ov-file#readme"&gt;Nydus&lt;/a&gt; ran with the concept and put more fancy things op top like chunk dedup.&lt;/p&gt;</description><pubDate>Fri, 13 Feb 2026 17:28:00 +0100</pubDate><link>https://emilebosch.com/2026/02/13/stargz-is-a-sexy-piece-of-tech/</link><guid isPermaLink="true">https://emilebosch.com/2026/02/13/stargz-is-a-sexy-piece-of-tech/</guid><category>StarGZ</category><category>Docker</category><category>FUSE</category></item><item><title>On mourning the craft</title><description>&lt;p&gt;I recently read &lt;a href="https://nolanlawson.com/2026/02/07/we-mourn-our-craft/"&gt;We mourn our craft&lt;/a&gt; and it resonates for me. It does more than that actually. I think it&amp;rsquo;s normal to feel grief and emotions like mourning for something you&amp;rsquo;ve worked so passionately hard to obtain, becoming so easily accessible and reproducible for others. I don&amp;rsquo;t hate AI, I am actually very productive with it and I can do more than ever. However, I do grieve. Things can co-exist.&lt;/p&gt;
&lt;p&gt;Yes, there is a whole new world to explore with LLM/AI tech, but it&amp;rsquo;s different than the other changes over the past 25 years i&amp;rsquo;ve been around. And yes, we&amp;rsquo;ll find a way, but it&amp;rsquo;s also good to just actually feel it for a minute and understand its nuances.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not hype, it&amp;rsquo;s actual &lt;a href="https://mitchellh.com/writing/my-ai-adoption-journey"&gt;value&lt;/a&gt; &lt;a href="https://world.hey.com/dhh/promoting-ai-agents-3ee04945"&gt;for&lt;/a&gt; even the most &lt;a href="https://antirez.com/news/158"&gt;seasoned&lt;/a&gt; &lt;a href="http://simonwillison.net"&gt;people&lt;/a&gt;. I don&amp;rsquo;t even want to put the word &lt;em&gt;hype&lt;/em&gt; here to taint it. There is a huge disparity on opinions how valuable it is, but I think most of it boils down to effort put in and model selection. But back to my point.&lt;/p&gt;
&lt;p&gt;I went to libraries to get books on programming because the internet wasn&amp;rsquo;t commonplace yet. I had to painstakingly type in every word in an Amiga to make a ball bounce. Later I started recording tapes from radio stations where they broadcasted games.&lt;/p&gt;
&lt;p&gt;I was there when the internet came and people thought it was a fad. Built dialup systems with RAS and Asterisk. Built up lots and lots of knowledge by doing many freelance gigs for big, medium, and small companies.&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t mind that some projects took very hard work with many failures along the path; all of it was learning anyway and that was valuable. The craft was expensive to learn in terms of time, but that knowledge was worth it and well earned.&lt;/p&gt;
&lt;p&gt;And now, something ephemeral like knowledge, something that I held closely like an armour for all my life, has become so easily reproduced. Of course it&amp;rsquo;s still a matter of how one applies it all, but still. Being able to ask it in whatever form you want, in any language you want, is step one. Having the entire corpus at your disposal is insane. You just need to ask, filter, and be diligent.&lt;/p&gt;
&lt;p&gt;And I would even argue it&amp;rsquo;s harder to make a difference now. One simply can&amp;rsquo;t train a model themselves with just pure coding. You need tons of data, truckloads of money to train. Where you could sit down and build a groundbreaking product alone becomes much harder now in the age of AI.&lt;/p&gt;
&lt;p&gt;When I fully understood the impact of IA, I took a year of to travel, sail and think a little.&lt;/p&gt;</description><pubDate>Sat, 07 Feb 2026 23:15:00 +0100</pubDate><link>https://emilebosch.com/2026/02/07/i-also-mourned-our-craft/</link><guid isPermaLink="true">https://emilebosch.com/2026/02/07/i-also-mourned-our-craft/</guid><category>LIFE</category><category>FEELS</category></item><item><title>Gow - Simple compile on save, live reload for go web applications</title><description>&lt;p&gt;When building Go web applications, fast feedback matters. The usual loop, compile, run, open the browser, refresh, adds friction, especially when you also want to test on your phone.&lt;/p&gt;
&lt;p&gt;That’s the problem &lt;code&gt;gow&lt;/code&gt; is built to solve.&lt;/p&gt;
&lt;h2 id="faster-loops-with-gow"&gt;Faster loops with Gow&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve decided to fix this with a unified tool.&lt;/p&gt;
&lt;p&gt;Gow combines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automatic compilation&lt;/li&gt;
&lt;li&gt;Live browser reloading&lt;/li&gt;
&lt;li&gt;Easy phone access via QR codes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whenever you save a file, Gow rebuilds your Go program, starts it, and refreshes your browser automatically. If the build fails, the browser shows the compiler error directly. As soon as you fix the issue and save again, the app recompiles and the page reloads back to your running site.&lt;/p&gt;
&lt;p&gt;This keeps the development loop tight and uninterrupted.&lt;/p&gt;
&lt;h2 id="qr--phone-support"&gt;QR &amp;amp; phone support&lt;/h2&gt;
&lt;p&gt;Gow also displays QR codes you can scan with your phone. Your mobile device connects to the same local app, auto-reloads on changes, and even stays in sync with navigation. That makes real-device testing just as seamless as desktop development.&lt;/p&gt;
&lt;p&gt;Overall, it’s a much faster and smoother turnaround when working on Go web apps.&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;p&gt;Install it with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go install github.com/emilebosch/gow@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will build the current folder with &lt;code&gt;go build .&lt;/code&gt; and pass any optional parameters to your app when the build completes.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gow -- &lt;span style="color:#f92672"&gt;[&lt;/span&gt;optional params &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; your app&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><pubDate>Sun, 01 Feb 2026 18:34:00 +0200</pubDate><link>https://emilebosch.com/2026/02/01/gow-filewatcher-livereload/</link><guid isPermaLink="true">https://emilebosch.com/2026/02/01/gow-filewatcher-livereload/</guid><category>Golang</category><category>Tool</category></item></channel></rss>