<?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: Stephan -All Input Is Error- Bökelmann</title>
    <description>The latest articles on DEV Community by Stephan -All Input Is Error- Bökelmann (@maxclerkwell).</description>
    <link>https://dev.to/maxclerkwell</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%2F3937564%2Fcc535321-1bb1-46fa-b3ea-b589e5e81d32.jpg</url>
      <title>DEV Community: Stephan -All Input Is Error- Bökelmann</title>
      <link>https://dev.to/maxclerkwell</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maxclerkwell"/>
    <language>en</language>
    <item>
      <title>EMC in Dongguan: 2.5 Years of Work, 4 Days in a Test Chamber</title>
      <dc:creator>Stephan -All Input Is Error- Bökelmann</dc:creator>
      <pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/maxclerkwell/emc-in-dongguan-25-years-of-work-4-days-in-a-test-chamber-4f8j</link>
      <guid>https://dev.to/maxclerkwell/emc-in-dongguan-25-years-of-work-4-days-in-a-test-chamber-4f8j</guid>
      <description>&lt;p&gt;In March I flew to Dongguan, China for four days of EMC testing. It was the last major milestone before our reflow oven monitoring system goes into production. After two and a half years of development, the question was simple: does this thing radiate, and can it take a hit?&lt;/p&gt;

&lt;p&gt;It passed. But the story is more interesting than that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjxkyqf9k27duyhxfi7j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjxkyqf9k27duyhxfi7j.jpg" alt="Stopover in Shenzhen — the trip begins" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Project
&lt;/h2&gt;

&lt;p&gt;The system was commissioned by &lt;strong&gt;GlobalPoint GmbH&lt;/strong&gt; , now part of &lt;strong&gt;Kurtz Ersa GmbH &amp;amp; Co. KG&lt;/strong&gt; , one of the leading manufacturers of reflow soldering equipment. The brief: build a monitoring system that attaches to Ersa’s reflow ovens and gives operators real-time insight into what is actually happening inside the machine — not what the oven &lt;em&gt;thinks&lt;/em&gt; is happening, but what the physics says.&lt;/p&gt;

&lt;p&gt;The development was handled by &lt;a href="https://skainet.io" rel="noopener noreferrer"&gt;&lt;strong&gt;skainet.io&lt;/strong&gt;&lt;/a&gt;, the engineering office of Auto-Intern GmbH. I served as system architect. &lt;a href="https://x.com/odinthenerd" rel="noopener noreferrer"&gt;&lt;strong&gt;Odin Holmes&lt;/strong&gt;&lt;/a&gt; owned firmware and PCB layout, and &lt;a href="https://x.com/tabeatheunicorn" rel="noopener noreferrer"&gt;&lt;strong&gt;Tabea Bökelmann&lt;/strong&gt;&lt;/a&gt; designed and built the frontend. Two and a half years. A lot of iteration.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the System Does
&lt;/h2&gt;

&lt;p&gt;The core of the system is a central compute module — a compact Linux box with a quad-core processor and more RAM than you would expect for its size. It has two separate Ethernet interfaces: one dedicated WAN uplink, and one connected to an integrated switch chip that exposes seven downstream ports, all of them Power over Ethernet.&lt;/p&gt;

&lt;p&gt;Every downstream device is powered and communicated with over those PoE ports. At minimum, the system ships with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A temperature measurement module&lt;/strong&gt; — our own design, with custom-made temperature measurement snakes that take in-situ readings at up to 36 points directly inside the solder oven, streaming live to the compute module.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A digital I/O module&lt;/strong&gt; — reads up to 7 IO-Link sensors and drives a stacklight for at-a-glance status indication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the drawer we have further modules in various stages of readiness: vibration, IR camera, temperature/humidity, residual O₂, and ultrasonic structure-borne sound. They weren’t part of this certification run, but the architecture is ready for them.&lt;/p&gt;

&lt;p&gt;The compute module auto-detects whatever is connected, loads the calibration files, and exposes the data via REST, WebSocket, and MQTT. On the Ersa machine PC, an Electron frontend consumes those APIs to display profile predictions and process quality indices — CPK and several others.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbzvlgh3h5hekrdm1s3k.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbzvlgh3h5hekrdm1s3k.jpg" alt="Everything packed into a Peli case for the flight to Dongguan" width="720" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Travelling with professional electronics across borders comes with its own paperwork. I covered the Peli case setup and the ATA Carnet process in a &lt;a href="https://dev.to/posts/ata-carnet-china-travel/"&gt;separate post&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Test Setup
&lt;/h2&gt;

&lt;p&gt;The lab was &lt;strong&gt;NTC — Nore Detection Technology Co., Ltd&lt;/strong&gt; in Dongguan. We tested against three regulatory frameworks: &lt;strong&gt;CE&lt;/strong&gt; (Europe), &lt;strong&gt;FCC&lt;/strong&gt; (USA), and &lt;strong&gt;CCC&lt;/strong&gt; (China). The full test sequence ran over four days:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Burst (EFT)&lt;/li&gt;
&lt;li&gt;Surge&lt;/li&gt;
&lt;li&gt;5-second power interruption&lt;/li&gt;
&lt;li&gt;Radiated emissions&lt;/li&gt;
&lt;li&gt;Radiated immunity&lt;/li&gt;
&lt;li&gt;Conducted emissions&lt;/li&gt;
&lt;li&gt;Conducted immunity&lt;/li&gt;
&lt;li&gt;Magnetic field&lt;/li&gt;
&lt;li&gt;ESD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We were not going in blind. We had done preliminary testing in Germany, and we have accumulated a fair amount of PoE-specific EMC experience over the years. All our housings are aluminium. The cables are M12 Cat5e SF/UTP — shielded foil, unshielded twisted pair — which behaves predictably in a test chamber if the mechanical coupling is done correctly.&lt;/p&gt;

&lt;p&gt;Everything came back green.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmckm6sh0be6l1321r6q1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmckm6sh0be6l1321r6q1.jpg" alt="Full test bench at NTC — compute module, sensor nodes, M12 PoE cables, ThinkPad for monitoring" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The One Finding
&lt;/h2&gt;

&lt;p&gt;During the test we noticed that the M12 connectors on the downstream devices did not have adequate coupling to their aluminium housings. The anodized surface was acting as an insulator between the connector shell and the enclosure — not ideal when you are trying to maintain a continuous shielded path.&lt;/p&gt;

&lt;p&gt;The fix is straightforward: &lt;strong&gt;serrated lock washers&lt;/strong&gt; (Fächerscheiben) under the M12 connector nut. The teeth cut through the anodizing and create a reliable metal-to-metal bond. We did not need to retest, but this goes into the production build as a specification change.&lt;/p&gt;

&lt;p&gt;It is exactly the kind of thing you catch when you are in a proper chamber with someone experienced watching the traces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8s2x0m65ywgm24yqczoj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8s2x0m65ywgm24yqczoj.jpg" alt="Setup in progress — the NTC technician preparing the conducted immunity test" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lab, and Jees
&lt;/h2&gt;

&lt;p&gt;I was expecting a language barrier and I found one — very few people in and around the lab spoke English. But my project manager, &lt;strong&gt;熊伟&lt;/strong&gt; , who goes by Jees, spoke excellent English and was present throughout all four days. Attentive, knowledgeable, flexible in how we sequenced the tests. He also handed me several EMC tips that I had not encountered before, which alone made the trip worthwhile.&lt;/p&gt;

&lt;p&gt;What surprised me most was the scale of the facility. NTC had far more test chambers than I anticipated — you could run multiple concurrent certifications across different standards without ever waiting for a chamber. The whole operation felt more fluid than equivalent labs I have used in Germany.&lt;/p&gt;

&lt;p&gt;I will be back.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6okb5mkcvxuq6dzc0zp7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6okb5mkcvxuq6dzc0zp7.jpg" alt="Inside the anechoic chamber — radiated emissions test in progress" width="800" height="1067"&gt;&lt;/a&gt; &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frf4fjcc08lif5nc2shxi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frf4fjcc08lif5nc2shxi.jpg" alt="Top-down view of the test arrangement" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Dongguan is not just a testing stop. While I was there I also sat down with a cable manufacturer, visited &lt;a href="https://www.faytech.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Faytech&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://www.nextpcb.com" rel="noopener noreferrer"&gt;&lt;strong&gt;NextPCB&lt;/strong&gt;&lt;/a&gt;, and met with a handful of engineers who had been passed along to me through various contacts. Each of those conversations produced at least one useful lead or piece of information.&lt;/p&gt;

&lt;p&gt;My hotel was next to a sports park. Every morning I ran laps with a group of elderly locals who were entirely unbothered by the foreign engineer in their midst and very friendly once I stopped looking lost. I spent several evenings with Chinese acquaintances — KTV, good restaurants, the kind of conversations that only happen when you are somewhere unfamiliar and have to pay attention.&lt;/p&gt;

&lt;p&gt;Getting around on Didi was seamless. Dongguan is a serious manufacturing city and it moves accordingly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Comes Next
&lt;/h2&gt;

&lt;p&gt;The certification results go back to Kurtz Ersa. Production planning can start. After two and a half years of development it is a strange feeling — not relief exactly, more like the moment when a long measurement finally stabilises and you can read off the value.&lt;/p&gt;

&lt;p&gt;The extended sensor suite (vibration, IR, rest-O₂, ultrasonic) will follow in a subsequent version. The architecture is already there. It just needs time.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The team: &lt;a href="https://x.com/odinthenerd" rel="noopener noreferrer"&gt;Odin Holmes&lt;/a&gt; (firmware, PCB layout), &lt;a href="https://x.com/tabeatheunicorn" rel="noopener noreferrer"&gt;Tabea Bökelmann&lt;/a&gt; (frontend). Developed at &lt;a href="https://skainet.io" rel="noopener noreferrer"&gt;skainet.io&lt;/a&gt; for Kurtz Ersa GmbH &amp;amp; Co. KG.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hardware</category>
      <category>emc</category>
      <category>china</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>Ten Years of Conferences: What They're Actually For</title>
      <dc:creator>Stephan -All Input Is Error- Bökelmann</dc:creator>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/maxclerkwell/ten-years-of-conferences-what-theyre-actually-for-3k2b</link>
      <guid>https://dev.to/maxclerkwell/ten-years-of-conferences-what-theyre-actually-for-3k2b</guid>
      <description>&lt;p&gt;In 2015 I went to my first real conference. I came back a different engineer. That sounds dramatic, but it's accurate, and it took me a while to understand why. This post is an attempt to write that down — both for myself, after ten years, and for the companies, universities, and open-source projects that keep asking us at &lt;a href="https://skunkforce.org" rel="noopener noreferrer"&gt;Open Skunkforce e.V.&lt;/a&gt; how we think about this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meeting C++, 2015
&lt;/h2&gt;

