cdwilson.dev https://cdwilson.dev/ Recent content on cdwilson.dev Hugo en I bet you can't RE this receipt https://cdwilson.dev/articles/i-bet-you-cant-re-this-receipt/ Wed, 21 Jan 2026 00:00:00 +0000 https://cdwilson.dev/articles/i-bet-you-cant-re-this-receipt/ <p>I will send $100 to the first person who can reverse engineer how <a href="https://www.target.com/" class="external-link" target="_blank" rel="noopener">Target</a> calculated the $162.10 total amount on this receipt.</p> <p>This is not a joke. I&rsquo;m totally serious.</p> <h2 id="rules"> Rules <a class="heading-link" href="#rules"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h2> <p>The first person to build me a spreadsheet showing exactly how the $162.10 total amount is calculated (step-by-step with explanation, including how to calculate the $64.67 taxable amount in the red box), will be sent $100 via Venmo, PayPal, etc.</p> Hackaday Supercon 2024 https://cdwilson.dev/articles/hackaday-supercon-2024/ Thu, 07 Nov 2024 00:00:00 +0000 https://cdwilson.dev/articles/hackaday-supercon-2024/ <p> <a href="images/image-20241107200028411.png"> <img src="images/image-20241107200028411.png" alt="" class="center" /> </a> </p> <p>I finally got a chance to sit down and reflect on this past weekend at <a href="https://hackaday.io/superconference/" class="external-link" target="_blank" rel="noopener">Hackaday Supercon 2024</a>.</p> <p>You might expect that a post about Supercon would be all about <a href="https://www.youtube.com/watch?v=Iz-HrZkzUlk&amp;t=5124s" class="external-link" target="_blank" rel="noopener">epic badge hacks</a>, or a recap of interesting <a href="https://hackaday.io/superconference/schedule.html" class="external-link" target="_blank" rel="noopener">talks</a>, or photos of the (surprisingly good for a conference) food that I ate 🌮</p> <p>But what I really want to do is tell you a story of how the <strong>kindness</strong> and <strong>generosity</strong> of a bunch of random people made my first Supercon&hellip; well&hellip; SuperFUN!</p> 2024 mid-year update https://cdwilson.dev/articles/2024-mid-year-update/ Wed, 26 Jun 2024 00:00:00 +0000 https://cdwilson.dev/articles/2024-mid-year-update/ <p>It&rsquo;s been a little while since I&rsquo;ve posted anything new here, but that doesn&rsquo;t mean I&rsquo;ve been resting on my laurels!</p> <p>Here&rsquo;s what (and where) I&rsquo;ve been writing recently 👨🏻‍💻</p> <h1 id="content-for-clients"> Content for clients <a class="heading-link" href="#content-for-clients"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h1> <p>Over the last year, I&rsquo;ve been doing some Zephyr-related technical writing for the <a href="https://blog.golioth.io/" class="external-link" target="_blank" rel="noopener">Golioth blog</a>.</p> <p>You can see the full list of articles I&rsquo;ve contributed at <a href="https://blog.golioth.io/author/cdwilson/" class="external-link" target="_blank" rel="noopener">https://blog.golioth.io/author/cdwilson/</a></p> <h1 id="common-ground-electronics"> Common Ground Electronics <a class="heading-link" href="#common-ground-electronics"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h1> <p>In addition to authoring technical content for clients, I&rsquo;m also starting to write about embedded systems and IoT-related topics on the <a href="https://cgnd.dev/posts/" class="external-link" target="_blank" rel="noopener">Common Ground Electronics blog</a>. So far, I&rsquo;ve written about how to <a href="https://cgnd.dev/posts/enforce-zephyr-code-quality-pre-commit/" class="external-link" target="_blank" rel="noopener">enforce Zephyr code quality with pre-commit</a> and my experience <a href="https://cgnd.dev/posts/golioth-wifi-serial-logger-prototype/" class="external-link" target="_blank" rel="noopener">prototyping a WiFi serial logger with Golioth</a>. I also just posted a <a href="https://cgnd.dev/posts/2024-mid-year-retrospective/" class="external-link" target="_blank" rel="noopener">mid-year retrospective</a> where I talk about how the business was started and what I’ve been working on over the last year.</p> A better difftool for KiCad https://cdwilson.dev/articles/a-better-difftool-for-kicad/ Mon, 06 Feb 2023 00:00:00 +0000 https://cdwilson.dev/articles/a-better-difftool-for-kicad/ <p>It can be difficult to tell what has actually changed when running <code>git difftool</code> on a <code>.kicad_pcb</code> file because KiCad embeds timestamps into the file that change when the file is modified:</p> <p> <a href="images/difftool_timestamp_changes.png"> <img src="images/difftool_timestamp_changes.png" alt="difftool_timestamp_changes" class="center" /> </a> </p> <p>Luckly, we can tell <code>git</code> to use a <a href="https://git-scm.com/docs/git-difftool#Documentation/git-difftool.txt--tlttoolgt" class="external-link" target="_blank" rel="noopener">custom difftool</a> using the <code>--tool=&lt;tool&gt;</code> argument.</p> <p>First, we need to create a custom shell script to pass to <code>git difftool --tool=&lt;tool&gt;</code>. I use <a href="https://kaleidoscope.app/" class="external-link" target="_blank" rel="noopener">Kaleidoscope.app</a> as my git difftool on macOS, so I named this script <code>kicad-ksdiff</code> and put it a directory on my <code>$PATH</code>:</p> KiCad database libraries on macOS https://cdwilson.dev/articles/kicad-database-libraries-on-macos/ Wed, 14 Dec 2022 00:00:00 +0000 https://cdwilson.dev/articles/kicad-database-libraries-on-macos/ <div class="notice info"> <div class="notice-title"> <i class="fa-solid fa-exclamation-circle" aria-hidden="true"></i>Info </div> <div class="notice-content"><p>On December 11, 2022 the KiCad team <a href="https://social.adamwolf.org/@adamwolf/109496840211680309" class="external-link" target="_blank" rel="noopener">announced</a> support for macOS universal builds in the 6.99 <a href="https://www.kicad.org/download/macos/" class="external-link" target="_blank" rel="noopener">nightly releases</a>. Using a universal build greatly simplifies the process of setting up database libraries and is <em>strongly recommended</em>. If you are using an older <code>x86_64</code> nightly build released before December 12, 2022 on a Mac with Apple Silicon (i.e. the file does <em>NOT</em> start with <code>kicad-unified-universal</code>), make sure to follow the old instructions found here:</p> Set KICAD_DOCUMENTS_HOME on macOS https://cdwilson.dev/articles/set-kicad-documents-home-on-macos/ Tue, 06 Dec 2022 00:00:00 +0000 https://cdwilson.dev/articles/set-kicad-documents-home-on-macos/ <h1 id="kicad-documents-home"> KiCad Documents Home <a class="heading-link" href="#kicad-documents-home"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h1> <p>KiCad 6.x introduced the concept of the &ldquo;KiCad Documents Home&rdquo; base directory, described as the:</p> <blockquote> <p>Base path of KiCad user-modifiable documents, such as projects, templates, Python scripts, libraries, etc. Subdirectories will be created within this directory for each KiCad minor version. This directory is provided as a suggested user data location, but does not need to be used.</p></blockquote> <p>By default, KiCad creates this folder in <code>~/Documents/KiCad/</code>:</p> KiCad database libraries on Apple Silicon https://cdwilson.dev/articles/kicad-database-libraries-on-apple-silicon/ Fri, 04 Nov 2022 00:00:00 +0000 https://cdwilson.dev/articles/kicad-database-libraries-on-apple-silicon/ <div class="notice warning"> <div class="notice-title"> <i class="fa-solid fa-exclamation-triangle" aria-hidden="true"></i>Warning </div> <div class="notice-content"><p>On December 11, 2022 the KiCad team <a href="https://social.adamwolf.org/@adamwolf/109496840211680309" class="external-link" target="_blank" rel="noopener">announced</a> support for macOS universal builds in the 6.99 <a href="https://www.kicad.org/download/macos/" class="external-link" target="_blank" rel="noopener">nightly releases</a>. Using a universal build greatly simplifies the process of setting up database libraries and is <em>strongly recommended</em>. If you are using a universal nightly build released after December 12, 2022 (the file starts with <code>kicad-unified-universal</code>), make sure to follow the updated instructions found here:</p> <p><a href="https://cdwilson.dev/articles/kicad-database-libraries-on-macos/" class="external-link" target="_blank" rel="noopener">https://cdwilson.dev/articles/kicad-database-libraries-on-macos/</a></p></div> </div> <h1 id="overview"> Overview <a class="heading-link" href="#overview"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h1> <p>A new &ldquo;Database Libraries&rdquo; feature was <a href="https://gitlab.com/kicad/code/kicad/-/issues/7436" class="external-link" target="_blank" rel="noopener">recently added</a> to the KiCad <a href="https://downloads.kicad.org/kicad/macos/explore/nightlies" class="external-link" target="_blank" rel="noopener">macOS Nightlies</a> (6.99) and is scheduled to be officially released in KiCad 7. Here&rsquo;s an overview from the <a href="https://docs.kicad.org/master/en/eeschema/eeschema.html#database_libraries" class="external-link" target="_blank" rel="noopener">documentation</a>:</p> 40% keymap for Keyboardio Model 100 https://cdwilson.dev/articles/40-percent-keymap-for-keyboardio-model-100/ Sun, 30 Oct 2022 00:00:00 +0000 https://cdwilson.dev/articles/40-percent-keymap-for-keyboardio-model-100/ <p>After backing the wildly successful <a href="https://shop.keyboard.io/pages/model100" class="external-link" target="_blank" rel="noopener">Keyboardio Model 100</a> <a href="https://www.kickstarter.com/projects/keyboardio/model-100" class="external-link" target="_blank" rel="noopener">Kickstarter campaign</a> last year, I finally received my keyboard in the mail 🥳</p> <p> <a href="images/model100_desk.png"> <img src="images/model100_desk.png" alt="Model 100 Desk" class="center" /> </a> </p> <p>The keyboard is ✨beautiful✨ and the custom-sculpted keycaps feel really great to type on. After using the Model 100 for a couple weeks now, I&rsquo;ve finally settled on a 40%-ish (3 rows of keys) keymap that feels really natural for me.</p> <p>Although this keymap works really well for me personally, it&rsquo;s probably not the right keymap for everyone. The Model 100 is a roughly 60%-ish (4 rows of keys) keyboard, so <strong>it may seem odd that I&rsquo;m only using 44 of the 64 available keys on the keyboard</strong>. I thought it might be interesting to walk through my thought process step-by-step and discuss some of the requirements that drove the decisions about where to map each key.</p> USB over IP with VirtualHere https://cdwilson.dev/articles/usb-over-ip-with-virtualhere/ Tue, 05 Jul 2022 00:00:00 +0000 https://cdwilson.dev/articles/usb-over-ip-with-virtualhere/ <p>Raise your hand if you&rsquo;re tired of having a spaghetti mess of USB hubs and dongles hanging off your laptop? 🙋🏻‍♂️</p> <p>I&rsquo;m going to show you how to leave all those USB devices behind and remotely connect to them over the network instead. Yup, you heard right–you&rsquo;ll <em>finally</em> be able to work from a <a href="https://mgsloan.com/posts/tree-based-computing/" class="external-link" target="_blank" rel="noopener">laptop tied to a tree</a>! (or at least from the comfort of your own couch…)</p> <h1 id="virtualhere"> VirtualHere <a class="heading-link" href="#virtualhere"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h1> <p>A while back, I was looking for a way to fire up the debugger on a <a href="https://www.st.com/en/evaluation-tools/stm32-nucleo-boards.html" class="external-link" target="_blank" rel="noopener">STM32 NUCLEO development board</a> without having the board directly connected to one of my laptop&rsquo;s USB ports.</p> DIY home office electronics workspace https://cdwilson.dev/articles/diy-home-office-electronics-workspace/ Tue, 28 Jun 2022 00:00:00 +0000 https://cdwilson.dev/articles/diy-home-office-electronics-workspace/ <h1 id="the-idea"> The idea <a class="heading-link" href="#the-idea"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h1> <p>I&rsquo;ve been wanting to set up a small electronics workspace in my home office for a while now. The main goal was to have an ESD-safe area in the office where I could do bring-up and testing for projects that require a connection to a computer and test equipment. I already have a separate full size electronics workbench in the garage (SMT reflow oven, hot air rework, microscope, etc), so this was intended as a more focused compliment to that space, rather than a replacement for it.</p> Using giscus for comments in Hugo https://cdwilson.dev/articles/using-giscus-for-comments-in-hugo/ Sun, 26 Jun 2022 00:00:00 +0000 https://cdwilson.dev/articles/using-giscus-for-comments-in-hugo/ <p>After looking into a <a href="https://getreplybox.com/" class="external-link" target="_blank" rel="noopener">couple</a> <a href="https://talk.hyvor.com/" class="external-link" target="_blank" rel="noopener">different</a> <a href="https://fastcomments.com/" class="external-link" target="_blank" rel="noopener">hosted</a> <a href="https://commento.io/" class="external-link" target="_blank" rel="noopener">options</a> for enabling comments on this site, I decided to give <a href="https://giscus.app/" class="external-link" target="_blank" rel="noopener">giscus</a> a try.</p> <p>This article describes why I chose giscus and how to set it up in a Hugo site.</p> <h1 id="first-why-giscus"> First: why giscus? <a class="heading-link" href="#first-why-giscus"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h1> <p>It&rsquo;s worth talking through the thought process for how I landed on giscus, as it&rsquo;s probably not the right option for everybody.</p> <p>Derek Kay has an <a href="https://darekkay.com/blog/static-site-comments/" class="external-link" target="_blank" rel="noopener">excellent article</a> which explores various ways to include comments on a static site. After reviewing many of the options he mentioned in the article, I found that I mostly agree with his conclusion:</p> Bash shell startup files https://cdwilson.dev/articles/bash-shell-startup-files/ Fri, 24 Oct 2014 00:00:00 +0000 https://cdwilson.dev/articles/bash-shell-startup-files/ <p> <a href="images/tanooki_mario_shell.gif"> <img src="images/tanooki_mario_shell.gif" alt="" class="center" /> </a> </p> <p>This article is an attempt to answer the following questions<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>:</p> <ul> <li>What is the difference between <code>/etc/profile</code>, <code>~/.profile</code>, <code>~/.bash_profile</code>, <code>~/.bash_login</code>, and <code>~/.bashrc</code>?</li> <li>Why doesn&rsquo;t Terminal.app read my <code>~/.bashrc</code> on Mac OS X?</li> </ul> <h2 id="bash-startup"> Bash startup <a class="heading-link" href="#bash-startup"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h2> <p>When Bash is invoked, it reads and executes commands from its startup files to set up the shell environment.</p> <p>There are a couple conditions Bash checks to determine which startup files are read (and which ones are not) when the shell is invoked:</p> Understanding the INA219 I2C Current/Power Monitor https://cdwilson.dev/articles/understanding-the-ina219/ Sun, 06 Jul 2014 00:00:00 +0000 https://cdwilson.dev/articles/understanding-the-ina219/ <h2 id="motivation"> Motivation <a class="heading-link" href="#motivation"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h2> <p>The <a href="http://www.ti.com/lit/gpn/ina219" title="INA219 datasheet" class="external-link" target="_blank" rel="noopener">INA219 datasheet</a> provides an example calibration workflow, but doesn&rsquo;t really explain how some of the equations and constant values are derived. This article tries to fill in some of the gaps that weren&rsquo;t obvious to me when I first read the datasheet.</p> <h2 id="overview"> Overview <a class="heading-link" href="#overview"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h2> <blockquote> <p>&ldquo;The INA219 is a high-side current shunt and power monitor with an I2C interface. The INA219 monitors both shunt drop and supply voltage, with programmable conversion times and filtering. A programmable calibration value, combined with an internal multiplier, enables direct readouts in amperes. An additional multiplying register calculates power in watts. The I2C interface features 16 programmable addresses.&rdquo;</p> Current Projects https://cdwilson.dev/projects/ Mon, 01 Jan 0001 00:00:00 +0000 https://cdwilson.dev/projects/ <p><a href="https://cgnd.dev/" class="external-link" target="_blank" rel="noopener">Common Ground Electronics</a> :: A boutique embedded systems engineering services firm</p> <h1 id="past-projects"> Past Projects <a class="heading-link" href="#past-projects"> <i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"></i> <span class="sr-only">Link to heading</span> </a> </h1> <p><a href="https://flyingcamp.design/" class="external-link" target="_blank" rel="noopener">Flying Camp Design</a> :: Open-source hardware development tools for the early Internet of Things</p> <p><a href="https://web.archive.org/web/20140106080903/http://moteware.com/" class="external-link" target="_blank" rel="noopener">Moteware</a> :: Open-source electronics disseminator for research groups and education</p> Get in touch https://cdwilson.dev/contact/ Mon, 01 Jan 0001 00:00:00 +0000 https://cdwilson.dev/contact/ <p>I love hearing from new people — please feel free to <a href="mailto:[email protected]" >email me</a>!</p> <p>I&rsquo;m always up for chatting about electronics, collaborating on product ideas, or anything else you&rsquo;ve got in mind.</p> Hi 👋, I'm Chris https://cdwilson.dev/about/ Mon, 01 Jan 0001 00:00:00 +0000 https://cdwilson.dev/about/ <p> <a href="images/chris_200_circular.png"> <img src="images/chris_200_circular.png" alt="Chris Wilson" class="center" /> </a> </p> <p>I&rsquo;m passionate about technology that makes electronics more open, approachable, and accessible to everyone.</p> <p>I spent most of my career working as a hardware design engineer specializing in embedded systems designed for the Internet of Things. More recently, I took a hiatus from design work and pivoted into a product management role at a PCB assembly manufacturing startup.</p> <p>Currently, I&rsquo;m bootstrapping <a href="https://cgnd.dev/" class="external-link" target="_blank" rel="noopener">Common Ground Electronics</a>, a boutique embedded systems engineering services firm.</p>