<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[little cloud]]></title><description><![CDATA[building a device that turns your old electronics into your own little cloud]]></description><link>https://littlecloud.ngo</link><image><url>https://substackcdn.com/image/fetch/$s_!4Jip!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e917d6d-1545-4a03-8dea-ccacb924cb97_300x300.png</url><title>little cloud</title><link>https://littlecloud.ngo</link></image><generator>Substack</generator><lastBuildDate>Thu, 29 Oct 2026 09:20:38 GMT</lastBuildDate><atom:link href="https://littlecloud.ngo/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Paul Bricman]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[buildinglittlecloud@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[buildinglittlecloud@substack.com]]></itunes:email><itunes:name><![CDATA[Paul Bricman]]></itunes:name></itunes:owner><itunes:author><![CDATA[Paul Bricman]]></itunes:author><googleplay:owner><![CDATA[buildinglittlecloud@substack.com]]></googleplay:owner><googleplay:email><![CDATA[buildinglittlecloud@substack.com]]></googleplay:email><googleplay:author><![CDATA[Paul Bricman]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[build log #14 • data schematic, distributor integration]]></title><description><![CDATA[In which we figure out the wiring for data connections between parts on the circuit board, and close in on a particular manufacturing house and its capabilities.]]></description><link>https://littlecloud.ngo/p/build-log-14-data-schematic-distributor</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-14-data-schematic-distributor</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 28 Oct 2026 13:03:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!iiRC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>soc</strong></p><p>Last week, I covered the power schematic. This week, we&#8217;ve also got a data schematic, split in fewer but larger sections. First up, we need to configure the System-on-Chip. In general, I opted for doing chip configuration without any additional board flash memory that must be written in advance. Instead, we go with strap resistors as much as possible across all chips. However, we need some place to store the actual operating system that the F133-A System-on-Chip in particular boots from. It&#8217;ll be the same storage from which any binaries are shipped to worker devices. We have a basic SD card in a slot wired to the SoC, which is cheaper in small volumes than actually assembling flash on little cloud&#8217;s board. Beyond that we mostly only have a crystal for the clocking the SoC.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CgRX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CgRX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png 424w, https://substackcdn.com/image/fetch/$s_!CgRX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png 848w, https://substackcdn.com/image/fetch/$s_!CgRX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png 1272w, https://substackcdn.com/image/fetch/$s_!CgRX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CgRX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png" width="1456" height="1037" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1037,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:176230,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/222485324?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CgRX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png 424w, https://substackcdn.com/image/fetch/$s_!CgRX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png 848w, https://substackcdn.com/image/fetch/$s_!CgRX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png 1272w, https://substackcdn.com/image/fetch/$s_!CgRX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8681878d-987e-4f20-be1b-0098df3ed87f_1878x1338.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">SoC mostly just connects to a microSD card.</figcaption></figure></div><p><strong>devices</strong></p><p>For connecting to workers that typically act as USB devices, such as smartphones and tablets, we connect the SoC as the upstream on a CH338X hub, which connects downstream to ports. We&#8217;ve added some CH412K chips which bring ESD protection tailored for USB differential pairs. We use strap resistors to ask the hub to behave in certain ways, such as to match the polarity of the pins it uses to command the per-port power switches on the power schematic, or for reporting that it&#8217;s self-powered (rather than powered from upstream), which allows it to meaningfully charge downstream workers. It gets a clock, too. Plus, I was thinking of having one LED per port driven by the SoC instead of relying on the various LED outputs on hubs and switches that vary in semantics. You can see the LEDs in the top-left, on a subunit of the SoC symbol. I split the SoC into 4 subunits after all, to make the data schematic sane.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RowK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RowK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png 424w, https://substackcdn.com/image/fetch/$s_!RowK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png 848w, https://substackcdn.com/image/fetch/$s_!RowK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png 1272w, https://substackcdn.com/image/fetch/$s_!RowK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RowK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png" width="1456" height="1394" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1394,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:263543,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/222485324?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RowK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png 424w, https://substackcdn.com/image/fetch/$s_!RowK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png 848w, https://substackcdn.com/image/fetch/$s_!RowK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png 1272w, https://substackcdn.com/image/fetch/$s_!RowK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6e3954b-33f7-478e-b267-37ab5ddf49d7_1866x1786.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Device workers mostly connect through a USB hub to the on-board SoC.</figcaption></figure></div><p><strong>hosts</strong></p><p>This was undoubtedly the final boss of the individual circuits across both schematic pages. It took a day on its own, but was arguably also the most satisfying to look at as it was taking shape. The multiple layers of repeated patterns feel almost artistic.</p><p>The idea of communicating with hosts since a few weeks ago was to rely on a constellation of fixed-function chips. Ports going to workers that act as USB hosts, such as laptops, desktops, and servers, feed into a per-port CH334P ($0.2 @ 1K) as the respective upstreams. As a downstream on each hub, we have a per-port RTL8152B USB-to-Ethernet NIC that feeds into a unified RTL8367S Ethernet switch. This grants these workers a baseline of network connectivity. But in addition, the SoC&#8217;s only device-capable USB bus feeds into a CH448U analog switch that can connect as downstream to one of the CH334P hubs, enabling further specialized device profiles during recruitment, such as a flash drive, keyboard, video output, etc.</p><p>This was the approach after a minor course-correction triggered by a scare I had. Previously, instead of a CH334P per port, I was thinking of a CH442E 2:1 analog switch that could select either fixed network via a NIC or flexible USB device profiles via the SoC&#8217;s bus. But in that case, I would&#8217;ve had two switches in series, one from the port and one on the SoC&#8217;s bus, which might have degraded speeds from USB high-speed (480 Mbps) to full-speed (12 Mbps), yikes. So I thought maybe we could replace these with the cheapest possible hub ICs, smaller and dumber than the CH338X. This costs a whopping 0.1$ more per port! In return, it solves the signal integrity concern, allows simultaneous port connections to its NIC and the SoC, and saves the SoC two GPIO pins per port which we used to toggle the previous switch.</p><p>Also, by default, the SoC&#8217;s device-capable bus is wired to a dedicated debug port, through which it will be programmed and tested during manufacturing. We&#8217;ll see if we can manage without any UART or JTAG shenanigans.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iiRC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iiRC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png 424w, https://substackcdn.com/image/fetch/$s_!iiRC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png 848w, https://substackcdn.com/image/fetch/$s_!iiRC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png 1272w, https://substackcdn.com/image/fetch/$s_!iiRC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!iiRC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png" width="1456" height="1214" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1214,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:442806,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/222485324?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iiRC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png 424w, https://substackcdn.com/image/fetch/$s_!iiRC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png 848w, https://substackcdn.com/image/fetch/$s_!iiRC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png 1272w, https://substackcdn.com/image/fetch/$s_!iiRC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ee5901-5efd-4877-910e-662fd34fc693_2334x1946.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">It&#8217;s quite a bit messier for the host workers.</figcaption></figure></div><p></p><p><strong>impedance</strong></p><p>After the &#8220;final draft&#8221; for the power and data schematics, I started working on the actual PCB layout. The schematic focuses on how parts are meant to be connected functionally, whereas in the layout you answer questions about where to actually place parts, and you worry about the physics of their connections. For the physical buildup, I entered the specs of the standard JLCPCB buildup, the right thicknesses of layers, etc. So far, so good.</p><p>What I wrestled with more was the controlled impedance part. Various data protocols, such as our USB high-speed, 100 Mbps Ethernet, or Gigabit RGMII, require the traces through which they&#8217;re connected to be tuned in width and gaps to hit certain target impedances, such as 90 Ohm differential for USB high-speed. I was overthinking for a bit whether it&#8217;s worth doing anything else other than one rough 100 / 50, differential / single-ended profile throughout. Even Phil from the advanced digital hardware design lumps everything on his board on a single 100 / 50 profile, and usually I feel like he&#8217;s overzealous with his worries (do hardware designers really need to be worried about the fiberglass weave!?). That said, I was paranoid about the 100 Ohm impedance already being slim on tolerance for USB&#8217;s target, and that&#8217;s before taking into account the manufacturer&#8217;s own &#177;10% wobble. So I went for peace of mind and settled on just doing separate 100 / 90 / 50 impedance profiles.</p><p>In his KiCAD course, Phil defines trace thicknesses and then thinks about when to use which during routing. I found what seems like a more maintainable approach using &#8220;net classes&#8221; and assignments of net labels to such classes. Basically, I defined a net class for each of the three impedance profiles, and added wildcard rules to assign any net whose label contains &#8220;Z90&#8221; to the 90 Ohm differential impedance profile. The required trace widths and gaps I got from JUCPCB&#8217;s calculator. Note that impedance is impacted by distances to nearby plane(s), and because I settled on the internal L3 layer for my main high-speed routing, impedance profiles are only valid there. Though I also configured the default to be 50 Ohm single-ended on the outer L1 layer, because why would we stray too far from target impedances even below critical trace lengths?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xg7M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xg7M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png 424w, https://substackcdn.com/image/fetch/$s_!xg7M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png 848w, https://substackcdn.com/image/fetch/$s_!xg7M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png 1272w, https://substackcdn.com/image/fetch/$s_!xg7M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!xg7M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png" width="1456" height="942" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:942,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:402860,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/222485324?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xg7M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png 424w, https://substackcdn.com/image/fetch/$s_!xg7M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png 848w, https://substackcdn.com/image/fetch/$s_!xg7M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png 1272w, https://substackcdn.com/image/fetch/$s_!xg7M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe73d8ac7-e2d3-4b42-b1e6-e4e1c33f8c03_2568x1662.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">JLCPCB provides its own calculator for figuring out trace geometry on particular buildups to achieve specific impedances.</figcaption></figure></div><p></p><p><strong>parts</strong></p><p>The two schimatic pages contain a few hundred symbols between them. If we want the circuit board manufactured, we need to assign each of these actual product numbers from a real distributor, such that the manufacturer will know where to place what concrete part. With LCSC and JLCPCB, the distributor and manufacturer is the same conglomerate, but we still need LCSC codes for each part, down to the last resistor. The actual parts of choice obviously dictate the footprint, and so it makes sense to do this bookkeeping before layout and routing. Because why would we intentionally have to redo it later when we find out we had different footprints to work with. It&#8217;s true that we knew the important parts for a few weeks now, which microprocessor and switch and such. But now&#8217;s the time to concretize the bulk caps and inductors and such.</p><p>Now&#8217;s also the time to do a few cost shaving passes. Because why would we redo the layout after a later swapped part. So I did a few passes of trading excessive part specs and ratings for a few dollars of at 1K volume, while still staying within safe ranges. Just made the margins a bit tighter while effectively keeping functionality constant.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2AO_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2AO_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png 424w, https://substackcdn.com/image/fetch/$s_!2AO_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png 848w, https://substackcdn.com/image/fetch/$s_!2AO_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png 1272w, https://substackcdn.com/image/fetch/$s_!2AO_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2AO_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png" width="1456" height="741" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:741,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2472437,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/222485324?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2AO_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png 424w, https://substackcdn.com/image/fetch/$s_!2AO_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png 848w, https://substackcdn.com/image/fetch/$s_!2AO_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png 1272w, https://substackcdn.com/image/fetch/$s_!2AO_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c86535-2239-4870-a4ce-c7978815f2d9_5070x2580.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">In order for automated assembly to be possible, we need to link each symbol to an actual product code from LCSC.</figcaption></figure></div>]]></content:encoded></item><item><title><![CDATA[build log #13 • power schematic]]></title><description><![CDATA[In which we create the schematic for the power distribution network running through little cloud.]]></description><link>https://littlecloud.ngo/p/build-log-13-power-schematic</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-13-power-schematic</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 21 Oct 2026 17:43:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AEPs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>upstream</strong></p><p>It feels like many weeks have been leading up to this. We&#8217;ve got what feels like half of the actual schematic done, the half focused on power as opposed to data. These power connections will allow little cloud to power its own systems, as well as supply power to downstream USB-chargeable worker devices such as smartphones and tablets. It was incredibly satisfying to actually lay this out neatly, section by section.</p><p>The power&#8217;s journey starts on the upstream USB charging port. It connects to any USB-C charger annotated PD25W or more, which is roughly the wattage it will draw to cover both internal systems and downstream chargees. First up, power reaches the CH224A power delivery controller, whose purpose here is to ask the charger for a default contract of +9V. It&#8217;s the first standard USB-PD voltage above +5V, and we want to stay above +5V to be able to derive every rail with uniform step-down converters. The CH224A will later be controllable by the F133-A System-on-Chip once that wakes up. When the PD controller manages to negotiate its +9V default, it signals via its Power Good pin to the first buck converter that it can wake up.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NXwJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NXwJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png 424w, https://substackcdn.com/image/fetch/$s_!NXwJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png 848w, https://substackcdn.com/image/fetch/$s_!NXwJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png 1272w, https://substackcdn.com/image/fetch/$s_!NXwJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NXwJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png" width="1456" height="1025" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1025,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:154303,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/221519808?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NXwJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png 424w, https://substackcdn.com/image/fetch/$s_!NXwJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png 848w, https://substackcdn.com/image/fetch/$s_!NXwJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png 1272w, https://substackcdn.com/image/fetch/$s_!NXwJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b109f0f-5d1c-465c-b796-83fe6e7921f3_1924x1354.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">In the beginning, there was the power port.</figcaption></figure></div><p></p><p><strong>sequence</strong></p><p>The first two rails are ordered in accordance with the SoC&#8217;s required sequencing. The third and last is for miscellaneous other chips. The whole sequence is +3V3, +0V95, +5V. The SoC can derive its own +1V8, which it needs for the 64MB of DRAM packaged right inside. Each buck&#8217;s Power Good signal feeds into the next one&#8217;s Enable pin. The signal between the first and second gets a tiny delay to conform to the SoC&#8217;s sequencing needs. The final PG triggers the main power LED and lifts Reset on the SoC. The SY8388A bucks themselves have been picked based on their 8A output, comfortably above the ~4A drawn from the +5V one by the downstream workers. Plus they have the critical PG pins to enable chaining. And dirt-cheap at around $0.3@1K, lovely.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AEPs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AEPs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png 424w, https://substackcdn.com/image/fetch/$s_!AEPs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png 848w, https://substackcdn.com/image/fetch/$s_!AEPs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png 1272w, https://substackcdn.com/image/fetch/$s_!AEPs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AEPs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png" width="1456" height="1573" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1573,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:162214,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/221519808?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AEPs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png 424w, https://substackcdn.com/image/fetch/$s_!AEPs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png 848w, https://substackcdn.com/image/fetch/$s_!AEPs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png 1272w, https://substackcdn.com/image/fetch/$s_!AEPs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e8b0ef-04ee-4d0e-bbc9-0be59946490e_1544x1668.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Based on the power input, we sequentially derive new voltage rails to power different parts.</figcaption></figure></div><p></p><p><strong>decoupling</strong></p><p>This power schematic page got a chunk of the SoC and the on-board Ethernet switch, even if they&#8217;re data heavy. I was torn between placing them on the power or data page, because both aspects are involved for them. But apparently you can split a schematic symbol into multiple units that represent a single physical package in the actual PCB layout. So, I split off everything power related and put it on this power schematic. Each of the two chips needs an army of decoupling capacitors on their different power input pins. They&#8217;re generally consolidated here to avoid too many lines on the BoM during assembly, but I&#8217;ll probably do further consolidation passes later on. No split ground. The 5 Realtek NICs for connecting to laptops or desktops got the tame treatment.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8GKb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb414795a-5564-4263-b740-e064045c5e66_1824x1516.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8GKb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb414795a-5564-4263-b740-e064045c5e66_1824x1516.png 424w, https://substackcdn.com/image/fetch/$s_!8GKb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb414795a-5564-4263-b740-e064045c5e66_1824x1516.png 848w, https://substackcdn.com/image/fetch/$s_!8GKb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb414795a-5564-4263-b740-e064045c5e66_1824x1516.png 1272w, https://substackcdn.com/image/fetch/$s_!8GKb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb414795a-5564-4263-b740-e064045c5e66_1824x1516.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!8GKb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb414795a-5564-4263-b740-e064045c5e66_1824x1516.png" width="1456" height="1210" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b414795a-5564-4263-b740-e064045c5e66_1824x1516.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1210,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:172112,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/221519808?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb414795a-5564-4263-b740-e064045c5e66_1824x1516.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8GKb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb414795a-5564-4263-b740-e064045c5e66_1824x1516.png 424w, https://substackcdn.com/image/fetch/$s_!8GKb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb414795a-5564-4263-b740-e064045c5e66_1824x1516.png 848w, https://substackcdn.com/image/fetch/$s_!8GKb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb414795a-5564-4263-b740-e064045c5e66_1824x1516.png 1272w, https://substackcdn.com/image/fetch/$s_!8GKb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb414795a-5564-4263-b740-e064045c5e66_1824x1516.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The larger the chip, the larger the army of decoupling capacitors it requires.</figcaption></figure></div><p></p><p><strong>downstream</strong></p><p>The remaining non-trivial part of the board from a power point of view is the CH338X hub through which some downstream worker devices are charged. Again, I split the hub into a power and a data symbol, to keep things clean. Power doesn&#8217;t directly flow through the hub, but the hub has control over per-port fixed-function CH217A power switches. We need per-port control, to for instance refuse charging a particular device whose battery is not healthy enough to run. Plus this allows us to control battery level cycling per worker while keeping off 0% and 100% battery levels. The switches also block workers from drawing more than the 5V@0.5A USB Type-A standard.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e12H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e12H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png 424w, https://substackcdn.com/image/fetch/$s_!e12H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png 848w, https://substackcdn.com/image/fetch/$s_!e12H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png 1272w, https://substackcdn.com/image/fetch/$s_!e12H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!e12H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png" width="1426" height="1516" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1516,&quot;width&quot;:1426,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:167251,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/221519808?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e12H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png 424w, https://substackcdn.com/image/fetch/$s_!e12H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png 848w, https://substackcdn.com/image/fetch/$s_!e12H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png 1272w, https://substackcdn.com/image/fetch/$s_!e12H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91df7ddc-1af2-4d9f-988e-dd27bd09d707_1426x1516.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A bunch of power switches gate charging for individual downstream workers. They&#8217;d be controlled to only allow charging if the target battery is healthy.</figcaption></figure></div><p></p><p><strong>review</strong></p><p>Because it was my first time working with many of these patterns, such as buck chains and PD control, I repeatedly asked LLMs for design reviews, in the hope of screening for meaningful issues. Even if I set myself a usage standard that boils down to &#8220;AI is fine for learning &amp; prototyping, but open weights only,&#8221; I found it hard to trust models not on the frontier for feedback on topics I&#8217;m not already familiar with. Accordingly, I found myself reaching out for whatever public model was best at the time, such as Opus 5.5, to come up with issues for each subcircuit. Not sure how to navigate this, maybe open weights only for prototyping, but not learning? It is appealing to reach out to the most advanced on-demand tutor sometimes.</p>]]></content:encoded></item><item><title><![CDATA[build log #12 • turnkey distributors, power distribution]]></title><description><![CDATA[This week, we send a first enclosure off to manufacturing and plan out our board&#8217;s little &#8220;power grid.&#8221;]]></description><link>https://littlecloud.ngo/p/build-log-12-turnkey-distributors</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-12-turnkey-distributors</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 14 Oct 2026 19:05:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GH_p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>logistics</strong></p><p>I digged deeper into approaches to logistics and fulfillment following last week&#8217;s entry. First, I realized that PCBWay runs sponsorships for non-profit and open source projects, so I took some time to apply. It&#8217;d be awesome if I could get the prototyping costs partly covered until I reach a version worth applying to Crowdsupply with. From that point on, I could potentially rely on the same manufacturing pipeline to fulfill runs through Crowdsupply&#8217;s Mouser parent. Though TME and Olimex in particular also seem like relevant and inexpensive distributors, especially in an EU context.</p><p>Also interesting is that companies like PCBWay and Elecrow can integrate manufacturing together with kitting, packaging, and direct to consumer shipping. But if you sell through their storefronts, it&#8217;s still your product and you retain the EU compliance hurdles. Maybe PCBWay or Elecrow for direct shipping outside the EU, combined with TME or Olimex to handle EU hurdles, even if they of course add their own further margin. We&#8217;ll see how the PCBWay prototyping experience goes, I hope it&#8217;d work out to scale through them without other dependencies.</p><p><strong>order</strong></p><p>So I did a final pass on the enclosure model before before sending it off to PCBWay. Switched to 10x10x10mm threaded cubes from 10x10x6mm pancakes. Moved the PCB to the top side of its dedicated pocket, getting us silkscreen markings around the ports. That top layer will mostly be GND with some information LEDs at most, nothing high-speed. No need to extend the PCB all the way to the other side, as well. If some power bricks are placed in the storage drawer, they can be behind the PCB, which feels better for thermals, too. Plus minor hole size adjustments and cut-out experiments for the actual Type A and C ports.</p><p>I started adding in the plates as different parts. The total price wasn&#8217;t looking great at one piece volume. However, they shouldn&#8217;t be treated as different parts, there are no bends and so it&#8217;s just a big flat piece, even if non-contiguous. Moved everything to a shared 2mm Aluminum thickness to allow same-sheet manufacturing, and arranged the different plates into a 2D drawing in Onshape. First time I did this, feels really powerful for communicating assembly instructions and what&#8217;s inside, like those Ikea manuals. So I sent the DWG output of the drawing instead. The automated quote didn&#8217;t work right away on my file, maybe I haven&#8217;t followed some conventions initially.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GH_p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GH_p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png 424w, https://substackcdn.com/image/fetch/$s_!GH_p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png 848w, https://substackcdn.com/image/fetch/$s_!GH_p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png 1272w, https://substackcdn.com/image/fetch/$s_!GH_p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GH_p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png" width="1456" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:795,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:149223,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/220417377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GH_p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png 424w, https://substackcdn.com/image/fetch/$s_!GH_p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png 848w, https://substackcdn.com/image/fetch/$s_!GH_p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png 1272w, https://substackcdn.com/image/fetch/$s_!GH_p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293cb086-b8cf-488a-93cc-76e890e25229_2806x1532.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">You can import views of parts in a dedicated drawing in Onshape, here I tried to get everything in the same file as a single sheet part.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M6kR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M6kR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png 424w, https://substackcdn.com/image/fetch/$s_!M6kR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png 848w, https://substackcdn.com/image/fetch/$s_!M6kR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png 1272w, https://substackcdn.com/image/fetch/$s_!M6kR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M6kR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png" width="1456" height="822" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:822,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:447272,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/220417377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M6kR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png 424w, https://substackcdn.com/image/fetch/$s_!M6kR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png 848w, https://substackcdn.com/image/fetch/$s_!M6kR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png 1272w, https://substackcdn.com/image/fetch/$s_!M6kR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d0d5a4-4ec3-4fe6-9f7f-203e68c31ea4_2378x1342.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Here I added little tabs to make a single actual contiguous solid, wink.</figcaption></figure></div><p>Someone responded and flagged that they&#8217;re separate parts and so should be sent separately. I was thinking, fair, they&#8217;re not a contiguous piece, so I edited it to get an actual single piece with thin tabs between plates, and I&#8217;d snap them apart at home. But nope, this didn&#8217;t go through either, and the price per part was 3-4x compared to JLCCNC. So even if I managed to get an initial PCBWay sponsorship in credits, the JLCCNC version was still cheaper after applying the credits. They seem to add a significant premium for the fact that everything&#8217;s under one roof, and they need to cover the aggressive sponsorships somehow. So if I want the rock-bottom pricing of JLCCNC and JLCPCB, I have yet to find a vendor to solve kitting, packaging, labeling, etc.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5UuH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5UuH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png 424w, https://substackcdn.com/image/fetch/$s_!5UuH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png 848w, https://substackcdn.com/image/fetch/$s_!5UuH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png 1272w, https://substackcdn.com/image/fetch/$s_!5UuH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!5UuH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png" width="1456" height="387" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:387,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:145061,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/220417377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5UuH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png 424w, https://substackcdn.com/image/fetch/$s_!5UuH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png 848w, https://substackcdn.com/image/fetch/$s_!5UuH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png 1272w, https://substackcdn.com/image/fetch/$s_!5UuH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa54775ed-01df-4dab-a0f6-5b06fa1e0187_2054x546.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Yeah, well. That didn&#8217;t work.</figcaption></figure></div><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!adMG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a5571f4-36b5-46a1-a5c7-c9e50e8e96e9_2054x336.png 424w, https://substackcdn.com/image/fetch/$s_!adMG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a5571f4-36b5-46a1-a5c7-c9e50e8e96e9_2054x336.png 848w, https://substackcdn.com/image/fetch/$s_!adMG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a5571f4-36b5-46a1-a5c7-c9e50e8e96e9_2054x336.png 1272w, https://substackcdn.com/image/fetch/$s_!adMG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a5571f4-36b5-46a1-a5c7-c9e50e8e96e9_2054x336.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!adMG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a5571f4-36b5-46a1-a5c7-c9e50e8e96e9_2054x336.png" width="1456" height="238" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a5571f4-36b5-46a1-a5c7-c9e50e8e96e9_2054x336.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:238,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:68468,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/220417377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a5571f4-36b5-46a1-a5c7-c9e50e8e96e9_2054x336.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!adMG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a5571f4-36b5-46a1-a5c7-c9e50e8e96e9_2054x336.png 424w, https://substackcdn.com/image/fetch/$s_!adMG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a5571f4-36b5-46a1-a5c7-c9e50e8e96e9_2054x336.png 848w, https://substackcdn.com/image/fetch/$s_!adMG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a5571f4-36b5-46a1-a5c7-c9e50e8e96e9_2054x336.png 1272w, https://substackcdn.com/image/fetch/$s_!adMG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a5571f4-36b5-46a1-a5c7-c9e50e8e96e9_2054x336.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div><figcaption class="image-caption">JLCCNC is decent at volume 1, however.</figcaption></figure></div><p></p><p><strong>stackup</strong></p><p>In the section above, I mentioned that the PCB moved to the top of its pocket, being partly exposed. This implicitly impacts stackup, because that exposed layer can&#8217;t be a full signal one anymore. Beyond that, during the lesson on stackup and buildup from Phil&#8217;s Lab, I realized I was too naive when thinking of going for SIG/GND/PWR/SIG in one of the first build logs. For good EMC performance, we need every SIG and PWR layers to be near a GND one. High-speed signals should ideally be flanked by two contiguous planes even, so routed on internal layers.</p><p>If we go to a 6-layer PCB, we could follow these guidelines by doing SIG/GND/SIG/GND/PWR/GND, with a handful of low-speed signals on the exposed outer GND layer to populate the silkscreen. Going to 8-layers on a similar pattern would buy us another internal SIG, not sure if it&#8217;d be worth it. We&#8217;ll see during routing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fVmD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fVmD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png 424w, https://substackcdn.com/image/fetch/$s_!fVmD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png 848w, https://substackcdn.com/image/fetch/$s_!fVmD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png 1272w, https://substackcdn.com/image/fetch/$s_!fVmD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!fVmD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png" width="1456" height="1377" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1377,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:319835,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/220417377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fVmD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png 424w, https://substackcdn.com/image/fetch/$s_!fVmD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png 848w, https://substackcdn.com/image/fetch/$s_!fVmD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png 1272w, https://substackcdn.com/image/fetch/$s_!fVmD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc026a8c-1752-43ac-b5cc-2682ade8b176_1584x1498.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Standard stackup on JLCPCB for 6-layer boards. Our copper layers are actually only around 0.03 mm!</figcaption></figure></div><p></p><p><strong>pdn</strong></p><p>The power distribution network feels like the most intimidating part of the system, to be frank. For routing data signals it&#8217;s mostly making sure to use controlled impedance, spacing out traces, and keeping them short. For power, we need to derive 4 power rails just for the on-board components. In contrast to the ZettBrett board discussed in the Phil&#8217;s Lab course, we also want to charge downstream USB devices, which make up the bulk of the load.</p><p>To keep it manageable for this version, I looked for various corners to cut. At some point I thought it&#8217;d be cool for laptops to provide emergency power to little cloud&#8217;s on-board systems, but merging that with the standard upstream power seemed tricky. So, gone. Maybe a battery slot to effectively add an internal UPS for little cloud&#8217;s essential systems? Detecting it and caring for it adds further complexity, gone. Most USB-C chargers have ports that go up to 15/20/25W, maybe we could have two power input ports to access more power with standard parts? Hard to merge the sources, gone. Maybe we could vary the configuration pins on downstream Type-C ports to advertise 5V@0.5/1.5/3A to charged devices, depending on the power budget. Type-C ports aren&#8217;t allowed to be &#8220;hot&#8221; with power by default, we&#8217;d need voltage sensing to detect a sink via an ADC or comparator. So, gone. &#8220;Hardware is only as hard as you make it.&#8221;</p><p>Here&#8217;s what we&#8217;re left with. One upstream port that needs around 25-30W PD. No backfeed from laptops. Downstream smartphones and tablets only get a standard 5V@0.5A via Type-A ports, totaling 15W peak. Bonus: lowest possible wear on the worker device batteries. We have power rails for internal housekeeping, plus a separate one for ports, even if also 5V. Just like in the course, an identical wide-input buck converter arrangement per rail, stepping down from some default contract at 9/12/15V negotiated by the upstream PD controller. I picked a Silergy buck, like in the course, but rated for 5A output to cover 6*0.5A ports comfortably. Also picked an WCH power switch to use per charging port, plus we need a different hub variant hub with per-port power enable pins after all. We&#8217;ll do TVS diodes and fuses later, as refinements.</p>]]></content:encoded></item><item><title><![CDATA[build log #11 • symbol libraries, distribution options]]></title><description><![CDATA[This week, we put together a library of schematic symbols for the chips we&#8217;ll be using in little cloud, and we think more about how it&#8217;d be distributed.]]></description><link>https://littlecloud.ngo/p/build-log-11-symbol-libraries-distribution</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-11-symbol-libraries-distribution</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 07 Oct 2026 12:41:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SUpn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>switches</strong></p><p>This week has been about creating symbols in KiCAD for each relevant chip we&#8217;ll be using on little cloud&#8217;s circuit board. Turns out it&#8217;s hard to find well-organized ready-made symbols for the Chinese parts we&#8217;ve selected due to cost-effectiveness. Though nowadays we can learn about these parts from their Chinese datasheets using LLMs, so it&#8217;s pretty doable. While I did the schematic symbols, the packaging formats are pretty standard and so KiCAD does have most relevant footprints and 3D models baked into the standard library, such as MSOP-10 or QSOP-24 for the USB switches we&#8217;ll be using for host workers (see previous update).</p><p>I was dreading the mechanical task of annotating, for instance, 24 pins on the CH448U switch, but it turned out to give me a proper chance to get familiar with the parts I&#8217;ll be using, which I don&#8217;t regret. Some gotchas to be aware of are active-low pins and bit ordering for the selector.</p><p>By the way, the reason I&#8217;m looking at both the CH442E 2:1 switch and the CH448U 8:1 switch ($0.1@1K) is because of the following. If we only did 2:1 switching to toggle a port to use the microprocessor&#8217;s (MPU) USB device bus, we&#8217;d end up with an unterminated stub going to the switch of each port that doesn&#8217;t connect to that. At USB high-speed frequencies, physics would complain through reflections and capacitance. Instead, we also place one 8:1 switch on the device bus to &#8220;confirm&#8221; the port connecting to it and ensure the connection there remains cleanly point-to-point.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2pWw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2pWw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png 424w, https://substackcdn.com/image/fetch/$s_!2pWw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png 848w, https://substackcdn.com/image/fetch/$s_!2pWw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png 1272w, https://substackcdn.com/image/fetch/$s_!2pWw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2pWw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png" width="1456" height="1084" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1084,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128220,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/219255447?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2pWw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png 424w, https://substackcdn.com/image/fetch/$s_!2pWw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png 848w, https://substackcdn.com/image/fetch/$s_!2pWw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png 1272w, https://substackcdn.com/image/fetch/$s_!2pWw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13327ba2-e387-465c-99b2-d231083082a7_2166x1612.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Rough KiCAD symbols for the analog switches used to toggle functionality on connections to USB Hosts.</figcaption></figure></div><p></p><p><strong>eth</strong></p><p>Moving on to the Ethernet specific parts, they were a bit weirder. The fact that they mix different high-speed protocols that they need to partially process in silicon makes them require odd power routing. For instance, the the USB-to-Ethernet RTL8152B nominally only requires a +5V power input into the chip. However, it also produces other specific voltages on other pins, as power outputs. But this isn&#8217;t a convertor or anything, these power outputs shouldn&#8217;t be used by other chips. But then, why route them out to the chip&#8217;s pins, you might wonder. Well, because we need to do some filtering and decoupling outside the package, to protect the sensitive internal circuitry from the noise as much as possible, and then route that back in on a different pin. Kinda weird.</p><p>Also, because our MPU only exposes an Ethernet MAC interface, while previous $0.8@1K choice of Ethernet switch only exposes PHY interfaces, we need to upgrade to a switch that also exposes at least one MAC one. It turns out that if you want at least 5x PHYs (for connecting to the USB-to-Ethernet chips) and 1x MAC on the switch, then the cheapest version that supports Gigabit speeds costs the same as the one that supports 100 Mbps only, at ~$1.5@1K. Maybe the 100 Mbps part is scarcer or something. Anyway, it means we effectively get a 10x upgrade on the interconnect between MPU and Ethernet switch, because it costs the same. The downstream port connections are still capped at 100 Mbps, but the MPU-switch link was more of a bottleneck. Any USB host and device workers would cross that link to communicate.</p><p>Or would they? Here&#8217;s an idea of how to increase the bandwidth between workers at no additional hardware cost. We already said we might use a worker device&#8217;s WiFi radio to connect to the internet. Well, we can also get them to connect to each other with low latency as an add-on to the wired connection that also handles charging and recruitment. This can double or triple the aggregate throughput between them, a feature especially relevant for inference workloads with bits of the LLM split on different workers.</p><p>The switch symbol itself was quite a beast compared to the previous ones, at around 128 pins. A third or so of which were power related, I guess this is the actual status quo with mixed-signal chips. The Gigabit MAC interface will hook into the MPU&#8217;s, and the Gigabit PHYs on the right will hook into the USB-to-Ethernet chips, though only half the channels because the latter are 100 Mbps only. I didn&#8217;t expect a 1.5$ fixed-function chip like this to have so many bells and whistles, an integrated microcontroller which we won&#8217;t touch, options to attach separate configuration memory which we won&#8217;t use, etc.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A0fE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A0fE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png 424w, https://substackcdn.com/image/fetch/$s_!A0fE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png 848w, https://substackcdn.com/image/fetch/$s_!A0fE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png 1272w, https://substackcdn.com/image/fetch/$s_!A0fE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!A0fE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png" width="1450" height="1954" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1954,&quot;width&quot;:1450,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209669,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/219255447?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!A0fE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png 424w, https://substackcdn.com/image/fetch/$s_!A0fE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png 848w, https://substackcdn.com/image/fetch/$s_!A0fE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png 1272w, https://substackcdn.com/image/fetch/$s_!A0fE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491bbfe2-155d-40b9-b580-fa556312baf8_1450x1954.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Rough KiCAD symbol for the Ethernet switch. The 5 repeated groups on the right are 10/100/1000 connections that feed into the per-port NICs.</figcaption></figure></div><p></p><p><strong>usb</strong></p><p>Then came the USB power delivery controller we&#8217;ll be using to negotiate with an upstream charger to get the power we need for smartphones and tablets. Quite tiny compared to the 128-pin switch, but packed with features. It can be set to default to a 5V contract in order to power the MPU, which then comes back and asks it to negotiate more via I2C. It also has support for legacy fast-charging protocols, to be able to talk with chargers that predate USB PD. Why not.</p><p>The 7:1 USB hub resembles the earlier 8:1 analog switch that can work with USB signals. It has some more LEDs, supports configuration memory which we won&#8217;t use, and has a few other bells and whistles. Still very manageable compared to the 128-pin switch and upcoming MPU.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!If3-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!If3-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png 424w, https://substackcdn.com/image/fetch/$s_!If3-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png 848w, https://substackcdn.com/image/fetch/$s_!If3-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!If3-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!If3-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png" width="1456" height="1376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1376,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:141349,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/219255447?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!If3-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png 424w, https://substackcdn.com/image/fetch/$s_!If3-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png 848w, https://substackcdn.com/image/fetch/$s_!If3-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!If3-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0491e2ea-a9ca-4c8a-9881-ad882061a7b8_1680x1588.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Rough KiCAD symbol for the USB Hub chip. The repeated groups on the right are downstream connections meant to feed into USB Type-A ports connected to smartphones or tablets.</figcaption></figure></div><p></p><p><strong>mpu</strong></p><p>Then came the centerpiece, the Allwinner MPU. It doesn&#8217;t have more pins than the Ethernet switch, but they&#8217;re more diverse. I had to also add in an exposed pad in the footprint, because the KiCAD library lacked such a variant. Apparently different manufacturers size the exposed pad differently, so maybe that&#8217;s the reason. Anyway, the MPU has it all, a bunch of really handy interfaces you can toggle the pins to inherit programmatically. Half the work on this symbol was pruning away the functionality such that we only get the features we need instead of half a dozen options per pin listed in the label. Ran my symbol and the datasheet through LLMs to spot typos and mismatches, which there were quite a few of. Hopefully the symbols are stable enough to use conveniently in the schematic.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SUpn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SUpn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png 424w, https://substackcdn.com/image/fetch/$s_!SUpn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png 848w, https://substackcdn.com/image/fetch/$s_!SUpn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png 1272w, https://substackcdn.com/image/fetch/$s_!SUpn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!SUpn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png" width="1456" height="914" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:914,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1217456,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/219255447?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SUpn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png 424w, https://substackcdn.com/image/fetch/$s_!SUpn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png 848w, https://substackcdn.com/image/fetch/$s_!SUpn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png 1272w, https://substackcdn.com/image/fetch/$s_!SUpn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F747fe4a3-f17a-4c8f-8402-901a4e3cad9d_3420x2146.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">I couldn&#8217;t find a screenshot from when first drafting the microprocessor symbol, so this is a later iteration, split across 4 thematic units, with the LCSC part number and all.</figcaption></figure></div><p></p><p><strong>non-technical</strong></p><p>Been also looking into ways of minimizing little cloud&#8217;s price beyond the physical parts that go into it, namely in terms of legal and logistics. From further research into relevant regulations for selling across the EU, we&#8217;ll need to align with the Electromagnetic Compatibility Directive (EMC) for Electromagnetic Interference (EMI) and Electrostatic Discharge (ESD) concerns. We&#8217;ll need to align with Restrictions of Hazardous Substances (RoHS) for self-evident reasons. General Product Safety Regulations, too. Thing is, for our Energy Source 1 (&lt;75V DC) and Power Source 2 (&lt;100W) class, and in a consumer setting, it tentatively seems like we can  achieve compliance by simply ensuring the design adheres to standards, documenting it, testing it internally, and then just self-declaring the results. No authorized lab or notified body with eye-watering quotes, seemingly.</p><p>But there&#8217;s a thornier compliance issue: WEEE, or e-waste management. Thing is, little cloud might reduce e-waste by helping households breathe new life into old electronics. But, it would itself be an electronic product, that can only be sold to consumers in the EU through settings that involve registration with local institutions responsible for e-waste. Annoyingly, these are not really harmonized or integrated beyond the national level, making it such that you require a legal entity in each member state where you want to sell directly.</p><p>Now, the catch is that if you sell to businesses in other member states, such as local distributors of maker products, they take on the responsibility for local WEEE concerns. They&#8217;re properly registered as a seller of electronics, etc. They also handle returns, replacements, and buffer local storage for cheaper and faster deliveries. Of course, they also take their cut. But you could sell to multiple distributors in the same region to drive lower markups on that leg of the product&#8217;s trip. Let&#8217;s say the marginal cost of a little cloud at 1K volume is 30&#8364;, it might be possible to barely get it on various EU shelves at around 40&#8364;, before VAT and shipping. Not great, not terrible.</p><p>There&#8217;s also another approach I found, namely that of &#8220;co-creation&#8221; with a &#8220;design partner.&#8221; Basically, you bring the idea and a working design, and they take it on and manufacture, sell, and ship it. They give you a royalty fee for the IP. Now, sure you might get the best margins if you sold directly or through distributors. But then, this is not what we&#8217;re here for. Co-creation could potentially be interesting in that it lowers the underlying cost of goods quite a lot, because the design partner has huge quantities of relevant parts already. Some programs like this focus on integrating new modules in an ecosystem, which isn&#8217;t too interesting here. But if I find a program where they handle the logistics and put pressure on the final price, I might be down for that.</p>]]></content:encoded></item><item><title><![CDATA[build log #10 • relax connectivity, relax enclosure]]></title><description><![CDATA[This week, we unlock the cleanest hardware architecture yet, and split the enclosure into floors.]]></description><link>https://littlecloud.ngo/p/build-log-10-relax-connectivity-relax</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-10-relax-connectivity-relax</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 30 Sep 2026 16:12:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dFPt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>stages</strong></p><p>Let&#8217;s recap the quest for a satisfactory approach to little cloud&#8217;s hardware. Early on, my best guess was that we&#8217;d go with some very specific microcontrollers manufactured by WCH, using them to flexibly drive USB ports. But that felt complex and overfit to WCH&#8217;s offering. Over the past couple weeks, my best guess was that we&#8217;d fold everything we need into an FPGA as soft cores, including a processor, USB buses, and so on. But that irresistible appeal of total consolidation quickly died with a reality check of trying to synthesize all that on a budget FPGA. So where do we go next?</p><p>Here&#8217;s my intuition after a few weeks of turning this problem over on a bunch of sides. The promise of USB lies in its universality. It can enable a flash drive holding an OS, it can support networking between devices, it can be used to control smartphones, and so on. But perhaps we jumped to the wrong conclusion when we mandated that every single port needs to be able to do everything at anytime.</p><p>The following nuance is growing on me. Recruiting devices is much messier than orchestrating them, but only happens occasionally. You talk differently via USB to a smartphone than to a desktop to recruit them as worker devices into a cluster. But orchestration could be made to only require a reliable network once the worker has been recruited.</p><p><strong>split</strong></p><p>Because recruitment generally only happens once per device, and only one device is being recruited at a given time, the whole recruitment hardware can boil down to a single dual-role port or two single-role ports. Want to recruit an Android smartphone or tablet? Have little cloud present itself as the host and drive it via ADB. Want to recruit a laptop, desktop, or server? Have little cloud present itself as a composite of a mass storage device holding a minimal OS and a HID keyboard device to handle the boot or install. At the end, just make sure you&#8217;ve left a privileged shell for little cloud to reach.</p><p>Because orchestration is constant but generally only requires reliable networking, the orchestration hardware can boil down to making sure there are many network-capable ports, either device-only or per-type. The device-only option is to only use fixed-function USB-to-Ethernet chips (~0.6$ @ 1K), and connect them all plus the microprocessor to one switch (~2$ @ 1K). The downside here is that smartphones and tablets lacking dual-role power (manufactured prior to ~2017) wouldn&#8217;t be able to be charged on the same cable. This is because these chips present themselves as USB devices, and only on Type-C with full power delivery (PD) support can the two sides swap power roles.</p><p>The other orchestration option would be to have one USB host bus combined with a standard hub chip for smartphones and tablets, and the Ethernet switch for laptops, desktops, and servers. More backwards-compatible, but less uniform. Yet what I like about this option is that it lacks microcontrollers and FPGAs entirely. Just a microprocessor and a few fixed-function chips that just need to be placed properly. One firmware only, and no gateware.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cogh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cogh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Cogh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Cogh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Cogh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cogh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:264529,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/218199107?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Cogh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Cogh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Cogh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Cogh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc2f0e-3a89-4dee-a71c-ec586ba1c934_2016x1134.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Sketching out ways of decoupling recruitment and orchestration through an interplay of System-on-Chip and a few fixed-function chips. They look a bit like AT-AT walkers.</figcaption></figure></div><p></p><p><strong>block</strong></p><p>So I got the Advanced Digital Hardware Design course from Phil&#8217;s Lab that I mentioned in a recent update, primarily to use as an outline when working on little cloud&#8217;s board. The first thing to follow along with was a high-level block diagram of the system architecture, so I made a slightly cleaner version that draws from various rough sketches from my notebook, with part numbers, costs at 1K, used interfaces, etc. It reflects this third approach described in the previous sections, where we split hosts and devices, and use neat fixed-function chips on the host side to cheaply aggregate them.</p><p>I notice that while the &#8220;data plane&#8221; is pretty well-specified, I&#8217;m still somewhat confused as to how to approach power. We&#8217;ll get to that while following along a lesson focused on this, but I can already see there&#8217;ll be a few different subsystems related to it. We&#8217;ll need to negotiate a variable USB PD profile from upstream and convert that to 5V efficiently, we&#8217;ll need a way to power sequence the System-on-Chip and give it a few different voltage rails, and we&#8217;ll need to power the USB devices in a way that preserves battery life and minimizes heat. We&#8217;ll get there eventually.</p><p>Also, I realized that our dozen or so different USB high-speed and Ethernet 100mbps connections might be a source of electromagnetic interference (EMI) issues, which gets tested during product safety certifications. We&#8217;ll really need to nail grounding and shielding and filtering, and so I&#8217;ll probably walk back on the standoff sandwich approach to the enclosure and go with a fully enclosed one instead, see update #5. And I might fold the fan grills back into the enclosure, although with a simpler layout, to ensure we can ground the 120mm fan holes, too.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dFPt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dFPt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png 424w, https://substackcdn.com/image/fetch/$s_!dFPt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png 848w, https://substackcdn.com/image/fetch/$s_!dFPt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png 1272w, https://substackcdn.com/image/fetch/$s_!dFPt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!dFPt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png" width="1456" height="976" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:976,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:600245,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/218199107?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dFPt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png 424w, https://substackcdn.com/image/fetch/$s_!dFPt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png 848w, https://substackcdn.com/image/fetch/$s_!dFPt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png 1272w, https://substackcdn.com/image/fetch/$s_!dFPt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c75815-53fc-48a4-bd28-d512c0dfeb5b_4038x2707.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Sketching out the new hardware architecture triggered by the insight that recruitment and orchestration can be decoupled.</figcaption></figure></div><p></p><p><strong>maximalist</strong></p><p>I did another iteration on the enclosure, feeling a bit paranoid about the product safety certifications we&#8217;ll need to nail early to avoid extra spins. There&#8217;s the EMI aspect, where we essentially want to shield the high-frequency circuitry with the enclosure as much as possible, ideally with no large openings. Then, there&#8217;s the fire safety stuff, which to really make sure we cross it, we&#8217;d again ideally enclose &#8220;potential ignition sources&#8221; inside metal. Our enclosure here is also critical for airflow, so maybe we could have a plenum to distribute it uniformly across devices? Though not sure how important the latter is.</p><p>The result of optimizing for comfortably passing certifications in this iteration led to a somewhat overengineered design. The PCB ended up the front panel, but with all surface-mounted components on the inside face. The airflow grills resemble the original (expensive and dense) hole matrix design due to seeking EMI shielding. The sides have matching tabs and slots to aid assembly, which is the first time I tried something like this. Critical flaw: the ports facing upwards would be obstructed by the worker devices occasionally.</p><p>Similar to how we&#8217;ve relaxed constraints on the hardware schematic side of things over time, I think the enclosure could also get the same treatment. With this overengineered design in mind, I&#8217;m thinking we could handle PCB enveloping (for EMI and safety), separately from airflow to worker devices. And so maybe we could use simple wire mesh grills for fan outlets, as well as plates on standoffs, even if not ideal for EMI. And that because we could separately sandwich the PCB tightly between sheet metal plates in its own area, outside the airflow path entirely. The search continues.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2PZY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2PZY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png 424w, https://substackcdn.com/image/fetch/$s_!2PZY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png 848w, https://substackcdn.com/image/fetch/$s_!2PZY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png 1272w, https://substackcdn.com/image/fetch/$s_!2PZY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2PZY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png" width="1456" height="853" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:853,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1250531,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/218199107?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2PZY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png 424w, https://substackcdn.com/image/fetch/$s_!2PZY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png 848w, https://substackcdn.com/image/fetch/$s_!2PZY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png 1272w, https://substackcdn.com/image/fetch/$s_!2PZY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd650ecde-ac0f-4305-8339-778b61c43cf6_2420x1418.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">EMC paranoia and an obsession with a single-piece sheet led to an overengineered designed with a critical flaw.</figcaption></figure></div><p></p><p><strong>cubes</strong></p><p>Here&#8217;s another iteration, following the idea of decoupling the PCB shielding from airflow paths. We basically structure the solution around a few different floors. Worker devices sit on the roof. On the floor below, we have a chamber dedicated to ventilation, as well as power brick storage. The back side is missing, to allow air intake and access to storage. On the floor below, we have the actual PCB, enclosed on all sides. A tiny panel turned off in the render would be placed flush against the ports. Also, the sides in this flat-only iteration can extend upwards to create handles and downwards to create feet to avoid resting on tiny screws and scratching the table or below.</p><p>I also tried incorporating these neat fasteners, called threaded cubes. They&#8217;re basically female-female standoffs but 3D instead of 1D. They&#8217;re pretty handy for interlocking flat plates on multiple sides without countless flanges. Even compared to 2D 90&#176; brackets, these allow us to use fewer parts, as some of them connect on even 4x sides. They come in cute colors and are dirt cheap in volume, maybe it&#8217;s a way to add an accent color to an otherwise spartan choice of parts.</p><p>Of course, once actually modeling it based on some rough sketches, I realized we could potentially make some improvements. If we limit one side of the PCB to at most low-speed signals like LEDs, like in the previous sections, we could skip the metal sheet that currently separates the two internal floors, as well as 4x threaded cubes. One of the PCB plates becomes the metal sheet roughly, but with the ports oriented correctly this time, and with a better structure around it. However, the laptop power bricks that might reasonably be placed in the storage areas might need to be isolated themselves from the PCB, as they have mains AC inside, transformers and switching, and so maybe the extra sheet isn&#8217;t too bad for different reasons.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZsCM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZsCM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png 424w, https://substackcdn.com/image/fetch/$s_!ZsCM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png 848w, https://substackcdn.com/image/fetch/$s_!ZsCM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png 1272w, https://substackcdn.com/image/fetch/$s_!ZsCM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZsCM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png" width="1456" height="853" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:853,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:617464,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/218199107?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZsCM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png 424w, https://substackcdn.com/image/fetch/$s_!ZsCM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png 848w, https://substackcdn.com/image/fetch/$s_!ZsCM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png 1272w, https://substackcdn.com/image/fetch/$s_!ZsCM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf30b355-6f4a-4a0e-94db-b90502bc0548_2420x1418.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Rough sketch of the idea of splitting the enclosure into a couple different &#8220;floors&#8221; to decouple constraints.</figcaption></figure></div>]]></content:encoded></item><item><title><![CDATA[build log #9 • hello fpga, bye fpga, cnc experiments]]></title><description><![CDATA[This week, we try out a way of consolidating multiple chips into one, and have a go at local prototyping.]]></description><link>https://littlecloud.ngo/p/build-log-9-hello-fpga-bye-fpga-cnc</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-9-hello-fpga-bye-fpga-cnc</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 23 Sep 2026 09:14:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_EHs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><span>hello</span></strong></p><p><span>This week, I wanted to get into the weeds of working with an FPGA, following last week&#8217;s push for hardware consolidation. I had a second-hand Tang Nano 20K laying around, which is a development board built around a Gowin FPGA with about 20K look-up tables that define the internal circuit. From some initial napkin calculations, packing a Linux-capable processor, a bunch of USB buses, and a few other hardware blocks would require us to go for a 20-25K FPGA on the final product. It&#8217;s unlikely we&#8217;ll end up going with Gowin FPGAs after I saw the costs on LCSC, compared for instance to Lattice ones. That said, it&#8217;s the right caliber, so we&#8217;ll use it to experiment until I sleep on the whole FPGA approach enough to warrant a board closer to what we&#8217;ll put in the final product.</span></p><p><span>So, onto getting the FPGA to blink an LED. We need two input files, a Verilog one defining the logical behavior of the circuit, and one for generally mapping variables to specific pins on the physical chip. The Verilog in the picture below does the following. We&#8217;re defining a tiny block of circuitry that has one input and one output &#8220;wire.&#8221; We&#8217;re then effectively defining an integer over 24 bits. Then, on every rising edge of the clock signal that we tapped into, we increment that integer. Finally, we take the most significant bit of the integer and wire it to output. Basically, we&#8217;re implementing a clock divider to slow down the native 27kMhz clock by 2^24 or so, and use the resulting ~2Hz tempo to flip the LED state.</span></p><p><span>The tooling we need to &#8220;synthesize&#8221; this circuit on the FPGA is quite involved. First, I used &#8220;Yosys&#8221; to turn the Verilog into what I understand to be abstract representations of how look-up tables (LUTs) and registers need to be wired to implement the specified behavior. Then, I used &#8220;Nextpnr&#8221; (place-and-route) to assign specific blocks on this specific Gowin FPGA to those roles. Then, I used &#8220;gowin_pack&#8221; to build the previously generated JSONs into a binary the FPGA understands. Finally, I used &#8220;openFPGALoader&#8221; to flash that binary over USB to the actual board. Granted, the reason we&#8217;re dealing with four different tools here is that they&#8217;re the open source, reverse engineered alternative to Gowin&#8217;s integrated yet proprietary tooling. It boils down to four legible commands that can be scripted, could have been worse.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5swQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5swQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5swQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5swQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5swQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5swQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:127928,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/217042509?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5swQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5swQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5swQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5swQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F713b1d7e-5799-454d-a487-b4bac28dac60_2016x1134.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Getting the FPGA to blink an LED through a few lines of &#8220;gateware.&#8221;</figcaption></figure></div><p></p><p><strong><span>litex</span></strong></p><p><span>Next day after the Verilog blink test, I decided to actually give LiteX a go. This is a library of open source cores that allows you to turn an FPGA into a System-on-Chip with exactly your specs. It has a tutorial with a few labs, so I mostly went through that first. &#8220;Mostly&#8221; because the tutorial was based on a different development board which had more outputs and sensors. I did a binary clock with the 6 LEDs on the Tang Nano 20K instead of displaying the time as digits. I also got to implement pulse width modulation, the kind of peripheral a microcontroller would use to dim an LED with a square wave, here shown as a simulated waveform.</span></p><p><span>Getting a Linux-capable processor baked into the Gowin FPGA on the Tang Nano was trickier, because Linux doesn&#8217;t really fit into the 8MB of integrated RAM on the chip. So I might need to already switch to a development board that&#8217;s closer to the intended use case rather than what I had laying around. I did manage to flash a dummy shell on one of these soft cores, without loading any actual OS underneath. Apparently, LiteX also automatically builds a BIOS for your SoC definition, equipped with a debugging shell over serial. And it only takes a couple dozen lines of LiteX to define, build, and flash a SoC that exposes such a shell. Pretty neat.</span></p><p><span>While I was binging anything I could find about FPGAs on YouTube, I realized that Phil&#8217;s Lab has a course focused on designing a board that happens to incorporate an FPGA, high-speed USB, memory routing, external flash, etc. Phil&#8217;s previous course was the one I followed to learn how to use KiCAD in the first place. So I thought maybe I could take this other one too, but instead of reproducing the demo board he builds throughout the materials, I could just use the course outline as a guiding structure and apply the same principles to little cloud directly. I contacted Phil to ask whether it&#8217;d be fine to submit this other board at the end of the course for the certificate and all, and he seemed fine with it as long as it&#8217;s of a &#8220;similar complexity.&#8221; It&#8217;d be really cool to get an actual expert review on the little cloud hardware before submitting that first version to manufacturing.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5Wql!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5Wql!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png 424w, https://substackcdn.com/image/fetch/$s_!5Wql!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png 848w, https://substackcdn.com/image/fetch/$s_!5Wql!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png 1272w, https://substackcdn.com/image/fetch/$s_!5Wql!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!5Wql!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png" width="1456" height="914" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:914,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:509664,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/217042509?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5Wql!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png 424w, https://substackcdn.com/image/fetch/$s_!5Wql!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png 848w, https://substackcdn.com/image/fetch/$s_!5Wql!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png 1272w, https://substackcdn.com/image/fetch/$s_!5Wql!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e6e0eef-1b17-4f7b-a854-172449ae18d2_3420x2146.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Getting a rudimentary shell on the FPGA that has been turned into a System-on-Chip </figcaption></figure></div><p></p><p><strong><span>bye</span></strong></p><p><span>I had a first scare when I realized that, wait, the mere fact that there are open source USB soft cores out there doesn&#8217;t mean Linux would automatically be able to drive them with native drivers. In fact, I could only find a pair of host and device cores with native Linux compatibility, but they were only for USB full-speed (12 Mbps), not high-speed (480 Mbps). I&#8217;d really like to match the widespread high-speed found on would-be worker devices, to avoid little cloud itself being the bottleneck.</span></p><p><span>I did find the LUNA project, which brings open source USB high-speed device cores that can be controlled through software. Even if not the native Linux interfaces outright, it can do networking, mass storage, keyboard input, etc. For USB high-speed host cores, I did find guh, which again enables some use cases but falls short of full Linux compatibility. One option is to have little cloud usually emulate a USB high-speed device to everyone, including smartphones and tablets. And only use a Linux-compliant full-speed host for the mobile worker bring-up, such as for running ADB. It is possible to do both high-speed host and device from Linux, as exemplified by the proprietary IP cores that boast such capabilities, but the open source stuff is currently limited to either full-speed Linux-compliant or high-speed hand-rolled.</span></p><p><span>But a worse scare here was when I tried to get an actual empirical estimate of how many LUTs would be required for what we need here. I had GLM 5.3 Flash experiment with defining and synthesizing a few SoC variants that incorporate the specs we need. Well, the initial calculations were too optimistic, especially if you account for some way of moving traffic between USB buses themselves and from an SD card. For doing this efficiently, you either need a DMA controller per bus that copy data to RAM without processor involvement, or you need some routing between these in the actual gateware. Anyway, when I tried going from napkin calculations to having an LLM actually experiment with synthesizing a few configurations, it became pretty clear that the few FPGAs that are not crazy expensive wouldn&#8217;t have enough capacity to hold all of what we&#8217;d need them to. The search continues.</span></p><p><strong><span>cnc</span></strong></p><p><span>This same week, I wanted to try getting a hang of the CNC router at a local makerspace, as mentioned in entry #5. The idea was that maybe I could iterate on the enclosure faster and cheaper than working with a CNC shop. So I signed up for an intro session, during which we actually got all the way to CNC-ing a slightly tweaked file export from that same Onshape project. And we cut it out of... a glorious slab of 18mm scrap plywood that we grabbed from a discard pile. Quite a bit chunkier than the 1mm aluminum I had in mind, it feels like the volume of a whole enclosure rather than a plate.</span></p><p><span>I realized early on during the intro session to what extent the modern software of products like Bambu Lab&#8217;s A1 have spoiled me. After you export a DWG/DXF out of your CAD of choice, you first need to process it using &#8220;CAM&#8221; software, which is the equivalent of slicers in 3D printing, only way more manual and clunky (at least the AutoDesk one we worked with). Then we put it on a stick and loaded it on an ancient piece of software that controlled the actual CNC through motor drivers, which is the equivalent of Klipper in 3D printing. The CNC itself lacked vacuum suction for holding down the material, hence the countless screw marks on the working area. The spindle was powered separately, and relied on a DIY water-cooling loop. Overall it felt too janky, so I don&#8217;t think I&#8217;ll go ahead with using it for real.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_EHs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_EHs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_EHs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_EHs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_EHs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!_EHs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:173978,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/217042509?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_EHs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_EHs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_EHs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_EHs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14d485cd-aa29-44e7-a9f8-3ba1460e795b_2016x1134.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Trying out the CNC at a local makerspace by milling little cloud&#8217;s top plate out of scrap wood.</figcaption></figure></div><p></p><p><strong><span>fdm</span></strong></p><p><span>What I did try using afterwards after all was a standard 3D printer. This is mostly only relevant for the simplified flat plate &#8220;enclosure&#8221; approach described in update #5. Because of the reduced size, it fits in the build volume of an A1. Yes, it&#8217;s not actual sheet metal, but it&#8217;s enough to get a feel of the proportions.</span></p><p><span>After an initial print, I realized that the support holes for the worker devices are a bit sparse, the two rows are a bit too far from each other, and the margins make it a bit finicky to use nuts with the standoffs. A second iteration felt like a step in the right direction, though worker supports are still finicky to move around.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vjCB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vjCB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vjCB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vjCB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vjCB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!vjCB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85573,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/217042509?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vjCB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vjCB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vjCB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vjCB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5231ce06-f960-4120-b823-fba35394217f_1600x900.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Getting a feel for brass standoffs as worker device supports on a 3D printed enclosure version.</figcaption></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[build log #8 • android shells, purging daemons]]></title><description><![CDATA[This week, we experiment with controlling Android devices over USB, and consider an aggressive consolidation of little cloud&#8217;s software and hardware.]]></description><link>https://littlecloud.ngo/p/build-log-8-android-shells-purging</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-8-android-shells-purging</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 16 Sep 2026 07:34:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tjSM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><span>adb</span></strong></p><p><span>Smartphones and tablets together are the largest category of e-waste by computing resources, and most of them run Android. If we are to aggregate junk electronics into usable clusters, we need to be able to deeply control these pieces of hardware. Thankfully, the Android Debug Bridge (ADB) is a protocol that allows us to do virtually anything with an Android device attached via USB. You just need to enable USB debugging, then you can access a bunch of options and resources.</span></p><p><span>I played around with reading specs and configs off of my Pixel 8, and you can really get down to the manufacturer of the RAM die or the current mobile carrier. You can also toggle settings, transfer files, run all kinds of binaries in a shell, even emulate taps, typing, and physical button presses.</span></p><p><span>ADB really is a Swiss army knife for controlling Android devices. This is great, because smartphones and tablets are otherwise quite fragmented in terms of hardware, making it difficult to find the drivers to build a custom ROM into which you could boot. On Android devices, we should work with the vendor binaries shipped with the original OS if we want to have a chance at tapping into mobile GPUs effectively, for instance.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZQ8y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZQ8y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png 424w, https://substackcdn.com/image/fetch/$s_!ZQ8y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png 848w, https://substackcdn.com/image/fetch/$s_!ZQ8y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png 1272w, https://substackcdn.com/image/fetch/$s_!ZQ8y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZQ8y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png" width="1456" height="914" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:914,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:482035,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/215950142?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZQ8y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png 424w, https://substackcdn.com/image/fetch/$s_!ZQ8y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png 848w, https://substackcdn.com/image/fetch/$s_!ZQ8y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png 1272w, https://substackcdn.com/image/fetch/$s_!ZQ8y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F632190d3-c674-492d-8f84-6b02d4f71a2e_3420x2146.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">ADB commands can give us deep visibility into Android worker devices.</figcaption></figure></div><p></p><p><strong><span>target</span></strong></p><p><span>The next thing I tried was building the default &#8220;hello world&#8221; Rust project for an Android target. This was surprisingly painless. You just need to have the Android NDK available, tell Rust to prepare for compiling for an Android target, and install Cargo NDK as glue between the two. After this initial setup, we got an output binary.</span></p><p><span>We can &#8220;push&#8221; the file to the connected device via ADB, then drop in a shell where we can execute it. And there it is, we&#8217;re greeted by code that&#8217;s running natively on the Android device. It&#8217;s not doing anything useful, yes, but it validates that we can simply target Android with Rust code. Actually seeing this pan out is good news, because it&#8217;s the Android environment that felt more exotic compared to the standard x86 / amd64 computers.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rJhH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rJhH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png 424w, https://substackcdn.com/image/fetch/$s_!rJhH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png 848w, https://substackcdn.com/image/fetch/$s_!rJhH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png 1272w, https://substackcdn.com/image/fetch/$s_!rJhH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!rJhH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png" width="1456" height="914" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:914,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:418763,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/215950142?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rJhH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png 424w, https://substackcdn.com/image/fetch/$s_!rJhH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png 848w, https://substackcdn.com/image/fetch/$s_!rJhH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png 1272w, https://substackcdn.com/image/fetch/$s_!rJhH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8ca34a3-077e-4425-80d6-d0167145a570_3420x2146.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Compiling and running a dummy Rust program on Android over USB.</figcaption></figure></div><p></p><p><strong><span>agentless</span></strong></p><p><span>This binary we transferred to and ran on the smartphone could have been our worker daemon! It only had to expose some kind of API around underlying tools like llama.cpp or ripgrep that could be consumed by the orchestrator. But then I thought, wait, what if the orchestrator can just run things directly on worker devices through shells? Do we really need to mantain a hand-rolled daemon to abstract away from underlying resources and capabilities?</span></p><p><span>I seriously considered these, intrigued by the prospect of drastically simplifying our software infrastructure. We&#8217;d still need the orchestrator to manage workers, and we&#8217;d still need to write firmware to get microcontrollers (MCU) to emulate USB devices. But we could otherwise be looking at an opportunity to remove a whole part of the software burden. Apparently Ansible is also &#8220;agentless&#8221; as a DevOps tool, in that it only runs ephemeral code on the machines in a cluster, rather than standing a long-lived daemon the way Kubernetes does. So it&#8217;d not be completely unheard of.</span></p><p><span>However, removing the worker daemon as a whole and having the orchestrator talk to worker shells directly would naturally also have some downsides. The main one is the messiness of the interface exposed to the orchestrator, command-line calls and output parsing instead of some normalized /jobs/ paths in an API. The messiness goes beyond diverse invocation arguments, all the way to how to keep track of service status across the cluster. There might also be some overhead on processing, but opting for &#8220;scp&#8221; / &#8220;adb push&#8221; instead of transferring files through standard shell output would make it competitive for bulk transfers.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tjSM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tjSM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tjSM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tjSM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tjSM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!tjSM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52283,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/215950142?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tjSM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tjSM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tjSM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tjSM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F920ed914-a1e8-486b-9130-f090bbe0da86_1600x900.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The one setting that allows Android devices to be controlled over USB.</figcaption></figure></div><p></p><p><strong><span>fpga</span></strong></p><p><span>After coming up with the idea to remove worker daemons in favor of an agentless orchestrator, I was feeling on a roll when it comes to simplifying the design. Accordingly, I thought I&#8217;d also push further on the idea that we need the MCU firmware.</span></p><p><span>My previous best guess for how to achieve a flexible USB array was to connect USB-enabled MCUs to the ports, and then network the MCUs via the orchestrating microprocessor (MPU). WCH has various dirt-cheap USB-enabled MCUs, but simultaneously optimizing for cost and high-speed capabilities felt like overfitting to very specific chip offerings. For instance, the WCH CH32V407 has two USB high-speed buses and Ethernet for &lt;2$ at 1K volume, so maybe we could use one every two ports only, and network them via on-board Ethernet as the interconnect.</span></p><p><span>There&#8217;s no chip I could find that&#8217;s available today, integrates more than a couple dual-role USB buses, and is Linux-capable such that we could tap into that rich repository of USB-related drivers. So, what if... we instead instantiated the silicon blocks necessary to have Linux drive lots of USB buses inside an FPGA? This stands for field programmable gate array, and refers to a type of chip that can effectively be dynamically rewired to implement different kinds of physical functionality. Libraries such as LiteX allow you to effectively come up with the specs you&#8217;d want on a system-on-a-chip and configure an FPGA to become that chip. Maybe you pick a certain processor with this many cores, some PCIe or SATA controllers, or whatever other specs you want, as long as it fits on the FPGA.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!18KP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5b66264-2f4a-4452-8ecf-7e71ec6f0a04_960x540.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!18KP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5b66264-2f4a-4452-8ecf-7e71ec6f0a04_960x540.png 424w, https://substackcdn.com/image/fetch/$s_!18KP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5b66264-2f4a-4452-8ecf-7e71ec6f0a04_960x540.png 848w, https://substackcdn.com/image/fetch/$s_!18KP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5b66264-2f4a-4452-8ecf-7e71ec6f0a04_960x540.png 1272w, https://substackcdn.com/image/fetch/$s_!18KP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5b66264-2f4a-4452-8ecf-7e71ec6f0a04_960x540.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!18KP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5b66264-2f4a-4452-8ecf-7e71ec6f0a04_960x540.png" width="960" height="540" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5b66264-2f4a-4452-8ecf-7e71ec6f0a04_960x540.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!18KP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5b66264-2f4a-4452-8ecf-7e71ec6f0a04_960x540.png 424w, https://substackcdn.com/image/fetch/$s_!18KP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5b66264-2f4a-4452-8ecf-7e71ec6f0a04_960x540.png 848w, https://substackcdn.com/image/fetch/$s_!18KP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5b66264-2f4a-4452-8ecf-7e71ec6f0a04_960x540.png 1272w, https://substackcdn.com/image/fetch/$s_!18KP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5b66264-2f4a-4452-8ecf-7e71ec6f0a04_960x540.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Diagram from LiteX&#8217;s GitHub page, illustrating how you can mix-and-match soft cores to enable custom hardware capabilities.</figcaption></figure></div><p></p><p><strong><span>balance</span></strong></p><p><span>What I&#8217;m sayings here is that maybe we could effectively fold many of our key components into one FPGA, including the MPU, MCUs, any hubs / switches, and so on. We could instantiate USB buses directly as parts of our ideal system-on-a-chip that we&#8217;re otherwise having trouble finding for our very specific application. This would remove a significant part of our system&#8217;s complexity, but it would also add complexity in other places, so let&#8217;s look at the balance sheet.</span></p><p><span>First, effectively folding our MCUs into the FPGA would eliminate the need to write custom firmware for them as a separate software component. Ideally, the Linux instance running on the FPGA would simply see many available hardware buses and operate them natively. We might still need a fixed-function chip per port if we want high-speed, though. Second, consolidating the MPU, MCUs, as well as any miscellaneous hubs and switches into one single part would vastly simplify the layout and routing of the actual circuit. Third, it would drastically simplify our bill of materials, as our board mostly reduces to a chunky FPGA fanning out to a bunch of USB ports. Sure, we&#8217;d still have some power assembly, a separate flash chip, and a few other one-off niceties, but we&#8217;d cut down on most hyper-specific parts.</span></p><p><span>Switching to FPGA also adds complexity elsewhere, primarily in the actual configuration of what we want from it, or the &#8220;gateware.&#8221; We need to instantiate a processor and various USB peripherals. That said, FPGAs turns hardware specs into software, and software is trivial to share. There&#8217;s a growing collection of open source blocks to throw into your design, as exemplified by LiteX. To be honest, I&#8217;d also not be mad about getting the opportunity to play around more with FPGAs, especially because the resulting configuration code can be converted into files that can essentially be sent to fabs to get custom chips taped out. I&#8217;m pretty sure we won&#8217;t get anywhere close to that level in this project, but it&#8217;d still be interesting to get familiar with this corner of the industry. Looking at the bottom line of our balance sheet, I&#8217;m overall pretty intrigued by the FPGA approach to little cloud&#8217;s design here, and I feel like these first weeks are well characterized by the following quote. It takes time to simplify.</span></p><blockquote><p><em><span>&#8220;I have only made this letter longer because I have not had the time to make it shorter.&#8221;</span></em><span> &#8212; Blaise Pascal</span></p></blockquote>]]></content:encoded></item><item><title><![CDATA[build log #7 • sketching firmware, e-waste visit]]></title><description><![CDATA[This week, we dig deeper into low-level software architecture for bringing together a patchwork of old electronics.]]></description><link>https://littlecloud.ngo/p/build-log-7-sketching-firmware-e</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-7-sketching-firmware-e</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 09 Sep 2026 13:50:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!j9UW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><span>daemon</span></strong></p><p><span>Thought a bit more lately about how to organize the low-level software responsible for recruiting and orchestrating diverse worker devices, such as old smartphones, tablets, laptops, desktops, and servers. This software infrastructure layer that sits below the actual user-facing apps has a few components. First, there&#8217;s some kind of daemon shipped to the worker devices to get them to participate in the cluster and listen for jobs. Second, there&#8217;s the firmware flashed onto the microcontrollers (MCU) responsible for emulating various USB devices. Third, there&#8217;s some process on the microprocessor (MPU) that&#8217;s responsible for talking to the previous two and managing them.</span></p><p><span>Let&#8217;s zoom in on the first item, the payload shipped to the worker devices. Its purpose is to tell the MPU about what sorts of resources are available locally, and be able to take on various kinds of processing job on the worker device it&#8217;s hosted on. This roughly corresponds to a Kubelet in the world of Kubernetes, but there&#8217;s no way we&#8217;ll touch that bloated unwieldy ecosystem to link up devices revived from a junk drawer. I was thinking maybe we could write a minimal worker daemon in Rust, such that we can then compile it into a lean binary for any relevant worker architecture.</span></p><p><span>To allow the worker daemon to natively tap into as much hardware as possible, we can wrap the shared logic into a minimal platform-specific wrapper. On Android smartphones and tablets, this could mean an &#8220;app&#8221; with no UI, which can nevertheless grant our daemon access to the GPU, wireless, among others. On POSIX-capable systems like laptops, desktops, and servers, this might mean a systemd service wrapping the binary. The worker daemons might, in turn, launch battle-tested tools as subprocesses, such as llama.cpp and ripgrep, as a way to harness local hardware resources using existing libraries. The worker daemon could preserve the underlying tools&#8217; standard APIs, such as the OpenAI-compatible endpoints for LLM inference, or it could abstract these into uniform jobs and resources.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9mbL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9mbL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9mbL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9mbL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9mbL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9mbL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1345972,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/214888020?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9mbL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9mbL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9mbL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9mbL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F181645bf-1fc2-40e8-b598-b30617582e0f_4032x2268.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Structure an on-device daemon as a shared core in a platform-specific wrapper?</figcaption></figure></div><p></p><p><strong><span>crustacean</span></strong></p><p><span>I went through the rustlings project again over a couple days, as my knowledge of the Rust language was, well, rusty. It&#8217;s a fantastic learning resource, consisting of just under 100 tiny exercises. In each exercise, you get a file with certain compiler or runtime errors, and you need to fix those issues before moving on to the next puzzle. There are a few chunkier quizes after larger groups of chapters, and each exercise also has a hint that tends to link to the relevant documentation.</span></p><p><span>Going through it again was so much fun, probably the most fun I had &#8220;at work&#8221; in a while, thanks to the self-contained nature of the puzzles, the progress bar nudging you to complete all challenges, and the smooth increase in difficulty. At the end, you get a visit from a crab in your terminal, bringing you more obligatory puns.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RxXt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RxXt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png 424w, https://substackcdn.com/image/fetch/$s_!RxXt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png 848w, https://substackcdn.com/image/fetch/$s_!RxXt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png 1272w, https://substackcdn.com/image/fetch/$s_!RxXt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!RxXt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png" width="1456" height="914" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:914,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:649131,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/214888020?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RxXt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png 424w, https://substackcdn.com/image/fetch/$s_!RxXt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png 848w, https://substackcdn.com/image/fetch/$s_!RxXt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png 1272w, https://substackcdn.com/image/fetch/$s_!RxXt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555b51a1-6095-4d8b-afe5-3a3c601e9779_3420x2146.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The crab.</figcaption></figure></div><p></p><p><strong><span>llms</span></strong></p><p><span>The experience above helped me realize how much I missed actual programming rather than manipulating systems by chatting with an intermediary LLM. I had a similar experience a few months ago, when I was shocked when I realized that I really enjoyed creating an actual slide deck, but mostly because of the direct interaction with the object of work. Extensive mediation makes you feel numb, while direct and reactive interfaces support states of flow.</span></p><p><span>Beyond the personal satisfaction angle, I also grew more skeptical lately about the long-term maintainability of projects developed with heavy LLM involvement. Actually sitting with the problem, even if tedious or mechanical at times, helps you incrementally build valuable context. And if you aim to be involved with maintaining a project, you might as well understand it deeply. What I can&#8217;t build, I don&#8217;t understand. And why would I take the time to use a system you haven&#8217;t taken the time to develop.</span></p><p><span>Anyway, I wanted to pull together those few strings related to using LLMs into a coherent policy for this project, partly inspired by Rust&#8217;s own. It&#8217;s okay to use LLMs to study new topics and debug systems you&#8217;ve built, but no synthetic content should end up in the final product. It&#8217;s okay to use LLMs to prototype and experiment with different ways of implementing functionality, but the end result should be completely hand-written, someone should be responsible for it. Also, even if education and experimentation are allowed uses of LLMs, the used models must be open weights. This is meant to prefigure the practice of actually relying on local compute.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pIIL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pIIL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pIIL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pIIL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pIIL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!pIIL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1333089,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/214888020?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!pIIL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pIIL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pIIL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pIIL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b8f71cf-73e9-46de-800f-45407c3e4586_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Basically, LLMs are okay for learning and prototyping, but they must be open weights.</figcaption></figure></div><p></p><p><strong><span>firmware</span></strong></p><p><span>Here&#8217;s an example of a way in which I plan to use open weights LLMs the moment the development boards I ordered arrive. The firmware we&#8217;ll need to flash on the MCUs connected to the worker devices via USB will need to be very good at controlling the physical silicon blocks (PHYs) dedicated to USB communication. There are a few promising libraries and stacks that might be able to grant us control over the USB PHYs found in the incredibly cost-effective MCUs manufactured by WCH.</span></p><p><span>First, there are the examples shipped by WCH itself, but they appear to be little more than flaky demos. Second, there&#8217;s CherryUSB and lwIP, libraries grown out of Asian hardware communities with strong support for WCH chips, but they might be quite low-level. Third, there&#8217;s the option to use those two libraries as part of the real-time OS called RT-thread, but it might add bloat and overhead. Fourth, there&#8217;s the option to use the Rust library embassy, which would consolidate the codebase, but has only experimental support for WCH PHYs.</span></p><p><span>I&#8217;d like to have LLMs have a go at implementing dummy firmware behaviors using these various stacks, such as getting the MCU to act as a network switch across its USB ports, or emulating a dummy storage device when connected. And I&#8217;d study whether it actually worked, the number of lines of code each approach required, and the general shape of the resulting implementation. I wouldn&#8217;t use those rapid prototypes as part of the final firmware that ships with the product. Instead, I&#8217;d only throw LLMs at the problem to help triage the available options going forward based on concrete findings. And probably with a Flash or Air model variant out of the Chinese labs. Can&#8217;t wait for the development boards to arrive.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1kHL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1kHL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1kHL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1kHL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1kHL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!1kHL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:983102,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/214888020?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!1kHL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1kHL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1kHL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1kHL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fca11a9-22f3-4c32-a55e-7ca8a188ee98_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">LLMs can help look ahead on different implementation branches.</figcaption></figure></div><p></p><p><strong><span>e-waste</span></strong></p><p><span>I also had to drop by an e-waste processor this week, and I&#8217;m including it here as it&#8217;s reasonably related. We picked up a batch of servers to use it in our pilot course that will take place in three schools this coming academic year.  Each of them is a veritable mystery box, you don&#8217;t know whether you&#8217;ll get one packed with a dozen RAM sticks or whether even the fans will be missing. It&#8217;s also satisfying to learn where they came from, in our case it was mostly from a bank and a utility company.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j9UW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j9UW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg 424w, https://substackcdn.com/image/fetch/$s_!j9UW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg 848w, https://substackcdn.com/image/fetch/$s_!j9UW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!j9UW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!j9UW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:324248,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/214888020?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!j9UW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg 424w, https://substackcdn.com/image/fetch/$s_!j9UW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg 848w, https://substackcdn.com/image/fetch/$s_!j9UW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!j9UW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe807f734-dd41-47ea-a01c-5ab1fd89c2c0_2016x1134.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Distinguished CatOps Engineer, pictured on-call.</figcaption></figure></div><p><span>It&#8217;s interesting how some of them come preloaded with those hardware testing procedure that go beyond a basic POST. You get checks and result reports per component, down to individual fans. When recruiting worker devices in little cloud, we should probably test capabilities when trying to detect them in a similar way.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rmxf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rmxf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rmxf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rmxf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rmxf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!rmxf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg" width="1456" height="760" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:760,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:167262,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/214888020?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rmxf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rmxf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rmxf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rmxf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F107c646e-b9e0-4e53-b07b-fe4ab3859772_2048x1069.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Green check mark dopamine.</figcaption></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[build log #6 • revisiting interconnects, evaluation boards]]></title><description><![CDATA[This week, we reconsider options for having worker devices communicate with little cloud&#8217;s central processor.]]></description><link>https://littlecloud.ngo/p/build-log-6-revisiting-interconnects</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-6-revisiting-interconnects</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 02 Sep 2026 12:22:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gqPc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><span>spi</span></strong></p><p><span>Having run out of ideas for simplifying the enclosure (for now), I started digging a bit deeper into the actual protocols through which little cloud&#8217;s microprocessor (MPU) could communicate with the individual port microcontrollers (MCUs). The initial idea from a couple weeks back was that the MCUs could act as software-defined USB controllers driven by the MPU, such that they could present themselves as anything from a memory stick to a network card to the worker devices.</span></p><p><span>However, I&#8217;m not sure anymore about SPI as the protocol of choice for having the MPU communicate with the port MCUs. There are a few downsides. First, SPI would require the MPU to explicitly &#8220;chip-select&#8221; and query every MCU regularly, eroding bandwidth and increasing complexity. Second, we&#8217;d need to route 5 or so pins out of each MCU. Third, the USB driver ecosystem doesn&#8217;t natively overlap with SPI all too much. I did get to order an evaluation board predicated on this approach before growing skeptical about it, though.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gqPc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gqPc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gqPc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gqPc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gqPc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gqPc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:570052,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/213848437?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gqPc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gqPc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gqPc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gqPc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa25dfd97-db49-4bbc-9db4-052f03083616_4032x2268.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MPU could fan out to port MCUs via SPI.</figcaption></figure></div><p></p><p><strong><span>ethernet</span></strong></p><p><span>Another option for the MPU-MCU interconnect would be Ethernet. In this arrangement, the MPU and MCUs would connect their Ethernet pins to a dedicated on-board switch chip. 100 Mbps seems quite common as a choice of Ethernet speed on MCUs that implement it, which is higher than typical SPI speeds. Plus, it natively supports many-to-many communication, unlike SPI where only the MPU could initiate exchanges as master.</span></p><p><span>There is also USB/IP, which appears to enable the MCU USB controllers to appear as local, native ports to the MPU. It works by sending USB packets over a network, in our case a network that lives entirely on a PCB. Though USB/IP appears to only handle host roles natively, not so much device roles. We&#8217;d also incur the Ethernet switch on the BOM, and Ethernet on MCUs carries a premium. Could we do better?</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OMKY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OMKY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OMKY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OMKY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OMKY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OMKY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:993909,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/213848437?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OMKY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OMKY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OMKY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OMKY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F377d6396-b624-4fd1-a292-7ba5be4ed529_4032x2268.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MPU could fan out to port MCUs via Ethernet.</figcaption></figure></div><p></p><p><strong><span>usb</span></strong></p><p><span>What if we used the same stack and tooling to connect the MPU with the port MCUs as we do when connecting MCUs to worker devices? The MPU could be the USB host that connects to many MCU devices. Crucially, MCUs would need to have </span><em><span>two</span></em><span> independent USB buses, a device-only one oriented towards the MPU, and a dual-role one oriented towards the worker devices. An interesting precedent here are those PC-to-PC cables that present themselves as a device to both USB hosts and shuttle data through.</span></p><p><span>If we could reduce the interconnect protocol to USB, we&#8217;d get the benefit of only having to use one stack for both interconnect on the PCB and communication with worker devices. CherryUSB appears to be a very versatile USB library, with strong support for the cheap Chinese MCUs. USB would also only require us to mostly route 2 data pins only out of an MCU, easier than 5. Most MPUs already have dedicated USB silicon, which is not the case for Ethernet. The MCUs might be able to only lightly edit USB packets shuttling through.</span></p><p><span>We would still need to use a USB hub between the MCUs and the MPU, and two USB buses on an MCU is not too common. But these parts are below 2$ still. I also realized we definitely need high-speed USB at least for having laptops or desktops potentially boot a live OS off of little cloud. Full-speed only would take forever to load the OS in memory. USB hub concurrency is also much more mature than via SPI.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!a02-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a02-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!a02-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!a02-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!a02-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!a02-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:632143,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/213848437?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!a02-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!a02-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!a02-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!a02-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ecf59a3-b700-4c9d-a075-fcb7f6d4f234_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">MPU could fan out to port MCUs via USB.</figcaption></figure></div><p></p><p><strong><span>hub</span></strong></p><p><span>If we have a USB hub IC standing between the MCUs and the MPU, we could also route some of the hub buses out directly to ports. This could enable ports that can only connect to phone or tablet workers, not laptops or desktops, but for a very low cost. If MCUs with two high-speed USB buses grow into a meaningful cost center on the bill of materials, we could potentially offset this by only having </span><em><span>some</span></em><span> ports with full dual-role data capabilities. I&#8217;m not a fan of the broken symmetry across ports, although it could match the real-life e-waste distribution.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fo9j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fo9j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Fo9j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Fo9j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Fo9j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fo9j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:497765,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/213848437?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fo9j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Fo9j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Fo9j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Fo9j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e319d60-d074-4512-8a8f-2cfef82fcb1d_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">USB Hub chips are force-multipliers for USB host buses on an MPU.</figcaption></figure></div><p></p><p><strong><span>switches</span></strong></p><p><span>Another option I considered briefly that I wanted to mention in the logs was that of analog switches on the ports. Need to emulate a host? Connect the port to a hub IC. Need to emulate a storage device? Connect it to a read-only flash on the board. This would mean lowering the emulation logic down to the hardware level. Though I figured it would be unwieldy to manage and iterate on, besides disabling the option to emulate multiple devices on the same port. I&#8217;d rather stick to two-sided high-speed MCUs, potentially occupying only part of a USB hub to the MPU. Driven entirely by the MPU software.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kP0l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kP0l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kP0l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kP0l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kP0l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!kP0l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/efbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:902361,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/213848437?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kP0l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kP0l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kP0l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kP0l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbf4bea-5572-4509-afd1-222729549f80_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Analog switches to physically separate USB capabilities?</figcaption></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[build log #5 • modeling enclosure, simplifying manufacturing]]></title><description><![CDATA[This week, we model a few enclosures options for a device that turns your old electronics into your own little cloud.]]></description><link>https://littlecloud.ngo/p/build-log-5-modeling-enclosure-simplifying</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-5-modeling-enclosure-simplifying</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 26 Aug 2026 10:29:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/210d2309-ab22-4adf-b2bd-3578e8c02b42_2448x1428.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><span>modeling</span></strong></p><p><span>I took the general ideas for little cloud&#8217;s form factor from log entry #2 and implemented them in Onshape. The construction is pretty basic. Because we get lots of symmetry in a 1U rack-mountable box, we start by sketching out a quarter of both the inner and outer shells. We then flange from each towards the opposite plate.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IpiT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IpiT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png 424w, https://substackcdn.com/image/fetch/$s_!IpiT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png 848w, https://substackcdn.com/image/fetch/$s_!IpiT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png 1272w, https://substackcdn.com/image/fetch/$s_!IpiT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IpiT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png" width="1456" height="549" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:549,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:367970,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/212824784?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IpiT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png 424w, https://substackcdn.com/image/fetch/$s_!IpiT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png 848w, https://substackcdn.com/image/fetch/$s_!IpiT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png 1272w, https://substackcdn.com/image/fetch/$s_!IpiT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17b006bf-cac8-4a86-b02a-c7dad53b201b_3220x1214.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Quarter of the box as complementary metal sheets, plus a couple flanges on each. Bent and flat views.</figcaption></figure></div><p><span>Then, create mounting holes on the short and long sides. Also, we can remove material from the bends themselves, following the &#8220;fold it yourself&#8221; idea from a few weeks back.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nA9J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nA9J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png 424w, https://substackcdn.com/image/fetch/$s_!nA9J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png 848w, https://substackcdn.com/image/fetch/$s_!nA9J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png 1272w, https://substackcdn.com/image/fetch/$s_!nA9J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nA9J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png" width="1456" height="549" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:549,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:448352,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/212824784?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nA9J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png 424w, https://substackcdn.com/image/fetch/$s_!nA9J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png 848w, https://substackcdn.com/image/fetch/$s_!nA9J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png 1272w, https://substackcdn.com/image/fetch/$s_!nA9J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbffac9c8-5850-45a8-9efa-f276f98c81b6_3220x1214.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Mounting holes and bend material removal, still on a quarter of the box.</figcaption></figure></div><p><span>Then, mirror both inner and outer shells across the two base axes to get the actual clamshell box. Finally, create a through-all hole and pattern it linearly across the same axes to implement the modular mounting interface idea.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yq0D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yq0D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png 424w, https://substackcdn.com/image/fetch/$s_!Yq0D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png 848w, https://substackcdn.com/image/fetch/$s_!Yq0D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png 1272w, https://substackcdn.com/image/fetch/$s_!Yq0D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yq0D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png" width="1456" height="549" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:549,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1712781,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/212824784?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Yq0D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png 424w, https://substackcdn.com/image/fetch/$s_!Yq0D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png 848w, https://substackcdn.com/image/fetch/$s_!Yq0D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png 1272w, https://substackcdn.com/image/fetch/$s_!Yq0D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fa4e7d9-df7a-4ebd-bbbf-5e16184ed688_3220x1214.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Mirror it two times and you get the full box.</figcaption></figure></div><p></p><p><strong><span>simpler</span></strong></p><p><span>After seeing it take shape and bouncing ideas off of others, I decided to push for modifications related to the grill, supports, and size. When it comes to the grill, I realized that sheet metal costs are partially a function of the perimeter length of all cuts. A grill with a gazillion holes takes a toolhead more to cut out, keeping it busy instead of fulfilling other jobs. Also, even if punctured by a lot of holes, the grill&#8217;s remaining material might still pose resistance to the fans, reducing the volume of air they manage to move around worker devices per unit time. So we&#8217;ll go for a basic large hole instead.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4GUR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4GUR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png 424w, https://substackcdn.com/image/fetch/$s_!4GUR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png 848w, https://substackcdn.com/image/fetch/$s_!4GUR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png 1272w, https://substackcdn.com/image/fetch/$s_!4GUR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!4GUR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png" width="1456" height="558" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:558,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:581114,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/212824784?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4GUR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png 424w, https://substackcdn.com/image/fetch/$s_!4GUR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png 848w, https://substackcdn.com/image/fetch/$s_!4GUR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png 1272w, https://substackcdn.com/image/fetch/$s_!4GUR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a587c18-a5fd-4447-8040-51a229040251_3200x1226.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Basic fan cut-outs instead of galaxy-brained modular grids.</figcaption></figure></div><p><span>When it comes to the supports, I realized that it would be simpler to get hold of them through the same manufacturing process as the enclosure itself. We might as well just build them out of sheet metal while we&#8217;re at it, consolidating our supply chain. I played around with a few possible geometries, some requiring more material and bends than others, some requiring additional screws for mounting. I quite like the simplest one, two bends and no screws required. Instead, it seems to allow worker devices to securely rest on one side because of its bottom geometry and how it interacts with the enclosure. Move it around in your head.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1pPd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1pPd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png 424w, https://substackcdn.com/image/fetch/$s_!1pPd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png 848w, https://substackcdn.com/image/fetch/$s_!1pPd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png 1272w, https://substackcdn.com/image/fetch/$s_!1pPd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!1pPd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png" width="1456" height="521" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:521,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:554669,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/212824784?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1pPd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png 424w, https://substackcdn.com/image/fetch/$s_!1pPd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png 848w, https://substackcdn.com/image/fetch/$s_!1pPd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png 1272w, https://substackcdn.com/image/fetch/$s_!1pPd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc896efd-bda8-4f2d-9953-3516afcbbcde_3196x1144.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Have worker device supports share the same sheet metal process instead of galaxy-brained handle compatibility.</figcaption></figure></div><p><span>When it comes to size, I realized we can maintain server rack compatibility while making the enclosure smaller. A smaller enclosure appears more manageable for end-users, more in line with household e-waste statistics, and of course it would cost a bit less. We can then recover the rack-mountable property through a separate face plate that attaches to both the enclosure and the server rack, but only if needed. For lack of a more principled constraint, I then opted for the general size of &#8220;fits two standard fans side-by-side&#8221; for the main enclosure.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MS2L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MS2L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png 424w, https://substackcdn.com/image/fetch/$s_!MS2L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png 848w, https://substackcdn.com/image/fetch/$s_!MS2L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png 1272w, https://substackcdn.com/image/fetch/$s_!MS2L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!MS2L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png" width="1456" height="521" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:521,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:424584,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/212824784?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MS2L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png 424w, https://substackcdn.com/image/fetch/$s_!MS2L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png 848w, https://substackcdn.com/image/fetch/$s_!MS2L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png 1272w, https://substackcdn.com/image/fetch/$s_!MS2L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a503cc4-da1d-4e5a-b193-b53b70b49f3c_3196x1144.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Relaxing constraints, the box itself doesn&#8217;t need to be rack-mountable if we could optionally get a face plate adapter.</figcaption></figure></div><p></p><p><strong><span>quote</span></strong></p><p><span>I was curious to run the current 3D models through JLCCNC for an instant quote at 1K volume. If we go for 1mm aluminum for the shells, we get a bit over 3$ per shell. Opting to laser-engrave the outer shell as a finish gets us instead to 5$. That finish seems cheaper, more durable, and more recyclable than layering silkscreen paint on the enclosure, and it would be neat to be able to make the device explain itself through labels and visual cues. The supports would be a bit over 0.5$ per piece, perhaps these could be stainless steel. The cheapest delivery option is in the same ballpark as the shells, but it would take forever to arrive. I signed up for a course on operating the CNCs at a local makerspace to be able to prototype faster. I&#8217;ll share how that goes in a future update.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!55JE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!55JE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png 424w, https://substackcdn.com/image/fetch/$s_!55JE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png 848w, https://substackcdn.com/image/fetch/$s_!55JE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png 1272w, https://substackcdn.com/image/fetch/$s_!55JE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!55JE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png" width="1456" height="627" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:627,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:409926,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/212824784?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!55JE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png 424w, https://substackcdn.com/image/fetch/$s_!55JE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png 848w, https://substackcdn.com/image/fetch/$s_!55JE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png 1272w, https://substackcdn.com/image/fetch/$s_!55JE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa500ff1e-b8c0-4b3f-babe-f73a263af30c_2876x1238.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Getting a sense of enclosure costs at 1K volume with the approach above. Yikes for the weight.</figcaption></figure></div><p></p><p><strong><span>simplest</span></strong></p><p><span>Then I thought, what if the case would just be the bare PCB and a top cover on standoff spacers? It seems there&#8217;s no hard regulatory requirement for a box to explicitly be enclosed on all sides. The PCB would match the footprint of a flat metal sheet sitting above it on 4-6 standoffs. The sheet would retain the fan cut-outs and support mounts. Though, if we use standoffs, we might as well use them as supports, too.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ooyV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ooyV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png 424w, https://substackcdn.com/image/fetch/$s_!ooyV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png 848w, https://substackcdn.com/image/fetch/$s_!ooyV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png 1272w, https://substackcdn.com/image/fetch/$s_!ooyV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ooyV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png" width="1456" height="769" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:769,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:381560,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/212824784?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ooyV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png 424w, https://substackcdn.com/image/fetch/$s_!ooyV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png 848w, https://substackcdn.com/image/fetch/$s_!ooyV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png 1272w, https://substackcdn.com/image/fetch/$s_!ooyV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98d5089d-ef8d-4c84-a682-977609442a81_2364x1248.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Can it get any simpler?</figcaption></figure></div><p><span>I&#8217;d rather have the whole arrangement be incredibly cheap than feel premium, given it&#8217;s intended for reviving e-waste. Running the only metal plate through JLCCNC, we get an instant quote of about 1.5$ at 1K volume for no finish. The 4-layer PCB with the same outer dimensions is a bit pricier at around 4$, but I think it would still be cheaper than a smaller PCB combined with an extra metal plate on the bottom and more stand-offs involved. Same rack-mountable face plate adaptation as above, but hugging the top and bottom sides with some tiny flanges instead.</span></p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gjx_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd2d113-0b36-411b-a8d3-ad145aa4afd4_2868x472.png 424w, https://substackcdn.com/image/fetch/$s_!Gjx_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd2d113-0b36-411b-a8d3-ad145aa4afd4_2868x472.png 848w, https://substackcdn.com/image/fetch/$s_!Gjx_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd2d113-0b36-411b-a8d3-ad145aa4afd4_2868x472.png 1272w, https://substackcdn.com/image/fetch/$s_!Gjx_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd2d113-0b36-411b-a8d3-ad145aa4afd4_2868x472.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gjx_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd2d113-0b36-411b-a8d3-ad145aa4afd4_2868x472.png" width="1456" height="240" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5dd2d113-0b36-411b-a8d3-ad145aa4afd4_2868x472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:240,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:220724,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/212824784?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd2d113-0b36-411b-a8d3-ad145aa4afd4_2868x472.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Gjx_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd2d113-0b36-411b-a8d3-ad145aa4afd4_2868x472.png 424w, https://substackcdn.com/image/fetch/$s_!Gjx_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd2d113-0b36-411b-a8d3-ad145aa4afd4_2868x472.png 848w, https://substackcdn.com/image/fetch/$s_!Gjx_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd2d113-0b36-411b-a8d3-ad145aa4afd4_2868x472.png 1272w, https://substackcdn.com/image/fetch/$s_!Gjx_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd2d113-0b36-411b-a8d3-ad145aa4afd4_2868x472.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div><figcaption class="image-caption">The bottom face could just be the main PCB, here with a quote at 1K volume.</figcaption></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[build log #4 • hardware requirements, data flow]]></title><description><![CDATA[This week, we dive into the kinds of chips we need for a device that turns your old electronics into your own little cloud.]]></description><link>https://littlecloud.ngo/p/build-log-4-hardware-requirements</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-4-hardware-requirements</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 19 Aug 2026 09:08:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qWK_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><span>data</span></strong></p><p><span>Let&#8217;s think through the structure of the printed circuit board (PCB) that will act as the physical core of little cloud. We likely need an array of USB ports through which diverse worker devices will be recruited into a unified cluster. USB is very versatile, as it can support internet tethering, storage media, debug shells, keyboard input, video output, and many others. To decouple hardware requirements from the exact software methods we&#8217;ll end up using for handling various classes of worker devices, we can keep our options open and simply mandate that every port should be able to present itself as anything the USB standard supports.</span></p><p><span>USB is an asymmetric protocol that requires an explicit host and device. Most laptops, and virtually all desktops and servers, are hard-coded to only act as hosts. Old smartphones and tablets are hard-coded to only act as devices, while modern versions can act as both. The chips behind standard USB hubs are typically hard-coded to connect many USB devices to one USB host. This means we can&#8217;t really get away with just using one hub chip to back all our ports, because then little cloud wouldn&#8217;t be able to easily connect to many laptops, desktops, and servers over USB.</span></p><p><span>What we could do is have one cheap &#8220;dual-role data&#8221; microcontroller (MCU) per port, whose role would only be to present itself as anything that&#8217;s needed and act as a simple bridge to some beefier integrated circuit (IC) that manages them all. Typical USB connections span &#8220;full speed&#8221; (12 Mbps), &#8220;high speed&#8221; (480 Mbps), and &#8220;super speed&#8221; (5 Gbps). The upstream link from the port MCU to its beefier manager might be SPI (1 to 100 Mbps), on-board Ethernet (100 or 1000 Mbps), or actually one of the same USB variants above. I think we could go for high speed on the port and SPI on the manager link initially.</span></p><p><span>That said, I did manage to find a very narrow niche of MCUs that manage to pack insanely many USB buses on the same chip. WCH&#8217;s </span><a href="https://www.wch.cn/products/CH645.html"><span>CH645</span></a><span> for instance, whose product page isn&#8217;t even available in English at the moment, boasts 8 independent buses, 4 of which can effectively be dual-role data, with the other 4 host-only. With a niche MCU like this, we&#8217;d get extreme design consolidation and cost reduction, at the cost of a more brittle supply chain. Would it be worth it? Not sure, we might regret going for this if supply suddenly becomes unavailable. But only needing one dirt-cheap MCU </span><em><span>per product</span></em><span> instead of one </span><em><span>per port</span></em><span> is appealing for sure.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qWK_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qWK_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qWK_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qWK_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qWK_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qWK_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:615790,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/211829323?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qWK_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qWK_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qWK_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qWK_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f9a8d8-9a65-4d83-b20d-022c90b48fde_4032x2268.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Thinking through how the USB ports could be independently customized, based on the kinds of worker device connected to them. </figcaption></figure></div><p></p><p><strong><span>power</span></strong></p><p><span>Not only is USB versatile in terms of what kind of data is being transferred, but it is also versatile in terms of what power it can carry. Older USB can do 5V@0.5A (2.5W) all the way to 5V@1.5A (7.5W). On a Type-C connector with a proper power delivery (PD) controller behind it, two devices can negotiate dynamically up to 20V@3A (60W), and even higher if the cable itself is marked electronically.</span></p><p><span>In addition, modern USB can flip power direction relative to data roles, such that the device can power the host. It can also negotiate an emergency contract where power flips if the wall-plugged device loses its power while a battery-enabled one carries on. As with data, let&#8217;s reduce coupling between hardware and software constraints and push for ports that are able to simply do whatever is needed when it comes to power.</span></p><p><span>However, we can cut a corner here and limit ourselves to 5V only across ports. This is partly to avoid having to add DC-DC converters and further support circuitry on each separate port that would&#8217;ve allowed it to independently climb up to 20V. After all, we need to charge phones and tablets as slowly as possible anyway, in order to avoid heat buildup and maintain battery life. We need to be able to dynamically charge them a bit faster than they drain, though, so hard-coding 5V@0.5A wouldn&#8217;t cut it. The 5V simplification largely does lock us out of being able to power laptops through vendor-specific adapters, though I think the vast majority of people just use the original power-brick cables. We&#8217;re not touching AC in this version, so anything other than a phone or tablet needs to separately plug into its own power outlet.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GJ1J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GJ1J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GJ1J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GJ1J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GJ1J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!GJ1J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:499321,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/211829323?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GJ1J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GJ1J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GJ1J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GJ1J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d8300f5-a03b-43e5-bd6f-0190eb7ff25a_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Thinking through how little cloud could power worker devices, and how it could rely on them if its own power goes out.</figcaption></figure></div><p></p><p><strong><span>manager</span></strong></p><p><span>The manager chip needs to be a bit beefier than the port-facing MCU(s). One option is to go with a tiny Linux-capable microprocessor (MPU) with co-packaged RAM to avoid having to route (and buy) dedicated RAM chips. Allwinner MPUs seem decent at  around 4$ at 1K volume via Chinese distributor LCSC, depending on the exact model. They have 64-256 MB of RAM, &gt;1GHz processing, and all kinds of handy peripherals. Our bill of materials (BOM) could swallow ~4$ given it&#8217;d be a single MPU per board. Compare that to per-port MCUs that plummet under ~1$ really fast at higher volumes.</span></p><p><span>We could also just go with a beefier MCU for the manager. There are ecosystems like Zephyr OS, backed by the Linux Foundation, which provide mature networking stacks and other handy utilities designed to fit in the KBs of RAM of an MCU. Going for an MCU brain would also consolidate the software toolchain, and might constantly force the removal of non-essential features to keep things lean. I&#8217;m not sure if it&#8217;d be beefy enough to orchestrate and network the worker devices, though. Plus I think targeting an MCU with an Yggdrasil build would be extremely difficult, even though WireGuard has been ported to MCUs successfully as another VPN technology.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yj1G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yj1G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Yj1G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Yj1G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Yj1G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yj1G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:846268,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/211829323?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Yj1G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Yj1G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Yj1G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Yj1G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436a74d0-250e-44cf-bb4a-b32c8e856fb3_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Thinking through the brains of the operation, probably some microcontroller or microprocessor.</figcaption></figure></div><p></p><p><strong><span>auxiliary</span></strong></p><p><span>Besides the port MCUs and the manager MPU, the top signal layer will likely need to be populated with a few other things as well. A few gigabytes of persistent storage in some flash chip would be handy for storing prebuilt images or binaries for pushing on worker devices during recruitment. We&#8217;d also have the miniPCIe slot gated by a pin multiplexer for accommodating future long-range radio, as foreshadowed in earlier updates. We could also throw in an RJ45 port, integrated into a MagJack to avoid worrying about magnetics ourselves, as an internet uplink for when we lack worker devices equiped with radios of their own, such as some desktops and most servers.</span></p><p><span>We also need some components to handle the incoming power responsible for little cloud&#8217;s own chips, as well as for any phone and tablet workers it powers. We settled on having laptops, desktops, and servers get their own power separately, though maybe we could at least integrate some hidden tray for storing the laptop power-bricks. Little cloud should be able to negotiate as much power as it needs via PD from its upstream USB-C power supply, such that it can charge phones and tablets a hair faster than they drain. It can locally negotiate above 5V, but we should clean that up and convert it to 5V as soon as possible.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T6ll!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T6ll!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!T6ll!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!T6ll!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!T6ll!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!T6ll!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:769414,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/211829323?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T6ll!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!T6ll!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!T6ll!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!T6ll!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28dd6f10-72fc-4714-8107-c380442574ba_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Thinking through what other kinds of components we&#8217;d need on the circuit board given our constraints.</figcaption></figure></div><p></p><p><strong><span>stackup</span></strong></p><p><span>It might drastically simplify routing to then dedicate an entire internal PCB layer to our unified 5V, turning it into our power plane. Then, from anywhere on the top signal layer, we can use several vias and a copper pour to tap into 5V directly. Similarly, a ground plane would also be pretty handy for routing, and also useful for shielding during certification tests. We mainly get the bottom signal layer for crossing below other intersecting traces, maybe also with some extra writing on that bottom silkscreen. We&#8217;d try to use co-packaged RAM and avoid ultra-dense footprints in order to get away with just two signal layers and simpler signal routing. This gets us better hand-solderability and repairability as a bonus.</span></p><p><span>That would leave us with four PCB layers in total. Even if a bit more expensive than bare 2-layer boards, I think it&#8217;d vastly simplify the design, especially given the non-trivial currents we&#8217;d be moving around. These would have otherwise required chunky traces all over the place if it weren&#8217;t for a dedicated power plane. Plugging some numbers into JLCPCB&#8217;s online price calculator, we find that a 45 x 5 cm 4-layer board with default settings is around 2.5$ at 1K volume, compared to 1.7$ for a 2-layer one. I&#8217;ll take the easier power routing, especially given the MCUs and MPU would probably be at least 10$ together.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dsmW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dsmW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dsmW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dsmW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dsmW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!dsmW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:599702,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/211829323?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dsmW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dsmW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dsmW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dsmW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47fa5a0-e500-4dde-925c-d243ef648a4c_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Thinking through the circuit board layer stackup, probably two outer signal planes, and two internal power ones.</figcaption></figure></div>]]></content:encoded></item><item><title><![CDATA[build log #3 · user journey, network topology]]></title><description><![CDATA[This week, we'll sketch out the way users would actually reach services hosted on their little clouds.]]></description><link>https://littlecloud.ngo/p/build-log-3-user-journey-network</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-3-user-journey-network</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 12 Aug 2026 07:39:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CGwL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><span>fork</span></strong></p><p><span>I&#8217;ve recently been thinking about a tension inherent to little cloud and how to resolve it. On one hand, it&#8217;s important for it to be convenient to set up and use, such that anyone could turn their unused electronics into platforms they can use and rely on. On the other hand, the spirit of the project is in large part about resilience: hardware you own, not corporate data centers; mesh networks, not internet service providers; solar panels, not the energy grid.</span></p><p><span>Here&#8217;s my current best guess as to how to get both the convenience of an integrated solution and the resilience of grassroots infrastructure. There could be two ways for someone to access the platforms hosted on their own little cloud or those of their friends. On one hand, consider a seamless option that can be configured in under a minute, but against which companies and governments still hold the leverage of a kill switch. On the other hand, consider a resilient option that takes ten minutes to initially set up, but which then runs entirely independent from mainstream internet infrastructure.</span></p><p><span>Crucially, it would be possible to upgrade your setup to resilient mode later, such as during an internet blackout or under a compute surveillance regime, based on instructions bundled with the device itself. The mere presence of a credible option to switch away from classic infrastructure might be a partial deterrent against overreaching authorities.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CGwL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CGwL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CGwL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CGwL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CGwL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CGwL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:485707,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/210866071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CGwL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CGwL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CGwL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CGwL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34bd2d0-99e6-4874-9022-5829e2c65df6_4032x2268.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Splitting the journey across equivalent seamless and resilient paths.</figcaption></figure></div><p></p><p><strong><span>seamless</span></strong></p><p><span>For the seamless path, I&#8217;m thinking of something along the following vignette. Your little cloud has picked a random identifier during its initial setup, and you can now use your phone to access it by heading over to the matching subdomain of littlecloud.ngo. Because your phone has been previously bound to your little cloud&#8217;s account using passkeys, you can then sign in without using a password or magic link. That&#8217;s it.</span></p><p><span>On this seamless path, however, we rely on: third-party DNS resolvers to recognize the domain, third-party certificate authorities for the HTTPS certificate, a centralized gateway into the little network, as well as the tons of third-party plumbing between these components. But this allows us to simply visit our URL from any device and just sign in, all without having to remember a password.</span></p><p><span>Unbeknownst to disinterested users, the random identifier of their little cloud simply encodes its Yggdrasil address. Yggdrasil is similar to a VPN like Tailscale, in that it allows nodes across different local networks to talk to each other. However, unlike Tailscale, it has no centralized coordination server. Who gives out names to each node then? They pick their own random names. Who tells nodes what other nodes are on the network? They gossip with each other automatically to discover peers. The subdomain namespace in the vignette above simply acts as a convenient gateway into the Yggdrasil network, analogous to Tailscale Funnel or Cloudflare Tunnels.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vC_s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vC_s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vC_s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vC_s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vC_s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!vC_s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:580332,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/210866071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vC_s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vC_s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vC_s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vC_s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf48dea0-a56c-4edf-bcb5-a73907f641d5_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Drawing inspiration from tunneling solutions for the seamless path.</figcaption></figure></div><p></p><p><strong><span>resilient</span></strong></p><p><span>Okay, so you can head over to a URL and sign into your little cloud. But you&#8217;re still at the mercy of various corporate and government actors when trying to remotely access your own tiny cluster or that of your friends. That doesn&#8217;t feel quite right. Fortunately, it only takes ten minutes to make your connection truly resilient, and you&#8217;d be guided step-by-step along the process.</span></p><p><span>First, install Yggdrasil to be able to bypass the gateway and connect directly to little clouds. Second, register a private certificate authority in your device settings, to be able to recognize certificates burned into the little clouds directly. Third, configure your device to use your little cloud&#8217;s own DNS resolver to be able to reach the same domains as before. Assume further that you have a wired, WiFi, or long-distance radio connection to a little cloud, and that it has been equipped with long-distance radio to reach your own one over the mesh network.</span></p><p><span>With such a setup, you&#8217;d be able to sign into your little cloud or those of your friends in the same exact way you were doing before. Only that in this advanced mode, you wouldn&#8217;t encounter any of the traditional third-party middlemen of mainstream internet. And it&#8217;d be okay to ignore this more involved process until the situation actually calls for it. Until then, just go to your URL and press a button to sign in.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D9Bq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D9Bq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!D9Bq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!D9Bq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!D9Bq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!D9Bq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:423847,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/210866071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!D9Bq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!D9Bq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!D9Bq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!D9Bq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565e1cc3-42ee-4d46-b6ba-d095eb1b99f0_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The resilient path should be able to run on grassroots infrastructure.</figcaption></figure></div><p></p><p><strong><span>binding</span></strong></p><p><span>What about the initial sign up before being able to sign into your account? One option would be to allow the owners of a little cloud to configure it such that anyone who can reach it can create an account. I&#8217;d personally not be too fond of this setup, but people should be free to decide what they&#8217;re willing to do with the devices they own.</span></p><p><span>Another option would be to take advantage of the inherent access controls inherent to the physical device. If it&#8217;s running inside a home, for instance, physical access is already restricted to a trusted circle of family and friends. So what if you had to initially be present near little cloud for getting access to it? Inherit the culture-specific access controls implicit to different types of spaces directly.</span></p><p><span>Maybe to bind your client device to little cloud, you initially need a wired connection to one of its many ports. For adding new devices, maybe you either connect your already-paired and not-yet-paired devices at the same time. Or scan a code between them. Either way, identity should remain federated to avoid having to &#8220;sign in with&#8221; a centralized identity provider.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GC5o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GC5o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GC5o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GC5o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GC5o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!GC5o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:496156,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/210866071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GC5o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GC5o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GC5o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GC5o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ea68f7-2349-4f56-8c67-e9a3fb166c77_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Physical proximity to little cloud as authorization gate.</figcaption></figure></div><p></p><p><strong><span>setup</span></strong></p><p><span>Before you can sign into your account, and before you can create an account, you need to first turn your little cloud on and configure it in the first place. This boils down to connecting it to the network and adding your old electronics as worker devices.</span></p><p><span>There are a few options I considered for a setup wizard. Maybe you turn a worker device with a screen into a control panel. But that requires you to have already recruited it and to have such a screen-enabled worker device. Maybe you hook it up to a monitor or TV to double as a media system. But then you might also need a keyboard, which gets awkward. I&#8217;d like to avoid dedicated WiFi or Bluetooth for the first version, which rules out access points and smart-home-like apps as setup pathways. On-device screens and buttons might be frustratingly tiny on a 1U-tall rack-mountable box.</span></p><p><span>The more promising option is inspired by reMarkable&#8217;s tablet ecosystem. It has this interesting web interface that you can access from any browser once you have a wired connection to the tablet. People could use their existing daily-driver devices to configure little cloud by simply connecting to it via a single USB cable and visiting a URL. There, you could handle these initial device setup issues, such as adding worker devices or using their existing radios to connect to WiFi or mobile data.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JPM4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JPM4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JPM4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JPM4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JPM4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!JPM4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:498006,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/210866071?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JPM4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JPM4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JPM4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JPM4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8690a5ca-781a-4df1-86db-ece87503e4a8_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Drawing inspiration from reMarkable for web interfaces over USB tethering.</figcaption></figure></div>]]></content:encoded></item><item><title><![CDATA[build log #2 · form factor, enclosure process]]></title><description><![CDATA[This week, we explore possible form factors for the device that turns your old electronics into your own little cloud.]]></description><link>https://littlecloud.ngo/p/build-log-2</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-2</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 05 Aug 2026 08:38:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OR56!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><span>bays</span></strong></p><p><span>These first few log entries will continue to break down the concept of a device that turns your old devices into a personal cloud.</span></p><p><span>One option I&#8217;ve considered for the form factor of &#8220;little cloud&#8221; is that of a network-attached storage unit, or NAS. These typically house a bunch of HDDs or SSDs in neat little bays. The idea here was that you could slot in your old smartphones, tablets, and laptops into dedicated bays. The upside being that it would wrap the mess of different devices into a visually coherent system of matching containers.</span></p><p><span>However, there are quite a few downsides. First, each worker device would require its own bay, increasing the manufacturing costs of a product that is explicitly about reviving e-waste. Second, because smartphones, tablets, and laptops would require bays of different sizes, it would add friction to the process of integrating a patchwork of worker devices. Third, I don&#8217;t think wrapping each device into its own container is too useful for airflow and cooling.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OR56!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OR56!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OR56!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OR56!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OR56!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OR56!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:697184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/209896856?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OR56!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OR56!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OR56!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OR56!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a1399d5-c89e-44a8-92b8-f1a26b8a4932_4032x2268.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">NAS bays as inspiration for housing multiple devices.</figcaption></figure></div><p></p><p><strong><span>stations</span></strong></p><p><span>Another possible form factor would be the general category of charging stations, docks, and stands. Many of these are already trying to accommodate a range of consumer devices with different form factors, if you think about it. They also tend to have many ports, such that they can physically connect to each and every device, though newer ones lean into wireless charging.</span></p><p><span>In contrast to the bay systems, these charging stations are quite efficient in terms of material. Each device barely gets a flap to rest on. Because of that, they&#8217;re also not too prescriptive about exactly what kind of device you&#8217;re allowed to connect where.</span></p><p><span>When it comes to cooling, I&#8217;m not too sure. This would be a situation where the components that dissipate heat (i.e., the worker devices) would be somewhat outside of our device&#8217;s main enclosure, merely resting on top of it. Contrast this to desktop cases or rack-mounted servers, where the hot components are often in the middle of an air tunnel whose geometry has been carefully tuned. Exposing junk electronics right on top might also create some amount of visual clutter, though maybe at least cables could run down the back side.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mEwB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mEwB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mEwB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mEwB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mEwB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!mEwB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:510402,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/209896856?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mEwB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mEwB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mEwB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mEwB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58227410-8960-4ff7-812c-81a93e11db34_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Charging stations as inspiration for connecting diverse devices.</figcaption></figure></div><p></p><p><strong><span>racks</span></strong></p><p><span>In the previous log entry, we emphasized the overlap in responsibility between little cloud and traditional enterprise equipment, such as network switches. Rack-mountable equipment has been optimized to allow for connectivity between densely packed devices. Accordingly, they tend to boast dozens of ports on their front and back panels, always accompanied by clear labels and grouped using visual cues.</span></p><p><span>It would be nice if little cloud adopted the general form of a charging station, but whose base housing happened to also be compatible with rack-mounted standards. This would allow it to be used at home by placing small consumer e-waste on top of it, but it would also allow it to be used in actual racks filled with enterprise e-waste.</span></p><p><span>The latter would make this product slot right into a </span><a href="https://aptecom.org/cursuri/"><span>related initiative</span></a><span> I&#8217;m involved with, where we&#8217;re redirecting data center e-waste into high schools and universities for students to run their own local platforms on them. We&#8217;d get a unified plug-and-play device for reviving e-waste ranging from smartphone all the way to server caliber. That level of consolidation would be pretty sweet.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-4Ow!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-4Ow!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-4Ow!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-4Ow!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-4Ow!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!-4Ow!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:503842,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/209896856?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-4Ow!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-4Ow!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-4Ow!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-4Ow!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70389c9-e848-464b-8af9-1344e9c1331e_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Rack-mountable equipment as inspiration for managing dense connectivity.</figcaption></figure></div><p></p><p><strong><span>process</span></strong></p><p><span>3D printing the enclosure won&#8217;t cut it, both because it doesn&#8217;t scale favorably with volume, but also because we might be dealing with quite a bit of power inside this enclosure. Typical filament isn&#8217;t really well-suited for this, and this would turn into a real liability during product safety certification. Injection molding is how plastic enclosures scale instead, but the upfront cost for a production run is prohibitive.</span></p><p><span>Sheet metal is quite interesting here, it&#8217;s a bit like folding cardboard but instead with aluminum or steel. Excellent thermal conductivity. Cheap to prototype, but also scales favorably with higher volumes. If our geometry boils down to a basic box with maybe some flaps and legs, then manufacturability wouldn&#8217;t be an issue. We don&#8217;t really need the ability of 3D printing to create intricate internal structures.</span></p><p><span>I found some fascinating precedents from Teenage Engineering that exploit the similarity between sheet metal and folding cardboard. Their </span><a href="https://teenage.engineering/products/computer-1"><span>computer-1</span></a><span> desktop case ships with metal sheets that they&#8217;ve cut with a CNC, but that they haven&#8217;t yet actually bent. The end-user is able to bend the sheets and screw them together, probably creating some degree of Ikea effect in the process. They did the same with their </span><a href="https://teenage.engineering/products/po/modular"><span>pocket operator modular</span></a><span> series, they ship the flat sheets and call on the end-user for the final assembly. Such a DIY option might simplify manufacturing and delivery.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nb-Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nb-Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nb-Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nb-Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nb-Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nb-Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:633042,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/209896856?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Nb-Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nb-Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nb-Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nb-Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe727d519-8216-48ea-a053-5735fa3a4492_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Unfolding a rack-mountable box in different ways.</figcaption></figure></div><p></p><p><strong><span>modularity</span></strong></p><p><span>For computer-1, the top handles mount to a grill pattern drilled into the metal sheet. I think it was just a neat way for them to mount the handles without digging further holes outside the regular grid. However, think about what such geometry could enable in our case. You could move the flaps for worker devices around freely, depending on their unique shapes and sizes. You could also take them off entirely if doing a rack-mounted setup with servers only.</span></p><p><span>If mirrored on the bottom side, the hole matrix could also allow the legs to be adjusted. This could make little cloud sit well on either a flat surface or an old desktop that has been recruited into the cluster, as well. Internally, you could also mount stand-offs against the same grill to hold circuit boards, fans, and other components. Not to speak of the original purpose of the computer-1 grill, which was probably airflow.</span></p><p><span>Pulling these threads back together, we get to what looks like a somewhat large charging station built out of sheet metal, whose base enclosure happens to be rack-mountable. Its top and bottom sides are perforated to allow for flexible mounting options, while its front and back sides have clear labels that organize its many ports. Finally, it might be available in the form of a cheaper DIY kit that you assemble yourself.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JFJZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JFJZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JFJZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JFJZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JFJZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!JFJZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:618238,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://littlecloud.ngo/i/209896856?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JFJZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JFJZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JFJZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JFJZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32008042-2c0b-45de-b234-783a9cd251b2_4032x2268.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Thinking through the functionality that grill patterns could unlock.</figcaption></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[build log #1 · product brief, development roadmap]]></title><description><![CDATA[This week, we lay out a roadmap for building a device that turns your old electronics into your own little cloud.]]></description><link>https://littlecloud.ngo/p/build-log-1</link><guid isPermaLink="false">https://littlecloud.ngo/p/build-log-1</guid><dc:creator><![CDATA[Paul Bricman]]></dc:creator><pubDate>Wed, 29 Jul 2026 15:13:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ybg2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>focus</strong></p><p><span>This newsletter is about the journey of bringing to life a physical product from scratch, from concept all the way to manufacturing.</span></p><p><span>The product we&#8217;ll be building along the way is a device that allows you to take your existing, old electronics and instantly turn them into your own little cloud.</span></p><p><span>Think about all the smartphones, tablets, laptops, and maybe even desktops that are sitting in your junk drawer and simply collecting dust. What if you could connect these devices you already own into a cluster of tiny computers that can host all kinds of platforms for you? What if you didn&#8217;t have to be a sysadmin professional to do it, and instead you had a plug-and-play experience? Maybe you could get these to handle cloud storage, music streaming, or even language models, all without relying on subscriptions to Big Tech. That&#8217;s the pitch, that&#8217;s what we&#8217;re building.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ybg2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ybg2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ybg2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ybg2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ybg2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ybg2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:201637,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thelittlecloud.substack.com/i/208985745?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ybg2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ybg2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ybg2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ybg2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb72394a-6d82-40db-a78d-c85a38fe1494_2000x1126.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">I&#8217;ll share snippets from my notebook here and there.</figcaption></figure></div><p></p><p><strong><span>background</span></strong></p><p><span>If you&#8217;ve got a bunch of old devices stuffed in a drawer somewhere, you&#8217;re not alone. Surveys </span><a href="https://www.securedatarecovery.com/blog/states-most-and-worst-tech-hoarders"><span>estimate</span></a><span> that around four out of five US residents hoard unused smartphones. For tablets, the figure is around two out of three. Similar for laptops. That&#8217;s a lot of devices.</span></p><p><span>Even when electronics are recycled at authorized e-waste processors, </span><a href="https://www.rreuse.org/publications/rreuse-s-call-for-a-right-to-reuse-in-the-weee-directive#:~:text=The%20current%20directive%20falls%20short,%2C%20at%20less%20than%202%25."><span>less than 2%</span></a><span> actually get reused in the EU. Most of them are reduced to raw metals, even if the majority of devices are still functional.</span></p><p><span>You can also ask language models to deep research the total processing power of hoarded devices and e-waste, and compare that to Big Tech data centers. It turns out that the sum total of consumer junk and e-waste lands comfortably above the largest data center, and around the total amount of compute across flagship AI data centers. But it is much more scattered and diverse, and so difficult to coordinate.</span></p><p><span>Now, you might be skeptical that your smartphone can compare to a GPU. Let&#8217;s use a concrete example, take my Pixel 8 from a few years back and an Nvidia GTX 1070 I pulled from a desktop. Both of them can have around 8 GB of GPU-available memory. The Pixel&#8217;s GPU has around 30x more half-precision throughput, while at the same time drawing 30x less power. However, the Nvidia card has 5x higher bandwidth between its memory and the actual cores, and much better cooling. It&#8217;s fair to say they&#8217;re at least trading blows, and both can run tiny language models alright.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lyhr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lyhr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lyhr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lyhr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lyhr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!lyhr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:153297,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thelittlecloud.substack.com/i/208985745?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lyhr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lyhr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lyhr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lyhr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40d754f4-007a-4423-83a2-585761121416_2000x1126.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Smartphone running a language model locally, next to a dedicated GPU.</figcaption></figure></div><p></p><p><strong><span>features</span></strong></p><p><span>Let&#8217;s get back to the product we&#8217;ll be building. To recap, &#8220;little cloud&#8221; will be a device that can physically connect to a bunch of other devices with wildly different form factors and computational resources.</span></p><p><span>On a hardware level, this new device will be responsible for handling the power, network, control, and cooling of the tiny computers attached to it. It effectively needs to bundle together the roles of several traditional pieces of enterprise equipment: a power distribution unit, a network switch, a KVM switch, and a coolant distribution unit.</span></p><p><span>On a software level, it will be responsible for automatically &#8220;recruiting&#8221; the diverse worker devices into a unified cluster, across which it can then orchestrate workloads to ensure users gain access to the platforms they want. It effectively needs to handle the job of traditional on-premises tooling used to define and run bare metal fleets, such as Talos and Kubernetes.</span></p><p><span>We&#8217;ll partially rule out some features to preserve focus for an initial version. First, we&#8217;ll leave an expansion slot for an eventual long-distance radio module, such that people will be able to connect their tiny personal clusters into a &#8220;little network&#8221; without relying on their internet service providers. Second, we&#8217;ll avoid adding connectors specific to solar power, but we&#8217;ll make sure portable panels with USB-C outputs can still be used to help people partially power their little clouds without relying on the grid.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y-a8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y-a8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y-a8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y-a8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y-a8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!y-a8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:196925,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thelittlecloud.substack.com/i/208985745?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y-a8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y-a8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y-a8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y-a8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c1a3bc-1757-4ec0-9bb1-8b1210e64513_2000x1126.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">WiFi HaLow card attached to an mPCIe slot, enabling long-range networking.</figcaption></figure></div><p></p><p><strong><span>development</span></strong></p><p><span>We want to build towards a collection of files that can then be sent directly to manufacturing houses. These standardized files taken together specify the entire product, from the enclosure through the printed circuit board to the firmware, and allow the product to be manufactured reproducibly across fabs. This is known as &#8220;digital fabrication,&#8221; and allows us to avoid having to rely on any one particular manufacturing business.</span></p><p><span>We&#8217;ll use Onshape for modeling the enclosure and KiCAD for the printed circuit board, mostly because they&#8217;re the only CAD tools I know for these respective jobs. Here&#8217;s a picture of an open frame rig for which I used Onshape to model the mounts for the computer parts, it was pretty okay to work with. We&#8217;ll use Rust for low-level software, as it seems to have a decent path to native hardware on mobile devices, and because it&#8217;s the only language I used to get language models to run on consumer devices. It was GPT-2 </span><a href="https://github.com/paulbricman/dual-server/blob/master/src/nlp.rs"><span>back then</span></a><span>, simpler times.</span></p><p><span>The design files would be open. The litmus test for openness here is whether someone has all the files they need get their own device built directly with a turnkey manufacturer. However, economies of scale help drive down costs significantly at higher volumes, and so people should be able to participate in those savings. We&#8217;ll probably aim for a first real production run through a platform like Crowdsupply, which helps open hardware projects with crowdfunding and fulfillment logistics.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RrMt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RrMt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RrMt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RrMt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RrMt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!RrMt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195628,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thelittlecloud.substack.com/i/208985745?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RrMt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RrMt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RrMt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RrMt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90f0de50-94f1-4f73-a3cc-547a104d27a5_2000x1126.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Open frame rig with mounts and brackets I modeled in Onshape.</figcaption></figure></div><p></p><p><strong><span>format</span></strong></p><p><span>I&#8217;m pretty excited about building this in public, both for the accountability pressure and as a way to meet people who might be interested in this little device. I&#8217;ll try sharing weekly build logs in here, first time publishing on Substack. We might occasionally visit places like makerspaces, e-waste processors, manufacturing houses, or repair workshops to mix things up.</span></p><p><span>If you&#8217;d like to follow along the full journey of bringing a product to life, including different kinds of engineering that go into it, consider subscribing! If you&#8217;re curious about this actual product and want to steer its development, use the comments to share feedback and suggestions. Either way, looking forward to seeing you around!</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!92jR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!92jR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!92jR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!92jR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!92jR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!92jR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209439,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thelittlecloud.substack.com/i/208985745?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!92jR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg 424w, https://substackcdn.com/image/fetch/$s_!92jR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg 848w, https://substackcdn.com/image/fetch/$s_!92jR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!92jR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17ce54d5-3163-4b0c-80dd-0fb558f50dcf_2000x1126.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Stacks of servers I saw at an e-waste facility.</figcaption></figure></div>]]></content:encoded></item></channel></rss>