&lt;p&gt;I went to &lt;strong&gt;Meeting C++ 2015&lt;/strong&gt; with my colleague &lt;a href="https://x.com/odinthenerd" rel="noopener noreferrer"&gt;Odin Holmes&lt;/a&gt;. At that point I thought I was a reasonably competent programmer. I was wrong — not in the way that's demoralising, but in the way that only becomes visible when you're suddenly in a room full of people who have been thinking deeply about problems you haven't encountered yet.&lt;/p&gt;

&lt;p&gt;I didn't know what I didn't know. I heard talks on topics I had no idea existed. I had conversations in corridors that reframed things I thought I understood. Some of those conversations turned into projects. Some turned into friendships that are still going today.&lt;/p&gt;

&lt;p&gt;That's the thing about conferences that doesn't translate into any other format: you cannot Google your way to the questions you haven't thought to ask yet. A talk puts an idea in front of you. A conversation in the hallway afterwards tells you what that idea means in your situation. You go home with a list of things to learn that you didn't know you needed to learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  The List
&lt;/h2&gt;

&lt;p&gt;Over the past ten years, roughly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As attendee or speaker:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Meeting C++ — 2015, the beginning&lt;/li&gt;
&lt;li&gt;code:dive, Wrocław — many years in a row&lt;/li&gt;
&lt;li&gt;FOSDEM, Brussels — regularly for eight years&lt;/li&gt;
&lt;li&gt;KiCon US, Chicago 2019 — organised by &lt;a href="https://contextualelectronics.com" rel="noopener noreferrer"&gt;Chris Gammel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ISO C++ Committee Meeting, Kona 2019&lt;/li&gt;
&lt;li&gt;ISO C++ Committee Meeting, Prague 2020&lt;/li&gt;
&lt;li&gt;PANDA and GSI collaboration meetings — multiple&lt;/li&gt;
&lt;li&gt;NVIDIA C++ Meetup, Silicon Valley&lt;/li&gt;
&lt;li&gt;KiCon Asia 2025, Shenzhen — as speaker&lt;/li&gt;
&lt;li&gt;Various smaller conferences and user groups in Germany and the Netherlands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;As organiser (with &lt;a href="https://skunkforce.org" rel="noopener noreferrer"&gt;Open Skunkforce e.V.&lt;/a&gt;):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;emBO++&lt;/strong&gt; — embedded C++ conference, Bochum, every year since 2015&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenTapeout&lt;/strong&gt; — open-source chip design, first edition 2021&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Practical Datascience Conference (PDSC)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KiCon Germany&lt;/strong&gt; — four editions from 2020&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KiCon Europe 2024&lt;/strong&gt; — Rotunde Bochum, 150 attendees&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CPPP, Paris&lt;/strong&gt; — marketing and video production, on invitation from Fred Tingaud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a lot of rooms. A lot of evenings. A lot of hallways.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Moments That Stay
&lt;/h2&gt;

&lt;p&gt;Three moments from the past decade stand out when I try to articulate what conferences are actually for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kona, 2019.&lt;/strong&gt; I was at the ISO C++ Committee meeting — not as a voting member (I don't hold a DIN seat, so I could participate actively in discussions but not vote), but as a working participant. The Pacific coast outside the venue looked like this every morning:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdj72om7b9cvgzdkc9omb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdj72om7b9cvgzdkc9omb.jpg" alt="Early morning on the Kona waterfront — ISO C++ Committee meeting, February 2019" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One evening I found myself at dinner with &lt;strong&gt;Bjarne Stroustrup&lt;/strong&gt; and &lt;strong&gt;Herb Sutter&lt;/strong&gt;. The conversation was direct, curious, practical. The kind of exchange that only happens when everyone at the table has decided to take the time seriously.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffel8bhsluu37cg0holb5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffel8bhsluu37cg0holb5.png" alt="With Bjarne Stroustrup — Kona, 2019" width="338" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrocław, code:dive.&lt;/strong&gt; &lt;a href="https://sean-parent.stlab.cc" rel="noopener noreferrer"&gt;Sean Parent&lt;/a&gt; and &lt;a href="https://twitter.com/BartoszMilewski" rel="noopener noreferrer"&gt;Bartosz Milewski&lt;/a&gt; ended up with Odin, Tabea, and me in a bar until well past any sensible hour. The conversation went everywhere — category theory, compiler internals, what it means to write software that is honest about what it does. I've learned more in evenings like that than in entire conference days.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2For777i7m8fk84hvv7t0g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2For777i7m8fk84hvv7t0g.jpg" alt="Bar social at code:dive, Wrocław — the evenings are the real conference" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Silicon Valley.&lt;/strong&gt; Tabea and I were at an NVIDIA C++ meetup when &lt;strong&gt;Barbara Gellar&lt;/strong&gt; and &lt;strong&gt;Ansel Sermersheim&lt;/strong&gt; — authors of the &lt;a href="https://www.copperspice.com" rel="noopener noreferrer"&gt;CopperSpice&lt;/a&gt; GUI framework — walked up and asked if we were the people who organised emBO++. That conversation turned into an invitation to stay at their home for four days. We spent those days talking about C++, software design, and what it means to build tools that last. We're still in regular contact today.&lt;/p&gt;

&lt;p&gt;None of these moments were scheduled. None of them appear on any programme. They happened because people who care about the same things ended up in the same place, with time to talk.&lt;/p&gt;

&lt;h2&gt;
  
  
  emBO++: Eleven Years
&lt;/h2&gt;

&lt;p&gt;The arc of emBO++ is the clearest illustration I have of how this compounds over time.&lt;/p&gt;

&lt;p&gt;The first edition, 2015: four people in a room. The second: speakers from Russia to San Francisco, 40 attendees. It felt unreasonably large at the time. By 2020 we had &lt;strong&gt;250 people in Bochum&lt;/strong&gt; — the last edition before COVID.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmaxclerkwell.github.io%2Fposts%2Fwhy-conferences-march-2026%2Fassets%2FIMG_20230324_092047.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmaxclerkwell.github.io%2Fposts%2Fwhy-conferences-march-2026%2Fassets%2FIMG_20230324_092047.jpg" alt="emBO++ 2023 — the conference back at full pace after the pandemic years" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Going online during the pandemic worked, technically. But something was missing. The talks were fine. The questions-and-answers were fine. What you cannot replicate over video is the moment after the talk ends, when someone turns to the person next to them and says &lt;em&gt;"did you notice that detail he mentioned in passing?"&lt;/em&gt; — and that becomes a two-hour conversation over dinner.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ur8olsgu8rt2ci84hax.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ur8olsgu8rt2ci84hax.jpg" alt="emBO++ 2025 — conferences have not fully recovered to pre-COVID numbers yet" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conferences have not fully recovered since COVID. That's the honest picture. Attendance is lower than it was. The habit broke. This bothers me most when I think about students and people early in their careers — the ones who would benefit most from being in a room where the level is higher than anything they've encountered before.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5yregat4rv0rupsc44z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5yregat4rv0rupsc44z.jpg" alt="emBO++ 2026 — still running, still worth it" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Broader World
&lt;/h2&gt;

&lt;p&gt;Conferences are not only about software. Some of the most formative meetings I've attended were &lt;strong&gt;PANDA and GSI collaboration meetings&lt;/strong&gt; at &lt;a href="https://www.gsi.de" rel="noopener noreferrer"&gt;GSI Helmholtzzentrum für Schwerionenforschung&lt;/a&gt; in Darmstadt — particle physics, large-scale detector hardware, international teams building instruments that take decades to complete.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmaxclerkwell.github.io%2Fposts%2Fwhy-conferences-march-2026%2Fassets%2FIMG_20220601_131444.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmaxclerkwell.github.io%2Fposts%2Fwhy-conferences-march-2026%2Fassets%2FIMG_20220601_131444.jpg" alt="GSI/FAIR campus in Darmstadt — PANDA collaboration meeting" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nrf4fgsxfxmt2a35tz0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nrf4fgsxfxmt2a35tz0.jpg" alt="Inside a PANDA collaboration session — " width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The dynamics are different from a software conference, but the core is the same: the real work happens in the corridors, at the dinner table, in the conversations that drift far from the official agenda.&lt;/p&gt;

&lt;p&gt;At &lt;strong&gt;KiCon Europe 2024&lt;/strong&gt; in Bochum, the same pattern held. 150 people, two days, the Rotunde. Lukas Hartmann's talk on open hardware CPU modules set off conversations that continued well past the venue closing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqkmhp7penkh0b3k6nb6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqkmhp7penkh0b3k6nb6.jpg" alt="KiCon Europe 2024, Rotunde Bochum — Lukas Hartmann on open hardware" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open Skunkforce also runs smaller, focused events throughout the year — user groups, workshops, single-topic evenings — where the same principles apply at a smaller scale.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo229btiqlqf3t0ys6ggg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo229btiqlqf3t0ys6ggg.jpg" alt="A smaller OSF evening event — focused format, green lighting, engaged audience" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What a Good Conference Actually Is
&lt;/h2&gt;

&lt;p&gt;Here is what we have learned from organising events for a decade:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Talks set the agenda. Conversations are the output.&lt;/strong&gt; A good talk gives the audience something to argue about. The argument happens in the hallway, at dinner, at the bar. If people leave immediately after the last session, the conference has half-succeeded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The pre-event evening is not optional.&lt;/strong&gt; Every conference we run includes a social the evening before the programme starts. People arrive, meet each other without the structure of sessions, and come to day one already knowing who they want to talk to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmaxclerkwell.github.io%2Fposts%2Fwhy-conferences-march-2026%2Fassets%2FIMG_20220531_220208.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmaxclerkwell.github.io%2Fposts%2Fwhy-conferences-march-2026%2Fassets%2FIMG_20220531_220208.jpg" alt="emBO++ social evening — the conversations here continue all the way through the programme" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dinner outside the venue belongs in the programme.&lt;/strong&gt; Not a sponsored cocktail reception in the conference hall. A table at a restaurant, with speakers and attendees mixed. The conversations that happen there are the ones people mention years later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;100–200 people is the sweet spot.&lt;/strong&gt; Large enough for real diversity — different industries, backgrounds, experience levels. Small enough that you can find the people you want to talk to, and that the speakers are genuinely accessible. Beyond 300, a conference starts to become a trade fair.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Staying in the hotel room after the conference is the biggest mistake you can make.&lt;/strong&gt; I have made it. Everyone has made it. It is always a mistake.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Offer
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://skunkforce.org" rel="noopener noreferrer"&gt;Open Skunkforce e.V.&lt;/a&gt; organises technical conferences in and around Bochum. We handle everything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Programme design and speaker acquisition&lt;/li&gt;
&lt;li&gt;Marketing and public communications&lt;/li&gt;
&lt;li&gt;Venue booking and logistics&lt;/li&gt;
&lt;li&gt;Catering, including the pre-event social and the dinner&lt;/li&gt;
&lt;li&gt;Video recording and post-production&lt;/li&gt;
&lt;li&gt;Publishing recordings openly after the event&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have been doing this for ten years. We have the speaker network, the sponsor relationships, the venue contacts, and — most importantly — the experience of what goes wrong and how to fix it before it matters.&lt;/p&gt;

&lt;p&gt;The format we know best is two days, 100–200 attendees. That maps well to a focused technical community: an open-source project that wants to bring its contributors together, a company that wants to build a developer community around its tools, a university group that wants to connect its research with practitioners in industry.&lt;/p&gt;

&lt;p&gt;If you have been thinking about running a conference but don't know where to start — or have tried and found the logistics overwhelming — that is exactly the problem we exist to solve. Get in touch.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Open Skunkforce e.V. is a registered non-profit based in Bochum. Find us at &lt;a href="https://skunkforce.org" rel="noopener noreferrer"&gt;skunkforce.org&lt;/a&gt; or reach out directly via the contact on this site.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>conferences</category>
      <category>community</category>
      <category>embo</category>
      <category>openskunkforce</category>
    </item>
    <item>
      <title>Dual Uplink for 15 People: Starlink, Heimdall, and Linux Routing</title>
      <dc:creator>Stephan -All Input Is Error- Bökelmann</dc:creator>
      <pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/maxclerkwell/dual-uplink-for-15-people-starlink-heimdall-and-linux-routing-3898</link>
      <guid>https://dev.to/maxclerkwell/dual-uplink-for-15-people-starlink-heimdall-and-linux-routing-3898</guid>
      <description>&lt;p&gt;At some point, one internet connection isn’t enough. We hit that point when 15 people were working in the office simultaneously and the line was noticeably sluggish — video calls, git pushes, remote access, all sharing a single uplink. &lt;a href="https://x.com/philippthecron" rel="noopener noreferrer"&gt;Philipp&lt;/a&gt; and I tackled it in February.&lt;/p&gt;

&lt;p&gt;Philipp is our server administrator — still working on his bachelor’s degree, but already operating at a level that leaves many professional admins behind. Together we’ve set up mesh backhauls, VPNs, intranets, a Kubernetes cluster, Ceph storage, Keycloak for all our internal services — and quite a bit more. If a service runs in our office, Philipp either built it or knows every corner of it. The network upgrade in February was one more chapter in a long list.&lt;/p&gt;

&lt;h2 id="the-starting-point"&gt;The Starting Point&lt;/h2&gt;

&lt;p&gt;Our existing network was a standard setup: one uplink, backbone switches behind it, everything running over that single path. It works — until it doesn’t. Either because bandwidth runs out, or because the provider has a bad day. We’d had both.&lt;/p&gt;

&lt;p&gt;The fix was obvious: add a second uplink. We went with &lt;strong&gt;Starlink&lt;/strong&gt; — quick to install, independent of our DSL provider, and well-suited to our location.&lt;/p&gt;

&lt;p&gt;The actual goal was resilience: if one link goes down, the office keeps running without anyone having to intervene.&lt;/p&gt;

&lt;h2 id="heimdall"&gt;Heimdall&lt;/h2&gt;

&lt;p&gt;Between the two uplinks and the existing backbone switches we added a small new rack. Inside: a Debian rack PC, hostname &lt;strong&gt;AI-heimdall&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The name is not accidental. &lt;a href="https://x.com/odinthenerd" rel="noopener noreferrer"&gt;Odin Holmes&lt;/a&gt; — a close collaborator I’ve worked with for years — established the tradition of giving some of our projects and machines names from Norse mythology. The first library Odin and I wrote together was called &lt;strong&gt;Kvasir&lt;/strong&gt;. The habit stuck. Heimdall — the watchman of the gods, who observes all nine worlds and misses nothing — was too fitting for the gateway into our network to pass up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmaxclerkwell.github.io%2Fposts%2Fdual-uplink-feb-2026%2Fassets%2FPXL_20260306_175202894.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmaxclerkwell.github.io%2Fposts%2Fdual-uplink-feb-2026%2Fassets%2FPXL_20260306_175202894.jpg" alt="Setup workspace in the basement — AI-heimdall in the mini-rack on the right, terminal output on the monitor" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI-heimdall has the two uplinks coming in as separate interfaces: &lt;code class="language-plaintext highlighter-rouge"&gt;eno1&lt;/code&gt; for DSL (static IP into the modem), &lt;code class="language-plaintext highlighter-rouge"&gt;eno2&lt;/code&gt; for Starlink via DHCP. The internal network runs on &lt;code class="language-plaintext highlighter-rouge"&gt;eno4&lt;/code&gt; with the &lt;code class="language-plaintext highlighter-rouge"&gt;10.42.0.0/16&lt;/code&gt; address space towards the backbone switches.&lt;/p&gt;

&lt;p&gt;The routing configuration uses two default routes in the Linux main routing table, differentiated by metric: DSL runs with a lower metric and is preferred, Starlink sits alongside it with metric 1003. As long as the DSL gateway is reachable, all traffic goes that way. If DSL drops, Starlink takes over automatically — no manual intervention, no visible outage for anyone in the office.&lt;/p&gt;

&lt;p&gt;For the future, two named tables are already registered in &lt;code class="language-plaintext highlighter-rouge"&gt;/etc/iproute2/rt_tables&lt;/code&gt; — &lt;code class="language-plaintext highlighter-rouge"&gt;starlink&lt;/code&gt; (200) and &lt;code class="language-plaintext highlighter-rouge"&gt;dsl&lt;/code&gt; (201) — as preparation for proper policy routing that directs individual connections over a specific uplink. For now, the failover model is exactly what we need.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmaxclerkwell.github.io%2Fposts%2Fdual-uplink-feb-2026%2Fassets%2FPXL_20260306_205143846.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmaxclerkwell.github.io%2Fposts%2Fdual-uplink-feb-2026%2Fassets%2FPXL_20260306_205143846.jpg" alt=" raw `ip a` endraw  on AI-heimdall — eno1 (DSL), eno2 (Starlink), and eno4 (internal network) all active" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id="the-dashboard"&gt;The Dashboard&lt;/h2&gt;

&lt;p&gt;To see what is actually going over which link at any given moment, I wrote a small Python dashboard. It reads the interface statistics for both uplinks and displays throughput and utilisation in real time — simple enough to leave running on a screen in the office.&lt;/p&gt;

&lt;p&gt;It also served as a practical sanity check: the dashboard makes it immediately obvious if everything is routing over one link when it shouldn’t be, or if something is wrong.&lt;/p&gt;

&lt;h2 id="what-it-changed"&gt;What It Changed&lt;/h2&gt;

&lt;p&gt;The bottlenecks are gone — and when the DSL line has a hiccup, nobody in the office notices. That’s the real gain: not more bandwidth on paper, but reliability in practice.&lt;/p&gt;

&lt;p&gt;The actual work was the clean integration on AI-heimdall: two interfaces, correct metric configuration, making sure the Starlink DHCP lease doesn’t write a default route into the main table that displaces DSL. Philipp handled the Starlink installation and the physical setup, and knows every layer of the existing network that AI-heimdall now sits in front of; the routing configuration was my part.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you’re building something similar: two default routes with different metrics in &lt;code class="language-plaintext highlighter-rouge"&gt;/etc/network/interfaces&lt;/code&gt; is enough for clean failover. Per-host load balancing requires additional &lt;code class="language-plaintext highlighter-rouge"&gt;ip rule&lt;/code&gt; entries pointing to named routing tables — that’s the next step we’ll take with the &lt;code class="language-plaintext highlighter-rouge"&gt;starlink&lt;/code&gt; and &lt;code class="language-plaintext highlighter-rouge"&gt;dsl&lt;/code&gt; tables already in place.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>networking</category>
      <category>linux</category>
      <category>starlink</category>
      <category>failover</category>
    </item>
    <item>
      <title>Ten Years of PowerSense: Blood, Sweat, and Ferrite Cores</title>
      <dc:creator>Stephan -All Input Is Error- Bökelmann</dc:creator>
      <pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/maxclerkwell/ten-years-of-powersense-blood-sweat-and-ferrite-cores-268i</link>
      <guid>https://dev.to/maxclerkwell/ten-years-of-powersense-blood-sweat-and-ferrite-cores-268i</guid>
      <description>&lt;p&gt;January 2016. A call came in through a mutual contact — &lt;a href="https://eximentor.de/en/home/" rel="noopener noreferrer"&gt;Steffen Scholle&lt;/a&gt;, at the time an Ex-inspector at DEKRA and today a respected Ex-consultant — connecting us with DB Netz AG. They had a problem: they needed a smarter way to monitor the power supply of their railway switching systems. Three-phase, 16A lines, 1.5mm² cross-section. And they needed it non-intrusively, clip-on, retrofit. No rewiring. No outages. No excuses.&lt;/p&gt;

&lt;p&gt;All the pieces already existed internally — E-field sensing, Hall probes, PoE prototypes — and the moment we heard the requirement, we knew exactly what to assemble. January 2016 was the moment it became real. A customer with a real problem, a real network, and real consequences if the measurements were wrong.&lt;/p&gt;

&lt;p&gt;Ten years later, that call is still one of the most consequential things that ever happened to this company.&lt;/p&gt;




&lt;h2&gt;
  
  
  The First Meeting
&lt;/h2&gt;

&lt;p&gt;We met the DB Netz team in Frankfurt. Their initial idea: an RS-485-connected sensor, daisy-chained across the installation. We declined. Not out of arrogance — out of conviction. RS-485 was the wrong answer to the wrong question. You don't build the future of industrial monitoring on a serial bus from 1983.&lt;/p&gt;

&lt;p&gt;After several conversations, we landed on Power over Ethernet. PoE. We had already used it in smaller projects, already understood its potential. But this was the first time we had the chance to apply it at scale, in a critical infrastructure context, with a customer willing to push it through qualification together with us.&lt;/p&gt;

&lt;p&gt;All the components were there. What could possibly go wrong?&lt;/p&gt;




&lt;h2&gt;
  
  
  The Four Problems Nobody Warned Us About
&lt;/h2&gt;

&lt;p&gt;Quite a lot, as it turned out. As the requirements crystallized, four challenges emerged that would define the next five years:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ultra-low power consumption&lt;/strong&gt; — under 2W total, including all measurement and communication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extreme EMC conditions&lt;/strong&gt; — railway certification standards, high demands on dielectric strength and touch safety&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ultra-fast installation&lt;/strong&gt; — clip-on, no tools beyond what a technician carries, seconds per unit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-contact voltage measurement&lt;/strong&gt; — no galvanic connection to the conductors&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first three were hard. The fourth was the one that kept us up at night.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkh97421zrl0ypr9rhj1q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkh97421zrl0ypr9rhj1q.jpg" alt="Two bare PCBs: the sensor antenna board (top) and the PoE main board with RJ45 connector (bottom) — before any housing existed" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem of Voltage Without Contact
&lt;/h2&gt;

&lt;p&gt;Here is something most engineers don't think about carefully enough: &lt;strong&gt;voltage is always a potential difference between two points.&lt;/strong&gt; There is no such thing as an absolute voltage. You measure it between two references.&lt;/p&gt;

&lt;p&gt;So how do you measure voltage when you have three phase conductors inside an IT network and you are not galvanically connected to any of them?&lt;/p&gt;

&lt;p&gt;The short answer: you don't measure voltage directly. You measure the time-varying electric field each conductor produces, capture its influence on an antenna, and reconstruct the voltage waveform from there.&lt;/p&gt;

&lt;p&gt;We had built E-field sensing circuits before — that prior work saved us. Our approach: three pairs of flat patch antennas, one pair per phase, placed on the top and bottom surfaces of a thick PCB. The board's normal vector aligned radially to the conductors. Through the 2mm PCB thickness, the electric field decreases with distance as 1/r (long straight conductor approximation), so the two antenna surfaces see slightly different field strengths — and the differential between them scales as 1/r².&lt;/p&gt;

&lt;p&gt;That differential — tiny, noisy, deeply buried in interference — is what we amplified with a carefully tuned op-amp circuit and fed into an ADC. Get the gain and filtering right, and you see clean 50Hz sinusoidal waveforms from three conductors that you have never electrically touched.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fghpiudystxa88vi78amh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fghpiudystxa88vi78amh.jpg" alt="Measured current waveforms for L1, L2, L3 against reference — phase angles 257°, 262°, 323°. Orange (measured) and blue (reference) traces align closely across all three phases." width="800" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To recover absolute voltage values, we added a single galvanically connected voltage reference measurement per switching station — one point in the network where we knew the actual supply voltage. That scalar reference, combined with our normalized E-field measurements, gave us calibrated voltage readings across the entire installation.&lt;/p&gt;

&lt;p&gt;The current measurements, by comparison, were trivial. Hall sensors, standard technique. Or so we thought — until the housing changed everything.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Housing Problem
&lt;/h2&gt;

&lt;p&gt;On the bare PCB, everything worked. Beautiful signals, clean data, happy engineers.&lt;/p&gt;

&lt;p&gt;Then we put it in a housing.&lt;/p&gt;

&lt;p&gt;Together with &lt;a href="https://www.linkedin.com/in/christian-czayka-7769751ab/" rel="noopener noreferrer"&gt;Christian Czayka&lt;/a&gt;, we developed three different enclosure concepts in 3D CAD, printed the first variants, and assembled prototypes: elegant, compact, tool-free installation. The kind of device you look at and immediately understand how to fit it.&lt;/p&gt;

&lt;p&gt;But when the PCB moved inside the housing and the conductors moved further from the antennas, the E-field signals weakened. For voltage sensing, we compensated with higher gain and a tighter frequency filter — manageable.&lt;/p&gt;

&lt;p&gt;For current, the situation was different. We needed to see harmonics — the full spectral content of the current waveform, not just the fundamental. Brute-force amplification destroys that. Filtering kills it. We needed a different approach.&lt;/p&gt;

&lt;p&gt;The solution: &lt;strong&gt;B-field collecting ferrite cores embedded directly into the clamping clips&lt;/strong&gt; that hold the conductors. The geometry was non-trivial. Getting the ferrite dimensions, permeability, and positioning right required weeks of field calculations and FEM simulations — work that fell to &lt;a href="https://www.linkedin.com/in/tabea-b%C3%B6kelmann-0b9794198/" rel="noopener noreferrer"&gt;Tabea Bökelmann&lt;/a&gt;, who I had met during our physics studies and who is, without qualification, significantly better at mathematics than I am.&lt;/p&gt;

&lt;p&gt;The ferrites were custom-manufactured for us, embedded into the prototype clips, and the signals came back. Clean harmonics. Full spectral resolution. A device that worked not just in the lab, but as an actual product that could be assembled by a technician in the field.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fofdfeobofczsfo6ks6v7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fofdfeobofczsfo6ks6v7.jpg" alt="B-field crosstalk between phases: L1→L1 at 100%, L1→L2 at 2.22%, L1→L3 at 0.34% — demonstrating excellent channel isolation from the embedded ferrite geometry." width="799" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkqhpckwjuv2wp111jvdi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkqhpckwjuv2wp111jvdi.jpg" alt="Three generations of housing (left to right: early black prototype, tall white variant, final grey enclosure with red locking clip and RJ45 port) alongside the ferrite-embedded clamping mechanism for the three-phase conductors." width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Young, Naive, and Almost There
&lt;/h2&gt;

&lt;p&gt;At this point — roughly two years in — we genuinely believed we were almost done. The physics worked. The electronics worked. The housing looked right. We had a team that knew what it was doing.&lt;/p&gt;

&lt;p&gt;We were in our early-to-mid twenties, which explains a lot. Odin was already thirty, which in Oregon hippie years is basically a senior engineer — though it did not appear to grant him any additional realism about the timeline either.&lt;/p&gt;

&lt;p&gt;What followed was two more years of EMC certification at CETECOM, transitioning the housing from 3D-printed prototypes to injection-molded production parts together with LB Kunststoff, and the full qualification cycle under railway standards. Dielectric strength. Touch safety. Vibration. Temperature cycling. The kind of testing that finds every corner you cut and every assumption you made.&lt;/p&gt;

&lt;p&gt;We finished. It took longer than we planned. It always does.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Project Taught Us
&lt;/h2&gt;

&lt;p&gt;Looking back now, a decade later, the skAInet-PowerSense was not just a product. It was an education.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5lm2k2x839jfmzm4dtka.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5lm2k2x839jfmzm4dtka.jpg" alt="Custom-developed PoE infrastructure for the switching stations: QUINT POWER 48V supply feeding two DB ECG PoE8 DIN-rail switches — built because the right hardware simply didn't exist yet." width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsl701cm9wuhqczj9ihw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsl701cm9wuhqczj9ihw.jpg" alt="DIANA Edge Computer Gateway — DB-branded prototype of the rack-mount edge compute unit developed alongside the PowerSense to aggregate and forward sensor data." width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PoE first.&lt;/strong&gt; Always. If you commit to PoE, you get TCP/IP, power, and a standards-compliant physical layer in a single cable. Everything the network has to offer becomes accessible to your device. We have not seriously considered an alternative since 2016.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Digitize as close as possible to the source.&lt;/strong&gt; The moment you convert a physical signal to bits, you can apply error correction, checksums, timestamps, and all the reliability mechanisms that decades of networking research have produced. Analog signals degrade. Digital packets either arrive or they don't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A working PCB is not a finished product.&lt;/strong&gt; This is perhaps the hardest lesson for hardware engineers to internalize. The electronics are phase one. What follows is a product development process that is at least as demanding. Today, we structure our projects accordingly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PoC (3–6 months):&lt;/strong&gt; Looks nothing like the product. Integrates all the physical measurement principles. Validates that the science works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prototype (6–9 months):&lt;/strong&gt; Looks like the product. Manufactured by hand. Proves the form factor and installation concept.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prototype of Product (~12 months):&lt;/strong&gt; Manufactured using the same processes as eventual series production. The first object you can genuinely call a device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We estimate wrong every time. We estimate less wrong than we used to.&lt;/p&gt;




&lt;p&gt;The skAInet-PowerSense is still in service across DB Netz switching stations. It monitors power supply quality in infrastructure that moves millions of people every day, without anyone on the platform knowing it exists.&lt;/p&gt;

&lt;p&gt;That is what good monitoring looks like.&lt;/p&gt;




&lt;h2&gt;
  
  
  There Is More
&lt;/h2&gt;

&lt;p&gt;This post barely scratches the surface. What I have not covered: inter-channel crosstalk and how we characterized and compensated it, PoE shutdowns caused by drawing too little current (yes, that is a real problem — the standard assumes you need power, not that you are carefully conserving it), the sensitivity of every measurement to the exact relative positioning of conductors and PCB, and the full calibration workflow that ties all of it together into a number you can trust.&lt;/p&gt;

&lt;p&gt;Every one of those deserves its own post. Maybe one day.&lt;/p&gt;




&lt;h2&gt;
  
  
  The People Behind the People
&lt;/h2&gt;

&lt;p&gt;None of this would have been possible without the continuous support of people who believed in the work before it was finished.&lt;/p&gt;

&lt;p&gt;Lukas Jakubczyk and Prof. Gereon Kortenbruck at the PROLAB — Laboratory for Product and Production at THGA Bochum — were there throughout. Prof. Benjamin Menküc, co-founder of Auto-Intern and by this point already a professor for EMC and medical engineering at FH Dortmund, kept advising from the sidelines even after stepping back from day-to-day operations. And Dr. Florian Feldbauer of the EP1 chair at the Faculty of Physics, Ruhr-Universität Bochum, provided the kind of rigorous physics perspective that keeps engineers honest.&lt;/p&gt;

&lt;p&gt;We are genuinely grateful to have RUB, THGA, and FH Dortmund as partners — reliable, deeply professional, and always willing to push back when we need it.&lt;/p&gt;

&lt;p&gt;Our real secret superpower is not the hardware. It is that we take these relationships seriously and keep the conversation going. Regularly, honestly, and without agenda. That is rarer than it sounds.&lt;/p&gt;




&lt;p&gt;If any of this is relevant to something you are building — or if you just want to go deep on non-contact sensing, EMC in rail environments, or PoE power budgeting — come find me on Discord. I enjoy talking about this stuff more than I probably should.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://discord.gg/2BXuUY6hrX" rel="noopener noreferrer"&gt;&lt;span&gt;Discord — Full Stack Engineering&lt;/span&gt;&lt;span&gt;Direct access to me and my colleagues. Webinars, live Q&amp;amp;A, and community discussions for engineers across the full stack.&lt;/span&gt;&lt;span&gt;Join the server →&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>autointern</category>
      <category>hardware</category>
      <category>monitoring</category>
      <category>rail</category>
    </item>
    <item>
      <title>PCB Design Starts With a README</title>
      <dc:creator>Stephan -All Input Is Error- Bökelmann</dc:creator>
      <pubDate>Wed, 10 Dec 2025 00:00:00 +0000</pubDate>
      <link>https://dev.to/maxclerkwell/pcb-design-starts-with-a-readme-2eik</link>
      <guid>https://dev.to/maxclerkwell/pcb-design-starts-with-a-readme-2eik</guid>
      <description>&lt;p&gt;The most expensive mistake you can make in PCB design is building the wrong board. The second most expensive is building a board whose purpose nobody on the team agrees on, because you never wrote it down.&lt;/p&gt;

&lt;p&gt;Both mistakes are preventable with the same tool: a plain text file in a version-controlled repository, written before any schematic work begins.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Workflow
&lt;/h2&gt;

&lt;p&gt;The process is simple enough to describe in a few steps, but the discipline behind it takes some practice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Create a new repository.&lt;/strong&gt; A fresh repo on GitHub, cloned locally. This is where the design intent lives, separate from any KiCad project or firmware repo. The design intent should be version controlled on its own terms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Write a README.&lt;/strong&gt; Not notes. Not bullet points in a chat message. A structured document that explains what the board does, what connects to it, how it gets its power, and what you have not decided yet. More on the structure below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Paste the README into an LLM and ask for a block diagram.&lt;/strong&gt; The prompt is exactly that simple: paste the whole document, ask for a PlantUML component diagram. The LLM has enough context from the README to produce something architecturally correct in the first pass — not because it knows your project, but because you do, and you wrote it down clearly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 — Commit the &lt;code&gt;.puml&lt;/code&gt; file.&lt;/strong&gt; The diagram source file goes into the repository alongside the README. Not the rendered image — the source. This way, the diagram is editable, diffable, and improvable over time in the same way the README is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 — Render locally with the PlantUML CLI.&lt;/strong&gt; A single command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;plantuml stm32f7-adc-board.puml &lt;span class="nt"&gt;-tsvg&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This produces an SVG you can embed in the README, open in a browser, or share with a colleague without them needing any tooling installed. If you want rendering to happen automatically on push, a short GitHub Actions workflow handles it — one YAML file, no external services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6 — Iterate.&lt;/strong&gt; The LLM gets it mostly right, but not completely right. That is expected and fine. The &lt;code&gt;.puml&lt;/code&gt; file is a plain text format — editing it manually is quick, and the structure of PlantUML component diagrams is easy to learn in an afternoon. You can also feed the LLM a corrected version and ask it to extend or refine specific sections. Because the whole conversation context is anchored to a written document, the iterations are precise rather than speculative.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Order Matters
&lt;/h2&gt;

&lt;p&gt;Writing the README first is not about documentation. It is about thinking.&lt;/p&gt;

&lt;p&gt;If you will not invest the time to write down what the board should do, you probably will not invest the time to build it correctly either. The act of writing filters out the ideas that sound good in your head but fall apart on paper — which is exactly where you want them to fall apart, before you spend any money.&lt;/p&gt;

&lt;p&gt;It also creates something tangible to discuss. Before presenting a schematic to a colleague, a customer, or a review meeting, there is a block diagram that fits on one screen. The diagram does not require electronics expertise to read. It answers the question "what is this thing" in thirty seconds. That is the first thing any technical conversation needs to establish before it can go anywhere useful.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://auto-intern.de" rel="noopener noreferrer"&gt;Auto-Intern&lt;/a&gt; and &lt;a href="https://skunkforce.org" rel="noopener noreferrer"&gt;Open Skunkforce&lt;/a&gt;, we use this process for every board we build. The block diagram is the entry point. The schematic is what follows after everyone agrees on the entry point.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the README Should Contain
&lt;/h2&gt;

&lt;p&gt;Seven chapters cover the design intent at the right level of detail for the first-pass diagram:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Purpose&lt;/strong&gt; — one paragraph. What problem does this board solve? For whom? In what environment? Everything else in the document flows from this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. External Interfaces&lt;/strong&gt; — a table. What physically connects to this board from the outside? USB, CAN, SPI, analog inputs, power connectors. Include the protocol, the connector type, and the direction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Functional Blocks&lt;/strong&gt; — a numbered list of subsystems. Each block gets two or three sentences: what it is, what it does, why it exists. This is the section the LLM turns most directly into diagram nodes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Power Architecture&lt;/strong&gt; — a small ASCII diagram plus a current budget estimate. Where does power come in? What rails does it produce? What does each rail power? A short budget (mA per rail) catches overloaded regulators before any simulation is run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Signal Chain&lt;/strong&gt; — a linear description of how data or signals move through the board from input to output. For a sensor board: physical quantity → conditioning → conversion → processing → output. This section forces you to think about the end-to-end path, not just individual blocks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Known Constraints&lt;/strong&gt; — hard limits. Form factor, cost ceiling, operating temperature, regulatory requirements. These are the things that rule out design choices before the schematic opens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Open Questions&lt;/strong&gt; — a checklist of everything not yet decided. Part selection, firmware protocol, power sequencing, whether an external reference is needed. These become the agenda for the first design review.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Worked Example
&lt;/h2&gt;

&lt;p&gt;Here is what this looks like for a real board we built: an STM32F7 with a USB-C interface, an I2C-controlled analog multiplexer switching ten ADC channels, with identical differential frontend electronics on each channel, and a power supply generating 3.3 V and 1.7 V from USB 5 V.&lt;/p&gt;

&lt;p&gt;The README for that board is &lt;a href="https://maxclerkwell.github.io/posts/pcb-block-diagrams-december-2025/assets/example-board-readme.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;. The PlantUML source is &lt;a href="https://maxclerkwell.github.io/posts/pcb-block-diagrams-december-2025/assets/stm32f7-adc-board.puml" rel="noopener noreferrer"&gt;here&lt;/a&gt;. The rendered block diagram:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftobmnunawpbrt0f10935.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftobmnunawpbrt0f10935.png" alt="PCB block diagram" width="800" height="396"&gt;&lt;/a&gt;&lt;br&gt;
See original svg &lt;a href="https://maxclerkwell.github.io/posts/pcb-block-diagrams-december-2025/assets/stm32f7-adc-board.svg" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The diagram shows the complete signal chain: differential analog inputs through an EMC filter, a low-pass filter, and a diff-to-single converter, into a 10:1 analog mux controlled over I2C, and finally into the STM32F7 ADC. USB on the left. Power supply at the top with the two output rails. The STM32F7 on the right with its internal functional sections laid out.&lt;/p&gt;

&lt;p&gt;This took two LLM iterations to get right. The first pass placed the mux inside the frontend group, which was structurally wrong — the mux is a separate IC with its own power domain. A one-sentence correction fixed it. The third and later passes were manual edits to the &lt;code&gt;.puml&lt;/code&gt; file: adjusting labels, correcting the power annotation, adding the internal section dividers to the MCU block.&lt;/p&gt;

&lt;p&gt;That is the correct way to think about the LLM's role here: it drafts, you correct. The written document is what makes the correction precise. You are not redescribing the board — you are pointing at a specific node in a diagram whose structure the LLM already understands from your README.&lt;/p&gt;
&lt;h2&gt;
  
  
  The PlantUML Source
&lt;/h2&gt;

&lt;p&gt;The full source file is committed to the repository at &lt;code&gt;assets/stm32f7-adc-board.puml&lt;/code&gt;. A few things worth noting about the structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;left to right direction

package "Analog Frontend  ×10 identical channel instances" #F3E5F5 {
    component "EMC Filter\n(per channel)"   as CHFILT
    component "Low-Pass\nFilter"            as LPF
    component "Diff-to-Single\nConverter"   as D2S
    CHFILT --&amp;gt; LPF
    LPF    --&amp;gt; D2S
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;package&lt;/code&gt; keyword creates the group boundary. The &lt;code&gt;×10&lt;/code&gt; annotation is in the label, not in the component count — PlantUML does not have a repetition primitive, but the label is unambiguous. Dashed arrows for power, solid arrows for signal, the &lt;code&gt;.[#FFA000].&amp;gt;&lt;/code&gt; syntax for coloured dashed connections. None of this requires reading a manual; it is learnable by example in under an hour.&lt;/p&gt;

&lt;h2&gt;
  
  
  Version Control of Design Intent
&lt;/h2&gt;

&lt;p&gt;Once the &lt;code&gt;.puml&lt;/code&gt; file is committed, a &lt;code&gt;git diff&lt;/code&gt; on it is meaningful. If the block diagram changes between commits, the diff shows exactly which connections were added, removed, or renamed. That is something a KiCad schematic diff cannot give you at the block level.&lt;/p&gt;

&lt;p&gt;Over the course of a project, the README and the diagram evolve together. The open questions get resolved and moved to the relevant functional block. New constraints appear and get documented. The diagram grows detail — individual components appear, bus widths get annotated, power domain boundaries become explicit.&lt;/p&gt;

&lt;p&gt;By the time the schematic review happens, everyone has been looking at the same diagram for weeks. The schematic is a confirmation of something already agreed, not a surprise.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The PlantUML CLI is available at &lt;a href="https://plantuml.com" rel="noopener noreferrer"&gt;plantuml.com&lt;/a&gt;. Rendering in CI requires Java; the Docker image &lt;code&gt;plantuml/plantuml&lt;/code&gt; avoids a local Java dependency. The example files linked above are free to use as a starting point.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hardware</category>
      <category>pcb</category>
      <category>kicad</category>
      <category>plantuml</category>
    </item>
    <item>
      <title>Biofilms in Rivers: EIS at the Clark Fork</title>
      <dc:creator>Stephan -All Input Is Error- Bökelmann</dc:creator>
      <pubDate>Fri, 28 Nov 2025 00:00:00 +0000</pubDate>
      <link>https://dev.to/maxclerkwell/biofilms-in-rivers-eis-at-the-clark-fork-1997</link>
      <guid>https://dev.to/maxclerkwell/biofilms-in-rivers-eis-at-the-clark-fork-1997</guid>
      <description>&lt;p&gt;In the summer of 2023, Tabea, Odin Holmes, and I were in Montana for a series of meetings. We had been introduced to the state's network by &lt;strong&gt;Frederick van den Abbeel&lt;/strong&gt;, who had arranged conversations with &lt;strong&gt;Scott Osterman&lt;/strong&gt; and — unexpectedly — with &lt;strong&gt;Governor Greg Gianforte&lt;/strong&gt;. We were even invited to the reception of the Governor's golf cup in Kalispell. None of us had anticipated that a research instrument would come out of any of this.&lt;/p&gt;

&lt;p&gt;Those conversations pointed us toward &lt;strong&gt;Montana State University in Bozeman&lt;/strong&gt;, and through MSU to &lt;strong&gt;Prof. Stephan Warnat&lt;/strong&gt; — an electrical engineer from Schleswig-Holstein who had ended up teaching in Montana, which is not the most obvious career trajectory for someone from the German-Danish borderland. We visited his lab that summer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Electrochemical Impedance Spectroscopy
&lt;/h2&gt;

&lt;p&gt;Warnat's work centres on &lt;strong&gt;microfabricated electrochemical sensors&lt;/strong&gt; — small chips with precisely patterned electrode arrays that can detect what is growing on their surface. The target: &lt;strong&gt;biofilms&lt;/strong&gt;. Specifically, the kind produced by bacteria like &lt;em&gt;E. coli&lt;/em&gt;, which form dense extracellular matrices that coat surfaces in contact with water. Standard approaches to monitoring these require lab analysis. Warnat's approach was to push the detection into the field, directly into the water.&lt;/p&gt;

&lt;p&gt;The method is &lt;strong&gt;Electrochemical Impedance Spectroscopy (EIS)&lt;/strong&gt;: apply a small alternating signal across a frequency sweep, measure how the impedance changes, and infer the state of the biofilm from the spectral response. A biofilm changes the dielectric properties of the interface between electrode and water. The change is detectable, quantifiable, and — with the right instrument — automatable.&lt;/p&gt;

&lt;p&gt;Warnat walked us through the setup: the ASIC-driven measurement boards, the electrode chips, the cell culture work used to grow controlled biofilm samples for calibration. It was the kind of lab visit where you come in thinking you will stay an hour and leave three hours later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the Datalogger
&lt;/h2&gt;

&lt;p&gt;The problem with taking EIS into the field is that the instrument that does it in a lab — an impedance analyser — is bulky, mains-powered, and expensive. For continuous monitoring of a river site, you need something that runs on a battery or solar panel, survives temperature swings and humidity, logs reliably over weeks without intervention, and costs less than a car.&lt;/p&gt;

&lt;p&gt;Over the following year, we developed exactly that: a portable datalogger with an &lt;strong&gt;integrated spectrum analyser&lt;/strong&gt; capable of running EIS autonomously in the field. The hardware design, firmware, and enclosure all went through multiple iterations. Tabea drove much of the practical engineering. The system had to pass data back reliably and handle partial failures without losing the measurement record.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7uf2qs8u5sxqur3pgrk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7uf2qs8u5sxqur3pgrk.jpg" alt="Tabea Bökelmann on the MSU campus — Bronze Bobcat in the background, first day in Bozeman" width="800" height="1062"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By early September 2024 we were in Bozeman again, this time for the deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Clark Fork, September 2024
&lt;/h2&gt;

&lt;p&gt;The target site was the &lt;strong&gt;Clark Fork River north of Butte&lt;/strong&gt; — a river with a complex history of mining contamination and ongoing remediation work, and therefore exactly the kind of environment where a sensitive biofilm monitoring system is scientifically interesting.&lt;/p&gt;

&lt;p&gt;The day before deployment, we were in Prof. Warnat's lab running final checks, calibrating the system, and loading the firmware build we intended to run in the field.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3uuf1sfyivbewrra5g20.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3uuf1sfyivbewrra5g20.jpg" alt="Final preparations in Prof. Warnat's lab the day before deployment" width="800" height="1062"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the morning of September 4th we loaded the gear into a rented Ram Rebel and drove north.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmggbfp187w2lbw1q0ov.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmggbfp187w2lbw1q0ov.jpg" alt="The rented Ram Rebel — transport for the deployment equipment" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The site was a bridge crossing with a small existing measurement hut — used previously by other monitoring equipment — close enough to the water to run cabling down to the sensor without excessive cable runs. The team from MSU was already there when we arrived. Under a canopy tent that served as a field workshop, we spread out the equipment and started working through the installation checklist.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7e14di2q3vy5gs5djwm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7e14di2q3vy5gs5djwm.jpg" alt="Deployment team at the Clark Fork site — bridge crossing, canopy tent, and a lot of cable" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The sensor housing — a machined PVC tube with the electrode chip mounted inside and flow apertures to let water circulate over the sensing surface — went into the water first.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqp18dyw21gzhilh68i85.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqp18dyw21gzhilh68i85.jpg" alt="The sensor housing: PVC tube with the EIS electrode chip and flow apertures" width="800" height="1062"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Getting the cabling from the water up to the measurement hut involved some improvisation. The hut had not been designed with this use case in mind.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fngzdy9pmm8rnxmmr6lrj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fngzdy9pmm8rnxmmr6lrj.jpg" alt="Running cable from the bridge to the measurement hut" width="800" height="1062"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The electrode array was positioned against the bridge footing below the waterline, with the cable run secured against the structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8q0wid6icw1um2ofzdh4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8q0wid6icw1um2ofzdh4.jpg" alt="Installing the sensor array at the riverbank — just below the bridge footing" width="800" height="1062"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While one part of the team handled the hardware at the water, the coordination happened under the canopy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftd9f8nhkx27d48c3u17d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftd9f8nhkx27d48c3u17d.jpg" alt="Field command centre — reviewing progress under the canopy" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The final step was commissioning the software in the hut itself. The space was not designed for comfort — keyboard on knees, monitor at eye level, no chair. The terminal output scrolling across the screen confirmed what we needed to see: the system was acquiring data and writing it to disk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nol56fidwfqb68uugut.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nol56fidwfqb68uugut.jpg" alt="Commissioning the datalogger software inside the measurement hut — first live EIS data from the Clark Fork" width="800" height="1062"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The system ran. The first dataset came in clean.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Data Showed
&lt;/h2&gt;

&lt;p&gt;The dataset collected at the Clark Fork made an impression on the funding agencies reviewing the project. The combination of a working outdoor instrument, real river data, and a clear correlation between the EIS signal and known conditions at the site was enough to secure the next phase of the project.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;November 2025&lt;/strong&gt;, Prof. Warnat's postdoc &lt;strong&gt;Michael Neubauer&lt;/strong&gt; presented the project's findings at a conference: &lt;a href="https://www.researchgate.net/publication/397910043_Microfabricated_Electrochemical_Sensors_as_a_Sentinel_System_to_Detect_Biofilms_in_River_Systems" rel="noopener noreferrer"&gt;&lt;em&gt;Microfabricated Electrochemical Sensors as a Sentinel System to Detect Biofilms in River Systems&lt;/em&gt;&lt;/a&gt;. The work covers the sensor design, the EIS methodology applied to biofilm detection in open-water environments, and the field validation data from the Clark Fork deployment.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The EIS sensor project is a collaboration between &lt;a href="https://skaiNet.io" rel="noopener noreferrer"&gt;skAInet.io&lt;/a&gt; and the Warnat Lab at Montana State University, Bozeman.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>eis</category>
      <category>msu</category>
      <category>montana</category>
      <category>biofilm</category>
    </item>
    <item>
      <title>KiCon Asia 2025: Speaking on Wire Bonding in Shenzhen</title>
      <dc:creator>Stephan -All Input Is Error- Bökelmann</dc:creator>
      <pubDate>Sat, 15 Nov 2025 00:00:00 +0000</pubDate>
      <link>https://dev.to/maxclerkwell/kicon-asia-2025-speaking-on-wire-bonding-in-shenzhen-25l</link>
      <guid>https://dev.to/maxclerkwell/kicon-asia-2025-speaking-on-wire-bonding-in-shenzhen-25l</guid>
      <description>&lt;p&gt;&lt;strong&gt;KiCon Asia 2025&lt;/strong&gt; took place in Shenzhen on November 13–15, co-organised by the KiCad project and &lt;a href="https://www.huaqiu.com" rel="noopener noreferrer"&gt;Huaqiu PCB&lt;/a&gt;. I was there as a speaker — and spent the rest of the time walking around one of the most interesting manufacturing cities in the world.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frt361roy4oe1x0ewnum4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frt361roy4oe1x0ewnum4.jpg" alt="KiCon 2025 Asia conference programme banner" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Talk: A Poor Man's Intro to Wire Bonding
&lt;/h2&gt;

&lt;p&gt;My talk was called &lt;strong&gt;"A poor man's intro to wire bonding"&lt;/strong&gt; — and that title is exactly right. This wasn't a talk about having the right equipment and a controlled process. It was about what you actually learn when you try to bond real detector chips onto PCBs over two years, with limited resources, and have to figure out most of it by doing.&lt;/p&gt;

&lt;p&gt;The chips involved were &lt;strong&gt;CLICpix v3&lt;/strong&gt;, &lt;strong&gt;MuPix8&lt;/strong&gt;, and &lt;strong&gt;MuPix10&lt;/strong&gt; — pixel detector ASICs developed in the context of high-energy physics detector R&amp;amp;D. MuPix8 and MuPix10 belong to the family of &lt;strong&gt;HV-MAPS&lt;/strong&gt; (High Voltage Monolithic Active Pixel Sensors): monolithic pixel detectors where the sensor and the readout electronics are fabricated on the same silicon die, with a high bias voltage applied to create a fast depletion zone directly beneath the pixel cell. This combination of thin sensitive volume, fast charge collection, and full CMOS integration makes them attractive for tracking detectors in particle physics experiments, where minimising material budget and withstanding high radiation doses are both critical constraints. The &lt;a href="https://adl.ipe.kit.edu/english/26.php" rel="noopener noreferrer"&gt;KIT Application Detector Lab&lt;/a&gt; at IPE Karlsruhe is one of the groups driving MuPix development. These are not hobbyist components. They're small, the pads are tiny, and the bonding tolerances are unforgiving. We used a &lt;strong&gt;Delvotec&lt;/strong&gt; wire bonder throughout.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6r1e5dgtokv6gno08ag.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk6r1e5dgtokv6gno08ag.jpg" alt="Presenting at KiCon Asia 2025 — CLICpix microscope image on screen behind" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two years of work compresses surprisingly well. The core of the talk was about the learnings that don't appear in datasheets or application notes: what the bonder parameters actually mean in practice, how pad metallisation affects bond reliability, what a bad bond looks like before it fails, and how you build intuition for a process that is fundamentally tactile.&lt;/p&gt;

&lt;p&gt;The laptop slide below shows where the talk lived — somewhere between a particle physics lab and a PCB assembly problem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa692n8kgfcqwlps11vtk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa692n8kgfcqwlps11vtk.jpg" alt="Dell laptop showing wire bonding slides — CLICpix and MuPix microscope images" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Slides
&lt;/h2&gt;

&lt;p&gt;The slides are available openly. You can view them &lt;a href="https://maxclerkwell.github.io/posts/kicon-asia-2025/assets/slides.pdf" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wire Bonding on Video
&lt;/h2&gt;

&lt;p&gt;If you want to see what the actual bonding process looks like — this is a short clip from the lab, bonding one of the detector chips:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/l0TbzeoqFSs"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I also gave a version of this talk at &lt;strong&gt;KiCon Europe&lt;/strong&gt; earlier in the year. The content overlaps, but the European version goes into more depth on some of the failure modes:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/dNBwY7L6niI?start=2"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The Conference
&lt;/h2&gt;

&lt;p&gt;KiCon Asia was genuinely different from European conferences — denser, more commercially oriented, with a much higher proportion of hardware people who are adjacent to manufacturing at scale. The Huaqiu co-organisation showed in the programme: several talks touched on the bridge between design and production in ways that feel abstract at European events but are immediate here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft3my6i84x4bkwlyqo23s.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft3my6i84x4bkwlyqo23s.jpg" alt="Another speaker presenting on the LLM ecosystem — the scale of the screens was something" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The koala came home with me — not as swag, but as a prize. &lt;strong&gt;Peter Dalmaris&lt;/strong&gt; gave a talk titled &lt;em&gt;"One Tool, One Journey"&lt;/em&gt;, arguing that KiCad should accompany an engineer across their entire career and proposing a "Learner Mode" to ease the entry for beginners. I asked a question that apparently landed well enough to win the raffle prize at the end: an unbranded koala plush sitting on a KiCad × Huaqiu conference folder.&lt;/p&gt;

&lt;p&gt;Peter is the author of &lt;a href="https://www.amazon.com/KiCad-Like-Pro-Peter-Dalmaris/dp/1907920749" rel="noopener noreferrer"&gt;&lt;strong&gt;KiCad Like a Pro&lt;/strong&gt;&lt;/a&gt; (Elektor, multiple editions including a KiCad 9 update), which is the go-to book for anyone wanting a structured path through KiCad beyond the official documentation. He has also written &lt;em&gt;Raspberry Pi: Full Stack&lt;/em&gt;, &lt;em&gt;Node-RED and Raspberry Pi Pico W&lt;/em&gt;, and &lt;em&gt;Maker Education Revolution&lt;/em&gt; — all published through Elektor. If you are learning KiCad seriously, the book is worth having on your desk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuis64i69ytm590kh1jwh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuis64i69ytm590kh1jwh.jpg" alt="The prize koala, sitting on the KiCad × Huaqiu conference folder" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Shenzhen
&lt;/h2&gt;

&lt;p&gt;It wouldn't be my last time in China — a few months later I was back in &lt;a href="https://dev.to/posts/dongguan-emc-march-2026/"&gt;Dongguan for EMC testing&lt;/a&gt;. Shenzhen stands on its own regardless: more polished than its neighbour city, more international, the skyline is genuinely impressive at night.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqcn3pmbolwe3tbcp172.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqcn3pmbolwe3tbcp172.jpg" alt="Shenzhen night skyline — the twin towers near the venue" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkz93slrhyi3h9bdpt1d6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkz93slrhyi3h9bdpt1d6.jpg" alt="Shenzhen street scene — daytime, near the conference area" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrstmpuzotich275gbkw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrstmpuzotich275gbkw.jpg" alt="Stephan in Shenzhen — obligatory selfie with the skyline" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  KiCon Bochum
&lt;/h2&gt;

&lt;p&gt;I'm also involved on the organisational side of KiCon in Germany. Together with &lt;a href="https://openskunkforce.de" rel="noopener noreferrer"&gt;Open Skunkforce e.V.&lt;/a&gt;, we run &lt;strong&gt;KiCon Bochum&lt;/strong&gt; — a local German instance of the KiCon format. If you're in the area and use KiCad, keep an eye on what we announce.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Slides are &lt;a href="https://maxclerkwell.github.io/posts/kicon-asia-2025/assets/slides.pdf" rel="noopener noreferrer"&gt;openly available&lt;/a&gt;. Video from the bonding lab: &lt;a href="https://www.youtube.com/watch?v=l0TbzeoqFSs" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;. KiCon Europe recording: &lt;a href="https://www.youtube.com/watch?v=dNBwY7L6niI" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kicad</category>
      <category>wirebonding</category>
      <category>hardware</category>
      <category>conference</category>
    </item>
    <item>
      <title>OmnAIScope: A USB Oscilloscope for Automotive Diagnostics</title>
      <dc:creator>Stephan -All Input Is Error- Bökelmann</dc:creator>
      <pubDate>Thu, 28 Aug 2025 00:00:00 +0000</pubDate>
      <link>https://dev.to/maxclerkwell/omnaiscope-a-usb-oscilloscope-for-automotive-diagnostics-4g4c</link>
      <guid>https://dev.to/maxclerkwell/omnaiscope-a-usb-oscilloscope-for-automotive-diagnostics-4g4c</guid>
      <description>&lt;p&gt;The &lt;strong&gt;OmnAIScope&lt;/strong&gt; is a single-channel USB oscilloscope designed for automotive diagnostics. It started as a prototype within the &lt;a href="https://github.com/nabla-B/paper_aw4null-overview" rel="noopener noreferrer"&gt;autowerkstatt4null&lt;/a&gt; project — a three-year, federally funded initiative to bring AI-driven diagnostics to independent car workshops. This post covers what it is, how the synchronisation works, and where it's going.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89ui1qwdnwub6n60x4ed.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89ui1qwdnwub6n60x4ed.jpg" alt="Four OmnAIScope prototypes — BNC input on top, USB-C on the bottom" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hardware
&lt;/h2&gt;

&lt;p&gt;The current prototype is built around an &lt;strong&gt;RP2040&lt;/strong&gt; microcontroller. The specs are deliberately modest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;500 kSa/s&lt;/strong&gt;, single channel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anodised aluminium housing&lt;/strong&gt;, epoxy-sealed after assembly — fully waterproof&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BNC&lt;/strong&gt; on one end, &lt;strong&gt;USB-C&lt;/strong&gt; on the other&lt;/li&gt;
&lt;li&gt;No buttons, no screen, no moving parts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmb5wup1ggdxt20jxp6j2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmb5wup1ggdxt20jxp6j2.jpg" alt="PCB, BNC connector, and housing — the three components before assembly" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it. From the outside it looks like a chunky BNC barrel adapter. The simplicity is intentional: the electronics in a car workshop get dropped, kicked, and splashed. Everything that can break has been moved either into firmware or into the server software on the connected computer.&lt;/p&gt;

&lt;p&gt;All PCB designs were done in &lt;strong&gt;KiCad&lt;/strong&gt;. That workflow held up well throughout the project.&lt;/p&gt;

&lt;p&gt;The scope has no revision designation yet — this is still beta hardware. It is, however, already available: &lt;a href="https://www.auto-intern.de/shop/diagnose-komplettsysteme/281/omnaiscope-tragbares-usb-oszilloskop-fuer-praezise-messungen-beta-version?c=114" rel="noopener noreferrer"&gt;order it directly from Auto-Intern&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-Channel Synchronisation Without a Hardware Trigger
&lt;/h2&gt;

&lt;p&gt;Single-channel at 500 kSa/s sounds limiting until you understand the synchronisation approach.&lt;/p&gt;

&lt;p&gt;USB generates a &lt;strong&gt;Start-of-Frame (SOF)&lt;/strong&gt; packet every millisecond on full-speed connections, timed by the host controller. Every OmnAIScope captures this SOF timestamp alongside its ADC samples and embeds both in the data packet sent to the host. The server on the PC then reconstructs a common time axis across all connected scopes by aligning them on their respective SOF timestamps.&lt;/p&gt;

&lt;p&gt;The result: &lt;strong&gt;arbitrary numbers of scopes synchronised to ±half a USB frame&lt;/strong&gt; — without a single wire between them, without a hardware trigger line, and without any external clock distribution. For automotive diagnostic use — compression cycles, fuel pump waveforms, CAN signals — this resolution is more than sufficient.&lt;/p&gt;

&lt;p&gt;There is a small latency between measurement and display while the server assembles and aligns the packets, but it remains imperceptible in normal use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Server Layer
&lt;/h2&gt;

&lt;p&gt;Each OmnAIScope connects via USB to a host machine running a local server process. That server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ingests the raw ADC + SOF data from each connected scope&lt;/li&gt;
&lt;li&gt;performs the SOF-based time alignment&lt;/li&gt;
&lt;li&gt;exposes the synchronised, calibrated waveform data via &lt;strong&gt;REST&lt;/strong&gt; and &lt;strong&gt;WebSocket&lt;/strong&gt; APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means the frontend — or any other application — doesn't speak directly to the hardware. It speaks to the server. You can build your own tooling, your own analysis pipeline, your own visualisation on top of that API without touching the firmware or the hardware at all.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzar004ninxc5db4rf4te.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzar004ninxc5db4rf4te.jpg" alt="Demo setup at an automotive trade show — four scopes, a laptop, the Messkit 153 case" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Measurements
&lt;/h2&gt;

&lt;p&gt;The system has been used for real diagnostic measurements, stored in a CEPH cluster operated jointly with THGA Bochum. Signals captured so far include compression cycles, fuel pre-feed pump waveforms, and common-rail pressure signals. The data has been used to evaluate various classification and analysis approaches. That analysis is out of scope for this post — the point here is that the hardware and server layer work, and the data is useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Paper
&lt;/h2&gt;

&lt;p&gt;The full context — the automotive diagnostic landscape, the federated architecture, the data flow from scope to AI service to technician UI — is written up in the &lt;strong&gt;autowerkstatt4null overview paper&lt;/strong&gt;. It is available on &lt;a href="https://github.com/nabla-B/paper_aw4null-overview" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and &lt;a href="https://www.researchgate.net/publication/394930242_autowerkstatt4null_An_Off-Board-Diagnostics_Ecosystem_for_Car-Workshops" rel="noopener noreferrer"&gt;ResearchGate&lt;/a&gt;, and nowhere else. No journal paywall, no publisher fee.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx3dyxvrdpye6leoxdwh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx3dyxvrdpye6leoxdwh1.png" alt="Data-server architecture: oscilloscope → local server → REST/WebSocket → analysis services" width="800" height="684"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm a fan of open access. The paper exists to be read and built upon, not to sit behind a subscription.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authors:&lt;/strong&gt; Stephan Bökelmann (Ruhr University Bochum), René Glitza (Ruhr University Bochum), Meihui Huang / 黄美慧 (nabla B engineering UG), Odin Holmes (Auto-Intern GmbH), Lukas Jakubczyk (THGA Bochum), Tabea Röthemeyer (Auto-Intern GmbH).&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The immediate priority is the &lt;strong&gt;software suite&lt;/strong&gt;. A new frontend release is in the works — it's going to be substantially better than what's currently shipping. That said, the server API means you don't have to wait for the official frontend to do useful things with the hardware.&lt;/p&gt;

&lt;p&gt;A new hardware iteration will follow once the software is in better shape.&lt;/p&gt;

&lt;p&gt;I'm also watching &lt;a href="https://x.com/jlcjak" rel="noopener noreferrer"&gt;&lt;strong&gt;@jlcjak&lt;/strong&gt;&lt;/a&gt; on X closely — he's working on an oscilloscope project that I'm genuinely excited about, and it deserves attention from anyone interested in this space.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;OmnAIScope beta is available at &lt;a href="https://www.auto-intern.de/shop/diagnose-komplettsysteme/281/omnaiscope-tragbares-usb-oszilloskop-fuer-praezise-messungen-beta-version?c=114" rel="noopener noreferrer"&gt;auto-intern.de&lt;/a&gt;. The paper is at &lt;a href="https://github.com/nabla-B/paper_aw4null-overview" rel="noopener noreferrer"&gt;github.com/nabla-B/paper_aw4null-overview&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hardware</category>
      <category>automotive</category>
      <category>oscilloscope</category>
      <category>rp2040</category>
    </item>
    <item>
      <title>Getting Started: From Tape-Out to TypeScript</title>
      <dc:creator>Stephan -All Input Is Error- Bökelmann</dc:creator>
      <pubDate>Thu, 14 Aug 2025 00:00:00 +0000</pubDate>
      <link>https://dev.to/maxclerkwell/getting-started-from-tape-out-to-typescript-oeg</link>
      <guid>https://dev.to/maxclerkwell/getting-started-from-tape-out-to-typescript-oeg</guid>
      <description>&lt;p&gt;This is the first post on this blog. It won't be the most technically dense — that comes later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a blog?
&lt;/h2&gt;

&lt;p&gt;Every platform I post on is rented ground. Algorithms change. Accounts get suspended. Platforms rise and fall. This blog is the one place I own outright.&lt;/p&gt;

&lt;p&gt;The plan: one longform post per week. Everything else — threads on X, LinkedIn posts, YouTube videos, Instagram carousels — is derived from what's written here first. The blog is the source of truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'll be writing about
&lt;/h2&gt;

&lt;p&gt;Three pillars, based on where I actually spend my time:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monitoring systems in production.&lt;/strong&gt; I've been building and running measurement infrastructure since 2007 — from oscilloscope-based diagnostics in automotive workshops to telemetry stacks for critical rail infrastructure and particle physics experiments. There's a lot of hard-won knowledge here that doesn't exist in any single book or documentation page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;University lecture material.&lt;/strong&gt; I teach at THGA Bochum. The courses cover programming fundamentals, object-oriented design, and databases. I'll publish supplementary material here — worked examples, extended explanations, things that didn't fit into the lecture slot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Company visits.&lt;/strong&gt; I travel to electronics manufacturers, fabs, and engineering shops around the world. I want to document what I see — not the PR version, the real version. Factory floors, supply chains, engineering culture.&lt;/p&gt;

&lt;h2&gt;
  
  
  The handle
&lt;/h2&gt;

&lt;p&gt;The username &lt;code&gt;MaxClerkwell&lt;/code&gt; is a wordplay on &lt;strong&gt;James Clerk Maxwell&lt;/strong&gt; — the Scottish physicist who unified electricity, magnetism, and light into a single theory. Rearrange the syllables slightly and you get MaxClerkwell. Seemed appropriate for someone who spends their days connecting layers of the stack that aren't supposed to know about each other.&lt;/p&gt;

&lt;p&gt;The tagline — &lt;em&gt;From tape-out to TypeScript&lt;/em&gt; — is meant to be taken literally. I've worked at every layer: silicon characterization, bare-metal firmware, ASIC test systems, embedded Linux, monitoring daemons, REST APIs, frontend dashboards. The interesting problems usually live at the boundaries between layers.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to follow along
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://maxclerkwell.github.io" rel="noopener noreferrer"&gt;&lt;strong&gt;Blog&lt;/strong&gt;&lt;/a&gt;: canonical, weekly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This DEV.to page&lt;/strong&gt;: mirrored posts and discussion&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://discord.gg/2BXuUY6hrX" rel="noopener noreferrer"&gt;&lt;strong&gt;Discord&lt;/strong&gt;&lt;/a&gt;: the community layer — join the Full Stack Engineering server&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://youtube.com/@MaxClerkwell" rel="noopener noreferrer"&gt;&lt;strong&gt;YouTube&lt;/strong&gt;&lt;/a&gt;: longform videos derived from blog posts&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://x.com/maxclerkwell" rel="noopener noreferrer"&gt;&lt;strong&gt;X / Twitter&lt;/strong&gt;&lt;/a&gt;: threads, quick takes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Links to everything are on the &lt;a href="https://dev.to/"&gt;home page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;More soon.&lt;/p&gt;

</description>
      <category>meta</category>
      <category>engineering</category>
      <category>intro</category>
      <category>programming</category>
    </item>
    <item>
      <title>KiCon Europe 2024: Bochum Goes International</title>
      <dc:creator>Stephan -All Input Is Error- Bökelmann</dc:creator>
      <pubDate>Fri, 20 Sep 2024 00:00:00 +0000</pubDate>
      <link>https://dev.to/maxclerkwell/kicon-europe-2024-bochum-goes-international-3j02</link>
      <guid>https://dev.to/maxclerkwell/kicon-europe-2024-bochum-goes-international-3j02</guid>
      <description>&lt;p&gt;&lt;strong&gt;KiCon Europe 2024&lt;/strong&gt; took place on September 19–20 in the &lt;a href="https://rotunde-bochum.de" rel="noopener noreferrer"&gt;Rotunde Bochum&lt;/a&gt;, organised by &lt;a href="https://skunkforce.org" rel="noopener noreferrer"&gt;&lt;strong&gt;Open Skunkforce e.V.&lt;/strong&gt;&lt;/a&gt; together with the KiCad project. Around 150 people came — designers, engineers, developers, hobbyists — from across Europe and beyond. It was the largest KiCon we had run in Bochum.&lt;/p&gt;

&lt;h2&gt;
  
  
  From KiCon Germany to KiCon Europe
&lt;/h2&gt;

&lt;p&gt;The conference didn't appear out of nowhere. In 2020, I organised the first &lt;strong&gt;KiCon Germany&lt;/strong&gt; — a small, informal gathering of KiCad users in Bochum. We ran it four more times, each edition a little bigger, a little more polished. In 2024 we made the leap to a proper European edition: new venue, full two-day programme, workshops, international speakers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7l51i0wg36me8hvidf5t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7l51i0wg36me8hvidf5t.jpg" alt="Pre-conference social the evening before — group dinner at a traditional Bochum pub" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The evening before the conference started with a social dinner. These informal evenings before the programme begins are often where the most useful conversations happen — and this one was no exception.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Venue Setup
&lt;/h2&gt;

&lt;p&gt;The Rotunde is a converted industrial building in Bochum-Langendreer. Great atmosphere, brick walls, good acoustics. Getting it ready was a different story.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qn45qsak7s9zq3fw1th.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qn45qsak7s9zq3fw1th.jpg" alt="The Rotunde the evening before doors open — standing tables set up, venue empty" width="800" height="1062"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The setup was a production in itself. Everything that could go wrong did, at least once. Tabea Bökelmann (&lt;a href="https://x.com/tabeatheunicorn" rel="noopener noreferrer"&gt;@tabeatheunicorn&lt;/a&gt;) held most of it together — without her, the logistics would have collapsed on day one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wayne, Seth, and What That Meant
&lt;/h2&gt;

&lt;p&gt;For both days, &lt;strong&gt;Wayne Stambaugh&lt;/strong&gt; and &lt;strong&gt;Seth Hilbrand&lt;/strong&gt; — the two people most responsible for where KiCad is today — were present in Bochum. It was the first time either of them had come here.&lt;/p&gt;

&lt;p&gt;I had met Wayne once before, at the original &lt;strong&gt;KiCon 2019 in Chicago&lt;/strong&gt;, which was organised by &lt;a href="https://contextualelectronics.com" rel="noopener noreferrer"&gt;Chris Gammel&lt;/a&gt; of Contextual Electronics. That was a much smaller event, but it planted the idea that a regular European equivalent was worth building. Five years later, here we were.&lt;/p&gt;

&lt;h2&gt;
  
  
  Highlights from the Programme
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Lukas Hartmann — How KiCad Enables the Open Hardware Future
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://mntre.com" rel="noopener noreferrer"&gt;Lukas Hartmann&lt;/a&gt; builds open hardware laptops — the MNT Reform and Pocket Reform are entirely open-source, down to the schematics and PCB files. His talk showed how KiCad is not just a design tool but the foundation that makes open hardware reproducible and auditable by anyone. The "CPU Modules" slide alone — showing actual PCBs of compute modules he designed — made the point better than any abstract argument could.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdf4w9mk4mzcrludpuvhd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdf4w9mk4mzcrludpuvhd.jpg" alt="Lukas Hartmann presenting on open hardware CPU modules at KiCon Europe 2024" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Odin Holmes — Edgy
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://x.com/odinthenerd" rel="noopener noreferrer"&gt;Odin Holmes&lt;/a&gt; presented &lt;a href="https://github.com/skunkforce/edgy_boards/" rel="noopener noreferrer"&gt;&lt;strong&gt;Edgy&lt;/strong&gt;&lt;/a&gt; — a framework for source-controlled, modular PCB reference designs. The core idea: treat PCB subsystems like software libraries, version them properly, compose them. For anyone who has copy-pasted the same power section into the fifth board in a row, the talk hit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk7rxujdek6lw0bfaxbhv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk7rxujdek6lw0bfaxbhv.jpg" alt="Odin Holmes on stage at KiCon Europe 2024 — Edgy talk" width="800" height="1062"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  cpresser — Become a KiCad Librarian
&lt;/h3&gt;

&lt;p&gt;One of the workshops that generated the most discussion was cpresser's session on becoming a KiCad librarian — how the official symbol and footprint libraries are maintained, what the contribution process looks like, and what it actually takes to get a part merged. Practical, hands-on, and overdue: a lot of people use the libraries without knowing how they work or how to improve them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Programme in Full
&lt;/h2&gt;

&lt;p&gt;All talks are recorded and available in the &lt;a href="https://www.youtube.com/watch?v=T1jR1usucbk&amp;amp;list=PLIXq8kws1BI3Ex13QI9m3bDXm99TjHSLH" rel="noopener noreferrer"&gt;&lt;strong&gt;KiCon Europe 2024 playlist on YouTube&lt;/strong&gt;&lt;/a&gt;. A few other sessions worth watching:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;How to build awesome KiCad plugins&lt;/em&gt; — Joel Schulz-Andres&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Managing PCB Assembly Variants with KiVar&lt;/em&gt; — Mark Hämmerling&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;CE For makers — Leveraging KiCad&lt;/em&gt; — Clemens Mayer&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Speed up your Hand Assembly with the Pixel Pump&lt;/em&gt; — Thea (workshop)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Clearance and creepage for safety&lt;/em&gt; — Fabien Corona&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;The KiCon Electronic Badge&lt;/em&gt; — Michael MSvB&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Struck Me
&lt;/h2&gt;

&lt;p&gt;The breadth of the crowd was the thing I hadn't fully anticipated. Hobbyists who build one board a year sat next to engineers running production lines. People came from well outside Germany — some from places where there's no local KiCad community at all. The programme reflected that: there was something for someone picking up KiCad for the first time and something for people filing bug reports against the routing engine.&lt;/p&gt;

&lt;p&gt;The KiCad project itself is in a strong place. Having Wayne and Seth in the room for two days, available for questions and conversations in the hallway, made that concrete in a way that watching release videos doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Skunkforce e.V.
&lt;/h2&gt;

&lt;p&gt;KiCon is one of several conferences &lt;a href="https://skunkforce.org" rel="noopener noreferrer"&gt;&lt;strong&gt;Open Skunkforce e.V.&lt;/strong&gt;&lt;/a&gt; runs out of Bochum. The others:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;emBO++&lt;/strong&gt; — embedded C++ conference, running since 2016&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenTapeout&lt;/strong&gt; — open-source chip design, first edition 2021&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Practical Datascience Conference (PDSC)&lt;/strong&gt; — applied data science for practitioners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The thread connecting all of them is the same: bring people who are actually building things into the same room, keep it affordable, and let the programme be driven by what the community finds worth talking about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sponsors
&lt;/h2&gt;

&lt;p&gt;KiCon Europe 2024 was made possible with support from &lt;strong&gt;AI Gruppe&lt;/strong&gt; and &lt;strong&gt;Auto Intern&lt;/strong&gt;, among others. Running a 150-person technical conference in a converted industrial venue takes more than goodwill.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;All talks: &lt;a href="https://www.youtube.com/watch?v=T1jR1usucbk&amp;amp;list=PLIXq8kws1BI3Ex13QI9m3bDXm99TjHSLH" rel="noopener noreferrer"&gt;YouTube playlist&lt;/a&gt;. Organised by &lt;a href="https://skunkforce.org" rel="noopener noreferrer"&gt;Open Skunkforce e.V.&lt;/a&gt; and the KiCad project.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kicad</category>
      <category>conference</category>
      <category>bochum</category>
      <category>hardware</category>
    </item>
  </channel>
</rss>
